回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

教室门防撞报警器 简单

头像 云天 2019.07.12 2305 2

“初中男生因急着上课,急着推开教室门,没看到门后有女同学,将女同学撞伤……”。网络上、生活中经常听到类似这样的“事故”。百度搜索“教室门 撞人”,得到500000条相关信息。

project-image

# 创作灵感

在我们班里虽未出现这样严重的撞人事件,但平时也免不了开门时碰到在门后的同学。因为一般教室门上的可观察门后情况的玻璃都比较小,有时因为着急,也未看清楚就急着开门,这样就撞到同学了。

为此我二人团队,决定开发一个“教室门防撞报警器”,来解决这个问题。

# 设计思路

如果能在教室门外放置一灯光提醒器,当门后有人时,灯光亮起。提醒开门人要注意门后可能有人,可以在推门前,先敲一下,当灯光熄灭后再开门进入。

门内传感器使用三个“超声波”,构成三角形,检测位于门后的人,尤其是蹲在门后的人。门前提醒器使用彩色灯带,亮起时比较醒目,并在中间用文字说明进行提醒。门前、门后两个Arduino控制器采用2.4G无线传输nRF24L01进行通信。

材料清单

  • Arduino X2
  • 超声波传感器 X3
  • 2.4G无线nRF24L01 X2
  • DFRobot彩色LED灯带+驱动板 X1
  • 旧充电宝 X2
project-image

# 电路设计

为了方便编写程序,先设计“防撞报警器”的电路连接关系,电路原理图如下图所示。

project-image
project-image

# 程序设计

在写程序之前,先梳理一下思路,设计一下程序流程图,如下图所示。当三个超声波传感器中只要有一个检测到与障碍物距离在50cm以内,就通过nRF24L01发送信息,通知接收端“报警器”点亮彩灯带,提醒门外同学注意。

project-image

图:门后检测器程序流程图

project-image

图:门前报警器程序流程图

理清思路后,打开Arduino IDE正式开始编写程序。

代码
//发射端程序
 //加载nRF24L01库
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
 
int value;//发送标识(有人1,无人0)
float dis;
float dis2;
float dis3;
float checkdistance_3_4() {//传感器1
  digitalWrite(3, LOW);
  delayMicroseconds(2);
  digitalWrite(3, HIGH);
  delayMicroseconds(10);
  digitalWrite(3, LOW);
  float distance = pulseIn(4, HIGH) / 58.00;
  delay(10);
  return distance;
}
float checkdistance_5_6() {//传感器2
  digitalWrite(5, LOW);
  delayMicroseconds(2);
  digitalWrite(5, HIGH);
  delayMicroseconds(10);
  digitalWrite(5, LOW);
  float distance = pulseIn(6, HIGH) / 58.00;
  delay(10);
  return distance;
} 
float checkdistance_9_1() {//传感器3
  digitalWrite(9, LOW);
  delayMicroseconds(2);
  digitalWrite(9, HIGH);
  delayMicroseconds(10);
  digitalWrite(9, LOW);
  float distance = pulseIn(10, HIGH) / 58.00;
  delay(10);
  return distance;
} 
void setup()
{
//初始化
  pinMode(3, OUTPUT);
  pinMode(4, INPUT);
  pinMode(5, OUTPUT);
  pinMode(6, INPUT);
  pinMode(9, OUTPUT);
  pinMode(10, INPUT);
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
  Mirf.setRADDR((byte *)"ABCDE"); //设置自己的地址(发送端地址),使用5个字符
  Mirf.payload = sizeof(value);
  Mirf.channel = 90;              //设置所用信道
  Mirf.config();
}
 
void loop()
{
  Mirf.setTADDR((byte *)"FGHIJ");           //设置接收端地址
  value = 1;                      //0-255的随机数
  //获取三个传感器的值
  dis=checkdistance_3_4();
  dis2=checkdistance_5_6();
  dis3=checkdistance_9_1();
  
  if(dis<50 || dis2<50 || dis3<50){//判断是否有人
    Mirf.send((byte *)&value);                //发送指令,发送value

    while(Mirf.isSending()) delay(1);         //直到发送成功,退出循环
  }
  else{
    value = 0;      
    Mirf.send((byte *)&value);                //发送指令,发送value
    while(Mirf.isSending()) delay(1);         //直到发送成功,退出循环
  }
}
 

代码:门后检测器程序

代码
//接收端程序
 
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
 
int value;
 
void setup()
{

  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
 pinMode(5,OUTPUT);//彩灯连接在引脚5
  Mirf.setRADDR((byte *)"FGHIJ"); //设置自己的地址(接收端地址),使用5个字符
  Mirf.payload = sizeof(value);   
  Mirf.channel = 90;   //设置使用的信道
  Mirf.config(); 
  Serial.println("Listening...");  //开始监听接收到的数据
}
 
void loop()
{
  if(Mirf.dataReady()) {  //接收到程序
    Mirf.getData((byte *) &value);

    if(value==1){//为1,说明有人,点亮彩灯
    digitalWrite(5,HIGH);
    }
    else{//为0,说明无人,熄灭彩灯
    digitalWrite(5,LOW);
    }
    }
  } 

代码:门前报警器程序

# 制作过程

步骤1 安装报警器彩灯带

用热熔胶来固定彩灯带

project-image
project-image
project-image

步骤2 安装报警器无线发射模块

project-image

图:针脚说明

接线方式 Arduino uno --- nRF24L01

3.3V --- VCC

GND --- GND

7 --- CSN

8 --- CE

11 --- MOSI

13 --- SCK

12 --- MISO

*IRQ示例没有用上,则不用接线了

project-image

步骤3 安装门后超声波传感器

project-image

图:在Arduino上对应引脚连接三个超声波传感器


因门后检测器中的无线模块安装与门前报警器一致,故不再重复说明。

步骤4 应用场景安装

project-image
project-image

图:安装门前报警器

因学校所有的教室门均为铁制,所以装置采用强磁石固定。

project-image
project-image

图:安装门后检测器

# 效果演示

# 后续完善

1、准备把在门前利用“敲门”来提醒门后同学的方法,改为按一下“按钮”,然后门后有语音来进行提醒。

2、门前报警除了彩灯,再加一个显示屏进行门后有人或无人提醒。

评论

user-avatar
  • DF-YHT

    DF-YHT2019.10.17

    超级棒!

    0
    • KeroQuinn

      KeroQuinn2019.07.14

      做的真不错!

      0