由于交通量的巨大增加,道路事故成为人们关注的问题。事故的主要原因是由于夜间司机的困倦。疲劳和嗜睡是高速公路上重大事故的一些主要原因。解决此问题的唯一方法是检测困倦并提醒驾驶员。
因此,在这个项目中,我们考虑使用 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,低); } 别的; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)