Arduino Nano配合MQ-2烟雾传感器和LED灯实现烟雾报警器
DK 于2013,04,27发表 | 3 评论 »
二话不说先上视频
基本配件组成
Arduino Nano × 1
MQ-2烟雾传感器 × 1
LED灯 × 1
连接线若干
MicroUSB连接线一根
连接方法
将MQ-2传感器两个引脚正极接Nano 3.3伏引脚,负极接地,S引脚接模拟口0。
将LED灯正极接数字口12,负极接地。
实现效果
当烟雾浓度越大时LED闪烁频率越高,烟雾浓度降低时LED闪烁频率降低,烟雾浓度为标准浓度时LED灯关闭。
实现思路
通过digitalWrite(LED, HIGH)和digitalWrite(LED, LOW)改变对LED加电的状态控制LED打开和关闭,改变状态的速度越快闪烁的频率越高。通过analogRead(0)获取MQ-2传感器当前的读数,不断监测当前烟雾浓度,如果超过一定的阈值比如400则提高LED闪烁的频率,随着浓度值的降低同时降低LED灯闪烁的频率。
注意事项
MQ-2传感器要经过预热才能正常工作,开始接入时读数不准,经过几分钟预热后,我本地的正常环境读数为150左右。所以要根据这个读数来控制程序判断的阈值。
代码 //定义LED的高电平接入数字端口 int led = 12; void setup() { //定义当前的端口为输出端口 pinMode(led, OUTPUT); } void loop() { //获取MQ-2传感器模拟端口的读数 int val = analogRead(0); //如果大于400则以10ms的间隔闪烁 if(val > 400){ blinkLED(10); }else if(val > 300 && val < 400){ //如果大于300,小于400则以100ms的间隔闪烁 blinkLED(100); }else if(val < 300 && val > 200){ blinkLED(1000); }else{ //否则关闭 digitalWrite(led, LOW); } } //闪烁函数 unsigned int blinkLED(int period){ unsigned long time = millis(); unsigned int signal; if((time / period) % 2 == 0){ digitalWrite(led, HIGH); }else{ digitalWrite(led, LOW); } }
涉及内容
pinMode, analogRead, digitalWrite
其他
由于Arduino强大的功能,所以实现起来是非常简单的,唯一不足的地方就是晚上又多抽了半盒烟来测试:D
下一步就是要接入Yeelink平台来实现远程的检测,让这个小东西变得更加有意义,能够实现远程监测才是这个烟雾报警器真正能够起作用的时候。敬请期待:)
转载请注明原文出处《Arduino Nano配合MQ-2烟雾传感器和LED灯实现烟雾报警器》 如无特别声明,所有文章均遵守创作共用 署名-非商业-禁止演绎 3.0协议。
为什么我的只闪了一下就不闪了?
[回复]
@王雨, 放到loop里面了吗?
[回复]
@DK, 大佬我想问下那个代码是写到哪里去的?
main.c里面吗?谢谢了
[回复]