基于STM32开发的CO2浓度、温湿度、气压监测系统
写在开头项目开发过程项目要求项目方案MG812传感器监测CO2浓度RSCM1700传感器监测气压值AM1011A传感器监测温湿度原理图&PCB程序设计结束语写在开头
好久没有更新博客,前段时间生科院的师兄想让博主做一个监测放置植物的亚克力箱子的环境参数系统, 借此机会发篇博客,同时记录一下项目的开发过程。
项目开发过程
项目要求
要求在一个密闭的亚克力箱子里面监测记录CO2的浓度,温度、湿度和箱子气压,箱子内有植物,人为改变气压和CO2浓度值,需要记录48h内的相关参数变化,使用LCD屏显示实时监测环境参数值。
项目方案
主控芯片选用STM32F407,选用不同的传感器监测箱子内的参数变化,记录放在相应的数组,最后数据在debug模式下通过函数导出为txt文件处理。
MG812传感器监测CO2浓度
MG-812 是采用固体电解质池原理来检测 CO2 的半导体氧化物学传感器。当传感器保持在一定的工作温度,置于 CO2 气氛中时,电池正负极发生电极反应,传感器敏感电极和参考电极之间产生电动势,输出信号压与 CO2 浓度的对数成反比例线性关系,通过测试信号电压的变化可检到 CO2 浓度的变化。
模块只有4个接口,VCC接电源,GND,AO接MCU的ADC引脚,得到模块输出电压,再根据输出电压信号与CO2浓度线性关系来算出环境的CO2浓度。
有2个地方需要注意,首先,模块输出电压信号经过了8.5倍放大,输出电压的量程是0~5V,超过了ADC3.3V的测量范围,需要经过一个简单的线性转换电路后再接进ADC。模块的曲线斜率需要重新计算,将模块放在空气清新的环境通电48h后用万用表测量此时的输出信号,得到CO2浓度为400ppm(通常环境下的CO2浓度)下的电压值V,再与曲线上(lg1000,0.296)计算出模块真实曲线斜率。
RSCM1700传感器监测气压值
RSCM17100KP201 气压传感器模块集成了一个惠斯通电桥传感器与调理芯片,模块内含差分放大、自动校准、温度补偿等电路,可直接输出一个模拟电压,MCU 的 ADC 口读此电压后便可判断相应的压力值。
这个传感器的原理没有仔细钻研,总的来说就是给模块供电然后用MCU的ADC检测输出电压信号,再通过曲线计算得到环境气压值。由于实验预计箱子内气压在150kpa以下,就无须再接一个线性电压转换了。
AM1011A传感器监测温湿度
该款传感器可以同时检测环境温度和湿度,湿度的电压输出直接可以接进MCU的ADC,再通过线性关系反算出环境湿度值。模块内置了一个热敏电阻,需要同一个10K电阻串联,通过测量电阻上的电压值来得到热敏电阻值,再得到环境温度值。
原理图&PCB
按照前面的方案很容易就可以设计出原理图,
有2点提一下
1.正点原子STM32F4的核心板ADC直接用效果很差,实际电压与测量电压有固定的偏差值,主要是核心板ADC的参考电压不稳定,这里使用了REF23芯片作为基准电压3.3后,测量基本无偏差了。
2.线性电压转换可以通过调整R1.R2.R4.R5的值来变化,就是一个很简单的电路有兴趣可以动手算一下。
电源是买了一个交流转直流5V的插座直接供电, PCB只画2层板即可,尽量缩减尺寸来白嫖嘉立创10cm*10cm的月2次免费打板。。。
程序设计
程序也是按照前面方案设计也不复杂,开启ADC1的4个通道,将待检测电压值接进去,再根据不同曲线来反算出CO2浓度值、温湿度、气压值,在一个for循环里面使用delay函数保证30s测量一个周围环境值,这样只需要26012=1440个数的数组即可存储环境温度值。使用LCD屏幕显示测量值虽然有正点原子的例程,由于测量值里面有负值,4位数的值, 大家如果有兴趣可以看一下程序里面怎么操作的。
最后记录的值在debug模式下Function Editor一个小函数即可导出为txt文件供后续 处理,我会打包放在主函数里面,大家可以看一下 这种方法在MCU开发中很常用。
程序开源,代码注释的比较清楚,有基础的很容易看懂。
结束语
放一张实际测量系统图片吧
同样原理图、PCB以及程序全部开源,大家有需要自取
链接:/s/1Z4-KDNvhPx-OziX9HrpIFg
提取码:cane
大家有什么问题也可以评论私信,如果可以的话收藏点赞在、关注一下~