0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于STM32设计的酒精检测仪

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2023-06-18 14:17 次阅读

一、需求分析

随着社会的发展和生活水平的提高,人们对于行车安全、家庭安全的要求越来越高,而酒驾等问题也日渐突出,为此,开发一款基于STM32的酒精检测仪,通过检测酒精浓度,实时显示结果并进行报警,可以有效避免因酒后驾车带来的安全隐患。

二、设计思路

2.1 硬件设计

1、主控芯片采用STM32F103RCT6,该芯片具有较高的性能和稳定性,能够满足本设计的各项需求。

2、酒精传感器采用MQ-3模块,该模块具有高精度、响应速度快等特点,能够准确检测酒精浓度。

3、OLED显示屏,用于实时显示酒精浓度等信息

4、蜂鸣器,用于进行声音报警。

5、按键,用于设定报警阈值。

2.2 软件设计

1、IO口配置:将相应的IO口配置为输入输出,并使能对应的时钟

2、ADC配置:将ADC采样通道、采样时间、采样频率等参数进行配置。

3、OLED配置:初始化OLED。

4、中断初始化:对按键进行中断初始化,并在中断服务函数中实现相应的操作。

5、主程序:定时读取酒精传感器的浓度值并将其转换为电压值,然后通过ADC进行采样,最后通过OLED显示屏进行实时显示。同时也需要根据设定的阈值进行判断,并触发相应的报警。

2.3 程序设计思路

main()
 {
     初始化IO口
     初始化ADC
     初始化OLED
     配置中断
     while(1)
     {
         读取浓度值并转换为电压
         进行ADC采样
         计算实际浓度值
         显示实时浓度值
         判断是否超过设定阈值
         触发相应的报警
     }
 }
 ​
 void EXTIx_IRQHandler()
 {
     检测按键状态
     根据按键状态进行相应的操作
 }

三、代码设计

//头文件引用
 #include "stm32f10x.h"
 #include "OLED.h"
 #include "ADC.h"
 #include "MQ3.h"//定义相关参数
 #define THRESHOLD1 100
 #define THRESHOLD2 200
 #define THRESHOLD3 300//定义中断服务函数
 void EXTI0_IRQHandler(){
   if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0){
     threshold++;
     if(threshold == 4) threshold = 1;
     OLED_Clear();
     OLED_ShowString(0,0,"Threshold:");
     switch(threshold){
       case 1:{
         OLED_ShowString(70,0,"100");
         break;
       }
       case 2:{
         OLED_ShowString(70,0,"200");
         break;
       }
       case 3:{
         OLED_ShowString(70,0,"300");
         break;
       }
       default:{
         break;
       }
     }
   }
   EXTI_ClearITPendingBit(EXTI_Line0);
 }
 ​
 int main(void)
 {
     //初始化IO口
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA, ENABLE);   //使能端口时钟
     GPIO_InitTypeDef GPIO_InitStructure;                                           //定义GPIO结构体
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                               //输出模式
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                              //速度50MHz
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;                                     //LED所在引脚
     GPIO_Init(GPIOC, &GPIO_InitStructure);                                         //初始化GPIOC13
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;                          //浮空输入模式
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                                      //按键所在引脚
     GPIO_Init(GPIOA, &GPIO_InitStructure);                                         //初始化GPIOA0//初始化ADC
     ADC_Configuration();
 ​
     //初始化OLED
     OLED_Init();
     OLED_Clear();
 ​
     //配置中断
     EXTI_InitTypeDef EXTI_InitStructure;
     NVIC_InitTypeDef NVIC_InitStructure;
     GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
     EXTI_InitStructure.EXTI_Line = EXTI_Line0;
     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
     EXTI_InitStructure.EXTI_LineCmd = ENABLE;
     EXTI_Init(&EXTI_InitStructure);
     NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
     NVIC_Init(&NVIC_InitStructure);
 ​
     //定义相关变量
     uint16_t adc_value = 0;
     float voltage = 0.0;
     float concentration = 0.0;
     uint8_t threshold = 1;
 ​
     while(1)
     {
         //读取酒精传感器的浓度值并转换为电压值
         adc_value = Get_ADC1_ConvertedValue(ADC_Channel_6);
         voltage = (adc_value * 3.3) / 4096;
 ​
         //计算实际浓度值
         concentration = Get_MQ3_Concentration(voltage);
 ​
         //显示实时浓度值
         OLED_ShowString(0, 0, "Concentration:");
         OLED_ShowNum(100, 0, concentration, 1, 2);
 ​
         //判断是否超过设定阈值
         if(concentration > THRESHOLD3){
             GPIO_SetBits(GPIOC, GPIO_Pin_13);      //LED灯亮
             BEEP_ON;                                //蜂鸣器报警
         }
         else if(concentration > THRESHOLD2){
             GPIO_ResetBits(GPIOC, GPIO_Pin_13);    //LED灯灭
             BEEP_OFF;                               //蜂鸣器关闭
         }
         else if(concentration > THRESHOLD1){
             GPIO_SetBits(GPIOC, GPIO_Pin_13);      //LED灯亮
             BEEP_ON;                                //蜂鸣器报警
         }
         else{
             GPIO_ResetBits(GPIOC, GPIO_Pin_13);    //LED灯灭
             BEEP_OFF;                               //蜂鸣器关闭
         }
     }
 }
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2264

    文章

    10852

    浏览量

    354166
  • 蜂鸣器
    +关注

    关注

    12

    文章

    888

    浏览量

    45818
  • OLED显示屏
    +关注

    关注

    6

    文章

    216

    浏览量

    30611
  • 酒精检测仪
    +关注

    关注

    0

    文章

    22

    浏览量

    8895
收藏 人收藏

    评论

    相关推荐

    酒精检测仪仿真图

    论坛的兄弟们,我们老师要求我们不用单片机,做出酒精检测仪的仿真图,我们设计的仿真是由MQ-3、A/D转换、译码显示酒精浓度组成。但是最后因为能力有限弄不出来,希望兄弟们能花点时间帮我做一个完整的仿真,明天下午就要交,急求,希望兄
    发表于 06-29 22:18

    请问有酒精检测仪的程序吗?

    各位大佬有没有酒精检测仪的程序啊?
    发表于 03-27 22:34

    RoHS检测仪来测酒精含量可以吗,会不会大材小用了?

    ``用RoHS检测仪来测试酒精,说实在的是有点大材小用了,大可节省这不必要的支出,交警用的酒精检测仪是专门测酒精含量的,这个方便实惠,所以用
    发表于 04-24 15:01

    如何去实现一种基于51单片机酒精浓度检测仪的设计

    基于51单片机的酒精浓度检测仪是由哪些部分组成?如何去实现一种基于51单片机酒精浓度检测仪的设计?
    发表于 10-18 09:34

    基于STM32空气质量检测仪原理图

    STM32空气质量检测仪原理图STM32空气质量检测仪原理图STM32空气质量检测仪原理图
    发表于 10-29 18:22 351次下载

    基于51单片机的酒精浓度检测仪的设计

    基于51单片机的酒精浓度检测仪的设计,感兴趣的可以看看。
    发表于 01-04 15:23 263次下载

    基于单片机的酒精浓度检测仪的研究与设计

    基于单片机的酒精浓度检测仪的研究与设计
    发表于 12-11 15:52 14次下载

    酒精检测仪的用及电路设计原理分析

    酒精检测仪是用来检测人体是否摄入酒精及摄入酒精多少程度的仪器。它可以作为交通警察执法时检测饮酒司
    的头像 发表于 08-05 16:00 3.6w次阅读
    <b class='flag-5'>酒精</b><b class='flag-5'>检测仪</b>的用及电路设计原理分析

    酒精检测仪的产品特点是怎样的

    酒精检测棒不仅是酒精检测仪还是一种多用型电子产品,在酒精检测结束后会有语音播报功能,这种指挥棒式
    发表于 12-21 15:19 610次阅读

    电筒式酒精检测仪的工作原理是怎样的?

    为什么需要酒精测试 据统计全球大概有百分之五十的车祸与饮酒有关,而想加大对酒后驾驶的惩罚力度,首先要解决的就是如何高效的测量人身体的酒精含量,酒精测试
    发表于 01-05 17:13 823次阅读

    酒精检测仪为什么呼一口气就能检测人体酒精的含量

    手持酒精检测仪可以用来确认司机是否有酒驾行为。为什么呼一口气就能检测人体酒精含量?小小的酒精检测仪
    发表于 01-13 16:31 1616次阅读

    酒精检测仪检测原理是怎样的

    所需时间,下面跟随深圳威尔电器小编一起来具体了解一下酒精检测仪检测原理是什么吧? 当具有N型导电性的氧化物暴露在大气中时,会由于氧气的吸附而减少其内部的电子数量而使其电阻增大。其后如果大气中存在某种特定的
    发表于 03-01 14:45 6152次阅读

    常用的酒精检测仪都是什么原理

    来具体了解一下酒精检测仪检测原理是什么吧? 常用的酒精检测仪都是什么原理呢? 1、湿化学法 其原理是
    发表于 04-21 14:49 1.7w次阅读

    如何构建一个可充电酒精检测仪

    今天我们将构建一个 DIY 可充电酒精检测仪。众所周知,酒精分析使用呼出气中的酒精含量来计算人血液中的
    的头像 发表于 06-13 15:44 2209次阅读
    如何构建一个可充电<b class='flag-5'>酒精</b><b class='flag-5'>检测仪</b>

    基于51单片机的酒精检测仪设计(实物)

    毕业设计(论文)的内容设计基于单片机的酒精检测仪 能够完酒精检测及声光报警。课题要求广泛查阅和收集资料,根据题目要求设计酒精
    发表于 09-07 10:08 2次下载