资讯动态

基于STM32的猪舍环境监测与控制系统设计与调试实战

发布时间:2026/10/22 19:24:37 来源:尧图企业网站定制
做毕业设计选题的时候我拿到“基于单片机的猪舍环境监测与控制系统设计”这个题目第一反应是“这能有什么技术含量”。传感器加单片机加继电器采集几个环境参数超过阈值就开风机听起来就是入门级组合。真正动手之后才发现这套系统最大的难点不在电路图而在“你服务的对象是一群不会说话、又对环境极其敏感的生物”。后来我调整思路把它当成一个完整工程项目来做而不是一个课程设计收获完全不一样。这篇文章就从需求、硬件选型、电路设计、软件逻辑、现场调试到复盘完整记录这个项目从零到能稳定运行的经历对准备做环境监测类毕业设计或者刚入门单片机的读者应该都有参考价值。1. 需求拆解猪舍环境到底难在哪值得用一套单片机系统去盯1.1 四个核心环境指标每一个都是“会呼吸的账”猪舍环境不是“热了就吹风”这么简单。温度方面猪只不同生长阶段的最适宜温度区间变化很大刚断奶的仔猪对低温非常敏感而中大猪又怕高温暴热。春秋两季尤其棘手白天夜间温差能到十几度没有自动控制设备的话养殖户经常要半夜爬起来去开关风机或者卷帘。湿度方面南方梅雨季和北方冬季封闭期舍内湿度很容易长期超过85%潮湿又会加剧氨气的溶解让整个环境问题放大。氨气主要来自粪便和尿液的分解长期浓度偏高会直接刺激猪只的呼吸系统还会影响采食量。二氧化碳则是动物呼吸和冬季加热设备燃烧产生的在通风不良的密闭舍内浓度会慢慢爬升它也是判断“该不该增加通风”的间接指标。这四个量相互牵连温度一高粪便发酵加快氨气就跟着上来湿度一大粉尘和氨气的危害也会加重。所以系统设计不能只围绕一个参数设阈值得把几个指标统一采集、统一判断、统一联动。1.2 为什么是单片机而不是PLC或者树莓派不少同学一上来就纠结平台选择。PLC确实抗造、稳定但成本高梯形图编程对没有接触过工控的人来说学习曲线不算友好毕设阶段也很难把控制逻辑展示得那么透明。树莓派这类开发板跑个Python写个网页后台确实很炫但功耗高、对环境要求高猪舍现场的供电稳定性、防尘防水条件都不理想还要考虑系统重启后能不能自动恢复。单片机在这类场景里恰好合适价格便宜几块钱到几十块钱外设接口丰富接传感器、继电器、显示屏都很直接程序全在自己手里逻辑一眼能看穿调试和论文撰写都方便。当然这不是说其他方案不行。有个师兄做过一个树莓派版本的猪舍监控拍摄效果不错摄像头图像上传做得挺好看但一台树莓派加摄像头的成本够买我这一整套系统了。在养殖现场设备一旦坏了维护的人很难有精力去处理复杂系统。单片机系统坏了一个传感器换一个继续跑成本很低这才是它在这个场景里真正的竞争力。1.3 系统功能边界监测、报警、联动、上报做完需求分析之后我给系统划定了明确的功能边界这也是避免“什么都想做最后什么都做不深”的关键一步。监测实时采集温湿度、氨气浓度、二氧化碳浓度并在本地显示屏上轮播显示。报警任一参数超过设定上限时触发声光报警器并把报警信息通过通信模块发送给手机端。联动根据温湿度与气体浓度自动控制风机、加热器、湿帘水泵等执行设备让环境始终保持在设定范围内。上报通过Wi-Fi模块与手机通信实现远程查看数据与手动控制。远程控制很容易变成一个大坑。如果要做云端平台、历史曲线、手机App工作量会成倍增加后期维护也复杂。所以我只保留了“串口透传手机端指令下发”这一层既满足功能展示又不把范围扩得太大。2. 硬件选型从传感器到执行器拒绝“堆料式”设计硬件选型最忌讳的是什么东西贵就上什么。毕业设计要有性价比逻辑要能扛得住现场环境还要让后期维护变得简单。我的整体思路是主控选熟悉且资源够用的传感器选精度能满足工程要求而不是数据好看的执行器选驱动电路成熟稳定的。2.1 主控STM32F103还是STC89C52经典51单片机STC89C52在不少课程设计里出现过接口简单资料多但做这个项目多少有点吃力。采集四路模拟量、控制多个继电器、还要挂显示模块和Wi-Fi模块51的IO口要来回复用定时器和中断资源也比较紧张。我最终选了STM32F103系列主频72MHz有3个USART、2个ADC、多个定时器做这种中小型环境监测系统绰绰有余。开发环境用标准外设库或者HAL库都行网上例程也多。这里不是看不起51而是强调“够用但别太憋屈”。同样的代码在51上可能需要频繁关中断去抢时间片在STM32上可以用定时器轻松解决。做毕业设计的时间本来就紧把精力花在与功能无关的底层优化上不太划算。2.2 温湿度传感器DHT11和DHT22怎么选温湿度采集我用过DHT11也用过DHT22。DHT11便宜、单总线协议简单精度是±2℃、±5%RH对猪舍这种环境来说完全够用。DHT22精度更高价格几乎翻倍但对于本课题来说没有本质提升。猪舍里面湿度常年偏大传感器长期工作在有水汽和粉尘的环境里真正影响精度的往往不是芯片本身而是探头保护罩的透气性。我最终选了DHT11同时在探头外面加了一个透气防尘帽让空气可以流通但又不会让水汽直接凝结在芯片表面。如果你的课题要求精度更高DHT22或者SHT30也是好选择但要注意SHT30是I2C接口驱动代码会稍微多一点。一个原则精度够用就行现场环境才是决定长期稳定性的关键。2.3 气体传感器氨气和二氧化碳的选型差异氨气检测我用的是MQ-137半导体式传感器它内部有一根加热丝和一个气敏层加热到一定温度后接触还原性气体时电导率变化通过分压电路转换成电压信号。这类传感器的优点是便宜、灵敏度高缺点也很明显需要预热、受温湿度影响、需要定期校准。MQ-135也可以测氨气但更偏向空气质量综合检测选择MQ-137在氨气上的针对性更强。二氧化碳传感器选择了NDIR非色散红外原理的模块输出串口或模拟信号。NDIR传感器测量精度高、寿命长但价格比半导体传感器贵不少。如果预算紧张也可以只测算一个经验值通过通风时长间接估算但效果远不如直接测量。折中方案是毕业设计阶段把二氧化碳作为重要监测量选用低成本NDIR模块现场只需保证通风联动有效率就行不需要追求实验室级精度。这里还要提醒一点气敏传感器的加热电流不小如果主控板的稳压芯片只有几十毫安余量传感器一上电系统就可能复位。设计电源的时候一定要给加热丝留够余量。2.4 执行设备与显示继电器、风机、加热器执行设备我选了四路继电器两路接风机一路接加热器一路接湿帘水泵外留一路备用。选继电器模块时留意两点一是要带光耦隔离避免电机启停时的高压反冲打到单片机二是触点电流要留余量风机启动电流通常是额定电流的几倍继电器标称电流最好比实际负载电流大两倍以上。显示部分用了LCD1602字符屏虽然过时但在这个场合非常合适阳光下可见性好代码简单不容易花屏。如果追求视觉效果可以换OLED但OLED在强光下的可视性反而不如带背光的字符屏。使用体验上的小结论现场设备不怕功能弱就怕不可靠。2.5 电源设计主控、传感器、执行器要分路供电整个系统的供电关系要理清楚。220V市电经12V开关电源转成12V给继电器和水泵控制回路供电12V再经稳压芯片降到5V给单片机和显示模块供电二氧化碳传感器需要3.3V的话再用一颗AMS1117从5V降压。最好做两级稳压不要把12V直接降到3.3V压差大容易发热稳定性也差。继电器、风机、水泵这些大功率设备的电源最好不要和单片机共用地线直接耦合至少要共地但分开走线避免启动瞬间的大电流把单片机电源拉低。这一点在原理图阶段就要提前规划后面焊接调试能少很多麻烦。3. 电路设计与PCB排坑画图一时爽焊接火葬场很多初学者拿到原理图库就开始连导线连完就觉得万事大吉。实际上电路设计阶段的每一个细节都会在实物调试的时候加倍找回来。我这里说几个最容易翻车的点。3.1 单片机最小系统和信号输入电路STM32的最小系统常用8MHz晶振加两个20pF左右负载电容复位脚接10kΩ上拉电阻到3.3V这个基本配置别省。下载调试接口留一个SWD的四针排针比每次都用串口下载方便得多。ADC采集电路上每路模拟信号进来之后串一颗100Ω电阻再接一颗100nF电容到地做简单的RC滤波可以显著减少传感器输出信号上的高频干扰。别小看这两个元件气体传感器输出阻抗高线稍微长一点就容易耦合噪声滤波电容是最便宜也最有效的抗干扰手段。DHT11的数据线需要外接上拉电阻典型值4.7kΩ到5V或3.3V线长的情况下上拉可以取小一点比如2.2kΩ。如果没有上拉或者上拉阻值太大单总线在长线传输时很容易出现读数为0或通信超时。3.2 继电器驱动电路的设计要点继电器模块如果自己画原理图核心就是三极管开关电路加续流二极管。单片机IO口驱动能力有限不能直接驱动继电器线圈中间要加一颗NPN三极管或者MOS管。感性负载断电瞬间会产生反向电动势线圈两端必须反向并联一颗续流二极管否则可能在IO口上打出很高的尖峰电压轻则复位重则烧芯片。很多成品继电器模块已经集成这些电路买回来直接接就能用但你要知道它为什么能这样用答辩的时候老师一定会问。另一个容易忽略的问题是继电器动作瞬间产生的电磁干扰。现场使用的时候继电器和单片机之间要保持至少几厘米的距离走线不要平行靠近。条件允许就把继电器集成到一个独立小板上和主控板分开用一个排线连接这样干扰会小很多。3.3 PCB布局与焊接调试的经验PCB布局我的经验是“强电弱电分区、模拟数字分离”。继电器、接线端子放在板子一侧单片机、传感器接口放在另一侧。模拟信号线尽量短不要贴着继电器驱动线走。电源线按载流能力加宽12V和GND的走线能铺铜就铺铜。板子做好之后先不焊单片机先把电源部分焊好通电确认电压正常再焊传感器电路和驱动电路最后焊主控。这种分层焊接的方法可以把问题限制在小范围内排查不会出现一上电冒烟都不知道哪里的问题。实物焊接阶段常见的坑我也列一下电解电容极性接反通电瞬间炸裂。7805或AMS1117散热不足负载一大就过热保护。接线端子没锁紧现场震动导致接触不良。传感器接口方向插反模拟量直接被拉到地。这些坑单看都不大但在现场一个个试错很耗时间所以焊接之前一定要对着原理图多核对两遍尤其是电源部分。4. 软件逻辑时间片轮询、滤波与温湿度控制策略硬件搭好之后软件决定了系统好不好用。我把程序分成几个层次采集层、滤波层、控制层、显示与通信层。每一层各司其职出现问题也好定位。4.1 主程序结构定时采集不阻塞程序的核心是一个超循环加定时中断。定时器每隔500毫秒触发一次中断在中断里置一个采集标志位主循环检测到标志位之后再去读取传感器。这样做的好处是单片机不用一直等待慢速传感器响应主循环还能同时处理按键、显示刷新和通信。DHT11这类单总线传感器一次通信要花几十毫秒如果直接在中断里读取会让系统卡顿所以把它放在主循环里处理。uint8_t sample_flag 0; void TIM2_IRQHandler(void) { if (TIM_GetITStatus(TIM2, TIM_IT_Update)) { TIM_ClearITPendingBit(TIM2, TIM_IT_Update); sample_flag 1; } } int main(void) { while (1) { if (sample_flag) { sample_flag 0; read_sensors(); // 读取温湿度与气体传感器 data_filter(); // 滤波处理 control_logic(); // 阈值与控制 display_update(); // 刷新显示 send_uart_data(); // 串口上报 } } }4.2 数据滤波不要直接用ADC的裸读数初版程序里气体浓度跳变得特别厉害风扇一启动氨气读数就能上下跳几十个单位。原因是传感器本身有波动供电电压也受风机启动影响。解决方案很简单连续采集十次去掉最大值和最小值再取平均。这在中位值平均滤波对消除脉冲干扰很有效实现成本也低。还要做一次限幅滤波防止单次采集突变太大导致误动作。比如氨气浓度相邻两次采样变化超过50ppm就认为本次数据无效沿用上次值。这种方式工业上叫“变化率限幅”在很多环境监测设备里都有用。4.3 温度控制策略死区控制比精确PV值更重要温度控制我一开始写成简单的绝对值判断温度高于25℃就开风机低于25℃就关风机。结果风机在25℃附近频繁启停继电器咔咔响现场人员看着都心疼。后来改成带回差的逻辑温度超过上限27℃时启动风机或湿帘温度回落到26℃以下时才关闭风机加热器的控制同理低于18℃启动加热升到20℃停止。这个“先启动后停止”的差值就是回差也叫滞回区间。别小看这个逻辑它能避免执行机构频繁动作延长继电器和风机寿命。答辩时老师问“为什么不用PID”我解释清楚死区控制的必要性和风机这类设备的特点就够了。如果要更精细地控制加热功率可以用位置式PID输出PWM驱动固态继电器但这属于进阶优化不是本系统的必选项。有条件的同学可以顺手把采样数据写进SD卡存储这样能做一条温度变化曲线也能作为系统效果的证明材料。只需要在软件里加一个文件系统模块定期把数据追加到一个CSV文件里成本不高但展示效果很好。4.4 报警联动与远程通信逻辑报警逻辑我用了一个状态判断温湿度或气体浓度超过一级阈值时启动相应执行设备并发送一条报警数据到手机超过二级阈值时打开声光报警器并且每五分钟重复报警直至复位。这里要区分“联动”和“报警”联动是自动调节环境报警是提醒人员介入两者要分开处理不能混在一个判断分支里。远程通信我用了一个ESP8266串口Wi-Fi模块工作在透明传输模式。单片机通过串口把数据帧发给ESP8266ESP8266再把它发送到手机端手机端下发控制指令时反向传输到单片机。协议帧就设计成固定格式帧头、设备编号、数据长度、负载数据、校验字节。字段虽然简单但加上校验之后基本不会出现乱码和误操作。注意公共MQTT服务器和免费物联网平台虽然可以用但毕业设计阶段容易因为服务器变动导致演示翻车本地局域网透传是更稳的方案。5. 现场标定与部署你的设备正在“恶劣工况”里讨生活实验室环境干净、温湿度稳定传感器数据漂漂亮亮。一拿到猪舍现场环境就完全不同了粉尘附着、水汽凝结、电源电压波动每一个都直接影响传感器数据质量。这个章节想说的是设备能不能长期稳定运行关键在安装位置和标定流程而不是代码写得有多精妙。5.1 传感器的安装高度与位置传感器不能直接挂在墙根也不能放在风机直吹的风道上。比较合理的位置是猪舍中部偏通风侧的围栏上距地面1.2米到1.5米这个高度接近猪只颈部的呼吸带又不会被猪直接蹭到。氨气比空气轻容易积聚在舍内上部所以探头要略高于猪背但也不能贴到屋顶。实际安装时还要避开粪沟正上方那个位置的氨气浓度没有代表性会让系统误判整个猪舍的环境质量。传感器外壳要朝下安装或者加上防滴水的挡板避免冲洗猪舍时水流直接浇到传感器上。很多传感器标称防尘防水等级不错但长期被水泡之后数据一样会漂移。现场用了一两个月之后建议拆开外壳清理一下探头表面的灰尘和油膜这比反复校准更管用。5.2 校准流程一次完整的标定应该怎么做传感器出厂值只能保证趋势正确不能保证绝对准确。我在项目里做了三步校准第一零点校准。把氨气传感器放在通风良好的清洁环境中通电预热24小时以上记录稳定后的ADC值作为零点。第二步用标准浓度的氨气气体来校准没有条件的话可以用一台经过鉴定的气体检测仪放在旁边对比。第三温湿度传感器用标准温湿度计在同一个位置同时读数记录差值作为软件修正偏移量。校准要定期重复至少每月一次。气敏传感器的敏感材料会逐渐老化零点会漂移这是正常现象。软件里可以预留两个全局变量偏移量和增益值校准的时候直接修改这两个值不用改代码重新烧录。这个设计在现场维护时非常实用专门在串口调试指令里加了一条校准命令。5.3 现场供电与防雷防浪涌的底线措施养殖现场的市电质量谈不上好附近有大功率电机启停时电压波动很明显。我在电源入口加了压敏电阻和自恢复保险丝压敏电阻可以吸收浪涌电压自恢复保险丝能在短路时自动断开。成本不高但能挡住大部分意外情况。所有室外走线都套上波纹管接头处用密封胶固定这就是现场最实际的防水方案。冬天系统还会遇到低温启动的问题。传感器电源在环境温度很低时部分稳压芯片的输出会有偏差建议设备箱放在靠里的位置给传感器单独加一个小的加热电阻维持芯片工作温度。这些细节在现场都会变成真实故障排在预防阶段总比现场守着抢修舒服。6. 调试实录三个典型故障的排查过程这一节挑三个我调试中印象最深的故障写每一个都花了不少时间才定位到根因排查思路本身就很值得分享。6.1 故障一风机一启动氨气读数“飞天”现象是风机正常运行后LCD上氨气浓度突然飙升到报警值风扇停一会儿又回落。第一反应以为是传感器坏了换了新传感器还是同样问题。后来用示波器测传感器供电发现风机启动瞬间5V电源上出现了一个大毛刺直接把传感器输出信号抬高了。根因就是风机和传感器共用电源大电流启动导致电压跌落和干扰。解决方法是三条路一起走传感器供电改用独立稳压芯片单独供电软件上加强滤波对气体数据做滑动平均继电器控制线远离模拟信号线。改完之后即使风机频繁启停氨气读数也只是在小范围内波动不会再误报。这个案例特别典型也特别适合写进论文的“系统调试”章节。6.2 故障二继电器频繁吸合现场像在打点报时有一次在现场调试温度控制逻辑室外温度正好在临界点附近继电器每隔十几秒就吸合一次现场声音非常密集风机还没转起来又被关掉。从现象看这是典型的控制逻辑缺失回差而不是硬件问题。加上3℃回差后动作间隔从十几秒拉长到了十几分钟整个系统忽然就“安静”了。处理完这个问题我意识到写环境控制程序的第一原则不是“控制得多准”而是“不要乱动”。执行机构是有机械寿命的频繁动作本身就是一种损耗回差设计是成本最低的保护手段。6.3 故障三继电器吸合的瞬间单片机死机重启设备装箱后第一次通电一按继电器按钮整个单片机就重启。排查过程很典型先用万用表测电源没发现明显短路再用示波器抓继电器动作点的电压波形看到3.3V电源上出现大幅跌落最后发现继电器模块和单片机共用了一根很细的电源线继电器线圈一吸合电流突然增大电源线压降过大导致单片机供电不足。解决方法是给继电器单独拉一路粗导线或独立电源并在继电器供电端并联一个大容量的电解电容起缓冲作用。这也印证了前面强调的电源分路原则。提醒一句集成排线供电虽然方便但不要把大电流器件和主控板放在同一条细排线上这是很多新手踩的坑。7. 系统复盘落地效果、局限与后续扩展整套系统从画原理图到现场稳定运行前后差不多花了两个多月。中间经历了无数次改版、烧录、调试、返工最后看到它在猪舍里连续跑了一个星期不需要人工干预的时候还是挺有成就感的。7.1 实际使用效果装到现场之后最直观的变化是养殖户不用半夜去查看温度了。系统自动控制风机和加热器白天晚上温差再大舍内也能维持在设定范围内。原来的手动通风完全凭经验经常出现傍晚忘了关风机导致夜间温度过低的情况。有了自动控制之后这种现象基本消失。氨气浓度的变送联动也让冬季密闭舍内的空气质量有了保障通风不再是“有没有做”而是“做得到不到位”。7.2 不足与局限这套系统也不是没有缺点。传感器寿命受现场环境影响很大尤其是气体传感器连续工作几个月后需要重新校准。系统的阈值都是手动设置的不能根据猪只生长阶段自动调整后期需要人工修改参数。还有本地报警只能覆盖舍内如果养殖户不在现场只能靠手机端查看没有短信或者电话提醒。这些局限在论文的“不足与改进”部分也如实写了。7.3 给后续做类似题目的人几个建议第一先把传感器数据采出来能稳定在LCD上显示了再做控制逻辑。第二控制逻辑一定要有回差没有回差的系统到现场一定会出问题。第三别迷信“大而全”把监测、显示、联动、报警这四件事做扎实已经是一个很完整的系统工程课题。如果还有时间去扩展可以考虑把多个猪舍做成一个RS485总线网络集中到一个上位机界面里管理相当于小规模物联网。再往后可以加一个太阳能供电系统解决偏远猪场的用电不稳定问题。这些方向任何一个拿来做深入课题都足够比我当初想象的“传感器加单片机入门组合”要丰富得多。最后分享一个小感受养猪场里的设备和实验室设备最大的区别是它得接受粉尘、水汽、电压波动和长期不关机。做完这个项目我对“可靠”这两个字的理解比课本上深得多。如果你想在环境监测这个方向写点东西比起追求花哨的界面不如多花点时间在电源设计和现场稳定性上这才是整个系统能不能用的分水岭。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑