一、实验目的
通过本实验,熟悉常见楼道灯光的自动开关方式,掌握在Arduino项目中使用麦克风(声音)传感器实现声控灯、使用人体红外感应传感器实现感应灯、使用触摸传感器实现触摸灯的方法。
二、实验要求
1、使用ESP 8266电路板、麦克风(声音)传感器(如图所示)、LED、电阻和导线搭建实验电路,并编写相应Arduino程序代码,实现通过声音控制LED亮起,一段时间后自动熄灭的效果,模拟现实生活中的声控灯。
图14-1麦克风(声音)传感器
2、将上步实验中的麦克风(声音)传感器拆除,添加1个人体红外感应传感器(如图所示),并使用导线搭建实验电路,修改程序代码,实现人(动物)进入红外感应区域时LED亮起,离开一段时间后自动熄灭的效果,模拟现实生活中的感应灯。
图14-2人体红外感应传感器
3、将上步实验中的人体红外感应传感器拆除,添加1个触摸传感器(如图所示),并使用导线搭建实验电路,修改程序代码,实现触摸传感器感应区域时LED亮起,一段时间后自动熄灭的效果,模拟现实生活中的触摸灯。
图14-3触摸传感器
三、实验过程
1、声控灯
(1)使用导线分别连接面包板的电源总线正极和负极到电路板的3V3和GND接口;放置1个麦克风(声音)传感器(注意不是高感度声音传感器,采集声音的头部区域较高感度声音传感器的小)在面包板上,分别使用导线将传感器的正极(+)和负极(GND)针脚连接到面包板电源总线正极和负极,A0针脚连接到电路板A0接口,D0针脚无需接线;在面包板上放置1个LED,正极使用导线连接到电路板D2(GPIO4)接口,负极通过1个1K电阻连接到面包板电源总线负极。电路连接如图所示。
图14-4实验电路连接图
(2)在新建的Arduino程序窗口中输入如下代码:
int soundPin = 0; //声音传感器接到A0
int ledPin = 4; //LED接到D2(GPIO4)
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(115200); //用于调试时查看当前的声音值
}
void loop(){
int soundState = analogRead(soundPin); //读取声音传感器的值
Serial.println(soundState); //串口监视器输出声音传感器的值
//如果声音值大于100,亮灯,并持续5s,否则关灯
if (soundState > 100) {
digitalWrite(ledPin, HIGH);
delay(5000);
}
else{
digitalWrite(ledPin, LOW);
}
}
(3)将USB线缆插入计算机,待程序上传成功后打开串口监视器,通过在麦克风(声音)传感器附近发出声音观察串口监视器输出值(根据观察到的数值情况修改程序中的阈值并重新上传程序)及LED灯的变化。
该实验的结果是:接通电源时LED熄灭,在麦克风(声音)传感器附近发出声音后LED亮起,5秒后自动熄灭。
2、人体红外感应灯
(1)将第1步中的麦克风(声音)传感器拆除;使用1个人体红外感应传感器,分别使用公母线将传感器的正极(VCC)和负极(GND)针脚连接到面包板电源总线正极和负极,输出(OUT)针脚连接到电路板D2(GPIO4)接口;将面包板上LED的正极使用导线连接到电路板D1(GPIO5)接口,其它线路不变。电路连接如图所示。
图14-5实验电路连接图
(2)在新建的Arduino程序窗口中输入如下代码:
int sensorPin = 4; //红外传感器接到D2(GPIO4)
int ledPin = 5; //LED正极接到D1(GPIO5)
void setup(){
pinMode(ledPin,OUTPUT); //设置LED接口为输出状态
Serial.begin(115200);
}
void loop(){
int val=digitalRead(sensorPin); //定义参数存储人体红外传感器读到的状态
Serial.println(val);
if(val == 1){ //如果检测到有动物运动(在检测范围内),亮灯5秒
digitalWrite(ledPin,HIGH);
delay(5000);
}
else{
digitalWrite(ledPin,LOW);
}
}
(3)将USB线缆插入计算机,待程序上传成功后打开串口监视器,通过在人体红外感应传感器附近移动身体观察串口监视器输出值及LED灯的变化。注意该传感器在接通电源后有1分钟左右的初始化过程,这期间LED会闪烁几次,可能无法出现预期的实验结果。
该实验的结果是:接通电源时传感器自动检测是否有人(动物)在感应范围内移动,若有则LED亮起,若持续5秒没有则自动熄灭。人体红外感应传感器上有2个旋钮,1个是调节感应距离,1个是调节持续时间,若实验没有出现预想的结果,可通过旋转这2个旋钮改变传感器灵敏度。
3、触摸灯
(1)将第2步中的人体红外传感器拆除;在面包板上放置1个触摸传感器,分别使用导线将传感器的正极(VCC)和负极(GND)针脚连接到面包板电源总线正极和负极,信号(SIG)针脚连接到电路板D2(GPIO4)接口,其它线路不变。电路连接如图所示。
图14-6实验电路连接图
(2)在新建的Arduino程序窗口中输入如下代码:
int switchPin = 4;//触摸传感器接到D2(GPIO4)
int ledPin = 5;
void setup(){
pinMode(ledPin,OUTPUT);
Serial.begin(115200);
}
void loop(){
int val=digitalRead(switchPin); //定义参数存储触摸传感器读到的状态
Serial.println(val);
if(val == 1){ //如果检测到触摸,亮灯5秒
digitalWrite(ledPin,HIGH);
delay(5000);
}
else{
digitalWrite(ledPin,LOW);
}
}
(3)将USB线缆插入计算机,待程序上传成功后打开串口监视器,通过在触摸传感器感应区域观察串口监视器输出值及LED灯的变化。
该实验的结果是:接通电源时LED熄灭,触摸传感器感应区域后LED亮起,5秒后自动熄灭。