《Raspberry Pi 樹莓派官方消息》Raspberry Pi Pico氣球追蹤器|奧斯丁國際有限公司 OURSTEAM Internationl
icon最新消息
2021 / 02 / 03

《Raspberry Pi 樹莓派官方消息》Raspberry Pi Pico氣球追蹤器

高空熱氣球的Dave Akerman提出了用於Raspberry Pi Pico的平流層炫酷應用程式。在此位來賓的部落格中,他將向您展示如何建立和編寫氣象氣球追蹤器的編碼。


氣球追蹤
我的主要愛好是飛行氣象氣球,使用GPS /無線電追蹤器將其位置中繼到地面,以便對其進行追蹤並有望恢復。追蹤器至少由GPS接收器組成,該GPS接收器將目前位置反饋到一台小型電腦,該電腦又控制無線電發射器將該位置傳送到地面。然後將該位置反饋給即時地圖,以幫助追趕和恢復飛行。




因此,追蹤器電曩的這一基本作用很簡單,製造追蹤器的人可以從各種微控制器晶片和主板中進行選擇,例如Arduino板、PIC微控制器或BBC micro:bit。只要編碼存儲量、數據存儲量、處理器能力和I / O(取決於GPS和無線電的選擇、串行、SPI等)量適中即可。最受歡迎的選擇是Raspberry Pi,它雖然用大錘砸開了螺帽以進行追蹤,但確實很容易添加鏡頭。

Raspberry Pi Pico



當我看到一種新型的處理器板時,我覺得自己有責任將其製成氣球追蹤器,因此當我被要求幫助測試新型的Raspberry Pi Pico時,這就是我的第一個想法。它具有大量的I / O – SPI端口,I2C和串行端口全部可用–加上獨特的功能,可以使用可編程PIO模塊添加額外的外圍設備,因此毫無疑問,它是非常實用的。而且與典型的微控制器相比,它具有更多的記憶體。

追蹤器零件
因此,基本的追蹤器具有GPS接收器和無線電發送器。為了將它們連接到Raspberry Pi Pico,我使用了一個原型板,在其中安裝了UBlox GPS接收器,LoRa無線電發射器以及Pico本身的插座。

我不使用麵包板,因為它們容易出現斷斷續續地連接問題,從而浪費了程式設計時間來尋找實際上是硬體問題的"錯誤"。此外,追蹤器必須堅固耐用,因此無論如何我最終都需要將其焊接在一起。



上方是Pico、GPS在左下、LoRa在右下。

我專用的UBlox GPS模塊只有一個串行端口,所以我不能使用I2C。沒關係,因為與大多數Arduino開發板不同,Raspberry Pi Pico不僅限於單個串行端口。

LoRa模塊通過SPI和單個GPIO引腳連接,該模塊用於將其狀態(例如,已發送數據包–準備發送下一個數據包)發送到Raspberry Pi Pico。

最後,在追蹤器正常工作的情況下,我透過一個排針向板子添加了一個I2C環境感測器,因此可以將感測器放置在追蹤器外部的自由空氣中。

開發設置
由於多種原因,我決定將C用於我的追蹤器而不是Python。主要的一點是,我有很多現有的C追蹤器編碼可用於Arduino和Raspberry Pi,但沒有太多的Python。其次,我認為大多數測試人員將使用Python,因此可能更需要測試C工具鏈。

使C / C ++工具鏈正常工作的最簡單方法是在Raspberry Pi 4上安裝。我無法完全實現VSCode集成(我認為是手指麻煩),但是無論如何,我很高興使用編輯器和單獨的構建窗口進行編碼。因此,最終我的工作是在Windows PC上使用Notepadd ++編輯代碼,並在Raspberry Pi 4上提供源代碼。然後打開了一個ssh窗口來運行編譯/鏈接步驟,並單獨運行一個除錯器。除錯器透過Raspberry Pi Pico的除錯端口將二進製文件下載到Raspberry Pi Pico。

對於程序的常規除錯輸出,我將Raspberry Pi Pico串行端口連接至連接回PC的FTDI USB串行TTL適配器-請參見下圖。



在某些時候,我將重訪此設置。首先,現在可以將其printf到虛擬USB串行端口,從而釋放該Raspberry Pi Pico串行端口。其次,我需要使VSCode集成正常工作。

追踪程式碼
我的Raspberry Pi和Arduino跟踪程式的工作方式略有不同。在Raspberry Pi上,為了分隔不同功能(GPS、無線電、感測器等)的程式,我為每個功能使用了單獨的線程。即使慢速操作同時在其他地方運行,這也允許例如將新數據包無延遲地發送到無線電發送器。

在沒有線程可用的Arduino上,編碼仍被拆分為單獨的模組,但是每個模組都被編碼為可快速運行,而無需等待外設響應的循環。例如,某些溫度感測器可能需要花費一秒鐘左右的時間進行測量,因此至關重要的是,不要圍成一圈等待結果。

遺憾的是,默認情況下,Raspberry Pi Pico的C工具鏈不支持線程編碼。我選擇了與Arduino一起使用的方法,而不是在添加支持的情況下對其進行重建。因此,主要代碼從分別初始化每個模塊開始,然後位於一個緊密的循環中,每個循環每個模組調用一次。然後由每個模組迅速返回控制,以便循環保持快速運行,並且沒有模組等待很長的時間。


編碼模組
GPS代碼使用串行端口從GPS接收NMEA數據。NMEA是幾乎所有現有GPS模塊使用的標準ASCII協議,並且包括目前日期、時間、緯度、經度、高度和其他數據。我們需要做的就是確認數據有效,然後讀取並存儲這些值。另一個重要功能是確保GPS模塊處於正確的"飛行模式",以便在高海拔下工作-如果沒有此功能,
約18公里海拔的位置它將停止提供新位置。


LoRa無線電編碼檢查模組何時未傳輸,然後構建新的遙測訊息,其中包含上述GPS數據以及氣球名稱,其他任何傳感器數據和著陸預測(請參閱下文)。

該訊息透過SPI傳遞到LoRa晶片,然後晶片打開其無線電並用遙測數據調製無線電訊號。傳送訊息後,晶片將打開其DIO0輸出,該輸出已連接到Raspberry Pi Pico,因此它知道何時可以傳送另一個訊息。

所有訊息都在地面上接收(在這種情況下,是Pi LoRa接收器接收),然後上傳到互聯網數據庫,該數據庫反過來驅動實時Google地圖(請參見下圖)。



感測器
Raspberry Pi Pico可用於氣球追蹤器,可透過板載降壓-升壓轉換器直接由電池供電。

輸入電壓透過分壓器連接至模擬檢測輸入(ADC3),以便輕鬆測量電池電壓。請注意,ADC參考電壓為3.3V電壓軌,這特別吵雜,尤其是當用於為GPS和LoRa等外部設備供電時,這兩個設備的功耗要求都非常高,因此該編碼平均了許多測量值。

另一種選擇是向ADC添加精確的參考電壓,但我選擇了零成本軟體。



板溫度也可以透過ADC4進行測量。儘管對於追蹤器而言,它沒有外部溫度測量有用,所以我為此添加了BME280設備。Raspberry Pi Pico示範包含透過SPI連接的BME的代碼,但是我選擇了I2C,因此我需要用I2C調用替換SPI調用。BME280還可以回傳壓力(可能是氣球追蹤器最有趣的環境測量值)和濕度。

降落預測
到目前為止,我所做的所有事情都可以在基本的AVR晶片上完成,例如Arduino Mini Pro,還有一些備用空間。但是,一個非常有用的額外功能是添加對著陸點的預測。

我們在發射前使用在線飛行預測功能來大致確定氣球將著陸的位置(幾英里內),因此我們知道例如無需在城市附近著陸就可以安全發射。它使用全球風能預測數據庫以及一些飛行參數(例如:上升速度和爆發高度)來預測氣球從發射到著陸的路徑。如果在飛行過程中始終遵循這些參數,則可能會非常準確。




當然,實際飛行永遠不會完全按照計劃進行-例如,發射可能會比計劃晚,並且在不斷變化的風力條件下,其自身可以使著陸點移動數英里。因此,在飛行中進行即時預測非常有用,而且實際上我們使用相同的風力數據庫進行了預測。

但是,由於它是線上的,並且3G / 4G在追逐熱氣球時可能時好時壞,因此具有獨立的著陸預測非常有用。這可以在追蹤器本身中完成,方法是存儲上升沿途的風速和風向(從GPS位置推導),測量爆發後的下降率,將其應用於大氣密度模型以繪製將來的地面下降率,然後計算下降時風的影響並最終產生降落位置。

典型的Arduino板沒有足夠的內存來存儲測得的風數據,但是Raspberry Pi Pico綽綽有餘。我移植了現有編碼:

在上升過程中,它將垂直範圍分為100米,將緯度和經度增量存儲為每秒度數。每隔幾秒鐘,它會基於目前位置,該陣列中的數據以及使用一個簡單的大氣模型以及有效載荷重量和降落傘有效性的默認值的估計下降輪廓來運行著陸位置的預測。
在下降期間,測量降落傘的有效性,並在(2)的上述計算中使用實際數字。計算它將在每100m的空氣段中花費的時間,然後將其乘以儲存的風速,以計算預期在該段空氣中行進的水平距離和方向。將所有這些截面運動相加,將其添加到目前位置,然後生成著陸預測。其餘部分將遙測訊息發送到地面。
現在,我們幾乎了解了有關氣球追蹤器工作原理的所有資訊。另外,如果您想自己進行近太空飛行,請參考"高空熱氣球"。
logo
iconiconiconiconicon
icon  電話:04-2375-3535
icon  傳真:04-2256-9949
icon  統編:90386785
icon  E-mail:service@oursteam.com.tw
icon  LINE ID:@oursteam
Inspire every child to create