基于Arduino Nano ESP32構(gòu)建飛行報(bào)警LED鈴聲(單獨(dú)使用)
作為飛行員,在空中和地面上,在飛行和飛行前的許多方面保持“安全第一”是很重要的,其中之一就是避免碰撞。過(guò)去幾年,即使是小型航空、自由飛行的飛機(jī),如滑翔機(jī)、滑翔傘、懸掛式滑翔機(jī)等,在未來(lái)的無(wú)人機(jī)中,也開始采用儀器來(lái)觀察和讓別人看到。天空將是擁擠的。
一種便宜但有效的儀器是LilyGo公司的T-Echo或T-Beam型號(hào)。這些LilyGo可以用來(lái)安裝各種軟件,我最喜歡的是M.Braner的SoftRF版本。SoftRF最初是由Linar Yusupov制作的,但其他一些人決定修改/改進(jìn)他的項(xiàng)目。
工作原理:
當(dāng)你在空中時(shí),LilyGo發(fā)送和接收其他飛行飛機(jī)的無(wú)線電數(shù)字?jǐn)?shù)據(jù),其中包含有關(guān)高度,速度,方向等信息;非常重要的是,你和周圍的其他飛機(jī)使用相同的通信協(xié)議,否則沒(méi)有正確或沒(méi)有警告交換!
如果LilyGo接收到正確的數(shù)據(jù),并且檢測(cè)到可能發(fā)生碰撞,它通過(guò)藍(lán)牙傳輸,并通過(guò)該電路接收到相對(duì)的nmea式警告:8個(gè)方向藍(lán)色LED中的1個(gè)將向您顯示被檢測(cè)飛機(jī)的相對(duì)位置(上方的LED顯示為12:00,表示它在正前方,右側(cè)的LED顯示為03:00,表示它在您的右側(cè)90°左右,下方的LED顯示為06:00,表示它在您的后方,等等)。另外,5個(gè)高度LED中的1個(gè)將向您顯示飛機(jī)的相對(duì)高度:中間紅色LED表示飛機(jī)距離您的高度在-50 +50米之間,白色LED表示飛機(jī)距離您的高度在+-51 +-150米之間,綠色LED表示飛機(jī)在您上方或下方超過(guò)+- 151米。這個(gè)獨(dú)立版本包括一個(gè)顯示器,以米為單位顯示相對(duì)距離和警告對(duì)象的飛機(jī)類型。
本項(xiàng)目使用LilyGo + SoftRF (Moshe Braner版本,使用MB158測(cè)試)實(shí)現(xiàn)藍(lán)牙- le連接;草圖通過(guò)LED指示燈電路連接LilyGo,通過(guò)藍(lán)牙- le接收nmea類碰撞警告句子,評(píng)估警告級(jí)別并使用蜂鳴器發(fā)出“嗶嗶”聲(3級(jí));此外,8個(gè)led中的1個(gè)顯示相對(duì)方向,5個(gè)led中的1個(gè)顯示潛在碰撞飛機(jī)的相對(duì)高度;還有一個(gè)狀態(tài)LED顯示類似nmea的活動(dòng),還有一個(gè)Oled雙色顯示屏顯示更多信息。
組件列表:
?Arduino Nano ESP32, MCU帶藍(lán)牙BLE, 3.3V
?OLED 128x64雙色顯示屏I2C + 4引腳頭公母
?IC 74HC4067版本SOIC-24, 16通道多路復(fù)用SMD
?主動(dòng)蜂鳴器3.3V
?2 x 220歐姆貼片電阻(尺寸1206)
?1個(gè)100nF貼片電容器(尺寸1206)
?1個(gè)10uF貼片電容器(尺寸1206)
?8 × 3mm LED藍(lán)光亮度(> 5000mcd)
?1 × 3mm LED紅光亮度(> 5000mcd)
?3 × 3mm LED綠光亮度(> 5000mcd)
?2 × 3mm LED白光亮度(> 5000mcd)
?2個(gè)JST-XH 2.5mm連接器(90°公,直母)
?1 x 200mA自復(fù)位保險(xiǎn)絲貼片
?1個(gè)迷你開關(guān)
?3.7V 1350mA/h鋰離子電池(CT-3650)
?45x48mm雙面PCB
?約40個(gè)銅0.8mm鉚釘(作為過(guò)孔,焊接,連接PCB層)
?若干M2塑料墊片(6 × 5mm mm /f, 6 × 10mm f/f), 10 × 6mm M2螺釘,6 × 10mm M2螺釘,4 × 1mm環(huán)形墊片,10 × M2螺母
?3塑料盒部件(3D打印,見附件)
?簡(jiǎn)單尼龍繩,可粘合尼龍搭扣,雙膠粘帶
?15cm黑線,15cm紅線,熱縮管,卡普頓隔離膠帶
?1 × 3mm紅色LED
?1個(gè)迷你USB PCB連接器
?2 x 10k歐姆1%貼片電阻(尺寸1206)
?1個(gè)4.7uF貼片電容(尺寸1206)
?1 x 4.7uF貼片電解電容器(尺寸1206)
?1 x 2.2k歐姆貼片電阻(尺寸1206)
?1 x 470歐姆貼片電阻(尺寸1206)
?MCP73831 SMD充電器IC
電路:
該電路以Arduino Nano ESP32單片機(jī)為核心,提供了通過(guò)藍(lán)牙- le方式連接LilyGO,驅(qū)動(dòng)主動(dòng)蜂鳴器和類似nmea的綠色LED,指示16通道74HC4067多路復(fù)用器驅(qū)動(dòng)LED,驅(qū)動(dòng)顯示。我在市場(chǎng)上發(fā)現(xiàn)74HC4067 IC有兩種格式,一種是非常小的SSOIP24,一種是較小的SOIC-24;讓我們?yōu)檫@個(gè)電路買一個(gè)小的和手工焊接。我有一個(gè)不愉快的經(jīng)歷,壞保險(xiǎn)絲的電阻為1歐姆,而不是接近0(零)歐姆:有了這個(gè)電阻,電路在4.0V中損失約0.1V。
關(guān)于led,讓我們選擇3mm高效率的發(fā)光效果非常好(bbb50 5000mcd),功耗低,最大在2-6mA左右;我建議用藍(lán)色表示方向,紅/白/綠表示高度,綠色表示nmea式接收。充電器的紅色LED可以是正常的3mm LED。8環(huán)led是通過(guò)孔安裝,對(duì)于其他人,你必須彎曲和切割在適當(dāng)?shù)拈L(zhǎng)度引腳。
盡管Nano ESP32手冊(cè)建議以最小6.0V為VIN引腳供電,但我在3.4V下進(jìn)行了測(cè)試,取得了良好的結(jié)果,獲得了所需的3.3V,使用內(nèi)部穩(wěn)壓器為其余電路供電;BLE通信和一個(gè)LED閃爍時(shí)的功耗在110mA左右,建議安裝1350mA/h左右的3.7V Li-Ion電池;
電池通過(guò)MCP73831 IC通過(guò)mini-USB接口和周圍的一些組件進(jìn)行充電。草圖提供了檢查電池電量,當(dāng)?shù)陀?.4v時(shí),它會(huì)產(chǎn)生一些聲音提醒您盡快充電。如果你決定改變電池功率不同于1350mA/h,我建議根據(jù)充電率改變電阻R6。公式為:R6=1000000/mA,因此在本電路中,使用2.2K歐姆電阻,充電速率為455mA(1000000/455=2200歐姆)。較小的電池應(yīng)以較小的速率充電。我會(huì)計(jì)算充電電流大約是電池功率的1/3:即如果你安裝一個(gè)800mA/h的電池,你應(yīng)該計(jì)算800/3=267,所以1000000/267=3745歐姆(3900歐姆作為R6替代品是可以的)。
如果顯示器是雙色的就好了:他們出售128x64的顯示器,上面16行是黃色,剩下48行是青色;在這個(gè)項(xiàng)目中,顯示器顛倒工作,以青色表示距離,黃色表示飛機(jī)類型。當(dāng)然單色顯示也很好,可能是白色,這樣在白天更亮,可讀性更強(qiáng)。
印刷電路板(PCB):
您可以選擇制作45x48mm雙面PCB并焊接40個(gè)銅鉚釘作為過(guò)孔,就像我通常至少為第一個(gè)原型版本所做的那樣。即使大多數(shù)組件是SMD,也有很多孔要做。我的技術(shù)是通過(guò)“藍(lán)片和熨燙”的方式生產(chǎn)PCB,以及“蝕刻PCB與Press'n'Peel”。
藍(lán)色床單和熨燙?!(谷歌用我的評(píng)論回答…)
在PCB(印刷電路板)生產(chǎn)中,“藍(lán)片”和熨燙是指使用碳粉轉(zhuǎn)移技術(shù)創(chuàng)建原型或小型PCB的特定方法?!八{(lán)色紙張”是一種光滑的紙張,上面有一層可接受墨粉的涂層,通常用于激光打印機(jī)和復(fù)印機(jī)?!办贍C”部分是指使用家用熨斗將電路設(shè)計(jì)的碳粉圖像從藍(lán)片轉(zhuǎn)移到覆銅板上。
下面是這個(gè)過(guò)程的細(xì)分:
1. 設(shè)計(jì)和打?。菏褂肅AD軟件(即easyeda.com)創(chuàng)建電路設(shè)計(jì),并使用激光打印機(jī)打印到藍(lán)色紙張上。墨粉附著在藍(lán)紙上的特殊涂層上。
2. 準(zhǔn)備工作:對(duì)覆銅板(通常為FR-4,單或雙銅層/s)進(jìn)行清洗,以確保碳粉的良好附著力。
3. 轉(zhuǎn)?。簩⒂∷⒑玫乃{(lán)片面朝下放到PCB的銅表面上。熨斗用于加熱紙張,熔化碳粉并將其轉(zhuǎn)移到銅表面(只需將一張A4紙放在PCB/藍(lán)色板材和熱熨斗之間,讓它在上面停留5分鐘)。
4. 冷卻和去除:讓PCB冷卻(在熱熨燙5分鐘后,迅速將其置于水中)。然后小心地剝?nèi)セ蚪窦垼粝麓磴~片上線路的碳粉圖像(一些缺陷必須用適當(dāng)?shù)挠谰脴?biāo)記來(lái)糾正)。
5. 蝕刻:將PCB放置在蝕刻溶液(如氯化鐵)中,蝕刻掉未受保護(hù)的銅,留下由碳粉定義的所需電路圖案。
6. 涂飾:除去剩余的碳粉,然后用阻焊、鉆孔和其他涂飾步驟對(duì)電路板進(jìn)行進(jìn)一步處理。
這種調(diào)色劑轉(zhuǎn)移方法是一種相對(duì)便宜和容易獲得的方法,可以在家中或小批量生產(chǎn)pcb,特別是用于原型制作。
(為了連接PCB的兩個(gè)面,我建議在上下面之間做3或5個(gè)孔作為連接點(diǎn))
藍(lán)牙- le怎么簡(jiǎn)單又怎么困難?
正如我已經(jīng)說(shuō)過(guò)的,經(jīng)典藍(lán)牙更容易管理,但這里我們必須使用藍(lán)牙- le,它與經(jīng)典藍(lán)牙完全不同,不兼容,所以忘記HC-05, HM-10或類似的模塊。
我認(rèn)為我的代碼是簡(jiǎn)單和線性足夠的可讀和可理解的部分關(guān)于藍(lán)牙。這里是一個(gè)簡(jiǎn)短的描述??纯磀eviceConnect()函數(shù):首先是用BLE.scanForName(deviceName)找到并連接LilyGo (T-Echo或T-Beam),然后用peripheral.connect()連接它;接下來(lái)是執(zhí)行peripheral.discoverAttributes(),它似乎什么也不做,但對(duì)接下來(lái)的步驟是必需的?,F(xiàn)在我們必須使用peripheral.hasService(serUUID)驗(yàn)證服務(wù)的存在性,并使用datasservice . hascharacteristic (charUUID)驗(yàn)證其特性,然后使用datachcharacteristic .subscribe()訂閱它?;氐街餮h(huán)(),每次接收到數(shù)據(jù)時(shí),我們都會(huì)在datachcharacteristic . valueupdated()中得到通知,因此我們必須使用datachcharacteristic . readvalue()進(jìn)行讀取。
軟件代碼:
當(dāng)然,最困難的任務(wù)是藍(lán)牙- le連接,我真的更喜歡老式的經(jīng)典藍(lán)牙,簡(jiǎn)單,容易,只需幾分鐘的編程就可以工作。不管怎樣,代碼已經(jīng)寫好并且運(yùn)行良好。唯一包含的BLE管理庫(kù)是ArduinoBLE.h。
在開始時(shí),草圖嘗試10次連接LilyGo,如果它已經(jīng)打開,只需要幾秒鐘,所以在第二次嘗試連接完成。然后,草圖等待帶有標(biāo)識(shí)頭“$PFLAU”和“$PFLAA”的類似nmea的句子。LilyGO甚至提供了這個(gè)電路不需要的其他句子。所有被接受的句子都是具有正確校驗(yàn)和的句子。編制內(nèi)部表數(shù)據(jù)結(jié)構(gòu),將飛機(jī)數(shù)據(jù)、ID和類型組合在一起;從“$PFLAU”和“$PFLAA”句子中我們得到以下數(shù)據(jù)(其他數(shù)據(jù)字段未使用):
?int nmi_gps // GPS 0=無(wú)GPS定位,1=地面3D定位,2=空中GPS定位
?int nmi_alarm //告警級(jí)別0=none, 1=15-20" to impact, 2=10-15" to impact, 3=0-10" to impact
?int nmi_relBearing //相對(duì)沖擊方位,0=前方,180/-180=后方,-45=左側(cè),45=右側(cè),等等。
?int nmi_alarmType //報(bào)警類型0=none, 2=aircraft, 3=obstacle/zone, 4=traffic advisory, 10-FF other忽略
?int nmi_relVertical //以米為單位的相對(duì)垂直距離,正數(shù)=OVER,負(fù)數(shù)=BELOW
?long nml_relHorizontal //相對(duì)水平距離,單位為米
?字符串nms_ID_LAU //來(lái)自PFLAU句子的飛機(jī)ID
?字符串nms_ID_LAA //來(lái)自PFLAA句子的飛機(jī)ID
?int nmi_AcftType //飛機(jī)類型
?字符串nms_aircraftType //飛機(jī)類型描述(由函數(shù)生成)
我們可以設(shè)置3個(gè)警報(bào)級(jí)別:1=較低=較容易,2=中等,3=較高=較困難。草圖在第一級(jí)報(bào)警時(shí)播放1個(gè)電平和沒(méi)有太多快速開關(guān)led,在第二級(jí)播放2個(gè)電平和中等快速開關(guān)led,在第3級(jí)報(bào)警時(shí)播放3個(gè)電平和快速開關(guān)led。
LED狀態(tài)(無(wú)活動(dòng)報(bào)警):
?全部關(guān)閉=電路關(guān)閉
?nmea-like on = LilyGO連接
?nmea-like 1“閃爍= nmea接收ok
?紅色5"閃爍=搜索LilyGO但未找到(嘗試10次)
?紅色0.5“閃爍= LilyGO在10次嘗試后未找到(再次嘗試搜索請(qǐng)重新啟動(dòng),關(guān)閉/打開電源)。
在LilyGO設(shè)置中,您必須激活藍(lán)牙NMEA-like輸出,然后使用計(jì)算機(jī)或手機(jī)查看他的廣播名稱,應(yīng)該是“SoftRF8605a6-LE”之類的東西,因此將名稱放在代碼中而不是我的,deviceName[] =“…”,保存,驗(yàn)證并編譯它,通過(guò)Arduino在線云的方式傳輸草圖。云對(duì)正常使用是免費(fèi)的,并且每天的編譯次數(shù)是有限的。要激活Arduino SerialMonitor上的調(diào)試代碼輸出,您必須將這行設(shè)置為“const boolean isDebug=true”。為了模擬不同級(jí)別的警告,當(dāng)你在家的時(shí)候,你必須取消226 - 290左右的注釋代碼行,它們將覆蓋nmea類句子,模擬警報(bào),這樣你就可以聽到蜂鳴器并看到led工作;您可以更改警報(bào)內(nèi)的暫停更改行“prevTest=millis()+10000;”;在開始飛行之前,請(qǐng)記住注釋回模擬代碼的部分!
3D視圖圖片:
后蓋為最后一步:將電池插入后蓋,將開關(guān)插入后蓋,通過(guò)線環(huán),現(xiàn)在可以焊接開關(guān)與PCB點(diǎn)之間的電線。最后把所有放在一起,擰緊最后6 × 2mm螺釘。
現(xiàn)在是時(shí)候打開開關(guān),看到飛行警報(bào)開始與LED環(huán)做初始顯示,并嘗試通過(guò)藍(lán)牙連接LilyGo,你之前已經(jīng)打開;一會(huì)兒,你會(huì)在顯示器上看到實(shí)際的電池電壓。幾秒鐘后,BLE連接完成,你會(huì)看到nmea一樣的綠色LED閃爍:它工作了!
本文編譯自hackster.io