手头有一些闲置的模块和小电路板,选了几件做了一个科技小制作。利用Nano做核心,MQ9可燃气体检测模块做传感器,接上一个蜂鸣器和LED就可以制作这个报警器了。
一、硬件连接
电路图就是这样的咯,将MQ9的传感器朝右,蜂鸣器的喇叭朝上,MQ9左侧的是LED,上面是正极,VIN和GND引出方便用其他电源供电。电路板非常紧凑,我设计时使用的是5V给蜂鸣器和MQ9供电,LED也是如此,如果你发现喇叭和MQ9发热厉害可以更换为3.3V供电,LED一般问题不大闪烁时间很短,为了保险可以修改代码中的输出为analogWrite来“降低电压”使用。
二、代码
/*
Name: Sketch3.ino
Created: 2019/10/8 15:20:24
Author: Administrator
*/
int MaxGS = 200; //容许的最大气体浓度
int PinGS = A0; //MQ9可燃气体传感器读数引脚
int PinBr = A1; //蜂鸣器输出引脚
int PinLed = A2; //LED输出引脚
// the setup function runs once when you press reset or power the board
void setup() {
Serial.begin(115200); //初始化串口通讯便于调试
pinMode(PinGS, INPUT); //初始化引脚
pinMode(PinBr, OUTPUT);
pinMode(PinLed, OUTPUT);
digitalWrite(PinBr, LOW); //初始化输出值
digitalWrite(PinLed, LOW);
}
// the loop function runs over and over again until power down or reset
void loop() {
int GSVal = 0;
int Hz=100; //不报警时0.1s检测一次,报警时频率会加快
GSVal = analogRead(PinGS); //读取可燃气体浓度
Serial.println(GSVal-MaxGS); //将与最大容许浓度的比较结果输出到串口
if (GSVal>=MaxGS) { //当可燃气体浓度超出最大容许浓度时产生报警动作
Hz=(GSVal-MaxGS)/20+1; //将浓度换算成报警声音和光的频率,+1是保证GSVal-MaxGS在0-20时不会产生0Hz的错误。
Beep(Hz);
Flash(Hz);
}
delay(Hz);
}
void Beep(int Hz) {
tone(PinBr, 1024, 1000 / Hz);
delay(1000 / Hz);
noTone(PinBr);
}
void Flash(int Hz) {
digitalWrite(PinLed, HIGH);
delay(1000 / Hz);
digitalWrite(PinLed, LOW);
}
注释已经非常详尽了,可以修改20、1000来改变声音和光的频率,修改1024来改变声音的音调,修改200以适合你的MQ9以及电路。