2017年9月15日 星期五

技術筆記Dither

拍攝自當代館展場 很有Dither的感覺

這是玩具計劃延伸來與演算法有關筆記,原始連結。

Dither及做法


This printer is not capable of printing anything but black or white pixels. The best way to give the illusion of grayscale is to “dither”. In image processing, dithering is a method of giving something the appearance of grayscale by alternating black and white.

Dither
熱感應噴頭,因為每個點只有1與0兩種選擇,沒有灰階的概念。直覺上就是用比較密的點表示黑,而比較稀鬆的點就是淺。(同樣技術可套用在EINK上)。要如何表示呢,這時讀過書就有用啦,誤差擴散演算法,能以學理的角度,看待和解決這個問題。

學理上來說,透過這個方式,可以降低圖像色彩的深度,顧名思義, 誤差擴散, 就是將色彩深度降低時, 將像素顏色的變化誤差, 擴散開去. 這使得肉眼在觀察圖片的時候, 相鄰的像素點集合整體 的誤差變小。

先以較多級度來當範例。256級灰度圖象上有一個點,灰度值是 120 (0~255),如果我們要將這張圖轉換成 16 級灰度,最簡單的方法是將每個像素點除以最簡單的方法是將每個像素點除以 16。那麼轉換后的值就是那麼轉換后的值就是 120/16=7.5。如果我們採取直接捨去,保留整數位后就是 7,誤差值0.5跑去哪裡了呢?

最簡單的誤差擴散方法是將這 0.5 的誤差放到這個點右邊/下邊的點上,我們可以按 3:2:3 的比例把它分配到右邊, 右下, 下邊的點上。即我們把右邊和下邊的點加上 (0.5*16)*3/8=3,把右下的點加上 (0.5*16)*2/8=2. 這樣處理完整個圖形,要比直接截尾的效果要好的多。實際上, 3:2:3 的誤差分配方案 並不算好。還可以試不同分法例如7:3:5:1

  X 7
3 5 1

更或者 42 分:

    X 8 4
2 4 8 4 2
1 2 4 2 1

如果每個點只有0或是1兩階怎麼辦呢?ch00ftech的範例認為小於128(256/2)的變成0,大於128的變成1,被捨棄的就依照模式分出去,有欠的,也依照同樣方式扣回來。(不論哪種方式,到邊界後都會忽略)

範例如下

             86     90    97
     82    90    102  117
     95    106  122  137

             0      126    97
     97    116  107  117
     95    106  122  137


             0      0      152
     97    131  146  125
     95    106  122  137

             0      0      255
     97    131  127   93
     95    106  122  137

參考1
參考2

其他技巧


原始影像,處理時,是每8X8進行處理。原因是原本專案使用F107,記憶體較小,且配合JPEG decoder,所以影像切割成8×8 pixel blocks進行處理。程式較複雜,邊界部分也有些誤差。在F429上應該都很容易解決。

  每個點的顏色經過GRAYSCALE變成256階的灰階R*210+G*720+B*70
  (因為整數系統,所以都放大成INT)
  The first step to getting a full color image through a black and white printer is to convert it to grayscale.
  每個PIXEL包含RGB顏色 標準方式是
    ditheredImage[i][j] = *(pSrcR++)*210 + *(pSrcG++)*720 + *(pSrcB++)*70;


  如果這個點,位置在邊界,要從上次的結果中,取得數值加回來
  然後對這64個點中各個項目進行dithering
     如果小於80000就是0,不然就是255000
     然後把多餘的數值,向右、右下、下、左下進行加總
  這就是上面的Dither動作

  最後將目前結果存入整體暫存區
      bmpBlock[(colcount/40)][319-by-((colcount%40)*8)]|=(1<<(7-bx));
  數字有點奇怪,必須要用張圖解釋



rescale
dest[dx,dy] = src[dx*src_width/dest_width,dy*src_height/dest_height]
初次實驗是  240(30) : 320  配合列印頭最大數據是 384(48) : 512
除了影像調整外,送到印表機時,因為那需要批次處理,也跟著做了改變

右邊是原始大小,中間和左邊已經放大

GAMMA亮度調整

Convolution
簡易又有效,連結位置。

2017年9月14日 星期四

技術筆記各種螢幕


LCD設備

  • 4" otm8009  800X480:F429。特別提到 FSMC 專門控制LCD?? 流程
    • R61581_Config(); 設定FSMC 和GPIO所有PIN腳 和R61581_BLigConfig
    • R61581_Init();
    • LCD_WriteCmd(0xD0);
    • LCD_WriteData(0x07); 都是這種型式,將指令寫入LCD
    • ( 檔案還包括了畫各種樣式 例如 LCD_DrawLineY )
  • 3.5" R61581:F407
  • ILI9341 STM32開發板內建螢幕:240 x 320 pixels resolution and 16bit or 18bit color depth, what gives you 65536 or 262144 different colors. 因為有開發板那篇,就不拍畫面了。
  • 20*4, 有點像小型跑馬燈範例,實體不知道在哪,但確定3D列印上面很多。


  • 還有個不知道做什麼的
上面還附著SD卡


  • 樹梅有個專屬螢幕,以及ARDUINO的SHIELD

LCD使用方式

  1. SPI 一般做法  範例 (可以顯示出方型 圓形 和文字 因為用了font lib )
  2. SPI DMA 架構在SPI上面更進一步
  3. LTDC 高階 範例 you can actually display movies, because it uses parallel communication and support 2 layers simultaneously what gives you a high refresh rate. 範例 過程有點複雜 重新開了一個專案, 內包括sdram/dma/2d等 提供結果是畫面快速閃動

OLED使用方式

  1. 手邊有個小OLED SSD1306_128X64_NONAME_F_HW_I2C,百年有賣(連結連結)。
    Part No: 119671   Product No: 0.96寸-OLED-IIC-白色。

EINK

EINK測試元件

EINK特性是節電不傷眼,缺點是單色(或說彩度很低),呈現方式與熱感應印表機相似,可以提供很棒的應用。
從MCUAPPS購買了一組2.7的Repaper 2.7"實驗。其通訊方式是SPI,程式上可以參考這裡。當腳位對應好,啟動EPD_INIT。
後面的對應指令EPD_POWERON EPD_POWEROFF EPD_DRAW。繼續將兩張已經事先產生好的圖片BYTE ARRAY放入,aphrodite_1_44.c venus_1_44.c
因為購買的是2.7所以回到原廠的範例位置。找_2_7.xbm,替換使用。

技術筆記CAMERA

印表玩具
   STM32技術

一般EMBEDDED SYSTEM和CAMERA溝通方式為SPI,缺點是速度太慢。STM32F4之後,提供DCMI加速機制,讀取影像更方便,F7之後,還號稱能同時處理兩個以上CAMERA影像,如果我想用兩顆鏡頭抓空間深度,這會有很幫助。

網路上搭配STM32開發板的,幾乎都是使用OV。OV有眾多型號,我購買的OV7670只有三十萬畫素,價格僅二百左右,首次Tabbao買的不能用,後來向taiwaniot購買。缺晶振,但由外部XCLK提供也還堪用。

好歹在相機組裝廠工作過。先來研究一下OV。OV美商OmniVision豪威(台灣有分公司,曾是感光元件巨頭),而OV7670不是想像中僅有sensor,已包含完整影像系統。也就是說,可直接取出經過3A的JPEG、RAW(雖然畫質很糟)。目前使用上就是以RAW為主。


比較貴的模組,會附上FIFO,就是下圖中那顆CHIP。不帶FIFO的攝像頭和帶FIFO攝像頭的區別:帶FIFO的攝像頭比不帶的多了個3M的緩存,可將採集的數據暫存在這個緩存中,使用時讀取緩存中的圖像數據即可,因此可減少對單片機採集圖像數據時對MCU速度的要求。OV7670 FIFO攝像頭,將圖像傳感器和圖像緩衝器件AL422B有機結合,解決了低端單片機圖像採集的速度瓶頸問題。搭配STM32用不到。另外,圖中還多了個晶振。若無,由STM32從外部XCLK提供也還堪用。


從影像模組來看其他專案,例如PrintSnap用的是很簡易配Arduino使用的JPEG模組,使用TTL溝通,取回的內容是JPEG要另行Decode,不實用。

手上的OpenMV也有幾種版本差異

Raspberry Pi使用特殊的CSI(Camera Serial Interface)也有兩種相機。
V1 OV5647 5百萬像素固定焦點 支持1080p、720p60和VGA90
V2 Sony IMX219PQ CMOS 八百萬像素固定焦點 支持1080p、720p60和VGA90

另外,小體積的FPV鏡頭也很。

回到STM32對OV取得影像部分,目前使用指令並不多,只有寬高、拍攝、取得畫面。依架構可分成三種。

一堆杜邦線亂纏繞,眼睛都快脫窗( 原本有牛角母啦, 麻煩 ),看到它起動時高興的不得了,覺得前進一大步.

方式一,DCMI資料進入一般記憶體,處理後再送LCD


架構簡單也是後續開發基礎。主要參考位置是 範例, 文件 底部有使用的CODE範例,程式流程

STM_mode = 0;
btn_pressed = false;
frame_flag = false;
// Infinite program loop
while(1){
if (btn_pressed == true){
if (STM_mode == 0){
// MODE 1 - RUN
STM_mode = 1;
開攝影鏡頭
}
else{
if(frame_flag == false){
// MODE 2 - STOP
STM_mode = 0;
停止攝影鏡頭
}
}
btn_pressed = false;
}
if( frame_flag == true){
// Show camera image
通知LCD顯示畫面
frame_flag = false;
畫面沒有更新,不需要再重覆顯示
}
}

當相機收到訊號後,就會送DMA完成的訊號
void DMA2_Stream1_IRQHandler(void){
// DMA complete
if(DMA_GetITStatus(DMA2_Stream1,DMA_IT_TCIF1) != RESET){
DMA_ClearITPendingBit(DMA2_Stream1,DMA_IT_TCIF1);
DMA_Cmd(DMA2_Stream1, ENABLE);
frame_flag = true;
也就是說 相機會一直送訊號進來,畫面更新的快 就會漏掉一些畫面
但是如果相機更新比較慢,畫面會等相機
}
}

按下按鈕
命令取得影像 DCMI_CaptureCmd(ENABLE);
系統由CAMERA取得影像後觸發 DMA2_Stream1_IRQHandler
  影像會進volatile uint16_t frame_buffer[IMG_ROWS*IMG_COLUMNS];
  因為設定過
  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)frame_buffer;
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
  DMA_InitStructure.DMA_BufferSize = IMG_ROWS*IMG_COLUMNS*2/4;

畫出影像LCD_ILI9341_DisplayImage((uint16_t*) frame_buffer);  ( 這和CAMERA無關,只式記錄 )
void LCD_ILI9341_DisplayImage(uint16_t image[ILI9341_PIXEL]) {
  uint32_t n, i, j;
  LCD_ILI9341_SetCursorPosition(0, 0, ILI9341_Opts.width - 1, ILI9341_Opts.height - 1);
  LCD_ILI9341_SendCommand(ILI9341_GRAM);
  ILI9341_WRX_SET;
  ILI9341_CS_RESET;
  for (n = 0; n < ILI9341_PIXEL; n++) {
    i = image[n] >> 8;
    j = image[n] & 0xFF;
    LCD_SPI_Send(ILI9341_SPI, i);
    LCD_SPI_Send(ILI9341_SPI, j);
  }
  ILI9341_CS_SET;
}

OV7670_control.h 最重要參數是
// Image settings
#define IMG_ROWS   320
#define IMG_COLUMNS   240
決定了影像大小

方式二,CAMERA內容透過DMA直接映射到LCD記憶體區域

這種狀況下,DMA更新LCD畫面也立刻更新( CPU不介入 ),好寫也單純,但不能處理影像,不考慮使用。 OV7725:KitSprout  CMOS VGA 640X480  範例

流程( KitSprout 407 )
  GPIO設定
  RCC_MCO1Config
    啟動 OV7725_Config()
         RCC
         GPIO PIN腳對應
         DCMI_Init
         NVIC_Init
         DMA_Init
             #define DCMI_DR_ADDRESS        0x50050028
             #define FSMC_LCD_ADDRESS       0x60020000
             DMA_InitStructure.DMA_PeripheralBaseAddr = DCMI_DR_ADDRESS;
             DMA_InitStructure.DMA_Memory0BaseAddr  = FSMC_LCD_ADDRESS;
             這裡把CAMERA的內容和LCD連結起來
             在LCD #define LCD_RAM *(vu16*)((u32)0x60020000)

  OV7725_Init();
透過OV_WriteReg SCCB_Write 寫入很多REG設定 OV_reg (在H檔案中)
Camera_Start
  LCD_SetWindow(0, 0, 320 - 1, 240 - 1);
  DMA_Cmd(DMA2_Stream1, ENABLE);
  DCMI_Cmd(ENABLE);
  DCMI_CaptureCmd(ENABLE);

因為是使用DCMI 每當DCMI收到結果就會發送callback
void DCMI_IRQHandler( void )
{
  if(DCMI_GetITStatus(DCMI_IT_FRAME)!= RESET) {
    LCD_SetWindow(0, 0, 320 - 1, 240 - 1);
    DCMI_ClearITPendingBit(DCMI_IT_FRAME);
    將DMA結果對應到LCD記憶體,刷新畫面
  }
}
Handler是固定寫法,放在xxx_it中

方式三,CAMERA內容透過DMA直接映射到 SD RAM記憶體(不是RAM)


和方式一類似,差別在記憶體使用上,方式一是原生記憶體,方式二是SD RAM。

PIN對應和範例相同
SDRAM_Init
影像和處理和顯示特殊處理方式
在DCMI回覆時
    LCD_SetWindow(FRAME_W, FRAME_H, FRAME_W + FRAME_W - 1, FRAME_H + FRAME_W - 1);
    for(uint32_t i = 0; i < FRAME_W * FRAME_H; i++) {
      pixel = SDRAM_DATA(uint16_t, (i << 1));
      LCD_RAM = pixel & (~(RED | GREEN)); //將SDRAM每個元素顏色計算,寫回LCD_RAM
    }
//讀出影像
OV的資料對應到DMA 不是LCD
  DMA_InitStruct.DMA_PeripheralBaseAddr = DCMI_DR_ADDRESS;
  DMA_InitStruct.DMA_Memory0BaseAddr    = (uint32_t)SDRAM_BANK_ADDR;//SDRAM_BANK_ADDR;//FSMC_LCD_ADDRESS;
  DMA_InitStruct.DMA_DIR                = DMA_DIR_PeripheralToMemory;
  DMA_InitStruct.DMA_BufferSize         = FRAME_W * FRAME_H >> 1;
#define SDRAM_BANK_ADDR               ((uint32_t)0xD0000000)
#define SDRAM_DATA(__TYPE, __INDEX)   *(__IO __TYPE *)(SDRAM_BANK_ADDR + (__INDEX))
因為OV市直接設定到SDRAM_BANK_ADDR,只要使用SDRAM_DATA就可以讀出畫面結果
//寫螢幕
#define LCD_RAM     *(__IO uint16_t *)((uint32_t)0x60020000)
用這個就可以將資料逐漸寫入
#define FSMC_LCD_ADDRESS  0x60020000
DMA_InitStruct.DMA_Memory0BaseAddr    = 0x60020000;

特殊點
1.429有加入晶振功能,但407無?
2.加SDRAM但HEAP沒改變? (比對XXX.s)
3.影像大小設定
#ifdef RESOLUTION_VGA
#define FRAME_W 640
#define FRAME_H 480
#else
#define FRAME_W 320
#define FRAME_H 240
#endif
DMA_InitStruct.DMA_BufferSize = FRAME_W * FRAME_H >> 1;
static const uint8_t OV_reg[OV_REG_NUM][2] = {
#ifdef RESOLUTION_VGA
  {0x12,0x06},// VGA RGB565, 640*480
#else
  {0x12,0x46},// QVGA RGB565, 320*240
#endif
#ifdef RESOLUTION_VGA
  {0x29,0xA0},  // VGA
  {0x2C,0xF0},  // VGA
#else
  {0x29,0x50},  // QVGA
  {0x2C,0x78},  // QVGA
#endif

可能的範例如下 範例  範例  範例  範例 範例

DCMI串接多台Camera


若要計算立體視覺,需要綜合多台Camera所傳入影像,DCMI可以處理兩組影像嗎?目前查到的資料如下。

文字描述 STM32F7 DCMI
The cameras additionally need to be set up through the I2C bus before the images can be transfered via DCMI. An example of two camera setups is available in the Board Support Package driver files.
Other camera types need different setup that users have to extract from their documentation.

有發出詢問,等待回應。

技術筆記熱感應印表機



印表玩具
   STM32技術

熱感應印表機(thermal printer),已經大量使用於日常生活,舉凡購物時的發票,醫院排隊掛號號碼條或是手搖杯上的標籤貼紙,都是它的應用。使用一種化學原料塗抹在紙上,使得紙張可因受熱而改變顏色,不需要使用墨水或油墨。塗抹固態的染劑與合適的基質,像是熒烷類的隱色染料以及磷酸正十八酯。當基質加熱到其溶點時,染劑會與酸性物質反應,轉換成有色態;而基質很容易快速冷卻,則染劑的有色態會直接被儲存於亞穩定狀態。但一段時間後,顏色仍會逐漸消退,故僅適用於不需長期儲存的用途。

通常,該塗料在加熱時會轉為黑色,但有時會使用轉為藍色或紅色的塗料。開放的熱源,像是火焰,會改變紙張的顏色;而用指甲快速擦過紙張也可以給予足夠的熱能,產生有顏色的標記。另外就是Multicolored papers,最著名的就是寶麗來的ZINK,很美好,但也很貴。


最上面照片是我手邊熱感應印表模組和開發板合體的樣子,相關介紹連結 連結,購買連結。實際拿到機器比想像的大且重,感覺可以整個拆開移調不需要元件。紙寬是5.7 cm(Paper width: 57mm Print width: 48mm)。一般熱感應紙太大捲,放不進盒子裡,得手動剪掉部分讓它瘦身才塞得進(在販售模組時也有搭配的客製化紙捲是10m)。

因為需要加熱,裝置對電源的要求也高,需要5-9V。實驗時,可以透過5V/2A電源供應器供電,移動時因為目前USB電池可提供5V,可透過轉接頭使用。一般遙控玩具鋰電池也可使用。

結構上,著色原理和加熱頭的關聯很大,加熱頭寬度為八個BIT,所以程式中一直會看到8BIT出現。bmpBlock[30][320] 大概的意思則是,紙張寬的這面可以印30組,每組8個點,共240點。長則為320個點。實際上,Resolution ration: 8dots/mm(384dots/line),也就是說若要全部都用上,就是48組資料(目前只佔了30個)。

從軟體角度看,有兩種連結方式,分別是TTL及直接連結。

TTL接口


TXRX部分則是透過轉板拉到開發板。使用上參考

CODE位置D:\stm\printsnap\Firmware\src ( CAMERA用SPI非DCMI,忽略 )
進行中CODE位置D:\stm\tm\printer,目前已經可以送入COMMAND,嘗試使用bit image.

腳位設定在C10 C11 , 使用UART4
TX RX
    /* Configure Printer UART */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
    //GPIO_PinAFConfig(GPIOC, GPIO_PinSource10,GPIO_AF_UART4);
    //GPIO_PinAFConfig(GPIOC, GPIO_PinSource11,GPIO_AF_UART4);
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    USART_InitTypeDef USART_InitStruct;
    USART_StructInit(&USART_InitStruct);
    USART_InitStruct.USART_BaudRate = 19200;
    USART_Init(UART4, &USART_InitStruct);
    USART_Cmd(UART4, ENABLE);

init function
void initThermalPrinter()
{
    //reset printer to default state
<10 i="" p="">    send(27);
    send(64);
}

//主要送出指令
send(bmpBlock[px][py]);

使用的基本功能
1 void send(uint8_t data) {
    //make sure the last byte made it out
    while(!USART_GetFlagStatus(UART4, USART_FLAG_TXE)){};
    USART_SendData(UART4, data);
}

換行
void feedPrinter(uint8_t x) {
    while(x--) send('\n');
}
<10 i="" p="">
<10 i="" p="">當初參考資料,原始資料。
<10 i="" p="">
<10 i="" p="">印出品質部分,原始設計建議送出後等待系統回應,自己感覺反而有更多白色空隙。
如果光度低,整張紙面黑色多時,加熱頭要持續加熱,使用很多時間,但MCU卻還是不斷將資料送進來,會造成亂碼。目前作法是,計算每一行中黑色數量,如果數量過多,就啟動wait機制。效果還不錯。

若考慮TTL控制板部分。熱感應部分,除FUJI、SEIKO外,中國大陸PRT 普瑞特 廈門專門生產熱感應廠商,以PT486F-H違例,包含有詳細說明文件,翻到最後甚至有DEMO電路。控制板編號是PF486F Control Board(網站上原有資料,現無法連結),也是以TTL控制,但有最小購買量拿不到成品。

TTL轉板

TaoBao有賣家販賣
選項1
富士 FTP-628MCL103
游艺机 手持终端 刷卡机 卡POS 58MM热敏打印方案 FTP-628+控制板 ¥125.00  已經購買等到貨過程
廈門 PF486F  零買
游艺机 手持终端 刷卡机 卡POS 58MM热敏打印方案 PT486 + 控制板 ¥115.00
整組下來,約600元( 模組價格1650 )
選單中,還標示可選RS232版本。但在過程中,原本628熱敏售完?改換成SK58TM,但這個零件電壓達12V,無法負荷(或許電壓夠,加熱較快)。下載兩種版本PDF文件。

選項2 選項3正廠控制板 選項4看起來是自製的,不確定TTL指令相同

直接連結


上面的盒子體積實在太大,拿在手上好像抱著120中片幅相機,自己都不好意思帶出門,而且整個模組價格不便宜。最直覺的想法是,能不能只使用噴頭本體呢。經過查詢,本體應該是FUJI FTP-628MCL103元件。也可能是Seiko LTP02-245(台灣找不到類似零件,先擱置)。

若能連結FUJI元件 可大幅減少體積和成本

先從台中代理商以賠本價取得成品機,就動手開始拆解( 可惜了一台機器 )。

RTP58801 12V 3A

開腸破肚中 軟體工程師做這種是總事不順手

排線下方就是FUJI熱感應模組
熱感應頭比TTL模組小許多,若紙張數量不多,整個玩具體積可大幅縮減。熱感應頭拉出來的是30PIN 1.0mm pitch的FPC軟排線,因為我對電子電路不熟悉,開始了一段摸索之旅。排線太密無法拉初電路,有幾種方式可以轉成可測試電路。

嘗試一:找適當connector(又分成上和下兩種,都可以,只是方向差異),將軟排線轉成許多針腳,接下來就沒有對應這麼細針腳的PCB板。

嘗試二:百年有賣下面特殊轉板,能夠把小connector連結到一般牛角轉出線路,當然銲接又是一門學問,結果如下。

軟排線的轉板
嘗試三:上圖是不能直接連結STM32的。包含了電流供給(因為軟排線太細,必須兩組提供等問題),還有其他設計,要達到上面範例,實在還有很長的路要走。
可能的電路圖( 未實現 )

網路範例在此 YOUTUBE影片位置  相關GIT位置 作者是 Romy Bompart
從程式看來,以STM32F107為主。

APP應用
main.c
Header_Init
印字 ThermalPrint("        TICKET          \0");
feed_pitch(150,BACKWARD);

中間層
fonts.c
ThermalPrint(char text[150])
將字型轉變成dot的形式在這邊送下去
PrintDots(LinePixels, character-start );

底層控制印表機硬體
header_hardware.c
原本以為是STM提供,看來不是
Header_Init
準備好所有的PIN設定

Control OUTPUT pins configuration Part1: Port E Group
LATCH_PIN | STB1_PIN | STB2_PIN | STB3_PIN | STB4_PIN | STB5_PIN  | STB6_PIN;
        23          12 13 14 18 19 20

Control OUTPUT pins configuration Part 2: Port D Group
PH12_PIN | PH21_PIN | PH22_PIN | ENABLE2_PIN;
27 28 29 30

Control OUTPUT pins configuration Part 2: Port C Group
ENABLE1_PIN | VH_PIN;

Control OUTPUT pins configuration Part 2: Port B Group
PH11_PIN;

Control OUTPUT pins configuration Part1: Port E Group
PEM_PIN;

Analogic pin configuration: PORTC
THERMISTORPIN;

SPI pins configuration which belows to port B
HEADER_PIN_MOSI | HEADER_PIN_SCK;

總共有18個,但是不知道這兩組資料中間是怎麼連接的。先前就是想要直接EMAIL,後來是在YOUTUBE下面留言。

PrintDots(uint16_t *Array, uint8_t characters)
會直接操作GPIO的動作
GPIO_SetBits(HEADER_PORT_GROUP_E,STBx[y]);
怎麼知道什麼指令會有什麼結果呢? 似乎有其他文件說明

在電路聯結部分
可能會需要馬達驅動電路  3相全波非線性馬達驅動系統IC 羅姆BA6849
還有GPIO擴展方式電路

其他


除熱感應著色,網路還有色帶型式微型引表機。不過打點速度太慢,過程中還會發出MODEM的聲音(噪音??),不太實用。

喵喵機
最近看到個新產品"喵喵機",是中國大陸廈門喵寶科技出品,看資料就是熱感應盒子加藍芽(或WIFI)功能。影像來源則是手機。使用標準57mm打印機蕊,電池容量1000mAh。網路上有些人討論,但感覺不很熱衷。

列印紙張
列印紙張配合機蕊有各種尺寸。目前手邊57mm算常見型號,紙捲也很容易購買(貫峻 03-5226900 03-5229009 地址:新竹市中山路296巷7號1樓),算非常便宜。除了尺寸外,感應紙上還有兩種特色,一是紙張有背景色,這種應用不多。第二是印出感應紙後有自黏貼紙,印出後可隨手貼在醒目處。

貼紙都是大量生產,所以只有幾種固定裁切版型。最接近57mm可能是55mmX30mm,可能也不是很合適。(熱感貼紙55mm*30mm/66米2000pcs 30捲一箱)。當然,網路上也有許多訂製生產的廠商。配合喵喵機通路,在網路上輕鬆訂購完全沒有裁切過的空白紙,六公尺50元左右,使用起來,沒有想像的有趣,還在觀察中。( 另外可能選項是這個 )

首次貼紙實驗 貼NB了

2017年8月20日 星期日

日本高松 新屋島水族館 Shinyashima Aquarium

新屋島水族館招牌 儒艮

高松的著名景點,大多是寺廟、公園、海島、美術館,少有適合青少年的場所。勉強找到兩個,一是男木島,遽聞島上有六十多隻貓可以逗玩,二是屋島山頂的水族館。女兒覺得大熱天貓讓人玩的機會不大,決定去有冷氣的水族館,真是有智慧啊 *_*。

計畫是由旅館步行至高松築港駅,乘電車至瓦町,轉換志度線到琴電屋島駅後,再搭巡迴巴士上山,最後循跡找到水族館。在盛夏時進行這種活動,感覺耗時又費力,我想就算日本當地人也不會以這種方式去個小水族館吧。而且我們不小心錯過一班巴士多等了一陣子,耽誤更久。不過女兒一向喜歡水族館,我也始終對這山上水族館有許多好奇,看女兒打電動,兩人東聊西扯都還保持著興致。

屋島駅前望初景象 水族館就在這山頭

大多數水族館是在海邊,例如屏東海生館或是沖繩美之海。聽到山上有水族館,就燃起要去看看的念頭。雖然明知海豚被囚禁在小小水族箱,這個箱子在海邊或山上,對牠來說,並沒有不同,撇開情感因素,還是想去看山上的海豚。

觀景台眺望高松港區 今天霧氣較重 視線不佳

接駁巴士沿著屋島東側蜿蜒而上,十分鐘內,高度即從海平面提升到可俯瞰港灣,再到可眺望賴戶內海的山頂平台。平台占地異常廣闊,包含了大停車場、休憩中心、屋島寺、觀景台、一些民宿,還有就是今天目的地,新屋島水族館。

招牌蠻搶眼的

雖說是個迷你水族館,但門票可不便宜,大人1200日幣,國中生700日幣,換成台幣約350元。購票進入後就是戶外海洋哺乳類區,三個大池子分別有海豚、海獅、海豹,飼養池兼表演場。另外海龜、水獺和企鵝,也在這個區域。館內表演秀都很精彩,海豚會飛躍水面、旋轉、做出打躬作揖狀,海豹會頂球和做出高難度體操。雖然是平常可見的招式,但能近距離觀賞倒是不同感受,也算是小館的好處吧。

指導員呼喚牠們起跳

空中飛躍

謝謝觀賞 畫面上水柱是觀眾區頂棚降溫用

許多有識之士,不能忍受動物園藉著教育口號圈養野生動物,一方面認為殘忍,二方面也強烈質疑是否真有教育成效。覺得人類僅是為了商業利益或僅只是提供大眾家庭活動場所,剝奪牠們生存權。

近拍海豚,不知為何覺得眼神很孤寂
這些論點都有其依據,但我個人是支持設置動物園或水族館,我相信即使現在小朋友是走馬看花,但面對面接觸實體動物所留下的印象,會在無形中擴展他們對生命的視野。

女兒和海豚彼此仔細觀望

海獅表演頂球

女兒和工作人員一起餵食海豹

中間建築分為二層,由動線規劃可參觀不同水域的魚類展示。最吸引人目光的是兩隻儒艮。看著牠們在池中完全沒有競爭力,緩慢緩慢晃動的樣子,我就為牠們焦急,這可怎麼在自然界中生存啊。

除各種類熱帶魚展箱、瀨戶內海特有魚類外,館內也有體驗池,池內養著各種海星和海洋無脊椎動物,可讓人用手觸摸,海星表面雖然堅硬但中間有許多觸手突起,初看很噁心,看久了也就習慣。


上到二樓是水母區,不同品種水母循著水流緩慢收縮前進著,水族箱前設有一排座椅讓人靜靜觀賞,很有紓壓效果。

我們家的人似乎特別容易被療癒系所迷惑?

很擔心牠觸鬚會互相扯住分不開

再回到一樓繼續看些奇怪海中生物,例如噁心的海蛇、兩棲類、花園鰻。花園鰻很像持續變動的拐杖又像搖曳的水草。

對這個展館整體印象是,麻雀雖小但五臟俱全,有認真清洗魚缸,冷氣也開得很強。雖是個老舊的水族館,但空間設計我很喜歡。起初因為牠小,覺得門票並不便宜。但參觀過館內後,認為物超所值,是個可以推薦給遊客的好地方。

2017年8月17日 星期四

觀展 志賀理江子 Blind Date

螺旋海岸

志賀理江子(Lieko Shiga)的作品,大多陰暗深沉、黑暗無趣,不討人喜愛。神奇的卻是,她是少數幾本,讓我能再三翻閱的攝影集。但若要問我,她的作品好在哪裡,只能說"感覺"好。要我這藝術門外漢多作解釋,簡直是緣木求魚啊。

還好我有最棒的家庭教師,提供許多資料,湯景光文、文2。更棒的是,還有伴遊服務歐,今夏我們就遠赴日本丸龜看志賀理江子展覽呢。

志賀理江子生於1980年,日本愛知縣人,2004年在倫敦取得藝術學位後,參與了幾項國際性駐村活動。數年間來往、停留於英國、日本仙台、澳洲布里斯班、新加坡等地。之後更以此階段作品集Lilly、CANARY得到2008年木村伊兵衛獎。總的來說,大獎加持成了後續個展的敲門磚。更重要的是,因為具備藝術本科基礎,後續作品的理論才能愈見厚實。

CANARY展場佈置
觀此時期作品,黑暗中以強烈閃光突出主題的技法,也普遍應用在後期作品中。

CANARY作品

2009年,志賀理江子搬到日本本州島東北地方的一個海岸城鎮北釜,並擔任北釜當地的官方攝影師。為何選擇北釜呢?根據資料,她說。

我現在居住的地區,就像我往地圖上射飛鏢、隨機挑選出的地點,我完全沒有思考、沒有進行事前考察、只是憑感覺選擇。

看到這,只能說,實在太神奇了。更神奇的在後面,為何一位甫獲得木村伊兵衛獎的29歲女生,選擇離開都市,在一個只有372個人的村子,記錄節日、儀式和官方活動的照片?她又說。

世界各城市舉辦的駐村計畫,對創作而言是不自然、且非常困難的創作環境,僅是竊取影像的行為,缺乏深度。我希望與土地上的人們建立直接的關係,建立相互的意識,再開始創作。

這和文化大革命時知識分子下鄉,或目前流行的農村青年回遊計畫,簡直同出一轍。事實證明,這次搬遷對志賀的創作來說的確也是一個重要的轉捩點。在北釜,她以四年時間實踐了她的想望。確實的與當地民眾進行關係連結,構思出許多主題,然後以策劃者的角度,將當地民眾融入她作品中。

這個時期,每天都有新的發現和驚喜,有著不知從何而來的熱情,也讓我感到命運。

提到實際的運作方式時,比方她會詢問人們「對你而言,最明亮的場所和最黑暗的場所是哪里?」然後把他們回答的地點製作成地圖,以此地圖作為路線、實際旅行。旅途中,看到的事物、相遇的人們、經歷的事情,就成為攝影的起點。讀到這,不免讓我思考,攝影和文字創作原來有這麼多相似處,都是需要用心體會、靜待時間醞釀培養,才能萌生出優秀作品的行為。2013年三月在仙台舉行的《螺旋海岸》即是此行精心淬鍊成果。

螺旋海岸展場

螺旋海岸展場

以攝影作品風格來看,沉重、陰森加以閃光,創造出重視輪廓,鮮豔豐富的視覺元素,雖然瀰漫著不安,但又吸引人不斷注目。形式上,原以為這些超現實作品是以數位合成,經過解說才知道是屬於編導式攝影的一種(她自稱是「構成攝影Constructed Photography」,也就是作品的內容是刻意構成的)。

編導式攝影簡單來說,就是透過編排畫面裡面的主角、元件、場景,來達到要敘說的故事的一種攝影方式,有明顯目的性,成品也因此更具意義。一般編導式作品的動機,都是創作者覺得想要表達資訊太多,必須透過縝密攝影計劃,較能安排表達,例如社會偏見、道德議題、現代社會問題等。



志賀理江子的編導比較特別,她的動機並不是為了闡述某個議題,而是藉由編導的過程,刺激她產生對現實提出反論的躍進(好抽像啊)。她好像是個對事物及彼此的關聯,都要追求完型,也就是完整想像的人。在沒有親眼見到這個完整結果前,她會先正視和觀察第一個版本,動一些這裡,動一些那裡,像是暗房中調整光影、調整色彩。當這些都不能滿足她,自然進行到下一步,擺佈主角、元件、場景,即是我們看到的成果。

因為這個完型是超越劇情故事和目的,所以即使拍攝背景不是大山大水、主角不帥不美,沒特效,都不是重點。虛構的手法只是為了要創造出超現實及離奇場景的方法。編導也只是是讓她能在過去、現在、未來之間自由移動。

到此為止,或許可以稍稍掌握喜愛她作品的原因了。比起文字,圖像對於人來說更具有吸引力,擴大我們想像的餘地,非常適合她類似夢境的作品。仔細看她作品,也可以感受許多可能性,是有強度且可以長久凝視的。雖然只是源於作者想像,但卻可以和我們產生交錯。

Blind Date展場

故事當然還沒結束,時隔四年,也就是今年2017年,志賀理江子帶著同類型、數量更多、更暗風格作品,在丸龜進行大規模展覽。諾大漆黑的展間,在幻燈機獨特投影燈光下,搭配類似快門過片聲和室內音響傳來急促胎兒心音氣氛,建構出一個殘酷唯美、黑暗卻又瑰麗的空間。讓觀賞者進入其用編導的「寫實」手法與「現代」的展演世界。

我喜歡這類介乎於紀實與虛構之間,虛幻模糊、斑斕色彩和魔幻光影組成的畫面。這些潛藏在意識底層的片段,透過虛構場景的編導,像是被加強,又像被遺忘。以我有限參觀經驗中,這個展覽或許不是最宏大,但卻是最能鼓勵我,正視自己的夢,找到屬於自我的回憶與真實的展覽。

於此同時,在蒐集和閱讀志賀理江子相關資料時,驚訝的發現攝影藝術和文學創作原來有這麼多共通性,也看到了一位懷抱著探索精神的藝術家,腳踏實地,追求卓越的成長路徑。




2017年8月10日 星期四

豐島美術館 Teshima Art Museum

豐島美術館

瀨戶內海跳島行前研究過不少豐島美術館參考資料,許多文章都提到水滴、天井、母型等詞語,都像是霧裡看花。直到親自到來,深刻體驗,才知道這裡的美好。

我們三人從家浦港騎著電動單車,循環島公路緩緩前行,經過個緩坡,視野突然由藍天轉為寬闊湛藍的大海,兩側綠意盎然梯田間,可見到兩座不規則白色建築體,隱身其中,即是著名的豐島美術館。



售票處提供的資料不多,大半是已知資訊,如策展人為德田佳世、裝置藝術家是內藤禮、建築師西澤立衛。置放行李後,沿著小徑向建築移動。從步道往本體看去,會發現美術館外部曲線是與周遭的地景起伏相互融合。大片白色在陽光下非常耀眼,但與藍天白雲相互掩映也不會太過突兀。



穿過窄小入口,立刻就進入類似袋狀建築本體中。突然從外部進入封閉空間,不太能適應,本能的四處觀望著。本體內部像是個白色大口袋,面積類似小學操場(事後查詢長寬分別為60公尺和40公尺,最高處4.5公尺)。底面平緩舒適,兩側和上端則是不規則起伏的天花板,應該就是一路走來可見的部分。建築內部並不巨大,但刻意壓低的天花板營造出一種伸遠、無限延伸的廣度。
網路截圖

天花板上開了兩窗大型天井,將外界的光影、聲響和山風帶入這個場域。兩者中靠海處天井帶入的是天光雲影變幻,靠山這邊則可欣賞林木景緻。光線從洞口灑下產生兩個圓形光柱,吸引著趨光性的我們向這靠攏,若是像我們停留夠久,還能由地板上光影移動和變化,看到時間的流逝。

諾大空間中,約十幾或二十位遊客,除少數移動聲響外,都保持著安靜狀態,僅有遠處不時傳來烏鴉鳴叫聲,透過這天井在空間中放大迴旋。人們在其中緩慢移動,與天井邊緣繫著的繩索,隨山風在洞口緩緩輕盈飄動,像是儀式般,有些超現實,甚至有點夢境的錯覺。

整體氣氛是靜默而神聖的,觀者在其中可以自由的行走,由不同角度欣賞空無的本體或外部自然景觀,累了也可或坐或臥,放空冥想或觀察腳邊水珠,依自己喜愛方式融入其中。

館中唯一的作品是腳邊的水珠和其匯集而成的水潭,日文名【母型】,英文名【MATRIX】,是由地板上隨意散佈的小孔洞中,隨機或刻意安排,冒出的水珠造成。因為地面是防水塗料,水珠湧出後因為內聚力和表面張力影響,會自主匯集、聚合、變形。像是演算法Cellular Automata想表達出的隨機成長概念。相關影片1 影片2

Cellular Automata 肆意生長,彼此合併、分解

與隨機成長不同,水珠並非四面八方流動,會因地面坡度和流路影響,大致朝向中央方滾動,其中或與其他水珠相遇,融合成更大水珠,隨機匯聚為長條狀水流,向下流去,或是分裂成為不同區塊。但最終都會進入水潭,再經過孔洞吸納到地下,復歸循環。

網路截圖

水文流動讓我想到地板很像重力波的形式,取自網路 其他

除了兩個主要水潭外,其他地方偶爾也有水珠,或成為小匯集,這些被遺忘的水珠,就只能任由時間和風和陽光,將其蒸發帶去。陽光下的水珠有如科幻電影中的液態金屬。即使只是在一旁欣賞這陽光下閃爍的水珠和其流變,就是一種享受。觀察久了,甚至還會將自身融入這融合、分裂、流動,生成與消逝的循環過程中。進入某種詩意的境界。

我們一家三口在這個空間中,停留約一個半小時。對我來說,流動的水珠,不論是形式上的美感或是延伸的聯想,都讓我覺得接收到某種概念與訊息。作者或許想要藉此表達大自然中,水循環由降雨、匯集成河、奔流入海的過程。也可以擴大成為哲學性,反映人生成長歷程。從出生到成長,加入群體或離開,走向相同歸宿,也可能像是孤島,在某個區域自生自滅。一切又如同那水珠不斷地重生與再生。這些都讓我對生命聚合或離散都有了更細膩感受。

豐島美術館,是非常特別的展場。與藝術季其他美術館相比,如地中美術館或是精煉美術館,具備著藏品,在封閉的室內空間常年展出,強調展覽與保存的傳統美術館。豐島美術館,不將藝術欣賞孤困在有限的封閉空間內,將藝術與建築與自然合而為一。沒有任何大量的文字說明,只要透過凝視和感知,就能自然體會。如此簡約、新穎富創意的參觀體驗,著實讓我大開眼界。將我對美術館的想像和可能性,提昇到新的境地。

連結:
1. 豐島美術館施工記錄,連結 英文版
2. 豐島美術館內部樣式,連結 漂亮的水珠