硬件准备
LED灯:1个
超声波模块:1个
人体热释电模块:1个
220欧电阻:1个
面包板:1块
公对母杜邦线:7根
公对公杜邦线:4根
硬件连线
1、将LED灯插入面包板
2、用公对公杜邦线将LED灯的负极接到带减号的横排插口上
3、用220欧电阻和公对公杜邦线将LED灯的正极接到13号引脚
4、用公对公杜邦线将5V接口接到带加号的横排插口上
5、用公对公杜邦线将GND接口接到带减号的横排插口上
6、用4根公对母杜邦线分别将超声波模块的 VCC、Trig、Echo 和 GND 接到带加号的横排插口、 9 号引脚、 8 号引脚和带减号的横排插口上
7、用3根公对母杜邦线分别将人体热释电模块的 IN 、 VCC 、 GND 接到 12 号引脚、加号的横排插口和带减号的横排插口上
软件程序
#define led_pin 13 //LED引脚
#define body_pin 12 //人体热释电引脚
#define Trig_pin 9 //超声波触发引脚
#define Echo_pin 8 //超声波回响引脚
int body_val = -1; //热释电变量
int Echo_val = -1; //超声波变量
float distance_cm = -1;//距离变量
/*声明函数*/
void Trigger();
void printVal();
void isLED();
/*初始化*/
void setup() {
Serial.begin(9600);
pinMode(led_pin, OUTPUT);
pinMode(body_pin, INPUT);
pinMode(Trig_pin, OUTPUT);
pinMode(Echo_pin, INPUT);
}
/*循环*/
void loop() {
Trigger();//触发超声波模块
body_val = digitalRead(body_pin); //存储热释电变量
Echo_val = pulseIn(Echo_pin, HIGH); //存储超声波变量
distance_cm = Echo_val / 58.00; //转换为距离
printVal();//打印变量
isLED();//判断LED是否该点亮
}
/*触发超声波模块*/
void Trigger(){
digitalWrite(Trig_pin, HIGH); //触发超声波模块
delayMicroseconds(15);
digitalWrite(Trig_pin, LOW);
}
/*打印变量*/
void printVal(){
Serial.print("人体热释电 ");
Serial.println(body_val);
Serial.print("距离 ");
Serial.println(distance_cm);
delay(1000);
}
/*判断LED是否该点亮*/
void isLED() {
if (distance_cm < 50.00) {
if (body_val == HIGH) {
digitalWrite(led_pin, HIGH);
Serial.println("有人靠近,亮灯");
delay(1000);
} else {
digitalWrite(led_pin, LOW);
}
} else {
digitalWrite(led_pin, LOW);
}
}
产品展示视频
当人在 50 cm内时,LED灯亮。
【Arduino20】人体距离感应实验
总结
通过本次联合实验,我了解了超声波模块和人体热释电模块的联合用法,熟悉了二者的使用。