一、物料
二、接线
引脚和控制 | 说明 |
---|---|
时间延迟调节 | 检测到移动后,高电平输出时间,5s~5min |
感应距离调节 | 检测范围 3~7m |
检测模式调节 | 单次检测/连续检测 |
GND | 地 |
VCC | 电源 |
OUT | 高/移动,低/无移动 |
蜂鸣器 长针接GPIO4针脚,对应D2,短针接G
HC-SR501 中间接GPIO13 对应D7,左侧(针脚边缘靠近身体)接3V,右侧(针脚边缘靠近身体)接G
继电器 DC+ 接5v的vcc+ DC- 接5v的vcc-, IN接 esp8266的电平信号GPIO口(自定义一个输出针脚),DC-接esp8266的G脚
因为继电器需要5V电源,这里做了单独供电。继电器的信号控制接入IN口,DC-接开发板G脚
vcc形成回路, 电平信号与G脚形成回路
功能逻辑:检测到人体后,蜂鸣器名叫,继电器打开,保持60s,后再次检测,如果没有人则关闭继电器,如果有人,则保持继电器打开状态,人离开1分钟后关闭
int inputPin = 13; // ESP8266 d7
int ledOut = 5; //esp8266 D1 作为继电器的电平信号
//通过PWM脉冲调制控制(无源)蜂鸣器电压的连续改变,实现蜂鸣器的鸣响
#define buzzerOut 4 //esp8266 D2
int KCmodePostpone = 60; //代表60s
bool KCmodeState = false;
void setup() {
pinMode(inputPin, INPUT);
pinMode(buzzerOut, OUTPUT); //蜂鸣器
pinMode(ledOut, OUTPUT); //led 二极管
Serial.begin(9600);
digitalWrite(buzzerOut, LOW);
digitalWrite(ledOut, LOW);
delay(30 * 1000);
}
void loop() {
int val = digitalRead(inputPin);
if (val == HIGH) {
mingX(); //蜂鸣器鸣叫
Serial.println("Motion detected!");
illumeON(); //继电器打开
delay(1000); //每秒检测一次
}
else {
Serial.println("No Motion detected!");
illumeOFF(); //继电器关闭
delay(1000); //每秒检测一次
}
}
//继电器打开
void illumeON() {
KCmodePostpone = 60; //检测到人体移动,则保持60开启
if (KCmodeState) return;
KCmodeState = true;
digitalWrite(ledOut, HIGH); //led on
}
//继电器关闭
void illumeOFF() {
KCmodePostpone--;
if (KCmodePostpone == 0) {
KCmodePostpone = 60;
if (KCmodeState) {
digitalWrite(ledOut, LOW);//检测了60次后,还是没有人,并且电平是高的时候,设置为低电平(关闭继电器)
KCmodeState = false;
}
}
}
void mingX() {
digitalWrite(buzzerOut, HIGH);//输出HIGH电平,停止发声
delay(50); //等待50毫秒
digitalWrite(buzzerOut, LOW);//输出LOW电平,发声
}
本文链接:https://blog.nnwk.net/article/137
有问题请留言。版权所有,转载请在显眼位置处保留文章出处,并留下原文连接
Leave your question and I'll get back to you as soon as I see it. All rights reserved. Please keep the source and links
友情链接:
子卿全栈
全部评论