基于Arduino的驾驶员嗜睡检测和警报系统设计

基于Arduino的驾驶员嗜睡检测和警报系统设计,第1张

基于Arduino的驾驶员嗜睡检测和警报系统设计

  由于交通量的巨大增加,道路事故成为人们关注的问题。事故的主要原因是由于夜间司机的困倦。疲劳和嗜睡是高速公路上重大事故的一些主要原因。解决此问题的唯一方法是检测困倦并提醒驾驶员。

  因此,在这个项目中,我们考虑使用 Arduino Nano、眨眼传感器射频收发器模块为驾驶员构建驾驶员 嗜睡检测和警报系统。该系统的基本目的是使用眨眼传感器跟踪驾驶员的眼球运动,如果驾驶员感到困倦,则系统将使用响亮的蜂鸣器警报触发警告消息。

  构建困倦探测器所需的材料

  Arduino纳米

  眨眼传感器

  射频收发模块

  HD12E & HD12D 集成电路

  蜂鸣器

  9V电池

  12V直流电源

  眨眼传感器

  眨眼传感器用于检测眨眼,使用它我们还可以检测驾驶员在驾驶时的嗜睡等活动。它基于红外 LED 技术工作。它包含一个红外发射器和一个接收器 LED,用于检测眨眼。简单红外传感器的工作原理如下图所示:

  如上图所示,红外传感器由两个元件组成:作为源的红外发射器和作为接收器的红外接收器。红外源包括 IR LED,红外检测器包括光电二极管。红外源发射的能量被物体反射并回落到红外探测器上。当 IR LED 发出的光落在接收器上时,光电二极管的电阻会显着下降。该光接收器与电位器相连,形成分压电路,当检测到闪烁活动时,该电路会提供可变的模拟输出。

  当入射辐射更多地作用在光电二极管上时,串联电阻器/电位器上的电压降会很高。在只是运算放大器或 运算放大器的比较器 IC 中,比较参考模拟电压和实际输出电压。如果电阻串联到光电二极管的电压大于参考电压,则比较器的输出为高电平,否则为低电平。由于比较器的输出连接到 LED,因此当传感器检测到某些活动(例如眨眼)时,它会发光。可以根据环境条件通过调节电位器来调节阈值电压

  眨眼传感器技术规格

  工作电压:5V DC

  输出:TTL(5V/0V)

  用于连接的板载 3 针接头

  红外线技术

  433 MHz 射频收发器模块

  RF 代表射频。相应的频率范围在 30 kHz 和 300 GHz 之间变化。这里我们使用的是 433 MHz 射频收发器模块。该 射频模块 包括一个 433 MHz射频发射器 和射频接收器。发射器/接收器 (Tx/Rx) 对的工作频率为 433 MHz。射频发射器接收串行数据并通过其天线通过射频无线传输。发射的数据由工作在与发射器相同频率的射频接收器接收。

  射频发射器

  RF 发射器模块使用幅移键控(ASK),工作频率为 433MHz。发射器模块接受串行数据输入并通过射频传输该信号。然后,接收器模块以无线方式接收传输的信号。

  接地:发射机接地。连接到地平面

  数据:串行数据输入引脚

  VCC:电源电压;5V

  ANT:天线输出引脚

  射频接收器

  RF 接收器模块接收数据并将其发送到数据 OUTPUT 引脚。微控制器可以对输出数据进行解码以进行进一步 *** 作。

  接地:接收器接地。连接到地平面

  数据:串行数据输出引脚

  VCC:电源电压;5V

  ANT:天线输出引脚

  驾驶员睡意检测器电路图

  驾驶员睡意检测器由射频发射器和接收器部分组成。发射器部分由一个射频发射器和眨眼传感器组成,接收器端使用带有射频接收器的 Arduino Uno 进行数据处理。我们之前使用与 Arduino 相同的 433 MHz 射频模块来构建项目,如 Arduino RC 船、手势控制机器人等。发射器和接收器部分的电路图如下所示。

  发射端

  如图所示,首先将 9V DC 电池使用 7805 稳压器降压至 5V DC,然后将 5V DC 电源提供给 Eye Blink Sensor 和 RF Transmitter。眨眼传感器的输出引脚被馈送到射频发射器,以将其无线传输到接收器端。

  接收端

  如图所示,在接收器端,RF 接收器连接到 Arduino 的 5V DC 电源。Arduino 由外部 12V 直流电源供电。RF 接收器的输出被馈送到 Arduino 模拟引脚。如图所示,蜂鸣器连接到 Arduino 的数字引脚。

为嗜睡检测编程 Arduino Nano

在发送端和接收端都成功连接硬件后,现在是时候将代码上传到连接到接收端的 Arduino Nano。此完整代码在文档末尾给出。首先,让我们逐步理解下面的代码:

首先,需要声明所需的变量,如下所示。

 

整数标志=0;
诠释 t1=0;
诠释 t2=0;

 

在Setup()中,进行了所有初始化,包括串行端口初始化和引脚声明,如下所示。

 

无效设置(){
  序列号.开始(9600);
  pinMode(2,输出);
}

 

RF 接收器的串行数据输出从模拟引脚A0读取并存储在变量中,如图所示。要检查参考值,我们可以使用串行监视器查看它。

 

 int x=analogRead(A0);
  序列号.println(x);

 

确定参考值后,编写 if-else 语句来检测睡意。如下代码所示,millis()函数用于了解眨眼发生的持续时间。如果它大于该值,则它会发出蜂鸣声以提醒驾驶员。在我们的例子中,持续时间为 1000 毫秒或 1 秒。

 

如果(x<400 && 标志==0){
    标志=1;
    t1=毫秒();
}
否则如果(x>400 && 标志==1){
    标志=0;
    t2=毫秒();
    序列号.println(t2-t1);
    如果((t2-t1)>1000){
        数字写入(2,高);
        Serial.println("警报!!!!!!!!!!!!!!!!!!");
        延迟(2000);
        数字写入(2,低);
    }
    别的;
  }
}

 

  嗜睡检测仪测试

  将程序成功上传到 Arduino 后,现在是时候测试其工作了。首先打开发射器和接收器两侧的电源。确保两端都通电。戴上带有眨眼传感器的太阳镜并尝试正常眨眼,传感器上应该有一个 LED 发光。如果不是,则尝试改变电位器以改变灵敏度,直到它成功检测到眨眼。检测成功后,通过延迟闪烁来尝试睡意,它应该通过蜂鸣器发出哔哔声。

  代码

  整数标志=0;

 

诠释 t1=0;
诠释 t2=0;
无效设置()
{
  序列号.开始(9600);
  pinMode(2,输出);

}
无效循环()
{
  int x=analogRead(A0);
  //Serial.println(x);

    如果(x<400 && 标志==0)
  {
    标志=1;
    t1=毫秒();
  }
  否则如果(x>400 && 标志==1)
  {
    标志=0;
    t2=毫秒();
    序列号.println(t2-t1);
    如果((t2-t1)>1000)
    {
      数字写入(2,高);
      Serial.println("Alert2!!!!!!!!!!!!!!!");
      延迟(2000);
      数字写入(2,低);
    }
    别的;
  }
}

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2418239.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-01
下一篇 2022-08-01

发表评论

登录后才能评论

评论列表(0条)

保存