顯示具有 HAB 標籤的文章。 顯示所有文章
顯示具有 HAB 標籤的文章。 顯示所有文章

2016年11月9日 星期三

High Altitude Ballooning with LoRa Fourth launch



這次最主要的是探空儀改版,從上圖很明顯的可以看出來面積再次的下降
壓到了2x5cm(不包含外部感應器),幾乎是兩個AAA電池的大小了

為了縮小面積,最主要的GPS模組換成MAX-7相容的L70-R,氣壓計換成BMP280
另外Atmega328也換成MLF的版本,唯獨16Mhz的Crystal與RFM98沒換
而升壓電路維持同一個晶片,但是電感換成體積更小的了

BMP280真的很小,旁邊有一個0402的電容可以比較

另外也把SHT21+GPS的天線做在同一張板子上,這樣一來就不用另外再接線了,減低重量也簡化組裝,SHT21為了減少主板的影響,所以中間的PCB寬度很窄,一不小心真的會扳斷

而ISP換成1.25mm的插座,原本用接觸點+彈簧針的方式真的是很不方便而且占面積

天線也換成5/8波長的多芯線,比之前的單芯線重量少很多
所以..這次的減重答案就是.....

各位觀眾,七公克,七公克,七公克
雖然加上電池就變十五克,但是比起之前的重量少了快60%

這次還是打算用鋁箔氣球做測試


接收機還是一樣一個全向性與指向性

一樣還是全向性接收機用的是Linkit 7688架的Server,然後指向性天線是用筆電收

所以iPhone和筆記型電腦都可以直接看到接收的狀態

然後這次的飛行最主要的問題就是我的指向性天線沒有對準,所以導致全向性天線接收機的RSSI比指向性天線好非常多,當然也有可能是我的指向性天線已經有點問題了,這可能要在查一下,不過幸好全向性天線的狀況不錯,整個過程都能接收的到訊號,所以基本上資料沒斷

結果如下:

基本上還是一到高度就開始漏氣然後往下掉,最高到四千公尺左右

電壓這次的測量方式改成用內建的Bandgap,應該比較準一點,可以看到從一剛開始的1.47v一路下降到1.34v,但是有趣的是之後的斜率有點改變,而整個曲線也不像是正常的電池放電那種
我可能之後會做一個正常的探空圖,不過多少用這個可以看看端倪
這天基本上沒啥逆溫層,上去下來的溫度也差不多,不過濕度差異頗大,可以看到1000m處
應該是有雲啦,要算一下水氣量

RSSI的話很明顯可以看到這次指向性比全向性還要好,最主要的問題是我指錯方向..
下一版接收軟體應該會把方位角與仰角顯示出來
這張是兩個資料合併的結果,所以RSSI的變化有點大,不過還是可以看出來基本上極限在-96~100附近

最後就是GPS衛星數最大有11顆,以一個晶片型天線來說很不錯了
還有最遠距離13.19km,不過基本上是因為氣球掉下去才結束的






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年1月26日 星期二

High Altitude Ballooning with LoRa Second launch

                                 

這次是實際Run了,基本目的是要抓30km高的宇宙射線,
上一次的發射確認了LoRa模組等等的驗證之後,這次就是把宇宙射線的儀器掛載上去
紅色線是上次的飛行路線,和這次來做個比較.可以發現的是距離和高度都遠超出上次的狀況
這次最遠達到268.5km,最高36255公尺

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其實很有問題