2014年4月28日 星期一

WS2812B LED立方體 4X4X4



以前就很想要製作立方體LED了,但是每次都卡在LED的控制方式以及佈線,因為普通的LED要做成立方體的話,需要的針腳最少也要n*(n+1),Arduino也只能搞出3X3X3,再來佈線也頗複雜,所以遲遲沒有完工
然後就在我的Project清單上面沉積已久,直到有一天我看到Adfruit出了neopixel,看到介紹驚為天人,WS281X系列就像Maxim的Onewire一樣(事實上真的差不多),只需要一個針腳就能夠完全控制所有串在一起的LED,而且這個彩色LED有24bit的色彩空間!
於是我就去掏寶找了WS2812B的這個小板子,上面除了有個電容和LED以外都沒有,最重要的是幫我把IO標示整理好.對立方體的佈線來說很方便.
這讓LED立方體對我來說製作難度降低了很多,於是趁著一個周末搭完整個立方體XD
LED真的有點太亮了....幾乎不能直視,而耗電量差不多360mA

這個的程式可以讓我繼續玩幾個月吧XD,現在灌的是Adfruit的WS2812 libary裡面的彩虹DEMO,話說我好像讓相機色彩飽和了@@

補些圖:

四條一片,總共四片慢慢搭XD
布線的方法,這樣會比較好寫程式


記得在Data line串500~220歐姆的電阻,還有在供電上加一個數百uF的電容

猜這誰的鋰電池?XD


2014年4月18日 星期五

Arduino 氣象站 Ver4.1 WIFI

總之改了兩件事,第一個是把溼度計換掉!!!!
DHT系列我不會再用了 BJ4
換成SHT21,重回i2C的世界真美好
固態電容後面那個黑板子就是新的溼度計,超棒的
第二件事是想辦法降低CC3000的耗電量,為此我把他連上AP的方式改成用Smartconfig,這樣就可以跳過AP scan而且能夠在兩三秒內連上AP,我原本想要用Fast connect的功能但是怎麼試都有問題 = =

於是啟動時間從80s降到25s,平均耗電量下降到4.4mA
有趣的是待機狀態下其實DS2764算起來占了一半的耗電量,所以我就拿掉了,把待機耗電量壓到0.15mA,BUT這還是有點問題啊....明明Arduino只有1uA其他的149uA打哪來的??我還需要研究看看

至於供電選擇,由於待機狀況下行動電源不會輸出,所以勢必需要直接接鋰電池運作
不過可能有些人發現了一件事,我用的是Arduino mini pro 16Mhz的版本欸,所以其實還有一個5V升壓的板子?
其實沒有,因為Step-up的模組在極低耗電量的狀況下效率奇差,除非經過特別處裡否則會悲劇
所以就算惹,直接接上3.7V,雖然這超出規格就是了,同時因為我的Mini pro是"3.7V"的電壓準位
和3.3V的CC3000中間還是要加TXB電壓準位轉換,而BMP085和SHT21就不用了,板子上都幫我處裡好了(打到這裡,我突然想到一件事.....待機耗電量是不是這裡出了問題?註記一下研究目標)

現在1000mAh的電池就可以撐8天還可以,雖然看到別人是拿1400mAh撐2年(你怎麼做到的QAQ)
而耗電量是經由DS2764板子來檢測的:
用另外一個Arduino每1ms讀取一次DS2764的資料後,丟到Serial port給Python的程式記錄在CSV檔裡面,再丟到EXCEL分析
大概先這樣吧,我Layout了這個版本:
但是我不會,目前也沒有工具焊接CC3000模組,所以我先練習把CC3000 Breakout board焊接起來再說吧:



2014年4月12日 星期六

Arduino 氣象站 Ver4.0 WIFI

第三次改版,最大的特色是他經由WIFI 模組,可以直接上傳資料,而不用像前兩代需要一個網路中繼器做資料上傳
Wifi模組使用的是Ti新出的低價Wifi模組CC3000,經由SPI連接到Arduino
搭載溫濕度計以及一個氣壓計,還有一個鋰電池電量計

 首先這版遇到了第一個問題就是CC3000的Driver非常容易當掉,DNS查詢也會當,送資料也會當,開Socket也會當,幾乎是送資料幾次就會出問題,所以為了解決問題,就用了AVR中的Watchdog reset,一旦某段程式碼超出時間,就會全部RESET,所以加上去就可以解決當機

但是當然沒這麼簡單......
我第一次用的是Arduino mini pro 3.3v 8MHZ的版本,上傳帶有WDT的程式碼之後,第一次的RESET就當機了,Pin 13一直閃阿閃的,結果是Mini Pro的Bootloader不會解除WDT,所以就一直RESET下去.....
於是我就刷了Optiboot,但是造成我沒辦法上傳程式碼....,問題解決不了的狀態阿...
但是同篇文章有提到,UNO的Bootloader沒有這個問題,於是我就拿了一個5V 16MHZ版本刷UNO的韌體後測試WDT,終於解決了一直RESET,但是這樣我就需要加一個轉接版,因為CC3000模組需要3.3V的介面,於是手邊的TXB0104上轉接版,就這樣繞了好大一圈解決CC3000當機的問題
程式碼到處都是wdt_enable(WDTO_8S) + wdt_reset() + wdt_disable好愉悅,

再來就是資料上傳的問題,我用的是Adafruit的DHT22+Xively的程式碼,但是他的上傳資料格式是.JSON,哩哩辣辣一堆字要上傳,徒增資料量,而且不好看.WDT最久也只有8秒,害我要切成三分資料上傳中間才能插_reset,於是我改成用.CSV的格式上傳,資料量從一百多變成五十幾,省下不少時間,最重要的是我看得懂該怎麼再加東西進去....

之後是耗電量的問題,CC3000是個耗電的怪獸,大約150mA,這等級的怪獸嚴重影響資料上傳的間格,從30s拖到800s,才能稍微接近和第二版的使用時間,而待機的時候,耗電量也需要降低,所以我把Mini pro的LED以及LDO通通拿下來,自己找了一個低耗電的LDO上場,然後DHT22切掉電源
最後待機大約0.5mA,應該還可以再低一些,我可能要把CC3000的電源也全部切掉剩下Mini Pro(單獨的話我量到10uA)

耗電量的問題也和最後的供電系統有關,我等等再來說明(你可以發現上面兩張圖的電源供應選擇其實不一樣)先這樣