基于STM32的酒精检测仪设计
当前随着我国经济水平的迅猛提升,人们的收入和以往相比也得到了显著提高,此时买车的人越来越多,而因为酒后驾车,从而引发的交通事故也不断增多,在其他方面由于酗酒或特殊环境,也发生了许多令人感到悲伤遗憾的事故,酒精检测仪可以有效地减少这方面的事故发生。在本文中主要介绍了基于STM32F103C8T6单片机设计的酒精检测仪,此次设计的这个检测仪主要由三部分构成,首先是OLED显示屏;其次是MQ-3乙醇气体
系统简介
当前随着我国经济水平的迅猛提升,人们的收入和以往相比也得到了显著提高,此时买车的人越来越多,而因为酒后驾车,从而引发的交通事故也不断增多,在其他方面由于酗酒或特殊环境,也发生了许多令人感到悲伤遗憾的事故,酒精检测仪可以有效地减少这方面的事故发生。
在本文中主要介绍了基于STM32F103C8T6单片机设计的酒精检测仪,此次设计的这个检测仪主要由三部分构成,首先是OLED显示屏;其次是MQ-3乙醇气体传感器,最后是单片机,其型号为STM32F103C8T6。在预热之后,此检测仪能够利用自身的气体传感器来对空气里酒精浓度情况进行采集,将采集的信息依次由检测仪的A/D转换电路以及单片机处理之后,酒精浓度值就能够显示于显示屏中,此时检测仪的检测功能便得以实现。此设计可以在各种环境下进行酒精浓度的检测,可用于交通安全或酒厂、食品加工工厂等地点,有效提高安全性。
指导老师签名:
关键字:STM32F103C8T6单片机 MQ-3传感器 OLED显示屏
1 前 言
1.1课题研究的背景和意义
所谓酒精检测仪指的是这样一种工具,它能够对酒精含量进行检测,通常被交警拿来对汽车驾驶人员有没有饮酒以及饮酒具体情况来进行检测,或者被使用于在一些需要确保酒精呼入量在一定范围之内的场所中。
通过对酒精检测仪出现原因进行分析能够发现,它是由于我国经济的发展,从而导致我国拥有汽车的人越来越多,虽然汽车的大众化是人类文明进步的一大步,然而凡事有利有弊,在人们的生活质量提高了的同时,也埋下了许多安全隐患。在国内,酒桌文化由来已久,人们喜欢通过聚餐喝酒来加深互相的感情或者是合作关系,这种情况下,驾车前往的人占了大部分。但是许多人并不重视酒精对于人们驾车带来的影响,这种心理导致了很多悲剧的发生。实际上,酒精对于人脑的影响很大,会让人在突发事件时无法做出正确的判断,在驾车时,突发事件时无法做出正确判断往往是致命的。在此基础上,酒后驾驶行为的不断增加也就导致酒驾引起的交通事故的数量和严重程度都在不断增加。随着时代的发展,汽车的安全性能逐渐在提高,各地的安全措施也在不断增加,然而由于饮酒驾车引起的交通事故还是占了各类交通事故中的大部分,不止在安全方面,在经济方面也严重影响了社会,在每一起酒驾肇事事件中,无论损害轻重,都会引起不小的社会影响。于是中国公安部在2009年8月在各地开始大幅度对酒后驾车行为进行排查,大量使用且十分有效的就是酒精检测仪。只要驾驶人员对着酒精检测仪呼气,就可以当场检测出驾车人员是否饮酒,根据酒精检测仪上显示的数值就可以判断驾车人员是否达到了醉酒开车的标准,处于什么状态在进行驾驶,从而采取有效的安全措施,避免酒后驾车导致的交通事故的发生。
1.2课题研究的发展概况
对血液酒精浓度进行直接检测毫无疑问是最精确的检测手段,然后此手段不但检测起来十分困难,而且检测过程也并不简单,直至1927年洛杉矶的一位医学博士进行了测定醉酒的研究,自此人们可以通过测试被测者呼出气体来检测被测者的血液中的酒精含量了,直到20世纪70年代末期,检测血液中酒精含量的仪器才升级成为电子产品。
通过对酒精检测仪进行分析能够发现,它的种类十分丰富,其中使用最为频繁的检测仪主要有两种,一个是燃料电池型,它与半导体型酒精检测仪相比,具有稳定,精度高,抗干扰性强的优点,其传感器是通过白金电阻表面进行催化剂层的制备,当温度达到一定标准时,其表面就会有可燃气体燃烧起来,此时白金电阻的温度也会慢慢提升,电阻值也就出现改变,通过其具体改变情况就能够了解到酒精浓度情况。由于在制作此类检测仪的传感器时不但需要花费很多成本,而且制造起来也不容易,因此它的成品价格并不低,对于大部分个人用户来说,不需要精准度极高的酒精检测仪,仅保证日常使用即可,所以并不适用于个人,在市场方面难以有更好的发展。一个是半导体型,它使用的半导体材料为金属氧化物材料,其原理是当温度达到一定标准时,环境气体成分就会发生改变,此时电导率也会发生改变。此检测仪拥有的传感器主要生产国家并非我国而是日本,但是伴随着我国市场不断的发展,尤其是民营资本的进一步发展,我国半导体行传感器的发展必将超过日本。目前红外线型酒精检测仪的技术也已经十分成熟,研究表明,人体酒精浓度和其皮肤吸收的红外线数量存在十分紧密的联系,正是对这一现象的运用,从而完成了红外线型酒精检测仪的设计工作,但是此类检测仪存在许多缺点,比如使用起来十分复杂,而且结构也不简单等,因此无法成为常用检测仪。而气体色谱分析型主要是依靠检测每种气体的特定热导率来进行检测酒精浓度,然而气体色谱分析型酒精检测仪可应用范围较窄,限制因素较多且价格昂贵,难以推广使用,比色型酒精检测仪也由于价格高昂且使用不便而难以广泛应用,民用酒精检测仪大多为半导体型,警用大多为半导体与燃料电池混合型,且警用酒精检测仪半月需校准一次以保证精度。
现在的酒精检测仪大多采用可替代吹管,不仅可以保障检测精度,还有足够的卫生保障。吹管对于保证检测精度非常重要,通过吹管,可以采集到大量几乎不含空气杂质(非检测对象的气体)的被测者呼出的气体,所以吹管的有无对于精准度影响较大。现在的酒精检测仪相比起传统的机械检测或酒精计已经有了很大的突破,无论是安全还是检测的精度方面。
1.3课题研究的主要内容
此次设计主要从两方面着手,首先是硬件方面的设计,也就是对MQ-3乙醇气体传感器的设计,在设计时必须对此传感器的特点以及如何应用等内容进行充分研究;其次是软件方面的设计,其主要研究内容为通过STM32F103C8T6单片机编程将测得数据显示在OLED显示屏上。
2 系统方案设计
2.1单片机芯片设计
方案1:选择51单片机
此单片机能够对指令系统进行兼容,不但拥有良好的运算能力,而且存在能耗低、体积小、成本低、抗干扰性能好等优点。
方案2:选择STM32单片机
此单片机属于系列单片机,其生产者为ST企业,此单片机不但拥有良好的性能,而且也不会产生较大能耗,不到那成本不高,而且具有一流的外设,应用十分广泛。
51单片机优点明显,然而比起STM32单片机,却有许多不足存在,比如软硬件负担过大,并没有良好的保护能力等等,所以此处选用STM32单片机作为此设计的主控芯片。
2.2酒精检测模块设计
方案1:燃料电池型电化学酒精传感器
此类传感器的电极选择的是贵金属白金,当讲特种催化剂放入燃烧室之后,酒精燃烧之后就会发生转换,其能量将变成电能,此时电压就会出现在两电极上,通过电压能够得到模拟信号,然后在外接负载上电能会出现消耗,此时燃烧室种酒精浓度越高,电压值就越高,所以转换模拟信号,令其变成数字信号之后,就能够直到酒精含量情况。这种催化剂对其他非酒精气体没有任何反应,所以此种传感器精度高,抗干扰性也极强。
方案2:半导体型酒精传感器
此传感器的原理为:当半导体接触酒精气体后,其表面就会出现两类反应,这两类反应一个是还原反应;一个是氧化反应,这两类反应将会改变敏感元件的阻值,然后电导率就会发生改变,这一改变情况在经过转换后就成为输出信号,此信号能够对酒精浓度情况进行反应,然后利用AD模块来进行模拟信号获取,再对其进行转换操作,令其变成数字信号,以此来检测空气中的酒精浓度。半导体型酒精传感器在各种环境下都可以正常工作,受环境影响较小。
能够发现,和方案2的传感器相比,方案1的传感器拥有更好的抗干扰性以及精度,然而价格较贵且本身制作复杂,因此本文选择MQ-3酒精传感器为此次设计的检测仪需要的传感器。
2.3显示模块设计
方案1:LCD1602显示屏
LCD1602显示屏可直接与单片机接口,且显示内容多、外观美观、不易损坏,但有亮度不足、不能很好显示图形的缺点。
方案2:OLED显示屏
OLED显示屏自发光,不需要背光源、构造简单、使用时便携方便。
OLED显示屏相比起LCD1602显示屏,显示内容更多、更加灵活,清晰度也更高且不受环境光照影响,占用空间小。所以本次设计选择OLED显示屏为此次设计的检测仪需要的显示屏。
3 硬件部分设计
3.1 STM32单片机
3.1.1 STM32单片机简介
图3.1.1-1 STM32F103C8T6引脚图
ARM的Cortex™-M3处理器是最新一代的嵌入式ARM处理器,它为实现MCU的需要提供了低成本的平台、缩减的引脚数目、降低的系统功耗,同时提供卓越的计算性能和先进的中断系统响应。ARM的Cortex™-M3是32位的RISC处理器,提供额外的代码效率,在通常8和16位系统的存储空间上发挥了ARM内核的高性能。STM32F103xx增强型系列拥有内置的ARM核心,因此它与所有的ARM工具和软件兼容。
此次设计选择的主控制器型号为,它是生产者为ST企业。通过该企业的官方数据能够了解到此控制器具体规格内容,即它不但拥有高速存储器,而且其频率最大能够达到72MHz,不但存在外设能够和APB总线相连,而且还拥有增强1/O端口。其中不论哪一型号的器件都拥有以下元件,首先是PWM定时器,数量为一个;其次是十六位定时器,数量为三个;然后是十二位ADC,数量为两个;结婚证而实通信接口,即CAN、USB、USART、SPI、IC接口,其数量分别为、、、、个。
通过上述信息能够发现,此主控制器拥有良好的性能,而对单片机类型进行对比能够发现,和本文选择的单片机进行比较,其他各类型单片机都有各种不足存在,而此次设计选择的处理器不但拥有良好的性价比,而且从外设以及Flash等方面来看都十分优秀。
3.1.2 STM32单片机特性
第一是存储器,该存储器的达到20K字节。
第二是内核,其CPU为,频率最大能够达到,此内核不但拥有硬件除法,还拥有单周期乘法,当存储器为零等待周期时,此CPU能够达到。
第三是电源管理,它的电压不低于2v,不超过3.6v,由于此单片机内置有电压调节器,所以通过调节器能够对电压进行调节,令其达到1.8V,如果主电源掉电的时候,它就能够经由脚为两类器件进行电源的提供,这两类器件一个是备份寄存器;一个是时钟;同时单片机还存在、电路,如果供电电压为2V,那么系统能够顺畅运行。
第四是复位和引脚:其引脚数量为四十八个,其外设能够和两条APB总线相连,此单片机能够支持的复位形式主要有3种,即备份区域、上电以及系统复位,其中最后一种复位形式能够令寄存器变为复位状态,若是出现五种情况时,就会出现系统复位。
第一种情况:复位。
第二种情况:外部复位。
第三种情况:低功耗管理复位。
第四种情况:复位。
第五种情况:复位。
若是出现两种情况时,就会出现电源复位:
第一种情况:单片机从待机这一模式返回。
第二种情况:复位。
能够发现,在备份区域还存在复位两个,它只会对备份区域造成影响,若是出现两种情况时,就会出现备份区域复位:
第一种情况:VBAT或VDD掉电时。
第二种情况:软件复位时。
第五是时钟:系统时钟可以由、以及三类时钟源驱动。其二级时钟源有两种情况。一个是低速内部,为,一个是低速外部晶体,为,前者能够对和独立看门狗进行驱动;后者能够对进行驱动。若是并未被使用,那就是两类时钟源中不论哪一个都能够独立展开启闭操作,此时系统功耗就能够获得优化。
第六是定时器:主要由三类构成,首先是十六位定时器,其数量为三个,作为高级控制定时器,它主要功能是控制电机;其次是看门狗定时器,其数量为两个;最后是系统时间定时器。后两者为独立定时器,并不会对资源进行共享,但是却能够同步操作。
第七是通信接口:它拥有、、位/秒、、接口各、、、、个。
第八是模数转换器:此转换器为十二位,数量为两个,其转换范围不低于0,不超过3.6V,转换时间则为,同时它还具备两类功能,一个是保持功能;一个是双采样功能。
第九是DMA:此控制器的通道总共有十二个,其中五个属于,另外七个属于,当外设对储存器提出访问请求时,各通道便需要对这些请求进行管理。同时它还存在仲裁器能够对DMA请求优先权进行协调。
3.2 MQ-3传感器
3.2.1 MQ-3传感器简介与工作原理
通过对气敏传感器进行分析能够发现,它的类型十分多样,比如接触燃烧式以及半导体气敏元件等,其次选择的则是MQ-3乙醇气体传感器,它的类型属于半导体气敏元件中的电阻型。
通过对此传感器的原理进行分析能够发现,当半导体接触酒精气体后,其表面就会出现两类反应,这两类反应一个是还原反应;一个是氧化反应,这两类反应将会改变敏感元件的阻值,然后电导率就会发生改变,当半导体表面对气体进行吸附之后,被吸附的分子中有一些会被蒸发掉,剩余的分析则会出现热分解,从而继续留在吸附处。如果N、P型半导体分别吸附了氧化型、还原型气体时,半导体载流子数量将会变少,而电阻将会随着它的变少而不断变大。如果N、P型半导体分别吸附了还原型、氧化型气体时,则会出现相反的情况,也就是电阻会降低。其具体工作原理情况见图3.2.1-1,此设计可以通过使用模拟接口A0与ADC相连获取电压模拟信号并将模拟信号转换为数字信号,可以通过编程将其转换为可读的酒精浓度。
图3.2.1-1 MQ-3工作电路原理图
通过分析气敏传感器能够发现,它主要由三类元件构成,首先是封装体;其次是加热器;最后是气敏元件。其中加热器的温度通常不低于,不高于,它能够烧掉敏感元件的各种附着物,此时气敏元件灵敏度会大大提升,其对气体的吸附速度将会加快。
3.2.2 MQ-3传感器特性
MQ-3中所用材料是在清洁空气中的电导性较低氧化锡,而且根据上述原则,当气体出现在MQ-3传感器环境中时,其传导性随着空气中酒精浓度的增加而增加,而对诸如图3.2.1-1等电路的应用将电导的变化转化为与气体酒精浓度相应的输出信号,这个电路在如果没有敏感的气体效应,或当气体浓度不超过规定的临界值时,A0模拟界面的电压约为0伏,当气体效应超过规定的临界值时,A0模拟界面的输出电压随气体效应缓慢增加,A0输出电压为0.1至0.3伏,最大浓度约为4伏。
酒精浓度测试的准确性取决于MQ-3气体传感器对酒精的敏感性,该传感器耐汽油、烟雾、水蒸气等的干扰,能够检测到各种各样的酒精气体浓度,由于其快速响应恢复、优异的稳定性、长寿命,适用于家庭、工厂、商场等各种类型的环境。它的技术特征如下:
(1)敏感性很高,可以发现酒精浓度的微小变化。
(2)对于外部干扰,是非常有选择性的。
(3)具有快速的相应恢复特性
(4)有效工作时间比较长而且比较稳定
(5)具有简单的驱动贿赂
(6)具备信号输出指示
(7)它有两个信号传输通道
(8)有效的TTL输出信号电压值很低,因此可以直接连接到设备。

如图3.2-2所示,纵坐标指传感器的电阻率(),横坐标指传感器在不同气体浓度RS中的电阻值,RO指洁净气体中传感器的电阻值。图3.2-3表示MQ-3传感器先放入含有酒精气体的环境中,然后将传感器从此环境中移动至正常环境过程中,传感器Vrl的变化情况。
3.2.3 MQ-3传感器使用要求
在进行使用MQ-3乙醇气体传感器时应按照规定使用,避免以下情况发生:
(1)传感器接触到硅粘合剂、气溶胶、硅橡胶以及存在挥发性硅化合物的其他地方,倘若传感器表面对硅化合物的蒸汽进行了吸收,由硅化合物分解而成的二氧化硅覆盖在传感器的敏感材料表面,减低了无法恢复的传感器的敏感度。
(2)如果将传感器置于高度腐蚀性的条件下,例如H2S、Cl2、HCL,则加热材料和传感器的传导就会发生腐蚀,同时也会很大程度上降低传感器的性能。
(3)淋水、溅到水、浸水都会造成传感器敏感特性下降。
(4)传感器表面结冰会导致敏感层碎裂并无法使用。
(5)被碱、碱金属盐等腐蚀后会使传感器的性能降低。
(6)传感器或加热器的电压高于规定的电压,即使没有受到实际损害或损坏,也可能对导电和/或加热器造成损害,并降低传感器的敏感度。
(7)当操作在室内进行时,轻度凝结水可对传感器的性能产生适度影响,将水凝结到敏感表面并在一段时间内加以维护可减少其特性。
(8)不管传感器有没有通电,倘若长期置于强浓度的气体中,其性能也会受到影响。
(9)当传感器长期无电存储时,其稳定性会导致可逆性偏差,并且环境的变化也会对此偏差造成影响。在对传感器进行存放时,应置于无挥发性硅化物的密闭袋中。如若传感器保存了较长的时间,在进行使用前,必须将其进行长时间的通电后方可使用。
3.3 OLED显示屏
3.3.1 OLED显示屏简介
OLED,即有机发光二极管( ),OLED不需要反馈源,因为它本身即可发光,且很薄,宽视角和快速响应而被认为是下一代。它们可用于柔性面板,温度范围广,结构和工艺简单,是新兴的平板应用技术。
3.3.2 OLED显示屏特点
我们用于此设计的OLED显示屏模块是一个0.96寸OLED(7Pin)模块。此屏具有下列特性:
(1)0.96 寸 OLED有三种可供选择的颜色,即黄蓝,白和蓝色;其中,黄蓝色是银幕上四分之一是黄色,银幕下四分之三是蓝的;此外,它也是一个固定区域,它显示一种既不能改变颜色也不能改变视觉区域的固定颜色;白光是白色的,即黑底白字; 蓝色是纯蓝色,即黑色背景上的蓝色。
(2) 分辨率为128*64,核心层非常薄,厚度能在1毫米之内。
(3) 多个接口模式;裸露的OLED显示接口包括:6800、8080、两个平行接口、第3或第4行的串行螺旋桨接口和IIC接口(控制Oled只需要两条线),五个接口是通过屏幕上的BS0 ~ BS2而配置的。
(4)OLED显示器采用有机发光的原理,对材料和成本要求低。
(5)OLED屏幕为全固态机制,具有真空,液态材料,良好的抗冲击性,并且可以适应恶劣的环境,例如在大加速度和振动的情况下。
3.3.3 OLED显示屏引脚
模块接口定义:
(1) GND:电源地
(2) VCC:正电源(3〜5.5V)
(3)D0:OLED引脚D0,它是SPI和IIC通信中的时钟引脚
(4)D1:OLED引脚D1,它是SPI和IIC通信中的数据引脚
(5) RES:OLED的RES脚,用于低压重置
(6)DC:OLED D / C引脚,命令和数据控制引脚
3.3.4 通讯接口电路设计
模块的通讯方式为串行通讯方式,需要用到的通讯接口由D0、D1、D2、CS#、RES#、D/C#,其他没有用到的数据接口引脚根据引脚功能表要求接地处理。
图 3.3.4-1 通讯接口电路
在4-Wirepsi通信接口中,D0将信号作为通信钟(SCLK)输入,D1作为通信数据输入信号(SDN),RES 35Apore作为重复信号,D/C#是数据/命令选择引脚,CS#用作芯片选择信号引脚。 在3-Wirepsi通信接口中,D0是通信钟(SCLK)的输入信号,D1是通信数据输入信号,RES#是重返信号引脚,D / 必须下载C#,而CS#是选定的芯片信号引脚。在IIC通信接口中,D0为通信提供时钟输入信号,D1为通信的数据输入信号,D2务必要接连D1,否则将不会接收到响应信号,并且D / C#引脚用作地址号0(SA0)。在设计中,d0、D1、CS、res和D/C按钮可用于提供4线spi和3线spi之间的通信接口,以与IIC接口兼容,根据本技术指南的要求,一个拉电阻分别连接到d0和D1,一个短连接到D2和D1。考虑到IIC仅需要4条线(VCC,GND,SCL,SDA)即可实现连接,设计RES#引脚电源电路(工作期间RES#引脚可设置在3us的低电平),用一个电阻可使 D/C#引脚与GND(SA0 = 0)相连。电路图如图 3.3.3-1。
作为4线SPI接口,D0和D1分别与上拉电阻相连,RES#以低等级复原,平时是高电平,D/C#与下拉电阻降相连,这不影响连接时序。 作为3-Wirepsi接口,D/C#是通过低预设级别的电击连接的,没有影响时间序列。作为IIC接口,D0和D1分别连接到拉伸电阻,D2和D1需要短接以生成响应信号,D/C#引脚默认为0(SA0 = 0),RES#引脚可实现上电复位,只需接4根线就能实现IIC通讯。
4 软件部分设计
4.1整体设计
程序要完成的主要功能是检测酒精浓度并显示,启动单片机,对系统进行初始化,MQ-3传感器需要预热,预热后,如果检测到酒精,MQ-3传感器经过A/D转换后,获取到数字值,再在软甲部分对其进行数据处理,即可得出酒精浓度。在OLED显示屏上显示出计算后的酒精浓度数值,并且将此数值与事先设定的阈值进行比较,判断出被测者是否酒驾、醉驾。

图4.1-1 程序设计流程图
4.2 部分模块设计
此次课题中程序设计过程采用模块化设计方式,将整个程序按模块完成,首先完成通过ADC获取模拟值并转换成数字值,之后完成将得到的值通过OLED显示,这样完成整个软件更加便于后续调试和更改。
4.2.1 ADC获取数值模块
/*函数功能:获取MQ-3的检测值
*形参:u8 chx——通道号
返回值:返回通道采集的12位ADC的值/
u16 ADC1_GetChx(u8 chx)
{
ADC1->SQR3&=0xFFFFFFE0;//清除第一个转换
ADC1->SQR3|=chx<<0;//设置转换的通道号
ADC1->CR2|=1<<22;//开启转换规则通道
while(!(ADC1->SR & 1<<1));//等待转换完成
return ADC1->DR;
}
/*函数功能:取获取到的MQ-3检测值的平均值,增加精准度
*形参:u8 chx——通道号
u8 tim——获取次数
*返回值:返回通道采集的tim次的ADC值的平均值*/
u16 ADC1_average(u8 chx,u8 tim)
{
u32 temp=0;
u8 t;
for(t=0;t<tim;t++)
{
temp+=ADC1_GetChx(chx);
DelayMs(5);
}
return temp/tim;}
4.2.2 OLED显示模块
/*函数功能:显示字符串
*形参:u8 x,u8 y--显示的坐标位置
* u8 *str --显示的字符串
*注意:该函数只能显示16x16字符*/
void OLED_Display_str(u8 x,u8 y,u8 *str)
{
while(*str!='\0')
{
if(x>=127)y+=2;
OLED_Display_chr(x,y,*str);
str++;
x+=8;
}
}
/**显示一个字符
**形参:u8 x,u8 y --显示的坐标位置
char data -- 要显示的第几个字符**/
void OLED_Display_chr(u8 x,u8 y,char chr)
{
u8 i;
OLED_Set_Pos(x,y);//显示上半部分
for(i=0;i<8;i++)
{
OLED_SPI_WritOneByte(ASCII_8_16[chr-' '][i],OLED_DATA);//写入一行数据
}
OLED_Set_Pos(x,y+1);//显示下半部分
for(i=0;i<8;i++)
{
OLED_SPI_WritOneByte(ASCII_8_16[chr-' '][i+8],OLED_DATA);//写入一行数据
}
}
/**SPI写1BYTE
**形参:u8 cmd -- 0写命令 1写数据
** u8 dat -- 写入的数据*/
void OLED_SPI_WritOneByte(u8 dat,u8 cmd)
{
/*1.判断写数据还是写命令*/
u8 i;
if(cmd)OLED_DC=1;
else OLED_DC=0;
OLED_CS=0;
for(i=0;i<8;i++)
{
OLED_SCK=0;
//发送一位数据
if(dat&0x80)OLED_MOSI=1;
else OLED_MOSI=0;
OLED_SCK=1;
dat<<=1;
}
OLED_CS=1;//取消OLED选择
OLED_SCK=1; //上拉时钟线,恢复空闲电平
}
4.3 整体功能调试
在整个软甲部分编写和调试过程中主要遇到了两个问题,一个是显示的刷新频率过快,导致OLED屏幕上显示出来的数值刷新太快,使人无法读出数值。经过尝试,通过对ADC获取到的MQ-3传感器的检测值进行多次获取,并求其平均值,再显示平均值的方法将数值的刷新速度降低,并且提高了检测得出的数据的稳定性和精准度。另一个问题是在显示过程中,由于变量类型设定原因,无法成功将获取的数值显示在OLED上,通过定义另一个数组和snprintf函数最终成功读取到经过计算后的气体酒精浓度,并且成功显示在OLED上。
5 结论
5.1实验结果
本设计基于STM32单片机,通过硬件软件的结合,实现了酒精浓度检测并能够显示酒精浓度数值,实验结果基本满足设计要求,在程序中可以更改阈值大小,可以针对各种情况做出更改。该设计能够满足生活所需,体积小、质量轻,方便携带。
5.2 总结
进行此次设计时在网上查阅了很多相关资料,增长了许多硬件方面的知识,尤其是在选用硬件时,对于同样功能的其他硬件也了解了很多,在其各自的优缺点处进行了多次对比,最终选定了设计时使用的各个硬件。在软件方面也参考了许多资料,得到了很多启发,通过模块设计可以让整个程序更加清晰,子程序间不会产生意外影响,应用时也更加简单方便。在许多的场合,酒精探测器对于人身安全和人们的财物非常有益,因为酒精探测器符合大多数酒精探测器的标准,不仅对人身安全起保护作用,也可以应用于许多需要酒精检测的环境中。
虽然在编写程序中遇到了一些问题,但也通过老师、同学们的帮助和学习各种其他程序以及函数后解决了这些问题,本次毕业设计使我受益良多,熟悉了keil的运用,C语音的知识,不仅仅复习了以前学会的内容,也学到了很多新的知识,并将这些纸面知识都应用到了实践上,提升了自己的综合能力,相信在今后的学习和工作中,通过这次设计所得到的经验都会成为我的力量。
更多推荐



所有评论(0)