這是nRF24l01的第三版Wireless sensor node了,主要的改良很明顯的是,多了一個7-segment LCD來顯示溫度與濕度,我之前的幾個版本常常發生的問題就是想要看溫溼度的時候,卻要點開網頁來看,覺得頗煩,所以決定再做一個有顯示器的版本.
為了這個顯示,最大的問題就在於耗電量的控制,首先顯示器的選擇表裡面,TFT LCD和OLED先槓掉了,這兩個都是吃電怪獸,動輒數十到數百mA的水準,接下來就是電子紙和Sharp Memory LCD,其實這兩個都是非常好的選擇,只有價錢+連接線是有點問題,價錢不用說,就是貴,不過連結器的問題在於,我不是很希望有軟板+連接器,單純主觀認為醜,如果我把連接線折到背面,我就需要再PCB挖孔給連接線過,而原先是有打算要用導電玻璃版本的Sharp memory LCD,但是掏寶那家出清完了只好作罷,於是剩下還在表上的就只有傳統的LCD了
原先是打算拿一個專用的IC接上Arduino就Call it a day,但是查了一查,各種耗電量的悲劇,以我的Use case,耗電量必須維持在數十uA之間,否則使用時間會極為悲劇,但是看來看去,專用IC的耗電量大都有數百uA到數mA之間,有夠恐怖.
所以只好轉往有LCD controller的MCU找,大概看了一下就覺得MSP430RF4133這顆還不錯,基本上功能都全,耗電量也很低,要維持LCD只需大約1uA左右.
然後就買了4133的Launchpad來試試
紅色那張就是MSP430FR4133的Launchpad |
可以看到這非常的雜亂,多虧LCD一堆線 |
主要就是把Temperature Sensitive的部分透過PCB Cut out隔離,然後RF的部分底下不鋪銅
另外零件選用如下:
- Temperature & Humidity: HTU21D==SHT21==HDC1080 in terms of layout
- Barometer: BMP180 or BMP280
- Light Sensor: OPT3001 or Si1133
- NFC tag: RF430
我目前上的零件只有HDC1080,BMP180,OPT3002這幾個
然後當然還是同一個nRF24l01的SMD模組
另外電池也還是用CR2032,而板子的大小和悠遊卡相同
PCB和零件到了之後就開始寫程式去...
多虧有energia,很多library大都可以直接移植過去沒問題,nRF24l01的驅動用的是nRF24
HDC1080用的是我之前寫給HDC1000的那版,BMP180用這個
大概都動起來之後就開始壓耗電量,大概就這幾件事情要做
- 能睡就睡
- 事情越少越好
- 睡得越死越好
能睡就睡主要就是用Sleep代替Delay(除非Bit-Bang啦,那個沒辦法),在這次的Project裡面,有兩個需要等待的,第一當然就是等下一秒,第二就是等Sensor+RF處裡完,所以在這兩個時間,我都用Sleep代替delay
然後就是因為每分鐘才會送一次資料,又顯示器只有溫溼度,所以每秒鐘只去讀溫溼度計然後更新LCD
再來就是要把沒有用到的pin拉到一個特定的state,避免floating造成漏電
於是這一版的耗電量讓待機壓到15uA,而平均的耗電量大約80uA,用CR2032可以撐半年
另外就是我想提一下Ti的energytrace,這真的是他X的好用,基本上就是一個會記錄的電流電壓計,但是測量範圍可以達到uA~mA,除了把時間軸plot出來以外,還會自己算預估使用時間與尖峰電流,對我幫助非常大,以前我都只能用示波器去看去算,現在在軟體裡面點一點就好