2015年11月30日 星期一

High Altitude Ballooning with LoRa



好久沒有寫廢話了,Blog的草稿越疊越高,過陣子應該就有空補完,
不過這東西真的令人興奮,所以趕快貼上來

As title,這次是關於高空氣球.
左邊接收器,右邊要探空的
上圖是同一種電路板但是設定成不同功能,一個是探空儀,另一個是地面接收站
規格如下:

  • Atmega328 (就是用Arduino UNO)
  • RFM98    (LoRa模組)
  • Neo 6m    (GPS)
  • MPU9250 (姿態)
  • BMP180 ,但是之後換成MS5607 (氣壓計)
  • HDC1000
首先來講一下重點的無線模組,這次用的是LoRa,比傳統的FM那種來說,首先是Link Budget可以很高,而且可以藉由下調速度來換取更高的Link Budget,而換取更遠的距離

這次的速度設定有兩個,第一是GPS Channel,有鑑於這是最重要的一筆資料(與天線指向有關)
所以設定的速度很低,只有183.11bps, 參數是:SP:12,Band:125Khz,CR:4/8
而這個Link budget達到154dB
第二個則是Payload Channel,這次是裝了九軸計算出來的姿態,速度是21875bps
參數是SP:7,Band:500khz,CR:4/5,Link budget只有134dB

而這兩個的理論最低接收訊號強度為 -137和-117dBm

至於九軸這次選MPU9250主要的原因是因為體積,比起9150來說,周邊電路的零件減少一些
另外就是氣壓計,其實BMP180並不適合,因為最低氣壓只有300hPa,換算高度大概只有七公里
所以在第二次升空的時候改用MS5607,最低可以達到10hPa.

至於GPS模組就是單純找個能用的然後便宜,不過這有個Trick,還有個大魔王,下面會提到

我原先的發射流程是希望探空儀用GPS計時,之後就每分鐘切到GPS Channel後送一筆GPS位置和高度,其他時候每秒鐘送一次姿態+其他資料回來
然後地面站同步時間切頻道收資料,一種TDMA的概念

試了一下覺得沒問題就跑去升空



然後就出問題了,由於問題太多,所以決定用條列式的
  1. GPS高度資料是錯的
  2. Yagi天線也是錯的頻率
  3. 地面站的時鐘和GPS時間有誤差
  4. Python的Thread Handle也有問題
  5. 被大樓擋住
GPS高度錯誤這件事情真的讓我嚇到了,氣球上去之後看著他升空遠去,然後轉頭看著電腦的20m高.....然後就GG了,高度資料出問題的時候,天線指向的仰角會出問題,理論上這時候應該要切成壓高公式去計算(把靜力平衡和氣體方程式帶進去然後隨高度積分),但是一來,我沒有環境的溫濕度計,沒有辦法計算需要的平均虛溫,而且我也沒有寫這個副程式

於是只能用N小時前的探空資料去算大概的高度,免強追到25Km遠

這一切是因為我沒有設定成飛航模式,也就是讓GPS知道說我不在地面上.u-blox需要先由u-blox center設定後,才有高度可以用,而且還要加電池不然設定會消失.再來就是Yagi天線的問題,原先的設計是給400Mhz的Vaisala用的,然後我以為433應該也可以,計算證明根本.....至於地面時鐘,這大概無解,只能讓地面站也有GPS會比較好一點



可以看到的是RSSI基本上剛開始有點悲劇,後來用探空資料回推高度有好一些,但是之後還是GG了,而能夠慶幸的是電池電壓與內部溫度都沒有變低多少,不過高度只有404hPa

接下來是第二次測試,改進的點就是
  1. GPS模組補回備份電池,同時設定成Airborne <1g
  2. 接收機變成兩組,兩隻新的433Mhz Yagi天線,同時接收兩個Channel
  3. 地面接收站改版加了GUI
  4. GPS資料改成每10秒送一筆,而且多送外部溫度,氣壓資料

然後剛開始前先用一個小氣球和繩子測試GPS的高度資料正常,由於高度很低,所以用防靜電袋裝著就好

可以看到線的重量已經開始影響升力了

然後測試正常之後就換大顆的氣球來

雙接收器

地面接收站軟體,要注意的是外部溫度沒有接上

由於這次風向正確,所以沒被任何東西擋住,算是滿成功的接收到67Km遠,13km高的程度
可以看到的是,RSSI維持在-90附近,差不多是這次實測的極限
內部溫度則是達到了-6度,但是電池電壓依舊是沒啥太大的變化,

至於為啥最後會失效,從GPS和Payload同時掛掉來看應該不是因為訊號的問題
I2C lock 住也應該不是問題,因為我已經把TWI.c改過了一下,把所有的while loop都加了Timeout
電池電壓也明顯不是,這溫度應該還不到直接掛掉,Feq shift也不過150hz,理論上不成問題

所以目前打算的解法就是用Watchdog先撐著.....

這篇應該還會再補就是了,應該啦

=====Update=====
我後來想起來一個很好笑的事情,我用的LDO是LM1117-3.3v
用Li-poly很明顯得Vdrop太大,電壓應該下降了不少
所以我覺得很有可能是因為溫度下降之後,電池過LDO電壓掛掉
這次的電池電壓測量方法是用VCC當3.3v,也不是用內建的Bandgap
所以測出來穩定的4.2V其實很有問題






1 則留言:

  1. 請問RFM98你是上掏寶買的嗎? 我在想要買Microchip的RN2903或是你用的這個。另外模組下方黑色的線是天線嗎?

    回覆刪除