【雕爷学编程】Arduino动手做(66)---HC-SR501热释电传感器模块5
雕爷学编程,Arduino动手做,开源硬件,创客传感器,HC-SR501热释电传感器模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验六十六:HC-SR501人体红外热释感应模块 热释电传感器 人走动感应探头板
二、HC-SR501热释电传感器模块
1、模块技术参数
(1)工作电压:DC5V至20V
(2)静态功耗:小于60微安
(3)电平输出:高3.3V,低0V
(4)延时时间:可调(0.3秒~18秒)
(5)封锁时间:2.5秒
(6)触发方式:L不可重复,H可重复,默认值为H
(7)感应范围:小于120度锥角,7米以内
(8)工作温度:-15~+70度
(9)使用芯片:最稳定的 PIR 控制器BISS0001
(10)PCB外形尺寸:32*24mm,螺丝孔距28mm,螺丝孔径2mm
(11)感应透镜尺寸:(直径)23mm(默认)
HC-SR501热释电传感器模块的实验环境
一、HC-SR501热释电传感器模块实验所需硬件清单
Arduino Uno开发板 X1
杜邦线 若干(备了9条)
IIC/I2C 1602 LCD液晶屏模块X1
高电平触发有源蜂鸣器模块X1
HC-SR501热释电传感器模块X2
LED发光二极管(绿、蓝色)X2
高电平触发单路5V继电器模块X1
Proto Shield 原型扩展板(带mini面包板)X1
4、程序四:人体感应警戒+声光报警器
(1)实验开源图形编程(Mind+、Mixly、编玩边学)
(2)实验串口返回情况
(3)实验场景图
5、程序五:SR501人体移动检测声光报警
实验仿真编程(Linkboy V4.63)之二
6、程序六:使用 PIR 传感器激活控制 5V 继电器
(1)实验接线示意图
(2)实验原理:像 HC-SR501 这样的 PIR 传感器通过测量传感器上红外辐射的变化来检测运动。传感器元件实际上有两个独立的传感元件,这两个传感元件使传感器能够区分静态红外光源(如阳光)和移动光源(如人类和动物)。当红外发射物体穿过传感器的路径时,第一个元件测量红外光并产生高信号。
(3)Arduino参考开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序六:使用 PIR 传感器激活控制 5V 继电器
*/
int sensorPin = 2; //设置 PIR 传感器引脚
int pirState = LOW;
int val = 0;
int relayPin = 3; //设置继电器引脚
void setup() {
pinMode(sensorPin, INPUT);//热释电模块为输入
pinMode(relayPin, OUTPUT);//继电器模块为输出
Serial.begin(9600);
}
void loop() {
val = digitalRead(sensorPin); // 读取输入值
if (val == HIGH) { // 检查输入是否为 HIGH
digitalWrite(relayPin, HIGH); // 打开继电器
delay(150);
if (pirState == LOW) {
Serial.println("检测到运动!");
pirState = HIGH;
}
} else {
digitalWrite(relayPin, LOW); //关闭继电器
delay(150);
if (pirState == HIGH) {
Serial.println("运动结束!");
pirState = LOW;
}
}
}
(5)实验场景图
7、程序七:SR501模块控制舵机旋转90度
(1)Arduino参考开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序七:SR501模块控制舵机旋转90度
*/
#include <Servo.h>// 导入舵机库
const int MOTION_SENSOR_PIN = 2; // D2接SR501模块
const int SERVO_PIN = 9; // D9接舵机模块
Servo servo; // 创建伺服对象来控制舵机
int angle = 0; // 伺服电机的当前角度
int lastMotionState; // 运动传感器的先前状态
int currentMotionState; // 运动传感器的当前状态
void setup() {
Serial.begin(9600); //初始化串口
pinMode(MOTION_SENSOR_PIN, INPUT); // 设置SR501为输入模式
servo.attach(SERVO_PIN); // 舵机初始化
servo.write(angle);
currentMotionState = digitalRead(MOTION_SENSOR_PIN);
}
void loop() {
lastMotionState = currentMotionState; // 保存最后的状态
currentMotionState = digitalRead(MOTION_SENSOR_PIN); // 读取新状态
if (currentMotionState == LOW && lastMotionState == HIGH) { // 引脚状态变化:LOW -> HIGH
Serial.println("检测到运动!");
Serial.println("舵机旋转90度");
servo.write(90);
}
else if (currentMotionState == HIGH && lastMotionState == LOW) { // 引脚状态变化:HIGH -> LOW
Serial.println("运动停止!");
Serial.println("舵机复位0度");
servo.write(0);
}
}
(2)实验串口返回情况
(3)实验场景图
8、程序八:SR501模块与1602 LCD显示检测计时
(1)Arduino参考开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序八:SR501模块与1602 LCD显示检测计时
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>//导入1601 LCD库
byte onboard_led_pin = 13;
byte onboard_led_state = HIGH;
byte pir_motion_pin = 2;
byte pir_status = LOW;
byte motion_countdown = 3;
unsigned long last_second = -1;
unsigned long motion_seconds = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
pinMode(onboard_led_pin, OUTPUT);//设置LED为输出
digitalWrite(onboard_led_pin, onboard_led_state);
lcd.init();//LC初始化
lcd.backlight();// 設定背板為亮
lcd.setCursor(0, 0);
lcd.print("HC-SR501 MOTION");
pinMode(pir_motion_pin, INPUT);
}
void loop() {
pir_status = digitalRead(pir_motion_pin);//读取SR501传感器
if (pir_status == HIGH) {
if (motion_countdown == 0) {
lcd.backlight();
motion_countdown++;//倒计时
}
}
// 每秒执行一次动作
unsigned long cur_second = millis() / 1000;
if (last_second != cur_second) {
last_second++;
digitalWrite(onboard_led_pin, onboard_led_state);
onboard_led_state = !onboard_led_state;
if (pir_status == HIGH) {
motion_seconds++;
if (motion_countdown < 2 * 60) {
motion_countdown += 1;
}
}
else {
if (motion_countdown) {
motion_countdown--;
if (motion_countdown == 0) {
lcd.noBacklight();
}
}
}
//lcd.setCursor(0, 1);
//lcd.print("uptime: " + String(cur_second) + "s");
lcd.setCursor(0, 1);
lcd.print("motion: " + String(motion_seconds) + "s ");
//lcd.setCursor(0, 3);
//lcd.print("count-down: " + String(motion_countdown) + "s ");
}
delay(50);//延时50毫秒
}
(2)实验场景图
更多推荐
所有评论(0)