1.任务目标:检测烟雾浓度,达到一定浓度后响起警报并打开风扇。可以控制临界值的大小,并在lcd1602上显示临界值和当前烟雾值。
2.所需模块:lcd1602,继电器(模拟风扇),蜂鸣器,烟雾模块MQ-2,STM32板,两根杜邦线(模拟按键)。
项目框图
左边输入,MQ-2模拟输入电压,经ADC后通过DMA转运到内存,按键1和按键2按下分别上升临界值和下降临界值。右边输出,lcd1602上显示当前烟雾值和临界值,当烟雾值大于当前临界值时打开蜂鸣器并打开风扇,当烟雾值小于当前临界值时关闭蜂鸣器并关闭风扇。
总体思路:
封装每个模块,包括Key,ADC,lcd1602,Fan,Beep。在主函数中依次测试每个模块,查看是否有接线错误,引脚配对。
监测按键,如果按下则对应改变临界值。
将DMA转运到内存的值拿出来作烟雾的值。
通过比较烟雾值和临界值对应设置开关蜂鸣器和风扇。
#注意事项:
1.ADC有对应的转运通道,此例中的使用PB0接入,应该走第8通道。
2.ADC_DMA转运的时候,需要设置一个uint32_t * 型的地址来接收数据,但是我们需要的烟雾值是浮点型float。可以通过在ADC模块中设置中间变量,先把数据接收下来,然后再重新封装一个返回值是float的函数。在主函数中调用新封装的函数即可。
3.需要让lcd1602显示一个变化的值,可以重新封装一个函数,输入一个变量值,在函数中定义一个数组,调用sprintf函数,将变量值赋到数组中,显示这个数组即可。