这几年接到的毕设咨询里STM32智能空气处理系统一直是个热门选题。很多同学一开始觉得这就是传感器读个数 继电器开风扇结果越做越发现里面的坑不少传感器数据飘得没法看、自动控制逻辑太粗糙被老师追问、OLED显示和按键联调半天不出活。这篇文章就围绕这个题目把立项思路、器件选型、电路搭建、代码逻辑到调试方法完整过一遍重点讲清楚每一步为什么这样做而不是只给一个能跑通的Demo。官方的标题是基于单片机stm32智能空气处理毕业设计也就是用一个STM32主控去采集空气质量的几个关键参数然后根据这些数据自动控制空气净化设备比如风扇、负离子发生器、加湿器之类的。适合电子信息、自动化、物联网工程专业的同学参考也适合想把手头空气质量监测设备升级成会自己干活的嵌入式爱好者。整套方案做完你手里会有一个具备实时显示、自动联动、还能扩展联网报警的原型系统无论是应付毕业设计答辩还是后续往比赛作品方向改造都有充分的发挥空间。1. 立项阶段的需求拆解这个题目真正要解决的是什么很多同学拿到题目就直接找开发板其实第一步应该把智能空气处理这六个字拆开。本科毕设的评分核心不是功能有多炫而是逻辑链是否完整感知层解决了什么问题、决策层依据什么规则、执行层如何响应、整体系统的可靠性如何保证。当前的空净产品从几百块的桌面净化器到上万的中央新风系统底层逻辑都一样监测、比较、执行。毕设要做的就是把这条链用单片机复现出来并给出合理的工程解释。1.1 核心痛点从显示空气质量到自动处理空气的跨越市面上大部分DIY空气站只能做检测和显示比如测个PM2.5、温湿度屏幕上跳个数字就完了。而智能空气处理强调的是闭环控制当PM2.5读数超过阈值系统自动加大风扇转速当VOC浓度偏高自动启动负离子模块当温湿度触发舒适区边界自动启停加湿器或排风。这就不只是一个采集程序的问题还涉及多个执行设备的协同调度。我接触过一位同学的初版方案他把所有设备做成手动开关答辩时被评委问了一句智能在哪里场面一度很尴尬。后来改成自动联动才把评分拉回来。这说明毕设选题的关键不是名字好听而是你要把智能落在可演示、可量化的控制策略上。这篇方案我建议至少保留三种自动模式手动模式、阈值模式、定时模式既能体现设计的完整度又方便答辩现场演示。1.2 功能需求与性能指标怎么定才不会被问倒需求不能拍脑袋要对应到具体指标这样答辩和论文都有数据支撑。我习惯把性能指标分成三类第一类是采集精度。PM2.5传感器比如夏普GP2Y1010AU0F输出电压和粉尘浓度成线性关系标称精度大约正负10%这就够了。但如果你的论文写精度正负0.1%那评委就会追问你用什么仪器标定的很容易露馅。合理的做法是写在实验室环境下与参照仪表对比偏差范围在可接受区间内。第二类是响应速度。空气净化系统不需要毫秒级响应但也不能人在屋里待了五分钟风扇才转。以我个人的经验采样周期设在2到5秒控制周期设在5到10秒是比较合理的配置。既避免频繁动作导致继电器或可控硅过热又能保证用户体验。第三类是系统连续运行稳定性。毕设答辩通常是现场通电演示如果能做到连续运行4小时不死机、数据不漂移基本就能说明问题了。这个指标最好是提前两天做老化测试不要等到答辩前一天才匆匆烧录程序。2. 硬件方案选型与电路设计要点硬件选型是整个项目的地基。芯片选太冷门的资料少自己啃手册浪费时间传感器选太贵的预算超了不说调试难度也大。以STM32为主控下面这套选型组合是我反复验证过、性价比和难度都比较平衡的版本。2.1 STM32型号与最小系统设计为什么选F103系列单片机方面首选STM32F103C8T6Cortex-M3内核主频72MHzFlash 64KBRAM 20KB。可能有人觉得它老但毕设场景下这个型号的资源信息全网最多、库函数和HAL库代码随手就能找到踩坑成本极低。你需要的外设资源ADC至少两路PM2.5模拟输出、MQ系列传感器模拟输出、I2COLED和SGP30、USARTESP8266或蓝牙模块、定时器PWM风扇、GPIO继电器、按键、LED。F103C8T6这些全都覆盖64KB Flash写一个完整工程也够用。如果一个项目非要用F407甚至H7我不拦着但你得想清楚多出来的性能用在了哪里。如果只是因为看起来高级答辩老师往往下一个问题就是那为什么不用STM32G030成本和功耗还更低。回答不上来反而扣分。反之如果你说课程和开源资料以F1为主便于快速验证算法这个理由就很扎实。最小系统部分注意三点一是BOOT0引脚需要接10K下拉电阻到地确保从Flash启动二是复位电路用经典的10K电阻加100nF电容即可稳定可靠三是电源端每个VDD引脚旁放一个100nF去耦电容靠近引脚放置避免ADC读数受电源噪声干扰。很多同学画板子时没注意去耦电容的位置导致PM2.5传感器读数波动极大后面查了半天才发现是电源纹波问题。2.2 空气质量与温湿度传感器选型对比这部分是整个项目的眼睛选型时不光看能测什么更要看信号怎么接入单片机。我把常用的几个品类整理成了一张表方便对照传感器型号测量对象输出信号STM32接口典型成本实测注意事项夏普GP2Y1010AU0FPM2.5粉尘模拟电压约0.5-3.5VADC约25元需要脉冲式驱动不能用直流供电攀藤PMS5003PM2.5/PM10串口数字帧USART约70元数据帧校验解析略繁琐SGP30TVOC、CO2等效值I2C数字信号I2C约40元标定需要48小时连续运行DHT22温度、湿度单总线数字信号GPIO任意引脚约12元读取间隔需大于2秒CCS811TVOC、CO2eI2C数字信号I2C约35元需要外部温度补偿如果你只想用最低成本把系统搭通我推荐GP2Y1010加上DHT22一个模拟一个单总线F103C8T6的ADC和GPIO都能直接处理代码量也不大。需要注意GP2Y1010的驱动脉冲时序要求比较严格需要单片机每0.28ms输出一个脉冲宽度0.32ms的高电平在脉冲启动后0.28ms处采样电压。直接用直流供电测静态电压是不对的测出来数值完全不可用。在这里可以用定时器加中断实现不能简单delay否则采样点对不上。如果预算宽松一点PM2.5改用攀藤PMS5003串口数据精度和一致性明显更好VOC用SGP30带I2C接口也不用自己做ADC基准。唯一问题是SGP30首次上电需要48小时驯化才能得到稳定绝对数值毕设时间紧张的话可以在论文里说明本设计采用相对变化趋势作为控制依据回避绝对精确性问题。2.3 执行机构与显示方案风扇、继电器、OLED怎么选空气处理系统的执行机构最常用的是风扇、负离子发生器、加湿器、加热器等。毕设场景我不建议直接驱动大功率设备220V的电器是需要隔离设计的处理不好有安全隐患。更稳妥的做法是用5V或12V的小型涡轮风扇和低功率负离子模块通过继电器或MOS管控制。继电器模块我建议用光耦隔离型的低电平触发机械触点额定电流可以做到10A以上。这里要给一个很重要的提醒继电器是机械结构线圈吸合时会有几十毫秒的延迟而且持续通断会有寿命问题。所以在控制策略里要设定一个滞回区间不要让继电器在阈值附近反复倒腾。比如阈值设定在75滞回区间就设为70到80浓度升到80才开风扇降到70才关风扇。中间过程什么都不做这一个小细节能极大提升系统稳定性和触点寿命也是答辩时一个很好的加分点。显示方面0.96寸的SSD1306 OLED屏最合适I2C接口只需要两行信号线配上U8g2或自写的驱动库都能用。我看到不少同学用LCD1602也行但四线驱动和背光控制线加起来很多占用IO口不说外观也廉价一些。OLED分辨率128乘64一屏能放下PM2.5、温度、湿度、风扇状态、系统模式五个信息信息密度足。如果OLED不够展示还可以串一个蓝牙模块把数据发到手机终端上位机这部分属于扩展项后面我单独讲。3. 空气处理系统的核心逻辑与软件架构硬件搭起来只是骨架软件才是这个项目的灵魂。很多同学代码写着写着就变成了一个main函数搞定一切不仅乱而且出了问题特别难排查。这里先讲清楚整体架构再分模块说关键实现。3.1 两层架构传感器轮询与业务控制分离我的建议是把软件拆成两层。底层是数据采集层每个传感器有一个读取函数返回经过滤波后的物理量上层是业务决策层根据物理量判断当前需要执行什么动作。底层的延时不能阻塞上层的控制循环所以系统采用定时轮询 标志位的方式主循环跑得很快SysTick定时器每100ms置一个采样标志位主循环看到标志位就做一次数据刷新每500ms再刷新一次控制判断。这样做的好处是传感器读数的频率、控制的频率、显示刷新的频率三者互不干扰。如果你在读取DHT22时用了1秒的delay那么OLED刷新和按键扫描全都卡住按键按一下要过一秒才有反应体验非常差。把延时从delay改成定时器轮询之后整个系统流畅度会上一个大台阶。另外采样数据一定要做平滑滤波。GP2Y1010这类粉尘传感器的输出受气流扰动影响极大单次读数可以跳到二三倍。最简单的做法是滑动平均滤波维护一个长度为10的环形缓冲区每次采样后计算平均值。我试过效果非常明显单次读数毛刺基本被抹平控制动作也不再乱跳。如果你有余力再叠加一个低通滤波的一阶惯性算法就更稳了。3.2 阈值判断、滞回控制与定时模式的设计细节控制策略是整个答辩最容易出彩的部分也是我建议重点投入的地方。阈值模式听起来简单——超过阈值就开机——但实际工程里必须考虑噪声和频繁切换两个问题。先说噪声。传感器数据即使经过滤波也仍然会有波动如果浓度在74和76之间来回波动而阈值正好是75继电器就会在十几秒内反复吸合释放。解决办法是前面提到的滞回控制也就是开启阈值和关闭阈值设成两个不同的值。通常开启阈值要高于关闭阈值形成一个不动作的中间地带。比如PM2.5大于100开启一级净化小于80关停TVOC等效浓度大于1.0mg/m3开启负离子模块小于0.8mg/m3关闭。要是有多个档位可以设置多级阈值形成低转速、中转速、高转速的阶梯式控制。再说定时模式。这个反而是很多同学忽略的。你想想一个空气处理系统只有自动判断是不够的用户可能希望在某个时间段强制开启换气。实现方式也很简单在结构体里记录两个时间点开始时间和结束时间主循环里读取当前时间做区间判断。可以预先设置好三个时间段比如7点到9点晨间换气12点到14点午间通风20点到22点夜间净化。这样系统就有了更强的可用性也体现了你作为一个设计者对实际应用场景的思考。最后补充一个细化点模式优先级。加湿器、风扇、负离子这些设备同时在跑如果只有一组继电器控制那逻辑很简单一个GPIO高低电平搞定。但如果是有风扇调速情况就复杂一些。我建议把控制逻辑设计成一个有限状态机每个状态对应一组设备动作组合状态切换只发生在主循环里避免不同设备之间的逻辑竞争。3.3 数据可视化与人机交互OLED菜单和按键状态机OLED显示的内容我建议分三屏第一屏显示实时数据PM2.5、VOC、温度、湿度第二屏显示设备状态风扇转速档位、负离子开关、当前运行模式第三屏显示系统信息运行时长、累计净化次数、最近一次动作原因。通过按键切换屏幕长按进入参数设置界面调节阈值。这个交互逻辑虽然不复杂但实现起来需要一个菜单框架。菜单框架最好的实现方式就是按键状态机。我用一个枚举变量记录当前菜单层级MAIN_MENU、DATA_SCREEN、DEVICE_SCREEN、SETTING_THRESHOLD。每次按键产生一个事件通过switch语句在状态之间跳转。要注意的是按键必须做消抖。硬件上如果用了机械按键软件消抖不能少。我推荐定时器扫描消抖法每10ms扫描一次按键状态连续3次相同才认为按键有效。这种方法比delay消抖更合理因为它不会阻塞系统。发光二极管状态指示灯也不要忽略有同学把所有反馈全放到OLED上OLED一熄灭就无从判断系统状态。我习惯用一个双色LED绿色代表自动模式运行中红色代表手动模式或报警状态。成本几毛钱但演示现场的直观性提升不少评委一眼就能看到系统当前状态。4. 调试实战那些硬件设计和代码逻辑上的大坑这个项目最大的特点就是看起来简单调试起来全是意外。下面是几条我实打实踩过、也在帮同学排查时反复见过的坑每条都直接对应一个具体的排查思路建议耐心看完。4.1 GP2Y1010传感器读数失控问题从硬件到时序的逐级排查有一次调试一个同学的项目OLED上PM2.5数值要么是0要么是4095满量程完全没法用。第一反应是ADC通道配置错了结果查了代码没问题接线也没问题。后来用示波器去抓传感器输出引脚才发现电压波形根本不是期望的脉冲响应状态而是一直处于某一个固定电平。这就是典型的GP2Y1010驱动时序问题。这个传感器的原理是内部有个红外LED需要周期性点亮然后光电二极管检测散射光强度。如果LED不是按特定脉冲驱动而是直接给电采到的信号完全乱掉。解决方法是严格按照数据手册的时序来驱动先设置一个2kHz左右的PWM脉宽大约0.32ms然后在PWM启动后0.28ms的位置读取ADC。这个采样点正好是LED点亮到达稳定、信号幅值最大的位置。我用定时器通道输出PWM同时把ADC采样触发配置成定时器事件联动这样采样点不需要在软件里卡延时误差也小很多。第二个容易被忽略的问题是这个传感器的模拟输出带一个比较大的偏置电压需要配合负载电阻和后级RC滤波才能接入ADC。有些淘宝散件板子上已经把RC做进去了但有些简易模块没有。如果直接接ADC读到的数字会整体偏高而且波动大。我的做法是加一个10k电阻到地、一个1uF电容并联滤波人为构成一个低通滤波器再进ADC通道。效果立竿见影。4.2 DHT22温湿度读取为什么会随机失败DHT22或DHT11的单总线协议是用时间长短编码0和1的。主机先拉低总线至少18ms再释放传感器应答后连续输出40bit数据。这个协议最坑的地方在于它对时序误差极其敏感而且传感器本体是慢速器件读完一次需要间隔至少1到2秒否则返回的数据校验会一直失败。我在调试中总结了一套可靠方案读取函数用定时器捕获方式而不是用delay的忙等方式。开一个15us级别的定时中断在中断里记录引脚电平跳变的时间戳然后根据高电平持续时间判断逻辑0还是逻辑1。这样做虽然代码量多了一些但抗干扰能力和成功率远超delay方案。如果你不熟悉定时器输入捕获也可以退一步用delay方案但务必在读取失败时做连续重试3次的逻辑不是直接抛弃本次数据而是等待下一次采样周期再读。还有一个特别隐蔽的坑DHT22的数据线如果和风扇PWM线走在同一个排线里风扇转动时电磁干扰会耦合到数据线上导致偶尔读到错误值。我后来把传感器信号线换成双绞线并远离功率线再把DHT22的上拉电阻从10K调整到4.7K问题就基本消失了。如果你在电机旁边放传感器这个经验直接可用。4.3 继电器频繁吸合的隐患和软件的最后一道防线前面已经提过滞回控制但这里还必须说一个软件最后防线的思路即使逻辑上有了滞回也要在程序里额外加一个最小动作间隔保护。比如定义一个上次继电器动作时间戳每次控制动作前判断距离上次动作不足10秒就跳过本次切换。这听起来是程序上的小手段实则是防止硬件提前报废的生命线。机械继电器的触点寿命通常在十万次级别看上去很多但如果你控制间隔是1秒几小时就能跑完一大半寿命。毕设演示当天如果继电器触点打火粘死那真是欲哭无泪。我在指导同学时都要求任何执行机构的IO控制代码里必须有一道最小间隔 滞回比较的双重保险。另一种更彻底的方案是用固态继电器或者直接用MOS管做PWM调速彻底消除机械触点问题但成本稍高一些。如果做风扇控制我建议直接上MOS管调速连续无级调风体验比继电器开关好太多。5. 系统扩展思路与答辩准备让作品从功能演示变成设计成果如果前面几部分都做到了你的系统已经是一个能稳定跑的闭环空气处理装置。但这还不算完毕设评审时评委往往更关心你在这个作品里体现出的设计能力和理解深度。扩展思路这块我要单独说。5.1 低成本接入云端的三种方案对比空气处理系统的数据如果能远程查看作品的档次立马上一个台阶。很多同学一上来就想着用4G模块那是又贵又复杂的方案。实际上在这个量级的数据传输上完全没必要。第一种方案是蓝牙BLE模块比如HC-05或JDY-31通过串口和STM32连接手机APP直接收发数据。优点是成本不到10元配置简单代码量也少缺点是通信距离短一般10米左右只能在实验室里演示。第二种方案是ESP8266 Wi-Fi模块通过AT指令或者直接刷入自定义固件连接无线路由器再通过MQTT协议往云端服务器上报。这里特别提醒ESP8266的AT固件串口波特率默认是115200和STM32的串口波特率要对上。另外它的供电最好单独用AMS1117等LDO稳压不能直接从单片机3.3V引脚取电否则启动时电流不够会导致模块反复重启。这套方案需要你接触简单的网络概念但做出来以后去演示时用手机就能看到实时曲线答辩效果非常加分。第三种方案是LoRa或NB-IoT成本高、组网复杂通常不适合本科毕设。如果你非要体现长距离通信那就选LoRa点对点或者用Wi-Fi方案说明室内远程监控即可。做毕设讲究的是投入产出比把时间花在能出效果的地方而不是一味追求技术复杂。5.2 答辩现场最容易被追问的三个问题与组织回答的思路答辩环节评委最常见的问题集中在下面三个系统抗干扰能力如何保证、控制策略为什么要这样设计、数据准确性如何验证。抗干扰问题可以从硬件和软件两个层面回答。硬件上传感器单独供电、模拟地和数字地单点连接、信号线远离功率线、增加去耦电容。软件上滑动滤波加一阶惯性滤波关键输入校验重试。这个回答思路既有层次又有数据支撑。控制策略问题可以重点讲滞回区间和最小动作间隔两个设计用实际测试数据说明衰减了多少次无效切换。这里建议你在论文里附上一张继电器动作次数对比表不加滞回时一小时动作约240次改进后约30次。这个数据一拿出来评委基本就不再纠缠了。数据准确性问题不要试图辩解很精确而要说设计了校准流程。比如用标准粉尘仪并排放置在同一环境采集10组数据做线性修正系数或者用干净的保鲜膜包裹传感器进气口测得接近0的基线值再在密闭箱内测试出响应速度。这些实测记录都是论文里最真实的实验素材。5.3 后续可以继续深挖的方向从毕设到竞赛作品或产品雏形做完整套系统之后你会发现它不是一个终点而是可以长线优化的起点。如果后面要参加电子设计竞赛可以在现有基础上加入以下功能一是多传感器融合用SGP30、PMS5003和温湿度联合判断形成综合空气质量指数二是加入执行机构的PID闭环调速根据污染浓度实时调节风量而不是简单的档位切换三是把数据存储到SD卡或者云端形成全天空气质量报表实现真正意义的空气管家。就算不参赛这套东西也可以直接改造成小型桌面净化器的控制板。我在实际使用中觉得最有成就感的部分就是下班前用手机看一眼办公室空气数据预先把风扇打开回家时空气已经是清爽的状态。这种感觉让做了一堆代码瞬间变成做了一件有用的东西。最后再分享一个小技巧无论毕设还是比赛都要养成记录调试日志的习惯。每改一次参数记下改了哪里、效果如何、有没有引入新问题。这个习惯可能短期看不出价值但等到写论文或者答辩前整理实验数据时你会发现这些日志就是最宝贵的第一手素材。我的这套空气处理系统从立项到调试完成前前后后用了大约三周其中硬件搭起来只花了两天剩下的时间几乎全花在传感器数据稳定性和控制策略调优上。这个比例本身就说明了很多问题开发板容易点亮真正的功力在于把每个环节做成可靠、可用、可解释的工程实践。
阅读完成 · 觉得有帮助?