智能安全驾驶测试
Binary Tree小队
张浩然 谢文倩 杜晓霞
队员:张浩然 谢文倩 杜晓霞
摘要
现代社会频频发生车祸事件,为了减少各类车祸事故的发生,我们设计了一个智能安全驾驶检测系统,在汽车准备行驶或行驶过程中随时获取驾驶员状态,收集数据,进行系统的运算与分析,判别驾驶行为,实时监测驾驶员的驾驶行为以及驾车环境,从而预先让驾驶员察觉到可能发生的危险,有效增加汽车驾驶的安全性和舒适性。该系统可以监测和保护车主的健康和安全驾驶行为。
第一部分 设计概述
1 .1 设计目的
调查显示,70%的交通事故都是由酒后驾驶或疲劳驾驶引起的。由于驾驶员自身操作原因所引发的事故高达 其余5%是由于道路条件、恶劣天气或车辆故障等外部原因造成的。因此,智能安全驾驶驾驶检测系统作为驾驶员安全管家,监控驾驶员行为,收集数据存储分析,实时显示重要空气指标,预测和警告潜在危险,可有效减少驾驶员疏忽或不良驾驶习惯造成的交通事故,具有非常重要的应用价值和现实意义。
1 .2 应用领域
(1)交通驾驶领域:智能安全驾驶系统是为驾驶安全开发的。智能安全驾驶系统不仅突破了传统车载检测的时空限制,提高了驾驶员了解自身安全的渠道,而且降低了驾驶员造成的交通事故率,提高了城市驾驶道路的安全性。它将是未来智能生活的重要组成部分。此外,智能安全驾驶系统的推广和使用将提高人们对驾驶安全的重视,让更多的人关注每次驾驶的安全。这种安全驾驶知识的普及,对提高公民素质从根本上减少疏忽造成的交通事故起着关键作用。这不仅有助于保护驾驶员和乘客的人身安全,还间接保护行人的出行安全,促进社会保障和城市管理
(2)家庭、医疗、教育、工业等领域:疲劳检测系统可用于任何需要肖像识别、疲劳和健康检测的领域,可防止许多事故。
1 .3 主要技术特点
- 传感器与单片机通信:各种传感器与单片机串口连接,收集到的数据通过串口传输到单片机。
- 运用esp8266WiFi数据传输模块:摄像头收集的数据通过esp8266传输到手机终端,并将终端图像分析结果传输到单片机。
- 使用复杂的图像分析程序:终端程序通过识别和分析摄像头拍摄的图像来判断驾驶员是否疲劳,并返回判断结果。
- 自动调节光强度:调用单片机AP3216C读取和判断环境光传感器模块,调整光强。
- 实时监测和显示温湿度:调用单片机AHT10温湿度传感器实时监测空气温湿度LED屏显示。
- 蜂鸣器信号输出:单片机与蜂鸣器连接,驱动后可进行鸣音报警。
- LED当监控驾驶员有不同的危险驾驶行为时,屏幕提示重要信息:LED屏幕将显示相应的危险驾驶类型,以帮助蜂鸣器提醒司机。
1 .4 关键性能指标
- 实用性强:随着车辆数量的增加,智能安全驾驶系统实用性强,为驾驶员的安全出行提供了良好的监控和保护。
- 受众广泛:智能安全驾驶系统可用于不同年龄段的人群和车辆。
- 便携性强;安全驾驶系统硬件封装后体积小,方便安装到不同大小的车辆。
- 实时性:摄像头实时拍摄,数据传输和智能处理算法总延迟<1s,使用时不会有滞后感,及时警告用户。
- 强大的功能:可同时监测多种气体和多种空气指标,具有摄像报警功能,实现物多用。
1 .5 主要创新点
- 除普通酒精监测系统外,还增加了二氧化碳浓度监测系统,以监测与二氧化碳含量相关的异常情况和车内空气质量。
- 加入温湿度传感器检测车内温湿度,并在LED测量的数据实时显示在屏幕上,还可以帮助判断司机是否疲劳驾驶。
- 通过环境光传感器AP3216C监控驾驶员视野中的光线强度并自动调节,省去了驾驶员在实际驾驶过程中频繁调节远近光灯的麻烦,解决了夜间驾驶时的光照问题。
- 实时监控车内情况,识别驾驶员使用手机、未系安全带、疲劳等违法行为,及时预警,降低事故发生率,确保人身财产安全。对于每种属性行为,蜂鸣器通过肖像分割图像分析返回分析结果进行声音预警。
第二部分 系统组成及功能说明
2 .1 整体介绍
该系统主要通过外部酒精传感器和二氧化碳传感器实时监测酒精和二氧化碳浓度,并通过蜂鸣器发出声音警告CH32V307芯片内部的环境光传播器来调节光线强弱,以及温湿度传感器检测车内的温湿度并显示在LED屏;此外,还通过摄像头、WiFi模块进行图片数据采集和传输,检测到疲劳驾驶时通过蜂鸣器鸣叫预警。
图2-1 整体功能一览
图2-2开发板结构图
图2-3系统总体框架图
图2-4系统实际连接图
2 .2 各模块介绍
(a)实现功能
MQ-3酒精传感器和MG-812二氧化碳传感器都具有双路信号输出(模拟量输出及TTL电平输出),TTL输出有效信号为低电平,当输出低电平时信号灯亮,可直接接单片机。
当测量的酒精浓度大于设定浓度时,酒精传感器 MQ-3的指示灯变亮,单片机IO口输出低电平,通过单片机使能蜂鸣器鸣音报警。
当测量的酒精浓度小于设定浓度时,酒精传感器 MQ-3的指示灯熄灭,单片机IO口输出高电平,蜂鸣器不鸣音。
当测量的二氧化碳浓度大于设定浓度时,二氧化碳传感器MG-812的指示灯变亮,单片机IO口输出低电平,通过单片机使能蜂鸣器鸣音报警。
当测量的二氧化碳浓度小于设定浓度时,二氧化碳传感器MG-812的指示灯熄灭,单片机IO口输出高电平,蜂鸣器不鸣音。
图2-5 MQ-3酒精传感器模块 图2-6 MG-812二氧化碳传感器模块
(b)实际应用
将传感器与单片机组装完成后放置车内,监测车内酒精浓度的变化。如果驾驶员饮酒后驾车,车内酒精浓度则会上升。当车内的酒精浓度超过预设值之后,蜂鸣器就会鸣音报警,可以有效警示驾驶员停止酒后驾驶行为。
同理,当车内空气浑浊或者有其他异常情况时,二氧化碳浓度超过预设值之后,蜂鸣器就会鸣音报警,可以提示驾驶员停车检查车内情况,或开窗透气以防疲劳驾驶。
(c)程序实现:
(a)实现功能
AP3216C内部包含数字环境光传感器(ALS)、接近传感器(PS)和-一个红外LED(IR)。带有IIC接口,支持高达400Khz通信速率,内置温度补偿电路支持多种工作模式(ALS、PS+IR、 ALS+PS+IR 等)。
环境光值读取程序过程:先向0x00地址,写入0x03,ALS+PS+IR激活,然后等待12.5ms,开始读取0XOC地址的ALS低位值,两次读取需要大概2-4us的等待时间,然后读取0XOD地址的ALS高位值,然后返回到等待12.5ms,继续循环下去。当环境光值超过或低于设定值时,自动调节光值回到设定范围内。
图2-7环境光传感器结构
表
2-1AP3216C相关寄存器配置
(b)实际应用
用AP3216环境光传感器控制车辆的照明系统,驾驶时,当驾驶员视野内光线过亮或过暗时,自动调节灯光亮度,以保证驾驶员视野清晰,避免因视线模糊造成车祸。
(c)程序实现:
(a)实现功能
AHT10温湿度传感器内置一个电容式感湿元件和一个高性能CMOS 微处理器相连接,采用标准IIC通信方式,支持较宽的工作电源电压范围,直接输出经温度补偿后的湿度、温度等信息,用户无需要对湿度进行温度补偿,便可得到准确的温湿度信息。
图2-8温湿度传感器AHT10内部结构
当传感器启动通信后,先发送命令 0xE1,使输出数据进入校准状态。在 0xE1 发送后需要等待不少于300ms 读取温湿度数据,而用于获取数据的指令是 0xAC。采集温湿度命令如下表:
表2-2
数据采集完毕后通过以下转换公式即可将温度和湿度显示在LED屏。
相对湿度RH都可以根据SDA输出的相对湿度信号SRH通过如下公式计算获得:
温度T都可以通过将温度输出信号代入到下面的公式计算得到(结果以温度℃表示):
(b)实际应用:
将系统组装完成后放置车内,监测车内温度与湿度的变化。每隔5秒左右会自动读取一次数据,并显示在屏幕上。实时向驾驶员显示车内的温度与湿度,以及辅助对驾驶者进行疲劳驾驶指数的判断。
(c)程序实现;
(a)实现功能
①利用OV2640摄像头实时拍摄驾驶员行为,通过esp8266WiFi模块上传图像到手机,手机发送数据到网页终端,终端反馈检测结果到开发板,当检测到驾驶员疲劳时,在LED屏幕显示具体的疲劳驾驶行为,如“cellphone,dangerous!”,且蜂鸣器鸣音警示;若未检测到疲劳驾驶,则在LED屏显示“SAFE”字样,驾驶员可正常驾驶。
图2-9 OV2640摄像头 图2-10 ESP82866模块
②疲劳驾驶行为图像分析
这个部分主要为云端网页终端对图像的识别和分析。首先,识别人体的轮廓范围,与背景进行分离。识别正常人像图片后,返回分割后的二值结果图、灰度图、透明背景的人像图(JPEG格式),并输出画面中的人数、人体坐标信息,可基于此对图片进行过滤、筛选。
人像识别成功后,进一步识别驾驶员的行为属性,可识别使用手机、未系安全带、双手离开方向盘、视线未朝前方、未佩戴口罩、打哈欠、闭眼7种典型行为姿态。对这7种姿态规范程度设定阈值和打分机制,当行为不规范程度超过阈值时对其进行打分评判,再根据所得分数判定是否为危险驾驶,如图:
图2-11 网页终端分析界面
疲劳驾驶行为图像分析过程可归纳为:
(b)实际应用
通过摄像头拍摄检测驾驶员是否为疲劳驾驶。若检测到驾驶员为疲劳驾驶,则蜂鸣器鸣音报警,LED屏显示对应疲劳驾驶行为,提醒驾驶员休息,这样可有效避免疲劳驾驶造成的交通事故。
(c)程序实现:
第三部分 完成情况及性能参数
图3-2硬件外壳实体图
图3-3 硬件组装示意图
3 .2 部份模块工作展示图
图3-4酒精传感器工作 图3-5温湿度传感器工作
图3-6 图3-7
正常驾驶时,LED屏提示“SAFE”
图3-8 图3-9
未系安全带,LED屏显示“no buckling up dangerous!”, 蜂鸣器鸣音报警
图3-10 图3-11
行车时打哈欠,LED屏显示“yawning dangerous!”,蜂鸣器鸣音报警
图3-12 图3-13
行车时使用手机,LED屏显示“cellphone dangerous!”, 蜂鸣器鸣音报警
图3-14 终端初始界面 图3-15正常驾驶图像分析结果
图3-16未系安全带图像分析结果 图3-17使用手机图像分析结果
图3-18未佩戴口罩、 图3-19未直视前方、闭目
打哈欠图像分析结果 图像分析结果
3 .5 系统工作性能表
项目 |
单位 |
最小值 |
典型值 |
最大值 |
备注 |
开机启动时间 |
分钟 |
<1 |
1 |
待定 |
包括单片机开机时间 |
酒精传感器数据传输时延 |
秒 |
<1 |
1 |
待定 |
数据传输有一定延迟 |
二氧化碳传感器数据传输时延 |
秒 |
<2 |
2 |
待定 |
数据传输有一定延迟 |
环境光传感器感光范围 |
nm |
无 |
400-700 |
无 |
根据传感器自身特性而定 |
温湿度传感器数据采集误差 |
温度:℃ |
0 |
0.5 |
待定 |
与传感器灵敏度有关 |
湿度:%RH |
0 |
±3 |
待定 |
||
Esp8266传输时延 |
毫秒 |
1 |
20 |
待定 |
数据处理和传输有一定延迟 |
蜂鸣器声音大小 |
分贝 |
待定 |
70 |
85 |
根据蜂鸣器自身特性而定 |
系统工作温度 |
℃ |
-10 |
26 |
50 |
根据各类传感器工作范围而定 |
图像像素 |
pixel |
无 |
1024*768 |
无 |
高清、夜视 |
图像分析准确度 |
% |
待定 |
90 |
100 |
程序识别分析有一定误差 |
表3-1系统工作性能表
3 .6 模块功能测试表
|
|
检测到酒精是否鸣音报警 |
是 |
检测到二氧化碳浓度高是否鸣音报警 |
是 |
是否实时显示温湿度 |
是 |
是否自动调节光强 |
是 |
摄像头是否能拍摄高清画面 |
是 |
Esp8266是否能传输图像 |
是 |
终端是否能识别分析疲劳驾驶 |
是 |
检测到疲劳驾驶是否能鸣音报警 |
是 |
LED屏是否能正常显示提示信息 |
是 |
表3-2 模块功能测试表
第四部分 总结
4.1 可扩展之处
(1)将系统设计得更加人性化,系统可以融入更多的人工智能技术,例如语音播报、语音对话、自动拨号等功能。
(2)可以组建制作可穿戴设备,使用现有成熟产品,测量驾驶员得体温、血压、血脂等指标,生成健康报表反馈给用户及其家人,更加精确地检测分析疲劳驾驶。
(3)可增加GPS定位功能,并反馈至家属手机端,若发生异常情况可自动定位寻找。
(4)应对不同程度的危险驾驶行为,采取不同的警告措施,如检测到酒驾会自动拨号联系家属并语音提示,看手机、闭眼等行为进行蜂鸣器鸣音警告。
4.2 心得体会
(1)嵌入式系统设计与开发是一个综合而富有挑战性的任务,并且有其特殊的学习方法。对于硬件学习,我们不能再按照以往的“先理论后实践”的步骤进行,而是要从实践中发现并解决问题,从而巩固对应的理论知识。
(2)嵌入式系统设计,既要熟悉软件编程知识,又要清楚各类硬件的工作方式。刚开始学习通信协议模块,觉得十分抽象难懂,反反复复解读代码才弄明白其工作方法。摄像头图像的传输失败是我们的拦路虎,尝试使用虚拟机、转换图片格式、换用不同的串口助手等方法都不能解决问题,最后回归图像的成像编码等原理性,才明白问题所在。
(3)解决问题的过程也是一个学习的过程。从前只明白对现成产品的使用,当我们自己要设计一个系统,便瞬间觉得知识不够用或者不会运用已有知识,于是不得不从实践运用的角度快速学习不会的知识。事实证明,学以致用才能真正掌握知识。
(4)团队合作也十分重要,大家通力合作各自发挥自己的长处,是一个提高效率的好方法。辛苦几个月后看着设计的系统正常工作,我们内心都充满了欣喜,也觉得所有的努力都是值得的。
第五部分 参考文献
[1]强宇佶,申双琴.智能家居嵌入式人脸识别门禁系统的设计与实现[J].科学技术创新,2020(26):112-113.
[2]杨峰,唐华,毛昀,袁勇,刘文.基于OpenCV的人脸识别设计与实现[J].信息与电脑(理论版),2020,32(16):108-110.
[3] 常留学,黄志成.基于Arduino的车辆防酒驾系统设计[J].汽车实用技术,2019(24):130-132. [4] 张博轩.基于STC12C5A60S2单片机的汽车防疲劳驾驶系统研究[J].中国高新技术企业,2016(11):26-27. [5] 周昊,蔡雄友,阮太元.基于单片机的智能汽车驾驶安全辅助系统设计与制作[J].福建电脑,2017,33(2):122-123
第六部分 附录
主要代码:
lcd_clear(BLACK);
alcho_flag = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)==SET?0:1;//检测酒精
CO2_flag = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1)==SET?0:1;
{
lcd_clear(BLACK);
lcd_set_color(BLACK,GBLUE);
lcd_show_string(80, 80, 32," ");
lcd_show_string(80, 80, 32, "ALCHO!");
GPIO_WriteBit(GPIOD, GPIO_Pin_3, RESET);
}
{
lcd_clear(BLACK);
lcd_set_color(0x18E3, RED);
lcd_show_string(64, 100, 32, "CO2!");
GPIO_WriteBit(GPIOD, GPIO_Pin_3, RESET);
}
{
lcd_clear(BLACK);
lcd_set_color(0x18E3, RED);
lcd_show_string(64, 50, 32, "ALCHO!");
lcd_show_string(64, 100, 32, "CO2!");
GPIO_WriteBit(GPIOD, GPIO_Pin_3, RESET);
}
{
lcd_clear(BLACK);
lcd_set_color(0x18E3, GREEN);
lcd_show_string(30, 100, 32,"SAFE.");
GPIO_WriteBit(GPIOD, GPIO_Pin_3, SET);
}
}
{