
1. 项目缘起与整体设计思路鸽子驯养这件事外行看热闹内行看门道。真正养过赛鸽或者观赏鸽的朋友都清楚驯养的核心不在于喂得多好而在于对鸽子行为规律的精准把控——什么时候进食、什么时候归巢、什么时候需要光照刺激、鸽舍温湿度是否在舒适区间、有没有天敌或异常闯入。传统做法全靠人盯人守一天跑几趟鸽舍记录靠脑子记或者纸笔写时间一长必然出错。我身边好几个鸽友都吃过亏冬天夜里温度骤降没及时发现一窝幼鸽冻伤夏天湿度爆表导致鸽痘反复发作更别提驯养关键期投喂时间不规律直接影响归巢习惯的建立。这套基于STM32的智能鸽子驯养系统就是冲着这些痛点去的。它的核心逻辑很朴素用一颗STM32主控芯片做大脑外挂温湿度传感器、光照传感器、红外接近检测、超声波测距、声音检测咪头差分电路、执行机构步进电机投喂、继电器控制照明和通风再配一块ILI9341液晶屏做本地交互数据通过串口或无线模块上传到云端比如巴法云这类物联网平台实现远程监控和自动控制。整套系统做成实物附带完整电路原理图和PCB、设计手册适合电子类专业学生做毕业设计也适合有一定动手能力的鸽友自己复刻。为什么选STM32而不是Arduino或者树莓派这里面的考量很实际。Arduino开发快但资源有限多路传感器加液晶屏加电机驱动引脚和内存很快就捉襟见肘树莓派性能强但功耗高、实时性差鸽舍环境往往没有稳定市电靠太阳能加锂电池供电的话树莓派那点续航根本撑不住。STM32F103系列或者F407系列功耗低、外设丰富、定时器资源充足、CAN和485通信都原生支持价格还便宜一颗芯片十几块钱就能搞定性价比拉满。而且STM32的生态成熟标准库和HAL库资料遍地都是遇到问题搜一下基本都能找到答案。整个系统的设计思路可以概括为“感知—决策—执行—反馈”四层闭环。感知层负责采集环境数据和鸽子活动信号决策层在STM32内部跑逻辑判断比如温度低于阈值就启动加热湿度超标就开通风执行层驱动电机、继电器、照明灯等设备反馈层通过液晶屏和云端界面把状态呈现出来方便人工干预。这个闭环的关键在于实时性和可靠性——鸽舍环境恶劣夏天高温高湿、冬天低温结露、灰尘大、还有鸽子啄咬线缆的风险所以电路设计和外壳防护必须做足功夫。提示做实物项目最忌讳一上来就画PCB打板。先用面包板或者洞洞板把核心电路验证一遍确认传感器读数正常、电机能转、屏幕能亮再考虑做正式板子。我见过太多人直接打板结果发现某个引脚接错或者电源方案有缺陷整块板子报废时间和钱都打水漂。2. 核心硬件选型与电路细节拆解2.1 主控芯片与最小系统主控选型上我推荐STM32F103C8T6作为入门方案48引脚72MHz主频64KB Flash20KB RAM对于这套系统来说绰绰有余。如果后续要加摄像头或者更复杂的算法可以升级到STM32F407VET6168MHz主频512KB Flash192KB RAM带FPU和DSP指令集跑FFT或者滤波算法更从容。最小系统电路是整块板子的根基包含复位电路、晶振电路、电源电路、启动模式配置、SWD调试接口。复位电路用经典的RC加按键方案10K上拉电阻接VDD100nF电容到地并联一个轻触开关。这里有个细节电容不能太大否则复位时间过长芯片启动慢也不能太小否则按键抖动会导致误复位。100nF是经过验证的稳妥值。晶振用8MHz无源晶振配两个20pF负载电容再经过内部PLL倍频到72MHz。负载电容的值要根据晶振规格书来不同厂家的晶振负载电容要求不一样常见的有12pF、20pF选错了会导致起振困难或者频率偏移。电源部分鸽舍通常没有稳定市电所以系统采用4.2V锂电池供电加太阳能板充电的方案。锂电池充电电路用TP4056或者CN3065这类专用芯片带过充过放保护。锂电池输出3.7V到4.2V而STM32和大部分传感器需要3.3V所以要用Buck降压电路或者LDO稳压。Buck效率高但电路复杂有EMI问题LDO简单但效率低压差大时发热严重。我的做法是主电源路径用MP1584或者LM2596做Buck降到5V再用AMS1117-3.3做二级LDO降到3.3V给MCU和敏感传感器供电。这样兼顾效率和噪声。注意AMS1117-3.3的压差大约是1.1V也就是说输入至少要4.4V才能稳定输出3.3V。锂电池电压降到3.7V以下时LDO输出就会跌落导致MCU工作异常。解决办法要么用低压差LDO如XC6206压差仅0.2V要么在锂电池和LDO之间加一个升压电路把电压稳定在5V再降压。我实测下来用3.7V锂电池直接供AMS1117电量剩30%左右时系统就开始不稳定后来换成TPS63020这种升降压芯片才彻底解决。2.2 传感器电路与信号调理温湿度采集用DHT22或者SHT30。DHT22便宜但精度一般响应慢适合对成本敏感的场景SHT30是I2C接口精度高、一致性好适合做正式产品。DHT22的数据线需要4.7K到10K的上拉电阻否则读不到数据。SHT30的I2C总线也需要上拉通常4.7K即可。这里要提一句I2C总线的上拉电阻值跟总线电容有关线越长、挂的设备越多上拉电阻要越小但太小会增加功耗。一般鸽舍内部走线不超过半米4.7K足够。光照检测用BH1750数字光照传感器I2C接口直接读lux值比光敏电阻加ADC的方案省事得多而且线性度好。光敏电阻方案虽然便宜但需要做分压电路再进ADC还要做非线性校正麻烦且精度差。BH1750的地址可以通过ADDR引脚配置方便挂多个传感器。鸽子接近检测用红外对管或者超声波测距。红外对管适合检测鸽子是否进入投喂区响应快、成本低但受环境光干扰大需要加调制和解调电路。超声波用HC-SR04测距范围2cm到400cm精度尚可但鸽舍内灰尘和羽毛会影响声波传播读数偶尔跳变。我的做法是两者结合红外对管做触发超声波做距离确认双重验证降低误判率。声音检测用咪头差分电路。咪头驻极体麦克风输出的是微弱交流信号需要经过差分放大才能被ADC采集。典型电路是咪头一端接VCC通过偏置电阻另一端输出信号经过隔直电容进入运放的同相输入端运放的反相输入端通过电阻网络设置增益和偏置。差分放大的好处是抑制共模噪声鸽舍里电机转动、继电器吸合都会产生电磁干扰单端放大很容易把这些噪声放大成误触发。差分电路配合RC低通滤波能有效提取鸽子咕咕叫或者扑翅的声音特征。实操心得咪头差分电路的增益不要设太高否则环境噪声也会被放大到饱和。我一开始把增益设到100倍结果鸽子扇一下翅膀就触发报警后来降到20倍配合软件上的阈值判断和持续时间过滤才做到准确识别。另外运放选型上LM358便宜但噪声大TL072或者OPA2340噪声低、带宽够更适合这种小信号放大。2.3 执行机构驱动电路投喂机构用五线四相步进电机加驱动板或者用舵机控制翻板。步进电机精度高、扭矩大适合定量投喂但需要驱动器如ULN2003或者A4988。五线四相步进电机是单极性电机用ULN2003驱动最简单每相一个达林顿管STM32输出四路PWM或者GPIO时序即可。A4988是双极性驱动器需要电机是四线双极性接法但支持细分运行更平滑。我选的是28BYJ-48加ULN2003的组合便宜、资料多、扭矩够用投喂小颗粒饲料完全没问题。照明和通风用继电器模块控制220V交流设备。继电器线圈需要续流二极管保护否则断电瞬间的反向电动势会击穿驱动三极管。驱动三极管用S8050或者2N2222基极串1K电阻发射极接地集电极接继电器线圈线圈两端反并联1N4007。STM32的GPIO输出3.3V经过三极管放大后驱动继电器线圈逻辑是高电平吸合。这里要注意光耦隔离如果继电器控制的是220V市电强烈建议在STM32和继电器之间加光耦如PC817防止市电串入低压侧烧毁MCU。防倒灌电路用PMOS管。当系统同时由锂电池和太阳能板供电时需要防止电流从锂电池倒灌回太阳能板。PMOS管的源极接锂电池正极漏极接负载栅极通过电阻分压网络控制。当太阳能板电压高于锂电池时PMOS导通太阳能给负载供电并给电池充电当太阳能板电压低时PMOS关断电池只给负载供电不会倒灌。这个电路的关键是栅极驱动电压要合适确保PMOS在需要时完全导通否则导通电阻大发热严重。2.4 通信与显示电路本地显示用ILI9341驱动的2.8寸或3.2寸TFT液晶屏SPI接口240x320分辨率。ILI9341的读ID命令返回0xA1A1是正常现象如果读出来是0x0000或者0xFFFF说明SPI通信有问题检查片选、时钟极性、数据线连接。SPI时钟不要超过10MHz否则杜邦线长一点就通信失败。屏幕的背光用PWM控制可以调节亮度晚上自动调暗省电。远程通信有两种方案RS485有线和无线模块。RS485适合鸽舍和主控室距离较远几十米到上百米的场景用MAX485或者SP3485收发器配合485自动收发电路不需要额外的方向控制引脚软件上直接当串口用。自动收发电路的核心是用三极管检测发送数据线上的电平自动切换收发方向省去一个GPIO。无线方案可以用ESP8266或者ESP32做WiFi透传连到巴法云这类物联网平台手机App就能远程看数据、发指令。ESP8266用AT指令控制STM32通过串口发AT命令简单可靠。CAN通信在鸽舍这种多节点场景下也很有用比如多个鸽舍共用一个主控每个鸽舍一个CAN节点通过双绞线连接抗干扰能力强传输距离远。但CAN总线两端需要120欧姆终端电阻中间节点不要接否则阻抗不匹配导致通信失败。我遇到过CAN突然连不上的情况排查半天发现是某个节点的终端电阻误焊了去掉就好了。3. 软件架构与关键功能实现3.1 开发环境搭建与工程配置开发环境我推荐VSCode加STM32CubeMX加ARM GCC的组合免费、跨平台、插件丰富。STM32CubeMX负责生成初始化代码和引脚配置VSCode负责写业务逻辑和调试。需要安装的插件包括Cortex-Debug、STM32-for-VSCode、C/C。J-Link或者ST-Link做下载调试J-Link速度更快但贵ST-Link便宜且够用。芯片包安装是新手容易卡住的地方。在CubeMX里需要下载对应系列的固件包F1、F4等如果网络不好可以手动下载离线包放到指定目录。VSCode里配置J-Link下载环境需要在launch.json里指定设备型号、接口类型SWD、下载速度。如果用的是PowerLink或者其他调试器配置项略有不同核心是确保调试器驱动装好、目标芯片供电正常、SWD引脚没有被复用为普通GPIO。注意STM32的SWD引脚PA13和PA14默认是调试功能但如果在代码里把它们配置成了普通GPIO或者禁用了JTAG下次就下载不了程序了。解决办法是在初始化代码里保留SWD功能或者用BOOT0拉高进入系统存储器启动模式通过串口擦除芯片。我习惯在代码开头加一句禁用JTAG但保留SWD的配置既释放了PA15、PB3、PB4这些JTAG引脚又不影响下载。3.2 传感器数据采集与滤波DHT22的驱动时序比较苛刻需要微秒级延时。用HAL库的HAL_Delay只能到毫秒级所以要用定时器或者DWT做微秒延时。DWT是Cortex-M内核自带的数据观察点单元可以精确计数时钟周期实现微秒级延时不占用定时器资源。DHT22的起始信号是主机拉低至少18ms然后释放等待传感器响应。读取40位数据前16位湿度、中间16位温度、后8位校验和。校验和等于前四个字节之和的低8位校验失败就丢弃重读。SHT30用I2C接口命令0x2C06触发高重复性测量等待15ms后读6个字节前两个是温度、中间两个是湿度、后两个是CRC校验。CRC多项式是0x31初始值0xFF需要自己写校验函数。I2C通信失败时检查上拉电阻、总线电容、从机地址是否正确。SHT30的默认地址是0x44ADDR接VCC时变成0x45。超声波HC-SR04的驱动是发10us高电平触发然后等回波高电平高电平持续时间除以58就是厘米数。这里的关键是超时处理如果等不到回波不能死等要设置超时退出否则程序卡死。我用定时器输入捕获测回波高电平时间精度比轮询高得多。STM32的定时器捕获功能可以测频率、测占空比、测脉宽配置成上升沿和下降沿交替捕获就能得到高电平时间。声音检测的数据处理稍微复杂。咪头差分电路输出的是模拟信号经过ADC采样后得到一串数字序列。鸽子咕咕叫的频率大概在200Hz到800Hz之间扑翅声是宽带噪声。我用的方法是先做FFT提取200-800Hz频段的能量超过阈值就判定为鸽子叫声如果全频段能量都高判定为扑翅或者异常噪声。FFT用STM32的DSP库1024点FFT大概耗时几百微秒F407跑起来毫无压力F103就有点吃力可以降到256点或者用Goertzel算法只算特定频点。3.3 自动控制逻辑与状态机整个系统的控制逻辑用一个状态机来管理状态包括待机、投喂、照明、通风、报警、远程控制。状态切换由传感器数据和定时器事件驱动。比如每天早上6点和下午5点自动进入投喂状态步进电机转动固定步数投喂定量饲料温度低于10度进入加热状态高于30度进入通风状态光照低于阈值且时间在晚上开启补光灯检测到异常声音或者红外触发进入报警状态记录时间并上传云端。状态机的实现可以用switch-case也可以用函数指针数组。switch-case简单直观适合状态少的场景函数指针数组更灵活增加状态不用改主循环。我用的switch-case因为状态不多逻辑清晰调试方便。每个状态有进入动作、运行动作、退出动作比如投喂状态进入时启动电机运行中检测电机是否堵转退出时关闭电机并记录投喂量。定时器用SysTick做系统时基1ms中断一次维护一个全局毫秒计数器。需要定时执行的任务用软件定时器实现比如每2秒读一次温湿度每100ms读一次光照每500ms检查一次报警。软件定时器的好处是不占用硬件定时器资源缺点是精度受主循环影响如果某个任务执行时间过长会导致其他任务延迟。所以主循环里不能有阻塞操作所有延时都用状态机或者非阻塞方式实现。3.4 液晶显示与云端通信ILI9341的显示驱动用现成的库比如TFT_eSPI或者自己写底层。显示内容包括当前温湿度、光照值、鸽子活动状态、投喂记录、报警信息、系统时间。界面用简单的字符和图标不需要复杂的GUI。刷新率不用太高1秒刷一次足够频繁刷新反而影响主循环实时性。屏幕背光用PWM控制晚上自动调暗白天调亮。云端通信用ESP8266连巴法云协议是MQTT。STM32通过串口发AT指令给ESP8266配置WiFi名称密码、连接MQTT服务器、订阅和发布主题。巴法云的MQTT服务器地址和端口在官网能查到主题名自己定义比如“pigeon/temp”、“pigeon/feed”。数据格式用JSON方便解析。上传频率不用太高温度湿度1分钟一次报警事件立即上传。实操心得ESP8266的AT固件版本很多不同版本的AT指令集有差异建议用安信可官方的最新AT固件文档齐全。另外ESP8266的供电要充足峰值电流能到300mA如果和STM32共用LDO可能导致电压跌落复位。我单独用一个AMS1117-3.3给ESP8266供电问题就解决了。4. 实物制作与调试避坑指南4.1 PCB设计与打板注意事项原理图确认无误后画PCB要注意几点电源线加粗至少20mil大电流路径走铺铜模拟地和数字地分开最后单点接地减少噪声耦合晶振靠近MCU走线短且包地避免干扰传感器接口加TVS二极管防止静电和浪涌继电器区域和MCU区域隔离爬电距离要够220V部分开窗加锡增加载流能力。打板前做DRC检查确认没有未连接的网络、没有重叠的焊盘、没有超出板框的元件。板子厚度选1.6mm沉金工艺比喷锡好焊接尤其是细间距引脚。元器件采购要认准正规渠道STM32芯片假货多尤其是F103系列买到翻新片或者打磨片调试时各种诡异问题。我一般从立创商城或者得捷电子买贵一点但省心。焊接顺序先焊MCU和晶振这些细间距元件再焊电阻电容最后焊连接器和继电器。MCU焊接用助焊剂加拖焊或者用热风枪加锡膏。焊完用放大镜检查有没有虚焊、连锡。通电前先用万用表测电源和地之间的电阻确认没有短路再上电。4.2 常见问题排查速查表问题现象可能原因排查方法解决方案MCU不启动电源电压不足、复位电路异常、晶振不起振测VDD电压、测复位引脚电平、示波器看晶振波形换LDO、换晶振负载电容、检查复位电容液晶屏白屏SPI通信失败、背光电路问题、初始化时序错误读ILI9341的ID、测背光电压、检查SPI波形检查片选和时钟极性、换SPI线、调整初始化延时DHT22读数为0上拉电阻缺失、时序不对、传感器损坏测数据线电压、示波器看时序、换传感器加上拉电阻、调整微秒延时、更换传感器步进电机不转驱动板供电不足、相序接错、PWM频率不对测驱动板电压、检查相线顺序、测PWM波形单独供电、调整相序、降低PWM频率超声波读数跳变电源噪声、回波干扰、超时处理不当示波器看回波信号、加滤波电容、检查超时逻辑加LC滤波、软件中值滤波、设置合理超时无线模块连不上供电不足、AT指令错误、WiFi密码错误测模块电压、串口打印AT响应、检查配置单独供电、更新AT固件、重新配置继电器误动作续流二极管缺失、光耦隔离失效、GPIO干扰测继电器线圈波形、检查光耦、查GPIO配置加续流二极管、换光耦、GPIO加下拉CAN通信失败终端电阻不对、波特率不匹配、线序接反测总线电阻、示波器看波形、检查线序调整终端电阻、统一波特率、交换CANH和CANL4.3 抗干扰与可靠性设计鸽舍环境对电子设备的考验很大抗干扰设计必须贯穿始终。电源入口加EMI滤波电路共模电感和X电容、Y电容组合抑制电网串入的干扰。信号线加RC低通滤波截止频率根据信号带宽来定比如温度信号变化慢截止频率1Hz足够声音信号需要保留200-800Hz截止频率设2kHz。TVS二极管放在接口处防止静电和浪涌选型时注意钳位电压要低于芯片的绝对最大额定值。看门狗电路是最后一道防线。STM32内部有独立看门狗和窗口看门狗独立看门狗用内部低速时钟即使主时钟挂了也能复位。窗口看门狗要求喂狗时间在特定窗口内太早太晚都复位适合检测程序跑飞。我一般用独立看门狗喂狗周期设1秒主循环里每500ms喂一次。如果程序卡死超过1秒看门狗复位系统重新初始化。防抖电路主要针对按键和红外触发。按键用RC滤波加软件消抖硬件上并联100nF电容软件上检测到电平变化后延时20ms再确认。红外触发用施密特触发器整形比如74HC14把缓慢变化的模拟信号变成干净的数字信号避免MCU反复中断。4.4 外壳防护与安装要点外壳用防水塑料盒IP65级别开孔处用防水接头或者硅胶密封。传感器外置用防水透气膜保护既能让空气进入又能防止雨水和灰尘。太阳能板朝南倾斜安装角度根据当地纬度调整一般比纬度大10度左右。锂电池放在阴凉处避免阳光直射高温会加速电池老化。线缆用RVVP屏蔽线屏蔽层单端接地减少干扰。线缆固定用扎带加线卡防止鸽子啄咬。所有接插件用航空插头或者防水端子普通杜邦线在潮湿环境下容易氧化接触不良。调试口用防水盖保护平时盖紧需要下载程序时再打开。提示鸽舍内不要用裸露的电路板鸽子好奇会啄而且羽毛和灰尘容易造成短路。我见过一个鸽友的板子被鸽子啄掉了一个电容导致整个系统瘫痪。后来他用亚克力板做了个罩子问题就解决了。5. 系统扩展与进阶玩法5.1 多鸽舍组网与集中管理单个鸽舍的系统跑通之后很自然就会想到多鸽舍组网。每个鸽舍一个STM32节点通过RS485或者CAN总线连到主控节点主控节点用ESP32或者树莓派做网关汇总所有鸽舍的数据上传云端。RS485适合星型或者总线型拓扑CAN适合总线型两者都支持多节点。RS485的节点数受收发器驱动能力限制一般32个以内CAN理论上可以挂110个节点实际受线缆和终端电阻影响几十个没问题。组网的关键是地址分配和冲突避免。每个节点有唯一地址主控轮询或者节点主动上报。轮询实时性好但效率低主动上报效率高但可能冲突。我的做法是混合模式正常数据节点主动上报报警事件立即上报并重发三次确保到达主控定期轮询确认节点在线。通信协议自定义帧头、地址、命令、数据、校验和简单可靠。5.2 数据记录与行为分析系统运行久了会积累大量数据温度、湿度、光照、投喂记录、报警事件这些数据存到SD卡或者上传云端数据库可以做长期趋势分析。比如分析温度变化和鸽子产蛋率的关系光照时长和换羽周期的关系投喂时间和归巢率的关系。这些分析结果反过来优化控制策略形成闭环。SD卡用SPI接口FATFS文件系统每分钟写一条记录按日期分文件。写卡时注意不要频繁开关文件打开一次持续写定期flush避免文件系统损坏。断电时最后几条数据可能丢失可以用铁电存储器或者带电池的SRAM做缓存来电后补写。5.3 低功耗设计与太阳能供电优化如果鸽舍没有市电全靠太阳能加锂电池低功耗就是核心指标。STM32F103运行模式电流大概30mA睡眠模式降到几mA待机模式只有几微安。策略是传感器采集和电机动作时全速运行空闲时进入睡眠定时器唤醒。无线模块不用时断电用MOS管控制电源。液晶屏背光自动调暗或者用反射式屏幕不用背光。太阳能板功率要留足余量计算每天耗电量除以当地有效日照小时数再乘1.5倍安全系数。比如系统平均功耗100mW每天耗电2.4Wh当地有效日照4小时太阳能板至少需要2.4/41.50.9W选1W到2W的板子。锂电池容量按连续阴雨天3到5天算2.4Wh512Wh3.7V锂电池需要3200mAh以上。这些计算看着简单但实际做的时候往往低估功耗导致连续阴天系统就挂了。5.4 机械结构设计与投喂机构优化投喂机构是机械部分的核心。我用的是螺旋绞龙加步进电机料斗里的饲料通过螺旋叶片推送到出口步进电机转一圈投喂固定量。螺旋的螺距和直径决定每圈投喂量步进电机的步距角决定精度。28BYJ-48步距角5.625度减速比1:64转一圈需要4096步每步投喂量很小适合精确控制。料斗要防潮防虫出口加挡板不投喂时关闭。步进电机加减速箱增加扭矩防止饲料卡住堵转。堵转检测通过电流采样实现电流超过阈值就反转几圈再正转尝试疏通。如果多次疏通失败报警通知人工处理。实操心得饲料颗粒大小要均匀粉末太多容易结块堵住绞龙。我一开始用便宜的综合饲料粉末多三天两头堵。后来换成颗粒均匀的专用鸽粮堵转问题基本消失。另外料斗不要装太满七八分满就行太满压力大绞龙负荷重。6. 设计手册编写与项目交付6.1 设计手册的内容框架设计手册是这套系统的重要交付物面向的是想复刻或者参考的人。内容应该包括项目概述、系统框图、原理图、PCB图、BOM清单、源代码、调试指南、常见问题、扩展建议。原理图要标注关键参数和选型理由PCB图要标注层叠结构和阻抗要求BOM清单要包含型号、封装、数量、替代型号。源代码要有注释关键算法要解释思路。调试指南按步骤来从电源测试到最小系统测试再到传感器测试、执行机构测试、联调每一步有预期结果和排查方法。常见问题整理成表格方便快速查阅。扩展建议给出方向比如加摄像头做行为识别、加称重传感器做饲料余量检测、加GPS做鸽子归巢轨迹记录。6.2 毕业设计答辩要点如果是做毕业设计答辩时老师通常会问为什么选这个方案、核心技术难点在哪、创新点是什么、测试数据如何、有没有实物演示。准备时要把这些问题的答案想清楚。方案选型要能说出对比和取舍技术难点要能讲出具体问题和解决过程创新点不一定要多高大上哪怕是把现有技术组合应用到新场景只要说清楚价值就行。测试数据要真实不要编。温度控制精度、投喂量误差、通信距离、待机时间这些数据实测出来是多少就写多少老师一眼就能看出真假。实物演示要提前调试好准备备用方案万一现场出问题能快速切换。答辩PPT简洁明了框图、流程图、实物照片、数据图表少用大段文字。6.3 成本控制与元器件替代整套系统的成本可以控制在200到500元之间取决于选型和采购渠道。STM32F103C8T6大概10元DHT22大概10元BH1750大概5元ILI9341屏幕大概30元步进电机加驱动大概15元ESP8266大概15元继电器和电源部分大概30元PCB打板50元外壳和线材50元锂电池和太阳能板100元。如果预算紧张可以用DHT11替代DHT22用光敏电阻替代BH1750用ESP01S替代ESP8266能省一半钱但精度和稳定性会打折扣。元器件替代要注意引脚兼容和电气参数匹配。比如AMS1117-3.3可以用LM1117-3.3替代引脚一样但压差和静态电流略有差异。STM32F103C8T6可以用GD32F103C8T6替代引脚兼容主频更高但某些外设行为有差异需要测试验证。替代之前查一下数据手册确认关键参数满足要求。7. 个人实操体会与后续迭代方向这套系统我从第一版面包板验证到最终实物成型前后折腾了差不多三个月中间踩的坑不计其数。最大的体会是电源设计比想象中重要得多。第一版用AMS1117直接从锂电池降压实验室里跑得好好的拿到鸽舍现场电机一启动就复位屏幕一闪一闪。后来换成Buck加LDO的两级方案问题才解决。所以如果你也要做实物电源部分千万别省该用Buck就用Buck该加滤波就加滤波。第二个体会是软件上要留足余量。主循环里不要写阻塞延时所有等待都用状态机实现。我一开始用HAL_Delay做延时结果按键响应迟钝屏幕刷新卡顿后来全部改成非阻塞流畅多了。中断里不要做耗时操作ADC采样、FFT计算这些放到主循环中断只做标志位设置。第三个体会是机械结构要反复打磨。投喂机构的螺旋绞龙我改了四版才做到不堵料、不撒料、投喂量稳定。第一版螺距太大投喂量不好控制第二版出口太小容易堵第三版电机扭矩不够卡住就烧驱动第四版加了减速箱和堵转检测才算稳定。机械这东西图纸上看着没问题实际装配起来各种干涉必须实物调试。后续迭代方向我打算加一个称重传感器实时监测料斗余量快没料了提前报警。再加一个摄像头模块用ESP32-CAM做图像采集简单识别鸽子数量和活动状态。云端那边做个微信小程序手机上随时看数据、发指令、收报警。如果时间允许还想试试用TinyML在STM32上跑轻量级神经网络识别鸽子的叫声类型区分求偶、报警、饥饿等不同状态那就更有意思了。最后分享一个小技巧调试阶段在代码里加一个串口命令行通过串口输入命令可以手动控制各个执行机构、读取传感器数据、修改参数阈值不用反复烧录程序。这个命令行用简单的字符串解析就行几十行代码但调试效率提升巨大。我后期基本靠这个命令行完成所有参数整定省了大量时间。