毕业设计 :基于单片机的酒精浓度检测仪 – stm32 酒驾检测 酒精检测


0 简介

Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片机项目

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

大家可用于 课程设计 或 毕业设计

技术解答、毕设帮助、开题指导
print("Q 746876041") 

1 项目简介

学长设计系统主要采用STM32作为核心控制,MQ-3酒精传感器测试酒精浓度并将结果通过多彩LCD屏显示出来,同时采用GPRS与GSM进行信息传递;整个系统结构层次分明,通过采集、分析、对比、处理和信息发送完成驾驶员是否酒驾的简易测试。

2 系统设计

基于 STM32 的车载酒精检测系统主要分为两个部分:

  • 一是车载终端部分, 也是车载酒精检测系统的重点内容。 主控制器安装在汽车内部, 为了直观, 将主控制器框图画在汽车外部。

  • 二是无线数据传输部分, 将酒驾车辆的相关信息通过 GPRS 模块发送至交警部门控制中心的 IP 上, 或者发送至具体的手机号上。

在这里插入图片描述

车载酒精检测系统是在自动化、 实时监测的基础上设计的, 不用人为的去检测, 同时不受距离的约束, 能够把酒驾信息直接发送至交警部门的控制中心, 达到实时监测的目的。系统的各部分功能如下:

  • 1.车载酒精检测系统的终端采集工具为MQ-3模块, 用来采集汽车内气体中的酒精含量:
  • 2.传感器将采集到的酒精信息, 传送给微处理器处理:
  • 3.微处理器通过模糊控制算法对数据进行分析, 得出最终酒精数值并与预设值做比较,若超出则汽车通过液晶屏周期性闪动来警示司机已经处于酒驾状态, 并将酒驾数据通过GPRS 网络发送至交警部门的控制中心或者具体的手机号上

3 硬件设计

在这里插入图片描述

3.1 MQ-3 模块

MQ-3 使用的二氧化锡(SnO 2 )作为气敏材料, 当传感器处在存在酒精蒸汽环境中时, 传感器的电导率会随着空气中酒精气体浓度的增加而增大,使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的信号。

该模块主要特点如下:

  • 具有信号输出指示。
  • 输出的双通道信号(模拟量输出与 TTL 输出)。
  • TTL 输出有效信号为低电平。
  • 模拟输出电压为 0~5V, 浓度高则电压高。
  • 对乙醇蒸汽拥有很高的灵敏度和不错的选择性。
  • 它具有较长的使用寿命和可靠的稳定性。
  • 快速的响应恢复特性。

MQ3模块实物图:
在这里插入图片描述

在这里插入图片描述

MQ3模块电路图:

在这里插入图片描述

3.2 GPRS模块

GPRS模块长这样

在这里插入图片描述

GPRS 模块 SIM900A 工作图如图
在这里插入图片描述

GPRS 模块与 STM32 模块连接:

  • GPRS 的 STXD 连接 STM32 的 PA3
  • SRXD 连接PA2
  • GND 连 GND。

对 GPRS 模块的短信方式进行测试, 将移动动感地带的卡放进 GPRS 模块中, 接收者设为自己, 给 GPRS 上电后等待绿灯闪烁缓慢之后即信号稳定之后再给 STM32 上电, 当酒精浓度达到一定含量时就会收到短信, 内容包括: 车主的身份证号码以及当前酒精浓度值。

这里用Android模拟机来测试效果:

在这里插入图片描述

4 软件设计

在这里插入图片描述

主控制器 STM32F103ZET6 初始化后, 系统先通过串口设定一个判断是否酒驾的初始值, 然后 MQ-3开始测量个监测点的酒精含量, 主控制器对收集的酒精数据进行融合处理, 运用模糊控制算法得出一个最终数值与预设值作比较, 若超出预设值,则发送控制信号, 进行语音报警, 通过液晶显示酒精浓度并记录数据, 同时通过 GPRS 模块向交警部门发送酒驾车辆的相关信息。

4.1 GPRS模块使用

常用AT指令

  • AT+MRST    OK ------------- 重启模块,应答

  • AT+CPIN?   READY  ------------- 检查SIM卡是否插好

  • AT+CGREG?   OK    ------------- 检查网络注册状态

  • AT+CSQ     OK ------------- 信号查询

  • AT+MIPCALL? : 0 -------------- 查询网络连接状态(0:未连接;1:连接)

  • AT+MIPCALL=1,“cmnet” OK ----------------连接网络

  • AT+MIPOPEN=1,“47.105.162.0”,1883,0 -------------- 连接服务器

4.1.1 数据收发demo

据链路层数据处理:实现GPRS数据接收/发送控制,存储串口中断接收到的数据,发送GPRS数据长度和GPRS数据内容。串口收到数据之后会将数据存储到MIPRTCP_DataStreaming()中,这个函数会将接收到的数据进行解析处理。

串口接收数据流程如下:

void USART1_IRQHandler(void) //串口1中断服务程序
{
  u8 Res;

  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
  {
    Res =USART_ReceiveData(USART1); //读取接收到的数据
    MIPRTCP_DataStreaming(Res);

    if((USART1_RX_STA&(1<<15))==0)//接收完的一批数据,还没有被处理,则不再接收其他数据
    {
      if(USART1_RX_STA<USART1_MAX_RECV_LEN) //还可以接收数据
      {
        TIM_SetCounter(TIM4,0); //计数器清空
        if(USART1_RX_STA==0) //使能定时器7的中断
        {
          TIM_Cmd(TIM4,ENABLE); //使能定时器7
        }
        USART1_RX_BUF[USART1_RX_STA++]=Res; //记录接收到的值
      }
      else
      {
        USART1_RX_STA|=1<<15; //强制标记接收完成
      }  
    }

    // USART_ClearITPendingBit(USART1,USART_IT_RXNE);
  }
}

5 实现效果

在这里插入图片描述

5 最后

技术解答、毕设帮助、开题指导
print("Q 746876041") 

获取更多毕设资料,关注公众号

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>