本次实验我们采用红外线检测模块检测火焰(模拟燃烧),并将检测信号发送到Arduino中,Arduino接收到信号之后,控制一个红色LED灯闪烁报警,并通过蜂鸣器发出报警声音。
一、功能说明
当红外线检测模块检测到燃烧火焰时,红色LED灯闪烁报警,蜂鸣器发出报警声音。
二、所需器材
Arduino控制主板、红外线检测模块、红色LED灯模块、蜂鸣器模块。
三、电路设计及端口分配
红外线检测模块使用模拟量输入,从模拟端口A0输入,红色LED灯模块和蜂鸣器模块分别通过数字端口9、10脚输出。
电路框图
四、程序流程图
五、程序编写
//定义变量,设置端口输入输出模式int huoyanPin = 0;int ledPin = 9;int fengmingPin = 10;void setup(){pinMode(ledPin,OUTPUT);pinMode(fengmingPin,OUTPUT);pinMode(huoyanPin,INPUT);}//根据控制过程编写主函数void loop(){int huoyanSJ = analogRead(huoyanPin);huoyanSJ = huoyanSJ/4;if(huoyanSJ >= 200){digitalWrite(ledPin,HIGH);tone(fengmingPin,800);delay(1000);digitalWrite(ledPin,LOW);noTone(fengmingPin);delay(1000);}}
下载程序,观察效果
六、重要函数语法
1.tone()
tone()函数可以产生固定频率的PWM信号来驱动扬声器发声。发声时间长度和声调都可以通过参数控制。定义发声时间长度有两种方法,第一种是通过tone()函数的参数来定义发声时长,另一种是使用noTone()函数来停止发声。如果您在使用tone()函数时没有定义发声时间长度,那么除非您通过noTone()函数来停止声音,否则Arduino将会一直通过tone()函数产生声音信号。
Arduino一次只能产生一个声音。假如Arduino的某一个引脚正在通过tone()函数产生发声信号,那么此时让Arduino使用另外一个引脚通过tone()函数发声是不行的。
语法
tone(pin, frequency)
tone(pin, frequency, duration)
参数
pin: 发声引脚(该引脚需要连接扬声器)
frequency: 发声频率(单位:赫兹) – 无符号整数型
duration: 发声时长(单位:微秒,此参数为可选参数) – 无符号长整型
返回值
无
示例
/*多音调发声 在Arduino的不同引脚产生不同的声音电路连接:* 在引脚 6, 7, 8分别连接8欧姆扬声器*/void setup() {}void loop() {noTone(8); //停止8号引脚发声tone(6, 440, 200); //6号引脚发声200毫秒delay(200);noTone(6); //停止6号引脚发声tone(7, 494, 500); //7号引脚发声500毫秒delay(500);noTone(7); //停止7号引脚发声tone(8, 523, 300); //8号引脚发声300毫秒delay(300);}
六、思考拓展
1.常见的火宅报警器除了可以自动检测火焰触发报警外,还可以通过人按动按钮进行报警,请思考任何实现该功能。
编写控制程序如下:
int huoyanPin = 0;int ledPin = 9;int fengmingPin = 10;int kaiguanPin =8;void setup(){pinMode(ledPin,OUTPUT);pinMode(fengmingPin,OUTPUT);pinMode(huoyanPin,INPUT);pinMode(kaiguanPin,INPUT);}//根据控制过程编写主函数void loop(){int huoyanSJ = analogRead(huoyanPin);int kaiguanSJ = digitalWrite(kaiguanPin);huoyanSJ = huoyanSJ/4;if((huoyanSJ >= 200)||(kaiguanSJ == 1)){digitalWrite(ledPin,HIGH);tone(fengmingPin,800);delay(1000);digitalWrite(ledPin,LOW);noTone(fengmingPin);delay(1000);}}
2.如果火宅报警器被误触发,如检测到生活用火,请问如何避免这种情况。
