鳥系統(tǒng)設(shè)計:從硬件選型到狀態(tài)機實現(xiàn))
簡介一份基于STM32的聲光驅(qū)鳥系統(tǒng)畢業(yè)設(shè)計資料面向計算機、電子信息及自動化專業(yè)學(xué)生也可供嵌入式開發(fā)者借鑒。系統(tǒng)以聲光協(xié)同、自動感應(yīng)為核心思路以STM32單片機為控制核心通過微波感應(yīng)雷達檢測鳥類活動觸發(fā)播放肉食鳥類聲音并同步閃爍高亮LED在農(nóng)田無人看守時自動驅(qū)趕鳥類兼顧驅(qū)鳥效果與生態(tài)友好供電部分采用5W太陽能電池板配合3.7V鋰電池滿足野外長期穩(wěn)定運行需求并可通過HX1838紅外通信接收頭接收遠程遙控指令提升使用靈活性使遠程管理更加便捷。資源包僅含1個docx格式文檔大小2.58MB內(nèi)容覆蓋中英文摘要、關(guān)鍵詞、目錄以及緒論、系統(tǒng)方案與選材、主控與雷達選型、紅外信號選型等章節(jié)結(jié)構(gòu)編排規(guī)范已有50人學(xué)習。讀者可通過這份文檔理解PCM1770音頻DAC轉(zhuǎn)換、IIS接口設(shè)計、3W功放驅(qū)動、紅外遙控接收等關(guān)鍵實現(xiàn)環(huán)節(jié)掌握系統(tǒng)從需求分析、模塊分工到軟硬件設(shè)計的完整流程還可參考其目錄組織與論述方式為獨立完成同類嵌入式項目或撰寫技術(shù)報告提供實用范本。 這兩年帶過的課程設(shè)計和畢業(yè)設(shè)計里基于STM32的聲光驅(qū)鳥系統(tǒng)算是出現(xiàn)頻率最高的題目之一。題面看著不大但真正做下來硬件、軟件、結(jié)構(gòu)、文檔全都要碰一遍特別適合拿來當嵌入式綜合練手項目。簡單說這套系統(tǒng)就是通過傳感器檢測鳥類靠近再自動觸發(fā)聲音和強光組合把鳥趕走。聽起來像是個“放大版電子鞭炮”但實際要做好難點全在“組合”和“變化”這兩個詞上。應(yīng)用場景其實很明確果園和農(nóng)田防鳥啄食輸電線路桿塔上防鳥筑巢引發(fā)短路糧倉、養(yǎng)殖場、甚至一些臨時需要驅(qū)鳥的場地都能用。機場雖然有更嚴格的驅(qū)鳥規(guī)范但這種小規(guī)模聲光設(shè)備作為輔助研究也有不少參考資料。適合誰來參考正在做相關(guān)課設(shè)、畢設(shè)的同學(xué)想入門STM32項目開發(fā)的人還有打算在自家果園搞一套低成本驅(qū)鳥裝置的種植戶都能從這篇文章里拿到一套能落地的方案。這篇文章我不打算擺空理論就按我當時做這套系統(tǒng)的順序來寫從方案選型到硬件設(shè)計再到狀態(tài)機代碼和調(diào)試記錄最后加一份成本清單和實際部署建議。1. 項目定位與方案選型思路1.1 驅(qū)鳥任務(wù)拆解為什么“聲光”組合優(yōu)于單一方式驅(qū)鳥這件事最大的難點不是驅(qū)趕本身而是鳥類會“習慣化”。同一段刺耳聲音循環(huán)播放最初幾天效果顯著一周之后鳥就學(xué)聰明了該吃吃該停停。單一頻閃燈也是同理固定節(jié)奏閃久了鳥會把它當成常態(tài)背景。我在現(xiàn)場測試時就遇到過這樣的情況第一天燈一亮鳥全飛走第三天已經(jīng)有三只麻雀蹲在燈底下梳理羽毛。所以聲光驅(qū)鳥系統(tǒng)的核心設(shè)計邏輯是讓刺激“不可預(yù)測”。聲音要變頻光要變節(jié)奏聲和光之間的組合順序也要不斷變化。鳥類對動態(tài)、突然、不規(guī)則的信號更加警覺這是刻在生存本能里的反應(yīng)機制。把這個需求翻譯成嵌入式語言就是系統(tǒng)需要在檢測到鳥類后通過隨機算法控制PWM輸出和GPIO時序讓每次驅(qū)趕動作都不重樣。1.2 為什么主控選擇STM32同樣功能用51單片機也能做成本甚至更低但開發(fā)和迭代體驗差很多。用51寫隨機掃頻PWM不是不行只是當你想加傳感器、加通訊、加低功耗邏輯時芯片資源和外設(shè)配置會很快吃緊。用樹莓派或者更高性能的MPU又過度設(shè)計一個驅(qū)鳥器沒必要跑Linux。STM32在這個項目里的優(yōu)勢很直接價格便宜F103C8T6這種經(jīng)典芯片板級方案大量鋪貨成本壓得很低外設(shè)豐富定時器、ADC、UART、I2C、PWM通道全都有后期要接ESP8266、K210或傳感器陣列也不用換主控資料成熟無論是寄存器開發(fā)還是HAL庫開發(fā)網(wǎng)上教程和現(xiàn)成代碼多到看不完對做課設(shè)和畢設(shè)的人來說卡住時能查到解決方案太重要了。按時序要求來看72MHz主頻處理幾個傳感器的輪詢和聲光輸出綽綽有余實時性完全不擔心。1.3 系統(tǒng)架構(gòu)與工作流程整套系統(tǒng)拆成四大模塊探測模塊負責感知鳥類靠近主控模塊負責判斷和處理邏輯聲光執(zhí)行模塊負責實際驅(qū)趕動作電源模塊負責穩(wěn)定供電??紤]到調(diào)試和后期維護我還會額外留一組串口用于日志輸出這樣做現(xiàn)場調(diào)試時能直接看到當前狀態(tài)和觸發(fā)次數(shù)。工作流程是一個典型的閉環(huán)系統(tǒng)上電后處于低功耗監(jiān)測狀態(tài)傳感器檢測到目標靠近后主控喚醒并進入驅(qū)趕狀態(tài)隨機選擇聲光組合動作持續(xù)一段時間后判斷現(xiàn)場是否還有目標有就繼續(xù)沒有就自動復(fù)位。一個關(guān)鍵設(shè)計是驅(qū)趕動作必須帶自動恢復(fù)機制不能觸發(fā)一次就永久高功耗運轉(zhuǎn)。模塊選型參考如下模塊選型示例作用說明主控STM32F103C8T6核心邏輯、PWM輸出、傳感器采集探測HC-SR501熱釋電 / HC-SR04超聲波檢測鳥靠近聲音無源蜂鳴器 功放喇叭輸出變頻驅(qū)趕音光源LED燈板 / 高亮LED陣列頻閃強光電源12V適配器 降壓模塊 或 太陽能鋰電池持續(xù)供電調(diào)試串口 / OLED擴展查看狀態(tài)與參數(shù)2. 硬件設(shè)計關(guān)鍵點與電路實現(xiàn)2.1 探測傳感器的選型與接口細節(jié)傳感器選型是這個項目里第一個容易踩坑的地方。最常見的方案是HC-SR501熱釋電紅外傳感器它本來就是做人體檢測的但檢測到鳥類靠近同樣會輸出高電平勝在便宜、靈敏度可調(diào)、功耗低。問題是它的誤觸發(fā)概率不低陽光直射、溫度突變、快速移動的樹葉都可能觸發(fā)。解決辦法是調(diào)整靈敏度旋鈕和延時旋鈕讓模塊只對大目標產(chǎn)生響應(yīng)同時在安裝時讓傳感器朝斜上方避開正對陽光和車流方向。如果預(yù)算稍高可以換HC-SR04超聲波測距模塊通過設(shè)定距離閾值來判斷鳥類是否進入警戒區(qū)對靜態(tài)物體不敏感誤報率低不少。實際項目里兩者可以并聯(lián)使用紅外負責粗檢測超聲波負責二次確認只有當兩個條件同時滿足時才啟動驅(qū)趕動作。這種方法能顯著減少無意義的聲光操作也省電。接口電路方面?zhèn)鞲衅髂K通常輸出5V或3.3V電平STM32的GPIO容忍5V輸入但穩(wěn)妥起見我會在信號線上串一個1k電阻限流必要時加光耦隔離。熱釋電模塊上電后有約一分鐘的初始化穩(wěn)定期這個期間輸出可能跳變軟件里必須加啟動延時濾波否則一開機就瘋狂觸發(fā)。2.2 聲光執(zhí)行部件的驅(qū)動方式聲音部分如果只用板載無源蜂鳴器聲音刺耳但響度有限在農(nóng)田這種開闊場地基本沒用。我實測下來最靠譜的組合是“無源蜂鳴器 小功率功放 8歐喇叭”STM32定時器輸出PWM信號經(jīng)過功放模塊推動喇叭發(fā)聲。功放模塊選PAM8403這類廉價方案幾塊錢就能買到驅(qū)動3W喇叭足夠覆蓋幾十米范圍。聲音的頻率不能固定我會讓代碼在1kHz到5kHz之間周期性掃頻模擬某種不規(guī)則的威脅信號。光源部分高亮LED是最方便的。鳥類對高頻閃爍的藍光、紅光尤其敏感所以我保留了LED燈板的RGB接口通過PWM分別控制紅、藍兩路亮度交替閃爍。需要注意的是一個GPIO直接驅(qū)動LED亮度遠遠不夠必須加驅(qū)動管。小功率LED用S8050三極管就能帶功率稍大的燈板建議用AO3400這類N-MOS管控制信號接?xùn)艠O源極接地漏極串聯(lián)LED燈組接電源正極。我早期直接拿GPIO去推3W燈板結(jié)果芯片發(fā)熱嚴重后面全部改成MOS管驅(qū)動。繼電器方案不是不能用但要注意線圈是感性負載關(guān)斷瞬間會產(chǎn)生反向電動勢必須在線圈兩端并聯(lián)一個1N4007二極管吸收否則容易擊穿三極管或干擾主控復(fù)位。2.3 電源、PCB布局與戶外考慮供電是整個系統(tǒng)里最容易出現(xiàn)“看似正常但總重啟”的環(huán)節(jié)。我的做法是外部12V適配器輸入先用MP1584降壓模塊降到5V再用AMS1117-3.3降到3.3V給主控和傳感器供電。如果做戶外長期部署就改成太陽能板接充電模塊給3.7V鋰電池充電電池再經(jīng)升壓模塊輸出5V這樣陰天也能撐兩三天。PCB布線時有一條經(jīng)驗值得記住喇叭和LED驅(qū)動回路的地線必須和傳感器以及主控的地線分開走最后在電源輸入端單點匯合。另外繼電器、功放這類大電流器件盡量放在板子邊緣遠離傳感器芯片和晶振。我第一版手工板就是沒注意地線分割每次一開喇叭熱釋電就觸發(fā)一次整個系統(tǒng)形成自我激勵循環(huán)后來把地線分開才解決。戶外使用還要考慮防水和防潮盡量裝進防水接線盒傳感器探頭露出盒外所有接線端子擰緊后用熱熔膠封口。長期暴露在室外的接線建議用防水航空插頭不要直接焊死在PCB上維修維護會方便很多。3. 軟件框架與核心代碼實現(xiàn)3.1 主循環(huán)、狀態(tài)機與定時器設(shè)計軟件架構(gòu)上我不建議在main函數(shù)里用一堆delay來寫流程。第一個原因是驅(qū)動動作動輒持續(xù)幾十秒期間如果還要響應(yīng)傳感器、輸出日志、處理隨機時序delay會讓整個系統(tǒng)卡死第二個原因是代碼可讀性太差答辯時老師問“這個狀態(tài)怎么切換的”會很難講清楚。更好的做法是維護一個簡單狀態(tài)機IDLE待機監(jiān)測、ALERT檢測到目標準備驅(qū)趕、ACTIVE正在執(zhí)行聲光驅(qū)趕、RESET驅(qū)趕結(jié)束復(fù)位等待。用一個基于SysTick或TIM2的毫秒級時基在主循環(huán)里不斷查詢當前狀態(tài)并根據(jù)狀態(tài)執(zhí)行對應(yīng)動作。這樣傳感器檢測、PWM更新、隨機數(shù)生成都可以在主循環(huán)里輪詢處理邏輯清晰也容易調(diào)試。核心結(jié)構(gòu)可以簡化為typedef enum { STATE_IDLE, STATE_ALERT, STATE_ACTIVE, STATE_RESET } SysState; volatile SysState currentState STATE_IDLE; volatile uint32_t systick 0; void SysTick_Handler(void) { systick; } int main(void) { SystemInit(); GPIO_Config(); TIM_PWM_Config(); UART_Config(); Sensor_Config(); while (1) { switch (currentState) { case STATE_IDLE: if (BirdDetected()) { currentState STATE_ALERT; } break; case STATE_ALERT: StartRandomRepellent(); currentState STATE_ACTIVE; break; case STATE_ACTIVE: UpdateRepellentAction(); if (CheckBirdLeft()) { currentState STATE_RESET; } break; case STATE_RESET: StopRepellent(); DelayMs(3000); currentState STATE_IDLE; break; } } }3.2 聲光隨機化算法讓鳥類無法習慣隨機化是整個軟件的核心。我用的是一個比較討巧的思路系統(tǒng)上電時讀取ADC懸空通道的噪聲值作為隨機種子這樣可以避免每次上電后動作序列完全一樣。然后每次觸發(fā)驅(qū)趕前用C標準庫的rand()生成當前動作的持續(xù)時間和順序。聲音部分我用定時器輸出PWM頻率不是固定的而是隨時間線性變化。比如每隔200ms從一個隨機基頻向上掃頻或者向下掃頻聽起來像動物警告聲。LED部分則用軟件延時控制閃爍間隔紅藍交替間隔時間在80ms到500ms之間隨機跳動。掃頻PWM初始化代碼可以這樣void TIM_PWM_Config(void) { GPIO_InitTypeDef gpio; TIM_TimeBaseInitTypeDef tim; TIM_OCInitTypeDef oc; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); gpio.GPIO_Pin GPIO_Pin_6; gpio.GPIO_Mode GPIO_Mode_AF_PP; gpio.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, gpio); tim.TIM_Prescaler 72 - 1; tim.TIM_CounterMode TIM_CounterMode_Up; tim.TIM_Period 1000; tim.TIM_ClockDivision TIM_CKD_DIV1; TIM_TimeBaseInit(TIM3, tim); oc.TIM_OCMode TIM_OCMode_PWM1; oc.TIM_Pulse 500; oc.TIM_OutputState TIM_OutputState_Enable; TIM_OC2Init(TIM3, oc); TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); TIM_Cmd(TIM3, ENABLE); }上面配置的是72MHz主頻經(jīng)預(yù)分頻后產(chǎn)生1MHz的計數(shù)時鐘定時器周期1000對應(yīng)1kHz基頻實際要通過修改TIM_Period來掃頻。要提醒一下用標準外設(shè)庫開發(fā)時PWM輸出引腳必須和定時器通道對應(yīng)比如TIM3的CH2默認是PA1而不是PA0我第一次沒仔細查引腳復(fù)用表花了不少時間排查。3.3 低功耗、日志與擴展接口預(yù)留如果是電池供電低功耗就不能忽略。我的設(shè)計是系統(tǒng)大部分時間處于Stop模式由外部中斷喚醒。熱釋電傳感器的輸出接在STM32的EXTI引腳上檢測到目標時從Stop模式喚醒完成驅(qū)趕后再重新進入Stop。使用HAL庫時只需要在進入Stop前關(guān)閉不必要的外設(shè)時鐘并將GPIO設(shè)為合適的狀態(tài)實測靜態(tài)電流能降到幾十微安級別。串口日志是調(diào)試時的救命稻草。我在啟動時通過UART輸出系統(tǒng)版本和隨機種子每次觸發(fā)驅(qū)趕時打印當前狀態(tài)編號、動作持續(xù)時間和觸發(fā)次數(shù)。現(xiàn)場跑的時候插一根USB轉(zhuǎn)TTL線就能看到完整運行流程不用靠猜。另外我在板上預(yù)留了一個I2C接口接OLED顯示屏用來實時顯示當前狀態(tài)和計數(shù)方便演示和答辯展示。功能擴展方面串口上已經(jīng)預(yù)留了ESP8266模塊的接線位置后續(xù)想接入WiFi上報也沒問題。如果想做更智能的“認鳥”可以把K210視覺模塊通過UART接入讓K210識別畫面中是否有鳥識別結(jié)果再發(fā)給STM32判斷是否觸發(fā)驅(qū)趕這樣可以大幅降低誤報。4. 實測調(diào)試記錄與問題排查清單4.1 硬件問題上電不亮、誤觸發(fā)、驅(qū)動管發(fā)燙我第一版樣機上電后STM32完全沒有反應(yīng)量了3.3V正常復(fù)位引腳正常最后發(fā)現(xiàn)是BOOT0引腳懸空導(dǎo)致進入了ISP模式程序沒有被執(zhí)行。這個問題在自制最小系統(tǒng)板上非常常見BOOT0和BOOT1必須通過電阻明確拉低或拉高不能懸空。另外部分淘寶最小系統(tǒng)板出廠自帶LED燈測試程序如果上電后板載LED閃一下就滅不一定代表芯片壞了可能是進入了低功耗或者程序跑飛。熱釋電傳感器誤觸發(fā)是另一個高頻問題。我的解決辦法是傳感器安裝位置避開風口和日曬同時在軟件里加入二次確認機制連續(xù)三秒檢測到高電平才認為有鳥。這樣做雖然會讓響應(yīng)變慢一點但誤報率下降非常明顯。驅(qū)動管發(fā)燙通常有兩種原因一是PWM頻率設(shè)置過低導(dǎo)致開關(guān)損耗大二是沒有加散熱或電流過大。LED燈板電流最好控制在1A以內(nèi)超過的話MOS管要加散熱片。4.2 軟件問題模式不切換、PWM無聲、死機調(diào)試過程中有個很典型的軟件坑中斷服務(wù)函數(shù)里修改了狀態(tài)變量但主循環(huán)里讀到的還是舊值。這是典型的變量沒有加volatile聲明導(dǎo)致的優(yōu)化問題。編譯器在優(yōu)化時可能把變量緩存到寄存器里中斷里修改值后主循環(huán)感知不到。把所有跨中斷訪問的狀態(tài)變量都加上volatile問題立刻消失。PWM沒有聲音輸出最常見的原因不是代碼跑錯了而是引腳復(fù)用配置不對。標準外設(shè)庫開發(fā)下GPIO必須配置為AF_PP復(fù)用推挽模式同時要確認定時器的通道映射到了哪個引腳不能想當然。另一個容易被忽略的地方是功放模塊需要使能引腳有些功放板默認是靜音狀態(tài)需要把控制引腳拉高才能輸出聲音。頻率設(shè)置得太高也會導(dǎo)致人耳聽起來聲音很尖甚至聽不見我通常把上限限制在5kHz以內(nèi)。系統(tǒng)死機大多出在等待傳感器返回的while循環(huán)里。比如超聲波測距時如果一直等待ECHO引腳拉低恰好這個引腳懸空或者信號異常程序就會卡死在循環(huán)里。標準做法是給所有等待都加超時判斷一般一兩行代碼就能解決。4.3 STM32下載調(diào)試與開發(fā)環(huán)境常見坑用ST-Link下載時經(jīng)常遇到“No STM32 target found”的報錯一開始我以為是芯片壞了后來排查下來原因就那幾類連接線太長太細、目標板供電不足、SWDIO和SWCLK接反、芯片內(nèi)部代碼把SWD引腳復(fù)用掉了。解決辦法是先檢查供電和接線然后按住復(fù)位鍵點擊下載松手或者把BOOT0拉高再下載一次。實在不行就把SWD速率調(diào)到最低很多時候是線材接觸問題。還有一次我在設(shè)備管理器里看到ST-Link的Virtual COM Port帶黃色感嘆號串口完全打不開重新安裝驅(qū)動并換了一個USB口才恢復(fù)。開發(fā)環(huán)境方面Keil MDK5做這類項目最省心但安裝時要注意勾選對應(yīng)的Device Pack不然新建工程時根本找不到STM32F103C8T6芯片型號。如果你想用VSCode做STM32開發(fā)也不是不行配PlatformIO或arm-none-eabi-gcc都能跑但對課設(shè)來說學(xué)習成本偏高沒必要一上來就折騰編譯鏈。調(diào)試時還有一個實用技巧用ST-Link Utility可以批量讀取Flash內(nèi)容方便備份芯片里的出廠程序防止誤擦后無法恢復(fù)。我把調(diào)試過程中遇到的高頻問題整理成了一份速查表問題現(xiàn)象可能原因處理辦法上電無反應(yīng)BOOT0懸空、供電不足、晶振未起振檢查BOOT引腳、電源和晶振配置傳感器不觸發(fā)模塊電壓不匹配、信號線接錯確認模塊供電和信號線定義觸發(fā)后無聲音引腳復(fù)用錯、功放靜音、頻率超范圍查引腳表、拉高功放使能、限制PWM頻率下載時報No target found接線不良、供電不足、進入低功耗降低SWD速率、按住復(fù)位下載、檢查供電設(shè)備管理器串口嘆號驅(qū)動未正確安裝重裝驅(qū)動、換USB口程序卡死while等待無超時、狀態(tài)變量未加volatile補充超時判斷、變量加volatile一開喇叭就重啟繼電器反向電動勢、地線干擾線圈并二極管、地線分割單點匯合5. 從課程設(shè)計到真實部署的進階建議5.1 真實驅(qū)鳥場景需要補充的功能課程設(shè)計通常做到“能亮燈、能響鈴”就已經(jīng)算完成任務(wù)但如果要部署到真實場景還要考慮不少事情。農(nóng)田和果園場景的特點是供電困難、環(huán)境惡劣太陽能板加鋰電池是必須的外殼防水等級至少要達到IP65喇叭的響度要足夠覆蓋整個作業(yè)區(qū)域。輸電線路桿塔場景則對重量和免維護性要求很高設(shè)備盡量輕量化最好支持遠程參數(shù)調(diào)整。機場驅(qū)鳥場景要格外謹慎這類聲光設(shè)備的音量、閃爍頻率、部署位置都會受到相關(guān)規(guī)范約束私自架設(shè)會影響飛行安全建議不要貿(mào)然嘗試課程設(shè)計階段重點做好功能邏輯即可。不管什么場景我都建議先小范圍試運行一到兩周統(tǒng)計觸發(fā)次數(shù)和實際驅(qū)趕效果再決定是否需要調(diào)整傳感器安裝角度、聲光參數(shù)和部署密度。5.2 物料清單與成本估算整套系統(tǒng)自己做下來成本其實很低。芯片和模塊如果從常用渠道采購總成本大概在五十到一百五十元之間大批量的話還能再壓縮。我整理了一份參考物料清單物料參考型號/規(guī)格參考成本主控板STM32F103C8T6最小系統(tǒng)板10-15元熱釋電傳感器HC-SR5013-5元超聲波模塊HC-SR043-6元功放模塊PAM84033-8元喇叭8歐3W3-8元LED燈板RGB燈板或高亮LED5-15元MOS管AO34000.5-1元降壓模塊MP1584 / LM25963-10元穩(wěn)壓芯片AMS1117-3.31-2元電池/電源鋰電池充放電模塊 或 12V電源15-40元外殼防水接線盒5-15元其他電阻、電容、杜邦線、PCB10-20元PCB打樣現(xiàn)在很便宜十塊板子不到三十元加上手工焊接成本也遠低于買成品驅(qū)鳥器。自己做這套系統(tǒng)的核心收獲不只是省下那幾百塊錢而是從原理圖到代碼再到文檔的完整鏈路。5.3 可以繼續(xù)擴展的方向很多同學(xué)做完基礎(chǔ)版就停了但其實這個項目往上擴展的空間非常大。K210視覺識別是我最推薦的進階方向用K210做目標檢測識別畫面里的鳥類輪廓把識別結(jié)果通過UART發(fā)給STM32只有在確認是鳥時才觸發(fā)驅(qū)趕誤報率能壓到極低。ESP8266或4G模塊則可以把系統(tǒng)變成聯(lián)網(wǎng)設(shè)備觸發(fā)記錄和電量數(shù)據(jù)上傳到云端手機隨時查看。多機聯(lián)動也是一個很有意思的方向。單個驅(qū)鳥器的問題在于覆蓋范圍有限如果在一片果園里布置五六個節(jié)點節(jié)點之間通過LoRa或WiFi互相通信相鄰設(shè)備交替驅(qū)趕鳥類就很難找到規(guī)律。配合數(shù)據(jù)統(tǒng)計還能分析出鳥類活動頻繁的時間段針對性調(diào)整工作策略。這些擴展方向都能作為畢設(shè)的加分項也可以作為后續(xù)產(chǎn)品化的功能規(guī)劃。這套方案我前后做過三個版本從最早的面包板加杜邦線到后來的自繪PCB板加防水外殼每一步踩的坑都記錄在調(diào)試筆記里。做這類綜合項目最值錢的不是最后跑通了功能而是從需求分析、方案選型、硬件設(shè)計、軟件編寫到文檔整理這一整套流程都能自己走完。建議源碼注釋寫清楚模塊劃分和關(guān)鍵邏輯硬件設(shè)計文檔里把選型對比和調(diào)試過程都記錄下來這些內(nèi)容在課設(shè)答辯或復(fù)試面試時都是實打?qū)嵉募臃猪?。如果你自己動手做一版大概率還會遇到我這篇里沒寫到的問題歡迎隨時交流。本文還有配套的精品資源點擊獲取