2016年8月12日 星期五

nRF24l01 Sensor node (氣象站 3.5)


這是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拿下來,但是左看右看,這八成是沒辦法乾淨的拿下來了,只好自己先用IC搭一個出來
可以看到這非常的雜亂,多虧LCD一堆線
大概改了一下原本的LCD library的接腳之後就能用了, 然後就開始Layout.

主要就是把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用這個
大概都動起來之後就開始壓耗電量,大概就這幾件事情要做

  1. 能睡就睡
  2. 事情越少越好
  3. 睡得越死越好

能睡就睡主要就是用Sleep代替Delay(除非Bit-Bang啦,那個沒辦法),在這次的Project裡面,有兩個需要等待的,第一當然就是等下一秒,第二就是等Sensor+RF處裡完,所以在這兩個時間,我都用Sleep代替delay

然後就是因為每分鐘才會送一次資料,又顯示器只有溫溼度,所以每秒鐘只去讀溫溼度計然後更新LCD

再來就是要把沒有用到的pin拉到一個特定的state,避免floating造成漏電
於是這一版的耗電量讓待機壓到15uA,而平均的耗電量大約80uA,用CR2032可以撐半年

另外就是我想提一下Ti的energytrace,這真的是他X的好用,基本上就是一個會記錄的電流電壓計,但是測量範圍可以達到uA~mA,除了把時間軸plot出來以外,還會自己算預估使用時間與尖峰電流,對我幫助非常大,以前我都只能用示波器去看去算,現在在軟體裡面點一點就好


2016年7月23日 星期六

High Altitude Ballooning with LoRa Third launch

這次把探空做的更小,面積縮小到3x5cm,零件的改變基本上差不多
Sensor移除了MPU9250,氣壓計換成MS5607(因為可以低到10hpa)
GPS模組不變,而電源供應的部分變得最多

這次可以用三種供電選項,以設定操作電壓3.3V為界:
>3.3V可以用LDO供電
<3.3也有個Step-up,讓這次的Node可以吃一個AAAA電池
最後還可以吃太陽能電池

如果用L92的話,總重量可以壓在25g

而接收站這次改變的最大,以前在發射的接收站都只是用Python做的離線版,只不過是Cmdline的GUI版本,所以其他人都需要走過來看數據,這其實不是很方便,所以這次改用Node.js做了一版網頁版本的Server,與搭配的前端.
我先講一下這次的整個架構:用圖說明比較快

第一次測試TDMA的時候,是為了測試不同設定下的距離,這是改成切換不同的頻道,
而且雖然第一次測試是失敗的,但是這次大家都裝了GPS,有了共同的timepulse,就可以做到用一對一變成一對多:
Node.js的部分主要分三個
  1. 直接記錄成CSV
  2. 推送網頁
  3. Socket即時傳控制與資料

而前端也是有四個模組組成
  1. 地圖
  2. 控制
  3. 每個通道的即時資料
  4. Chart

地圖是我從第一次放探空氣球就一直很想做出來的東西,以前用Python的時候不知道怎麼寫,但是用網頁就方便多了,利用leaflet+抓下來的Google map,就可以做成我要的離線版地圖
不過這次遇到的問題是,c3.js很吃資源,每秒推一筆SP3的風扇就開始轉,所以暫時先拿掉這功能

而為了野外架接收站的方便,我把整套系統搬到Linkit 7688,就把整個系統縮小到可以放在防水盒裡面,搭配降壓模組直接吃12V的電瓶.
另外雖然可以直接用Linkit 7688 Duo直接接上LoRa的模組,不過因為手上就已經有以前做好的接收站了,所以就直接用Serial port接上7688.絕對不是因為我懶喔O.<
第一版的探空,換個韌體就變接收機惹,一路用到現在
獨立運作還可以開AP讓大家連線的接收站,我愛7688
內部照我就不放了,因為真的是太慘烈,我怕正常人看到會崩潰

然後這次是在文化大學放的氣球
我也想要有個RTK GPS...
由於要多個Node,所以改用全向性天線


BUT,我還是有架另外一台用指向性天線作為Backup,不過這台小接收站是用Arduino Leonardo(Atmel Atmega32U4)做的,我之前手癢做一台專門接收用的板子.

不過需要接上電腦才能運作,所以把nodejs搬到筆電架整套Server.
我忘記帶繩子
然後最後就是發射了,這次發射與以往的不同,氣球改用鋁箔氣球

主要是實驗需要定高度,而且高度要低,所以用鋁箔氣球測試看看狀況如何
結果異常慘烈XD,用高度的時間圖一看便了

氣球上升到一半就漏氣然後就掉了,而且超快,最後收不到資料都是Lost LOS
第一個是如下圖只有一顆氣球,而且是灌滿的,拉力大概75克,第二個是如上圖的三顆沒充滿的氣球,拉力沒測...
LOS lost

由於不到一小時氣球就掉了,所以距離也就數十公里....
下次應該會再測試幾次吧

2016年5月24日 星期二

Taiwanduino



左:正式版 中:Beta版 右:正式版的電路板


總之這是一張台灣造型的Arduino

首先要提到的是,這張板子的目的
其實這張板子是在Openlab.Taipei 週三來碗Arduino的聚會時,提出的idea
當初的目的是讓大家都能焊接出一個台灣形狀的Arduino相容版,就這樣

基本上,這個目的就先限制住了零件的選擇,基本上只能選DIP的零件
這時候我第一個想到的其實是用Attiny85的版本,畢竟國內外N堆人都曾經做過同樣的東西
不過這時候Co-worker DC提到了想要加撥放器的功能,基本上就是PWM播放Wav檔案

這時候Attiny85的問題就是Pin腳太少,不拔下來沒辦法燒錄,這時候剛好想起來之前Adafruit做過的Trinkit pro用的就是Atmega328 + V-USB的bootloader,做到類似Attiny85 USB開發板那種,用GPIO模擬USB HID,然後以此作為上傳的通道,又為了存放Wav檔,所以另外加了SPI Flash,然後再把其中一個PWM pin拉出來,配合2N2222 + 電阻 + 喇叭,做完撥放器的部分,配合電容式觸控,就可以完成撥放器的功能了


於是最後就變成這樣了,電容觸控需要一堆1M歐姆,USB也需要幾個Zener+電阻,還有一個SPI Flash,最後的Layout其實真的很緊迫,畢竟還需要留個PAD給電容觸控,只有鵝鑾鼻+觸控點我確定是刻意挑位置放的,鵝鑾鼻其實是因為在Layout的時候剛好柯P在一日雙塔,然後就...那我也來多個LED當燈塔好了,不過北端沒地方放了,所以只放了一個鵝鑾鼻

包裝

零件大概就是這樣,不過我這次還想講軟體,首先就是這張板子有他的USB PID/VID,不只是把Trinkit pro 的 bootloader拿來用,pid.codes有免費的USB PID/VID可以申請

有趣的是那後面的故事,原本這個code是要向USB聯盟購買的,廠商會買到一個Vender ID,而他底下會有uint16_t 個 Product id可以用,買一個要5000美元,很明顯的有些廠商用不完,所以這家廠商就為了推廣OpenSource Hardware,所以讓OSHW的硬體也可以拿到一組PID
當然USB聯盟是禁止的,不過他已經發出去PID也收不回來了XD
順帶一提,這張板子的PID是0x5457 = 'TW'

東西大概都放這了https://github.com/will127534/Taiwanduino/
過陣子我再來補商品化的一些故事,or我自己的意見

2016年2月13日 星期六

MT2502 module breakout


MTK官網的Reference design直接改的,另外就是一定要從電池供電才會動...