1. 引言
由于人们对生活品质的提高,汽车走入越来越多的家庭,同时酒文化的深入人心,导致车祸也频繁发生。如何避免酒后驾驶成为维护社会安全的主要问题之一 [1] 。研究显示,当人的身体中的乙醇含量达到一定阈值时,人的大脑对突然发生事件的反应能力将急速降低,特别在驾车时,一旦出现紧急状况,将会很难处理,最终导致交通事故。大量统计学数据表示,酒后驾驶车辆发生车祸事故的机率是正常驾车的16倍左右 [2] [3] [4] 。目前,我国的车载酒精检测系统对乙醇含量的检测尚未成熟,所以研究和制作有车载酒精检测仪越来越重要。近年来,现代检测技术取得较大的进步,传感器检测的手段渐渐的出现在人们的视野中 [5] 。在此背景下,本文利用现代传感器检测技术、SIM800C和STM32,设计出可以自动检测车内空气中乙醇含量的乙醇检测系统,可以实现酒后驾车者的数据信息采集和发送的功能。本文所设计的检测系统有利于消除酒后行驶抽查的随机性,可以更好的防止酒后驾驶。且可以满足网络化和便携化,可以实现无线数据采集,同时本系统成本低、便于维修。
2. 系统结构设计
系统中由主控模块(STM32F103ZET6)、数据采集模块(MQ-3、DHT11、HC-SR04)、通信模块(SIM800C)、显示模块(TFT-LCD)以及报警模块构成。从综合性能和成本考虑,选用一款以Cortex-M3为核心的 STM32F103ZET6做控制器。其相比于传统单片机,处理速度更快,性价比更高。酒精检测传感器采用的是MQ-3,MQ-3酒精检测器件它的电阻率就会随着乙醇浓度增加而减少。这种电阻率的变化可以通过设计的电路变为电信号的变化,从而检测出空气中的乙醇含量。温湿度检测模块采用DHT11数字温湿度检测器件。模块测距主要采用HC-SR04超声波测距传感器,系统结构如图1所示。

Figure 1. Car alcohol detection system structure
图1. 车载酒精检测系统结构图
3. 硬件电路设计
由于车载酒精检测系统要求实时性好,稳定性好,性价比高。从综合性能和成本考量,选用一款以Cortex-M3核心的32位增强型ARM微处理器STM32F103ZET6做为车载酒精检测系统的主控芯片。其主要负责将传感器采集到的数据进行处理,然后与事先设定的阈值进行比较,如果未超出设定阈值,则继续检测,如若超出,则控制系统进行通信与显示。
3.1. 酒精检测电路设计
当空气中含有乙醇分子时,MQ-3的电阻率就会随着乙醇的浓度增加而减少。这种电阻率的变化可以通过设计的电路变为电信号的变化,在将电信号的变化转换为浓度的变化,从而检测出空气中的乙醇含量。
图2所示的电路中,有两种输出,一种是输出模拟量,一种是输出数字量。如果选择测量数字量,可以通过改变电阻Rp的值,来控制输出0或者1。正常工作时,将200 ppm浓度酒精所对应的电压,设置在比较器的正极,当检测的浓度高于酒驾浓度时,此时数字量将变为0,此时可以检测到是否酒驾。如果选择测量模拟量,可以与STM32的AD转换引脚相连,此时可以直接将模拟电压读入STM32,然后调用算法程序,将读到的电压值转换成酒精浓度。
3.2. 温湿度检测电路设计
DHT11有专用的数字模块采集和温湿度检测传感技术。DHT11数字温湿度检测器件可以直接和STM32连接。DHT11的供电电压为3~5.5 V。当DHT11上电以后,要等待一秒,等待期间不用发送命令。其数据包由5个Byte (40 Bit)组成。
3.3. 超声波测距检测模块设计
由于系统采集车内酒精浓度时,驾驶员与传感器之间的距离会影响测量的结果。一般距离越远,测到的酒精浓度就会越低。为了更精确的检测酒精浓度,本系统采用超声波测距模块测量驾驶员与测试系统的距离,然后根据数学模型换算出驾驶员口腔附近的酒精浓度,这样测得的酒精浓度将更精确。
本模块采用HC-SR04测距传感器,其测试电路如图3所示。HC-SR04选用IO口触发从而进行测距,

Figure 2. Alcohol concentration detection circuit
图2. 酒精浓度检测电路

Figure 3. Ultrasonic distance measuring module circuit
图3. 超声波测距模块电路
当给IO口持续10 μs的高电平时,HC-SR04将会自动发送8个频率为40 khz的方波,然后将自行检查有没有信号返回。如果此时有信号返回,则IO口就会产生一个高电平,并且高电平持续的时间就是超声波发送出去到返回的时间。所以,测量的距离 = (高电平持续时间*声音传播速度(340 M/S))/2。
在图3中,可以通过改变R3的阻值,改变超声波的测距范围。当R3的阻值越大,超声波测距的范围就越大,测距的角度也会越大,但是此时会非常容易检测到前方两侧的物体。但当R3的阻值变小时,可以将测距角度变小,随之测距的范围也会相应的减小。当R3的阻值为
时,此时超声波测距范围最远为
,测距角度小于
,当R3的阻值为
时,超声波测距范围最远为
,测距角度小于
。一般测距模块中,出厂默认R3的阻值为
,即测距最远距离为
。
3.4. 电源电路设计
因为汽车内部有12 V电压供电,所以需要电平转换来给STM32供电。本系统采用的是MP2359是DC-DC芯片。DC_IN是接直流电源,电压输入范围是6~24 V。可以将输入的电压转换成5 V电压。其中D4防止电源反接的二极管。
在系统工作时,由于MQ-3乙醇检测器件的模拟输出电信号的范围是0~5 V,而主控芯片STM32F104的ADC最大电压为3.3 V,所以本系统需要进行电平转换,将5 V变为3.3 V后,以保证车载酒精检测系统的ADC正常工作。
1) 5 V转3.3 V最常用且简单的方法就是电阻分压法。5 V电平经一个1.6 k电阻和一个3.3 k电阻分压,此时分出的电压就是3.3 V。
2) 另一种方法就是使用电平转换芯片。因此在本系统中,我们采用的是AMS1117作为电平转换芯片。电容是为了滤掉纹波。
3.5. 显示电路设计
显示电路是采用16位数据线并行方式和外部相连接,之所以不采用8位数据线的方式,是因为当数据量很大时,8位数据线连接方式,会比16位数据线连接方式慢一倍以上。CS为TFTLCD片选信号,WR为STM32向TFTLCD写入数据的接线口。RD为STM32从TFTLCD读取数据接线口。D [15:0]是16位双向数据线与STM32的I/O口进行通信。RST是硬复位TFTLCD。
3.6. 通信电路设计
通信电路如图4所示,通信模块可以直接将SIM800C与STM32连接,其中通信模块的RXD与TXD接外部设备的输出和输入端。通过STM32发送AT命令可控制SIM800C数据传输。SIM800C与STM32连接图如下所示。55、56、57是电源输入;62、63、64、65连接GND。通信模块的26脚外接电源,可以给SIM800C供电。PWRKEY脚可以控制SIM800C的开关机,其实现方式是通过给PWRKEY引脚一个低电平信号,并持续1秒钟的时间,然后释放,就可以实现SIM800C开机,如果要实现通信模块关机,则需重复开机操作。其中STATUS和NETLIGHT是SIM800C的运行状态和网络状态指示灯,不使用该引脚时,保持悬空状态。
4. 酒精浓度检测算法设计
4.1. 酒精浓度扩散的数学模型
4.1.1. 模型的假设
1) 酒精浓度的传播可以简单地看做是空中某一点向四周等强度的瞬时释放,酒精在无穷空间扩散,不计风力和大地的影响。
2) 酒精浓度的扩散服从扩散定律。即单位时间通过单位法向面积的流量与它的浓度梯度成正比。
4.2.2. 模型的建立
将吹气点选为坐标原点,将吹起时刻记为
。在时刻
的车内空间中任意一点的
的乙醇浓度记为
。由假设2可知,单位时间通过单位法向面积的流量为
(1)

Figure 4. Communication interface circuit
图4. 通信接口电路
其中
是酒精在空气中的扩散系数,
为酒精的浓度梯度,负号表示酒精浓度高的地方向酒精浓度低的地方扩散。考察车内空间域
,设
的体积为
,包围
的曲面为
,
的外法线向量为
,则在
内通过
的流量为
(2)
而
的酒精浓度的增量为
(3)
由质量守恒定律
(4)
根据曲面积分的奥–高公式
(5)
是散度记号。根据(1)-(5)式,由积分中值定律得
(6)
这是偏微分方程无界区域的抛物线型偏微分方程。由假设1可知,系统的初始条件可为作用在坐标原点的点源函数,记为
(7)
表示呼气时释放的酒精总浓度,
是单位发光强度的点源函数。
方程(6)满足条件(7)的解为
(8)
表达式(8)显示,在任意时刻
时,酒精浓度的等值面为
所表示的曲面(球面),其中
的值越大,即球的半径越大,
的值将越小。
4.2. 数据处理
4.2.1. 限速滤波法
本系统为了防止突然的干扰信号,采用三次采样值来决定结果。设转换时刻
、
、
,转换数值为
、
、
。限速滤波算法即流程如下:
当
时,则
作为结果;
当
时,则
不作为结果,但继续保留,继续转换;
当
时,则
作为结果;
当
时,则
。
4.2.2. 滑动平均滤波算法
本系统为了防止周期干扰,在限速滤波后加入滑动平均滤波法,如图5所示。连续取12个AD转换值放入一个队列,队列长度固定为12,每次取这12个AD转换值的平均值作为有效数据处理。当有新的AD转换值时,将这个新的AD转换值放入队尾,丢掉队首的旧数据。这种方法可以很好的抑制周期干扰。
4.3. 呼气中乙醇含量和血液中乙醇含量的关系
由于呼气中乙醇含量与血液中乙醇浓度的换算不是固定不变的,会随着温度,身体状况,时间等因素的改变而不断的改变,所以不能简单地乘以2200进行换算,这样算得的血液中乙醇分子的浓度不够
准确 [6] - [12] 。由于呼气中乙醇浓度和血液中乙醇浓度几乎成一次函数关系,所以本系统将根据BA307中呼气中乙醇含量与血液中乙醇含量的对照表进行一次拟合,将其关系变为一个线性函数。此时得到的转换将不会产生较大的误差。用MATLAB中的拟合工具箱cftool,得其函数关系为
,其拟合图如图6所示。
5. 系统调试
系统上电,进入系统初始界面,此时可以通过按KEY0键进入密码输入界面。进入输入密码界面后,输入正确的6位密码即可进入检测,如若输错密码,则无法检测。当输入密码正确后,进入自动检测界面,此时系统可以检测酒精浓度以及车内温湿度,并显示出来。如果检测到酒精浓度超过设定的阈值,则进入酒驾提醒界面,并且可以通过按键KEY1进入通信选择界面。按下KEY1键进入通信选择界面,此界面显示的为运营商和信号质量以及电池电量,通信选择提示信息。若按下KEY0键,则进入拨号界面,此时LCD弹出键盘,使用者可以输入电话号码,进行呼叫。如果按下KEY1键,则进入短信发送选择界面。此时,可以选择手动发送或者自动发送,选择手动发送时,LCD显示屏显示短信内容,并弹出键盘,此时可以通过按键输入号码。如果选择自动发送短信,可以按下按键,此时短信可以发送出去(图7)。

Figure 6. Curve fitting results (wherein the abscissa is breath alcohol concentration mg/L, and the ordinate is blood alcohol concentration mg/100mL)
图6. 曲线拟合结果(其中横坐标为呼气酒精浓度mg/L,纵坐标为血液酒精浓度mg/100mL)

Figure 7. Overall physical connection diagram
图7. 总体实物连接图
6. 总结
本系统以酒精检测为研究对象,设计一种车载酒精自动检测系统,传感器采集车内的酒精浓度、车内温湿度以及测试距离。为了防止周期干扰和脉冲干扰,采用限速滤波法和滑动平均滤波法两种数字滤波算法进行处理数据分析,并分析空气和血液中乙醇含量的区别,获得乙醇含量转换关系,采用MATLAB进行一次多项式拟合,从而获得两者之间线性关系。采用酒精浓度扩散数学模型建立空气中和口腔中酒精浓度的关系,从实现酒精浓度的精确检测。实验结果表明,该系统能够精确检测酒精浓度,具有很好的使用价值。