基于单片机的酒驾检测系统设计
2019-09-25李明熊奥运王成鹏
李明 熊奥运 王成鹏
摘要:为增加酒精传感器测量点数,同时监测传感器是否损坏,基于UCOS操作系统和STM32F4单片机,设计实现了多通道实时酒精测量与数据存储系统。传感序列共可连接10个MQ-3酒精传感器,并为每个传感器预留了DS18B20温度检测接口,实时监测传感器温度变化。传感序列任务设置相同优先级为10,采用时间片轮转调度实现序列任务间的切换。配置LCD触摸屏实现人机交互,基于STemWin设计制作了系统图形化界面,设置启动与停止按钮实现系统的启停,定义任务标志寄存器TASK_FLAG记录序列任务的运行状态。配置SD卡与FATFS文件系统实时存储酒精与温度数据,预留串口总线可与车载上位机进行通讯,提高系统扩展性。通过开发板试验可知,系统功能良好、运行稳定,可应用于多种酒精检测场合。
关键词:UCOS操作系统;STM32单片机;温度传感器;STemWin;FATFS
我国已开展了车载酒精检测装置系统的研发[1-3]。在汽车上安装使用预防酒后驾驶装置,主动防患于未然,让酒驾者不能驾驶车辆。目前汽车生产企业正致力于通过多种技术结合来检测驾驶者是否酒后驾车,这是当今研究的主流趋势。2007年,萨博在其新款的9-5系列车型上,率先使用了Alcokey酒精钥匙技术,而日本汽车厂家也在研发他们的酒精钥匙,其原理与萨博基本一致。德国Volvo公司开发了酒后驾驶闭锁装置,利用先进的燃料电池技术分析驾驶员呼出的气体,将分析结果通过无线信号传送给汽车电子控制系统,当检测结果达到20 mg/100 ml以上时,发动机无法启动。赵丽君[4]应用酒精传感器、STM32单片机等硬件,利用Altium Designer进行了电路设计,通过模糊算法将酒精数据进行数据融合,通过实验验证了该检测仪功能运行正常。秦永益、孙艳波等[5-6]基于STM32单片机,使用MQ-3酒精传感器和LCD等硬件,并使用了RT-Thread操作系统,设计制作了一套酒驾检测系统。程丽丽[7]等设计了一种需经过酒精检测才能启动汽车的系统,改善了传统酒驾系统检测的灵敏度。任建鹏[8]等采用前后双MQ-3酒精传感器自动进行检测,并由单片机对数字信号进行处理,利用将检测到的数据显示出来。通过对以往关于酒精检测系统研究分析可知,酒精检测主要采用的是单点检测设计,对传感器发生故障时不能自动检测出传感器離线及时显示通知用户;采用51单片机作为控制器的处理性能不佳[9-11];在软件设计中移植了操作系统[10,12]对数据处理和任务的划分具有重要意义,同时对传感器是否损坏的检测也是保证正常检测的必要措施。
本文基于UCOSIII操作系统,在STM32F4单片机上创建酒精检测序列任务,根据UCOS操作系统对相同优先级的任务进行时间片轮转调度,基于STemWin设计制作系统人机交互界面,并使用触摸屏实现数据显示与人机交互。系统配置SD卡用于存储酒精和温度数据,使用FATFS文件系统进行数据的读写操作,通过预留串口总线提高系统扩展性,方便与上位机进行联接。
1 系统硬件设计
1.1 系统整体设计
整体由酒精和温度传感器采集模块和STM32主控制器模块组成。在传感器采集模块上集成有MQ-3传感芯片和与其相对应的DS18B20温度传感器,传感器数量为20个,包括MQ-3传感器10个和DS18B20传感器10个。酒精检测指示灯分别对应MQ-3传感器,也为10个,当酒精检测任务序列切换到某一任务时,对应的检测指示灯点亮,而序列中的其它任务的指示灯熄灭。
STM32主控制模块包括STM32单片机、复位电路、触摸屏、LED指示灯、预留的串口总线、SD存储卡、功率放大器及其扬声器、短信发送器等。其中LED指示灯为周期亮灭的工作状态,该状态表明控制器已开始工作。触摸屏为电容式触摸屏,其分辨率及结构大小可根据需要进行配置,实验采用的是4.3英寸的液晶电容式触摸屏,并以此型号的触摸屏进行交互界面的设计。SD存储卡为系统的硬件存储组件,在单片机上集成存储设备是非常常见的,考虑到数据转移的简便性,选择移动SD卡,同时集成与其配套的数据转换芯片。功率放大器与扬声器是一个大功率的警报设备,与普通蜂鸣器相比,加入功放电路后可明显提高报警响度,同时功放芯片可外接音频电路,如车载音响系统、蓝牙系统等,实现优质音乐报警功能。短信发送器为系统的附属设备,配置该功能可完成对指定短信内容的指定终端发送,可购买该设备模块。
1.2 STM32F4单片机
F4系列的STM32单片机采用Cortex-M4 ARMv7-ME架构,使得其运算能力进一步提升,同时可开启DSP数据计算系统[13],让复杂的数学算法快速地完成。STM32F429的晶振频率最高可达168 MHz,拥有1 M的闪存存储器以及更多的GPIO接口。芯片内部集成有ADC转换通道[14]:ADC1、ADC2和ADC3。其中ADC1包括18个转换通道,ADC2包括16个转换通道,ADC3包括13个转换通道,如表1所示。试验可配置这些转换通道对酒精传感器的信号输出端进行模拟量的采集。通过GPIO端口配置DS18B20的单总线接收模式,实现对温度的采集。
1.3 酒精检测模块
酒精检测模块包括MQ-3酒精传感器和DS18B20温度传感器各10个。其中酒精传感器将酒精浓度转换成电信号,敏感元件需固定,由陶瓷管和二氧化硅敏感层、测量电极和加热器构成,其中加热器为敏感元件提供了工作条件,如图 2所示。传感器的AO输出端为模拟信号输出端,输出电压范围为0 ~5 V,检测酒精浓度在0.04 ~4 mg/L,所以通过STM32的GPIO模拟量输入功能开启,可直接与传感器的AO输出端进行连接。
DS18B20温度传感器的电路简单、测温精度较高、传输速度较快且价格实惠[15-16],其三脚直插式封装芯片的控制电路图如图 3所示,DS18B20采用的是单总线结构,GPIO引脚是DS18B20的通信总线,可连接到STM32单片机的通用GPIO引脚上实现数据间的通信。
1.4 触摸屏
4.3英寸电容触摸屏模块TFTLCD的分辨率为800×480,16位真彩顯示,驱动芯片为自带GRAM的NT35510,无需外加驱动器。触摸屏的最高刷屏速度在理论上可达78.9帧/秒,支持5点同时触摸,其操控效果很好,电路连接如图 4所示。与电阻式触摸屏相比电容屏只需轻微的手指触碰就能激活,很容易进行多点触摸,电容屏采用钢化玻璃材料,其硬度较大,使得使用寿命延长。
1.5 SD存储卡
SD卡的电路连接如图 5所示。SD卡是基于FLASH的存储卡,使用卡内智能控制模块进行FLASH操作控制,包括协议、安全算法、数据存取、ECC算法、缺陷处理和分析、电源管理、时钟管理等。电路配置好后可选择不同的存储卡容量,对酒精和温度数据的文本文件来说,1 GB的存储容量就已经足够。
1.6 D2822A功率放大器
使用功率放大器的目的是进一步提高报警器的响度,D2822A功放芯片可使用低电压驱动,进行单声道和双声道的配置,电路配置为单声道,音频输出端采用USB接口,如图 6所示。Audio为音频输入端,可与车载音频线缆连接,也可与短信发送器模块的音频输出端进行连接,同时,也可连接在其他音频输出设备上。此功放连接的扬声器需配置USB接口,接口的第一位和第三位为音频线,第二位和第四位为地线,如图6中的J4元器件。D2822A的IN2为地线连接,取消了一条声道进入,这样做的目的是保证扬声器的功率,同时又不引起功放芯片的过度发热。
1.7 预留串口总线电路
CH340G芯片可实现USB转接打印口、USB转接串口等,实现USB总线的转接的功能,在许多设备中都标配有该类型的接口。实验配置串口的波特率115 200 Hz,不使用奇偶校验位,采用8位数据帧传输格式,设置1位停止位,数据模式设置为收发模式,并使能串口中断,芯片外接晶振频率为12 MHz。其电路连接如图 7所示。
2 系统软件设计
2.1 系统的软件架构
系统的软件架构如图 8所示,包括了UXOSIII操作系统核心的移植代码、SD存储卡的驱动函数包、FATFS文件系统、STemWin的核心代码包、STM32的标准配置包、以及建立在此基础上的短信代码包和GPRS代码包。在这些底层软件的基础上,可进一步编写针对某些硬件的用户方法库,用户书写的集成多种界面的界面方法库。在库建立完成的基础上,本文再次向上抽象形成了公用头文件和公用任务函数,主函数在执行完所有硬件初始化后可直接访问公用任务函数,通过公用任务函数调用底层的核心代码,最终驱动相应的硬件运行。
2.2 系统的任务配置
系统的任务配置包括了两大部分:系统核心模块的任务划分和附属短信发送模块的任务划分,分别如表 2和表 3所示。在两个模块中start_task和led_task分别为系统任务的创建函数和系统工作指示灯任务。在led_task中配置指示灯的亮灭周期为1秒,用于表示系统正在工作。在核心模块任务划分中的emwin_task为界面任务,用于界面的创建和显示,并及时更新要显示的数据。酒精和温度数据测量任务为AT_task1~AT_task10,分别对应10个端口的测量任务,设置时间片长度为20毫秒。beep_task为打开功放的任务,任务需要酒精浓度和温度数据,通过判断酒精浓度是否超标和温度是否过高进行功放的闭开操作。MsgTask和GPRSTask分别为信息发送任务和GPRS定位任务,信息发送任务读取位置信息一并发送给相应联系人。
2.3 任务标志寄存器配置
定义任务标志寄存器的目的是方便查看任务的运行状态,在软件设计中定义任务标志寄存器的位逻辑功能如表 4所示。任务标志寄存器名称为TASK_FLAG,为32位的寄存器。根据任务标志寄存器的位值可判断测量任务是否开始或挂起、单个测量任务是否挂起等,如通过位0逻辑的值可判断测量任务序列是否全部开始,逻辑值为1则表示测量任务全部开始,反之则未全部开始。任务标志寄存器的默认值为0。寄存器的21-31位为保留位,不起逻辑判断的功能。
2.4 界面设计
界面最上层显示的是系统名称:Drunk Driving Detection System,界面的左上角显示了酒精测量单位指示为Alcohol: mg/L,温度单位指示为摄氏度:Temp: Celsius。界面右下角为系统的版本号:AT SYS 1.0.1。系统启动“START”按钮用于创建序列任务,此时,左右测量的任务开始时间片轮转调度运行,若有某些测量点任务处于挂起状态时,点击“START”按钮用于恢复序列任务运行。“STOP”按钮用于挂起序列任务,无论测量点任务全部开始还是部分开始都挂起所有测量点任务。测量点按钮AT共有10个:AT1~AT10,用于挂起或恢复测量点任务,测量点任务的数据包括两种:酒精浓度,酒精传感器温度。如果某些温度传感器没有测量传感器温度,而是暴露在环境中,则温度测量的是环境温度数据。测量得到的酒精浓度数据和传感器的温度数据是通过显示ANULL(ANULL1~ANULL10)和TNULL(TNULL1~TNULL10)来通知用户的,通过这些值的显示可得知某些传感器可能损坏或者离线了,人机界面的设计具有方便观察系统的工作状况,并及时发现损坏的传感器等功能。
2.5 系统的整体流程
在整体流程中并不考虑某些功能的具体流程细节。整体流程包括系统时钟初始化、STM32的HAL库的初始化、串口初始化、触摸屏及LCD的初始化、SPI总线初始化、SD存储卡初始化和FATFS文件系统的初始化、UCOSIII操作系统初始化等;任务的创建、人机界面的交互等。在任务池中,任务调度器在不同优先级的任务之间进行切换,在相同优先级任务间进行时间片轮转调度。
根据界面设计,在交互界面中,按住并释放“START”按钮,STM32单片机通过TASK_FLAG的位0逻辑值判断任务序列是否已经创建,如果已经创建或开始,则执行任务恢复操作。按住并释放“STOP”按钮,单片机通过TASK_FLAG的位0逻辑值判断序列任务是否已经开始,如果还未开始,不执行任何操作,如果已经开始,通过TASK_FLAG的位1逻辑值判断任务是否已经挂起,如果任务还未挂起,则将序列任务挂起。按住并释放AT按钮,单片机通过判断TASK_FLAG的相应位的逻辑值来判断某个测量点任务是否已经恢复或挂起。如按住并释放AT8按钮,通过TASK_FLAG的位1逻辑值判断序列任务是否已经停止,如果已经停止,不执行任何操作,如果没有停止,则判断TASK_FLAG的位13判断测量点任务8是否已经开始或恢复,如果处于挂起状态,执行恢复操作,如果已经恢复,则执行挂起操作。
2.6 测量任务流程
测量任务流程包括两大部分:酒精传感器数据测量和传感器温度数据测量。酒精传感器數据测量通过STM32的ADC功能即可完成,而温度传感器则需编制单总线才能完成对数据的采集。任务流程如图 11所示。通过ADC1的前十个通道即可完成与酒精传感器的连接,DS18B20的总线接口分别接在PG0~PG9十个引脚上。
中ad为酒精的数字量值,通过数字量值与MQ-3传感器的测量范围进行对比可得到酒精的浓度数值。temperature为存储温度数据用的short类型变量,要得到温度数据需要启动温度测量函数,温度测量函数中的tem为温度暂存变量,函数出口返回tem给调用它的变量赋值。
2.7 功放与短信发送流程
报警和短信发送为酒精浓度超标时需要执行的任务,报警任务的功能是开启功放电路,接收报警音频,该任务较为简单,易于实现。短信发送任务的功能是将指定的信息和位置信息发送给相关的联系人,功放与短信发送流程如图 12所示。
图中的ad为酒精浓度暂存变量,temp为温度数据暂存变量,err为操作系统错误返回变量。图中Amax为判断是否酒驾的酒精浓度最小值,TMax为传感器温度的最大值,无论酒精浓度过大还是传感器温度过大都会启动功放电路和短信发送器,短信发送由短信发送器完成,用户可根据需要定制发送器的功能。
3 系统调试
实验装置如图 13所示,装置组成主要包括:酒精传感器、温度传感器、STM32F4开发板、触摸屏、排针、LED指示灯、短信发送器等,其中传感器和短信发送器均外接。
根据开发板调试可得:
(1)人机界面显示与更新正常。通过“START”按钮实现序列任务的创建与恢复。通过“STOP”按钮实现序列任务的挂起。通过AT按钮实现测量点任务的挂起或恢复。
(2)传感器数据测量正常。通过测量点任务可自动检测哪些点已经连线并开始了数据测量任务,数据显示在触摸屏对应的位置。
(3)任务标志寄存器赋值正常。通过寄存器的位逻辑功能正确判断了序列任务的开始、恢复、挂起,正确判断了测量点任务的恢复和挂起。
(4)音频功放和短信发送器能够正常开启。当酒精浓度过大或者温度值过大时都能够正常开启功放继电器和短信发送器。
4 结论
基于STM32F4单片机、UCOS操作系统和界面设计等设计实现了一套酒精浓度检测系统。设计交互界面方便观察测量数据和实时通知用户故障传感器,实现了测量点的自检测功能,并可根据需要恢复或挂起某个测量点任务。预留USB转串口接口为上位机开发与数据处理提供了技术支持,功放电路设计提高了报警音频响度,外接短信发送器实现指定信息的指定人发送。系统调试结果表明该系统运行稳定,顺利完成了给定功能。
参考文献:
[1] 芦芝萍.基于物联网的嵌入式酒驾自动检测系统设计[J].物联网技术, 2014,4(7): 8-11.
[2] 黄志鹏.预防酒驾的新型无钥匙启动系统研究[D].广州:华南理工大学, 2014.
[3] 孙恩民.一种基于单片机的汽车驾驶员酒驾检测系统[J].汽车实用技术, 2018(17): 179-181.
[4] 赵丽君.非接触式车载酒精检测仪研制[D].马鞍山:安徽工业大学, 2017.
[5] 秦永益.基于STM32的车载酒精检测系统设计[D].曲阜:曲阜师范大学, 2014.
[6] 孙艳波, 苏凤, 刘美丽.基于STM32的车载酒精检测系统的设计[J].电子技术与软件工程, 2015(24): 112-113.
[7] 程丽丽, 刘志刚, 毕明岩.基于平台Arduino的防酒驾汽车安全启动系统[J].汽车安全与节能学报, 2018,9(3): 265-271.
[8] 任建鹏, 李勤.基于单片机的智能防酒驾控制系统[J].科技创新与应用, 2017(20): 16-17.
[9] 李晓静, 刘书伦.基于物联网的嵌入式酒驾智能辨识系统[J].制造业自动化, 2012,34(21): 33-36.
[10] 高炎萃, 武一, 都鑫, 等.基于单片机的电动机保护装置的设计[J].四川理工学院学报(自然科学版), 2010,23(1): 102-104.
[11] 孙自文, 伊建玉, 夏梅.车载酒精测量及限制车辆启动系统研究[J].时代汽车, 2018(9): 23-24.
[12] 范县成, 孙新柱, 房稳, 等.基于STM32F407的新型迷宫机器人系统设计[J].四川理工学院学报(自然科学版), 2016,29(1): 48-53.
[13] 徐宇宝, 林华, 王子权.基于STM32智能温控自调速风扇PID控制研究[J].齐齐哈尔大学学报(自然科学版), 2018,34(5): 7-11.
[14] 王子权.基于STM32的PWM调光器[J].电气自动化, 2018,40(6): 98-100.
[15] 黄琦, 韩广源, 吴瑞东, 等.基于STM32的高精度恒温控制系统设计[J].仪表技术与传感器, 2017(5): 71-74.
[16] 陈富忠, 翁桂琴.智能温控调速风扇的设计[J].上海电机学院学报, 2009(4): 297-300.
Abstract: In order to increase the number of alcohol sensor measurement points and monitor the sensor damage, based on UCOS operating system and STM32F4 microcontroller, multi-channel real-time alcohol measurement and data storage system is designed. A total of 10 MQ-3 alcohol sensors can be connected to the sensing sequence, and the DS18B20 temperature detection interface is reserved for each sensor to monitor the sensor temperature change in real time. The sensing sequence task has the same priority level of 10, and uses time slice rotation scheduling to realize switching between sequence tasks. The LCD touch screen is configured to realize human-computer interaction. The system graphical interface is designed based on STemWin. The start and stop buttons are set to realize the start and stop of the system, and the running status of the task flag register TASK_FLAG record sequence task is defined. The SD card and the FATFS file system are configured to store alcohol and temperature data in real time, and the serial port bus can be reserved for communication with the vehicle host computer to improve system scalability. Through the development board test, the function of the system is stable and can be applied to a variety of alcohol detection occasions.
Key words: UCOS operating system; STM32 singlechip; temperature sensor; STemWin; FATFS
責任编辑 祁秀春