2017年5月16日 星期二

控制 WS2812 矩陣



這玩具原先計畫是做照明用, 但是發現一些特性覺得不適合就沒採用
不過既然硬體都做出來了, 就乾脆軟體也弄一弄

這是這次用的燈條

買一公尺燈條回來切割, 分成六段, 每段 20 顆, 共 120 顆 LED

背面:

接到前篇 用 AVR atmega16u2 連接 USB 中的 WT-13
由於原先是照明計畫, 所以一開始是先測試亮度
找來了幾顆變壓器串上電壓電流錶進行測試


首先是對岸的變壓器

這是出差大陸時在路邊攤買的變壓器, 15 元人民幣
我把顏色設為每燈 RGB 都等於 255, 結果變黃色
看電壓電流錶就發現電壓早已掉到剩一半, 電流只有 0.9A


接著把 RGB 都設為 40, 它就正常了, 變白色
看電壓電流錶實際輸出只有 0.7A, 所以這貨輸出是有灌水的XD

沒實際量測都沒注意過, 這要特別作記號XD

接著拿去壓榨台廠產品附的變壓器, 忘記是平板還是手機附的 2A 變壓器

RGB 約可設到 150 附近, 實際輸出比標示的多
這些變壓器也是大陸做的, 附在產品中在台灣出貨, 手邊幾顆 2A 的都差不多這樣
上圖那顆貼紙寫東莞生產, 和上上一張出生地相同, 品質和開規格的人很有關XD
最大輸出電流在 2.3~2.6A 附近, 其中有一顆石頭店的規格比較嚴

它只要電壓低於 5V 就斷電不給用, 應該是短路保護
不過這也抓太嚴了吧!定電流輸出不就好了, 應該電壓掉多一點再斷
這樣可用性比較高啊, 不要這麼小氣好嗎?XD
短路保護啟動就熄燈, 然後變壓器會嘗試再送電
斷電重開後 LED 燈 reset 為 RGB = 0, 負載下降就重新送電

這是台灣製的變壓器, 地下街買的, 一顆一百台幣附近很便宜, 拿來壓榨看看


雖然超便宜但兩顆都有大於等於規格的輸出, 標 2.4A 的輸出 2.4A, 標 1A 的輸出 1.2A
1A 那顆電壓低於 4V 附近啟動短路保護, 比石頭店的寬鬆, 這個好!

上面那幾顆都沒法設 RGB=255, 都在到 255 之前就掉電壓
於是我就找來更給力的變壓器看看最高功耗是多少

這是工業用變壓器, 最大輸出 5V 7A, 可以看到電壓電流錶顯示 4.46A
不過如果設定成這樣, LED 顏色會偏藍, 反而不像白色
而且溫度會上升很快, 變得很燙! 超燙!! 大...(ry
所以就算有辦法全功率輸出也不建議這樣做
應視需求設定亮度, 並注意散熱, 如果要高亮度, 散熱就要做好

如果把這玩具附近放白紙去照射就會像這樣

可以發現左邊偏藍右邊偏綠
這和 LED 方向有關, 它的三色發光體水平排列成直線
發光體四周有像盤子一樣的塑料包圍, 因此從側面看

特定角度時三個發光體會有一個因為塑料反光而顏色強度增加
紅色發光體在中間沒得反光, 而兩側藍綠就有機會增強


拿個霧面的透光物體可以改善這現象但效果有限, 而且亮度會降低
所以這就只能如同其規格當顯示器或是變色燈條來用, 不適合照明
接著我們用軟體做進一步設定

WT-13 韌體 + PC 端 python 腳本:ws2812-matrix.tar.gz

裡面有兩目錄, usb-led 是 WT-13 韌體, host-app 是 ubuntu 上用的軟體
WT-13 韌體改為 6 線輸出, 記憶體不太夠一次只能傳一列
原先是改傳輸協議第一個 byte 指定哪條線, 然後 0-5 共六條
第一次上電正常, 但是第一次把 RGB 全設 255, 兩隻 AVR 接腳就廢了^^b
不知道發生什麼事, GPIO 電壓只剩 2.5V, 無法點亮 WS2812
但是其他四隻接腳一直都正常, 到現在全部測完都沒事, 可能是焊接問題吧我猜
所以 ubuntu 上的軟體要 remap 接腳, 改成奇怪的順序

韌體用法請參考前篇, 不再重複, host-app 部份有三隻
cled.c 和 clde.py 功能相等, 以 cled.py 來說
執行 cled.py /dev/ttyACM0 1 2 3
這樣會透過 ttyACM0 發送命令, 將所有 LED 燈設為 R=1 G=2 B=3
這就是前面那些測試在用的軟體, 接著以這程式為基礎
加上幾百行程式就變成 cled-ui.py
cled-ui.py 有兩種模式, 若不加任何參數就是 UI 模式
這腳本沒有 native code, 不用編譯直接執行
需依賴 python3-serial 來存取 serial, python3-pil 處理影像, Gtk 來做 UI
執行起來像這樣:

滑鼠按住方塊陣列可拖拉, 可縮放, 每個方塊代表一個 LED 燈
滑鼠不動點一下方塊可選擇顏色:


可載入圖檔或是將當前圖檔儲存, 例如載入一張 20x6 的 PNG 檔

載入超過尺寸的影像只會讀留左上角一小塊 20x6 的像素, 其餘資料都捨棄
儲存圖檔時會依據副檔名選擇格式, 用戶系統的 PIL 支援哪些就可以存哪些
通常我們存 PNG 檔

接著點選連線, 假設是 ttyACM0

連線成功後即可發送影像, 顏色輸出除數是讀出影像後在發給 WT-13 前
將 RGB 都除以設定的數再送出, 這是調整亮度用
結果:

燈數不多顯示文字效果不好

接著試試漸層, 這是用 GIMP 做的圖


結果:

可以注意到左下角有個綠色, 那是因為除到小數字剛好只剩綠色有值其他都 0
所以變綠色, 雖然和螢幕同樣是 RGB888, 應該要像在電腦 UI 上那樣很暗才是
但實際上並不同, 我想這和像素大小以及觀看距離有關, 也可能和輸入數字對應的亮度有關
印象中看過書籍說人眼看到的亮度和實際光的亮度對應, 畫出的對應線是非線性的
從這顏色表現看起來可能做的是線性對應, 不過我拿到的 datasheet 並沒有對這說明
詳細不清楚, 總之不要期望會和螢幕上看到的相同, 儘管顏色深度都是 888




在 GIMP 上這漸層的名字是深海, 但是用 LED 顯示後很明顯沒有深海的感覺XD
在源碼包中 host-app/image 目錄下有一些圖檔可供測試

若圖片調整好了, 確定顯示參數後可以改用本程式的第二模式:文字模式
文字模式就是把參數設好, 我的程式直接讀取後發送, 不顯示 UI 操作
可讀取多張圖檔中間設延遲, 做成動畫模式
操作方法:

f=`ls ranbow-loop/*.png`
./cled-ui.py /dev/ttyACM0 8 0.03 10 $f

第一行列出 ranbow-loop 目錄下所有 png 檔
在源碼包中 host-app/ranbow-loop 目錄下, 有八張圖檔
第二行執行顯示, ttyACM0 是輸出 port, 8 是前面 UI 上的顏色輸出除數
0.03 則是每張圖間隔時間, 單位是秒, 10 是迴圈次數, 八張圖輸出完算一次
最後 $f 則是所有圖檔的路徑, 執行結果:MAH03600.mp4
這色彩看起來很甲, 洞窟探險麼? 有點臭(?)

這次進了兩條, 一條短的想說先驗, 長的到貨後直接上
結果短的測完發現不能用, 長的就只能庫存了, 哭哭!



寬間距版, 一捲 5 公尺, 超多庫存...先收起來以後再想怎麼玩


2017.08.08 更新:

不重要的東西XD
跟網路賣家買東西, 裡面附了應該是德文的廣告單當緩衝材
無聊拿起來看...

看不懂德文, 但是右下角有個東西我光看外型就知道那是啥XD


哇喔~ 彩色 LED 燈條耶XD
5M 附控制器賣 18 歐元? 挺便宜的耶, 而且是賣場就賣喔? 這麼便利XD

8 則留言:

  1. 不用真的拿5v去推,藍色chip的壓降大概抓3.3v,給他的限流電路0.7v的操作空間,大概給4v就可以全亮不色偏了,電壓再上去都只是讓它限流電路換成熱量而已。不怕藍色稍弱的話電壓可以再降。他開5v可能是怕燈帶長了燈多了,燈帶的電壓降太多讓末端色偏。(所以要降壓不色偏就要在燈帶各處分散投放供電,讓每個點的電流不會太大,壓降就不明顯顏色就會穩定)
    如果想弄成照明用途,有另外一種相容型的sk6812有做rgbw四色,可以混出照明品質比較好的光源。推薦買rgb暖白,因為led的白光和暖白光的差異就是藍光的量多寡,在rgbw上面暖白加藍就能混回白光,但是要用紅光綠光混出螢光粉發出的黃光,很難混的好看。
    另外頻閃問題不在意光點的話,可以用亮滅亮滅交錯來代替pwm調光,至少不會閃(sk6812的pwm頻率好像也比2812高)
    變壓器...我去找了一顆60A輸出的xddd用了都會怕,要是一個點短路還會因為電阻不夠小沒辦法進保護wwww
    既然做了矩陣,就抓螢幕畫面投上去啊xd(欸),多接幾片就有劇院了,還可以做球面螢幕喔(逃

    回覆刪除
    回覆
    1. >大概給4v就可以全亮不色偏了
      這個要特別買專用的穩壓, 比較麻煩啊...
      生產規模最大的 5V 價錢非常有競爭力, 其他電壓完全不是對手XD
      >sk6812
      WS2812 不是紅綠光混的不好看, 而是根本沒混, 直接打出
      不過 SK6812 從網路上的圖看來版本很多種, 有和 WS2812 一樣的版本
      有像咖喱飯一樣一盤劃分兩區裝的, 配上顏色真的超像咖喱飯XD
      也有全部螢光粉一起封裝的, 分區裝的結果應該會和 WS2812 一樣散光
      露天只有一戶在賣而且單價高......哪天有需要再試試
      >頻閃問題
      WS2812 我是沒感覺閃爍, 而且亮滅交錯和 pwm 不是相同的東西嗎?XD
      >我去找了一顆60A輸出的
      感覺整張板子都起火了應該也不會啟動短路保護XD
      >多接幾片就有劇院了
      640x480 這樣的低解析度就要 30 萬顆, 就算一顆只賣一元也要三十萬還不含組裝
      我還寧願買台單槍去投影, 解析度高很多而且價錢一半不到
      這種矩陣 LED 是你有影片怕鄰居看不到在用的XD
      新聞報過住 LED 廣告機附近的住戶抗議說晚上睡不著, 房間被照的跟白天一樣XD

      刪除
    2. 4V
      我的場合是要盡量減少電線難拉的問題(我用了室內配電在用的2.0線了xd),而且我的電壓源本來就不是5V,一定要弄個buck來處理,所以弄5V4V3V對我都一樣xd
      6812
      其實...我都買了一些來點過,所以大概知道。6812還有被拿來出一種6000K白+4000K黃+2000K琥珀的三色溫led(對應rgb channel)。
      RGBW的是咖哩飯封裝,螢光粉要橘黃色的才是暖白(螢光黃是偏冷白)。散光問題我是隔一層乳白色材料讓它混色,而且我也沒這麼要求xd。價格就直接產地拉貨就好,一捲5米也才五百多,買來自己剪著玩夠玩很久。(而且可以要求要套管但是不要套xd需要再自己塞)
      另外就是紅綠混色不是2812的工作,是肉眼的工作,就算是普通的rgb燈,拿來當照明用都是無解的(地雷已踩)。照明又要rgb的認真做都是要rgb led+照明led兩種都裝,不然不好看。
      亮滅交錯是說亮滅亮滅棋盤交錯著點,是在空間尺度不是時間尺度xddd
      60A...本來預期要這麼多但是又不想分好幾顆,就每路加保險絲假裝有保護(爆
      多接幾片
      我才不會承認我在推坑(欸

      刪除
    3. 附上sk6812的照片
      https://goo.gl/photos/rTz1SeUR1gAkC87J6

      刪除
    4. >6812還有被拿來出一種6000K白+4000K黃+2000K琥珀的三色溫led
      歪打正著XD 我的照明應用好像就需要這種, 但我不知道有這種, 多謝情報XD
      一捲5米五百多應該是掏寶價吧XD 我還沒有方便的收貨地址, 目前只能露天, 價錢五倍...
      混色問題我是想會不會有廠商做表面加工, 類似把乳白色材料披覆在 LED 上這樣, 加減混一些
      讓這三波長散射到感覺像混合這樣, 想是這樣想不過沒看到
      >亮滅交錯是說亮滅亮滅棋盤交錯著點
      單點成本含安裝已經很高了還這樣搞, 又不是石油國家錢在土裡挖了就有XD
      這種坑太深了, 看了不會想跳XD

      刪除
    5. 反正可以軟體控制誰亮誰不亮,要棋盤亮很簡單的...不過這不是重點。重點是,可以找那個賣模組的奇異蘋果問問,之前請他們代淘一些開發工具,抽成我覺得還合理。
      還是來交流一下xdd我之前有買進幾種我有興趣的相容型,我記得有進wwa的(狀態顯示為釣魚

      刪除
    6. 奇異蘋果XD 他有這服務喔, 多謝情報! 下次問看看
      掏寶東西多假貨也很多, 而且還不是所有賣家都出台灣
      我以前用這家:https://tw.hoyoyo.com/
      有代購服務, 不想代購也可用集運和儲值服務, 這我都用過
      現在我只缺有管理員代收的地址XD

      刪除
  2. 補充資料,這人滿強的,把2812的脈波實驗資料翻過一輪自己改庫改到不用SRAM
    https://github.com/wagiminator/ATtiny13-NeoController

    回覆刪除

注意:只有此網誌的成員可以留言。