在这里插入图片描述

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)实验场景图

在这里插入图片描述

在这里插入图片描述

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐