加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

基于STM32的酒精浓度检测报警防酒驾仿真设计(仿真+程序+讲解视频)

09/11 16:26
1718
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
  • 方案介绍
    • 讲解视频
    • 1.主要功能
    • 2.仿真
    • 3. 程序
    • 4. 资料清单&下载链接
  • 相关文件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

基于STM32的酒精浓度检测报警防酒驾仿真设计(仿真+程序+讲解)

仿真图proteus 8.9

程序编译器:keil 5

编程语言:C语言

设计编号:C0082

讲解视频


基于STM32的酒精浓度检测报警防酒驾proteus仿真设计(仿真+程序+讲解)

1.主要功能

功能说明:

1、以STM32单片机和MQ-3为控制核心设计酒精浓度检测报警设计;

2、通过液晶屏LCD1602和串口上位机显示酒精浓度;

3、可以通过按键设置酒精浓度报警值大小。

4、监测酒精浓度大于报警值时蜂鸣器报警电路导通,蜂鸣器报警。

5、默认监测到酒精浓度高于20mg/100ml蜂鸣器报警。

主要硬件设备:STM32F103单片机

以下为本设计资料展示:

2.仿真

整体设计方案

本实验利用STM32单片机的ADCGPIO定时器等资源,将软、硬件有机地结合起来,使得系统能够正确地进识别输入模拟酒精传感器的AD值,LCD1602能够正确地显示,蜂鸣器根据气体浓度报警值工作。需注意的是,proteus是没有MQ-3等酒精浓度传感器的,本设计使用滑动变阻器模拟酒精浓度变化,不能直接用于实物设计,有需要的需跟据实物调试。

本实验旨在利用STM32单片机的模拟数字转换器(ADC)、通用输入/输出(GPIO)和定时器等资源,将软件和硬件有机地结合在一起,以实现对输入模拟酒精传感器的AD值进行正确的识别,并通过LCD1602显示器显示出来。此外,系统还配备了蜂鸣器,可以根据预设的气体浓度报警值进行工作。

在这个实验中,需要注意的是,Proteus仿真软件中并没有MQ-3等常见的酒精浓度传感器。因此,为了模拟酒精浓度的变化,我们使用了滑动变阻器来代替。这并不意味着这个设计可以直接应用于实际硬件,如果需要进行实物设计,需要根据实际情况进行调试和修改。

在整个实验过程中,我们不仅对STM32单片机的各种资源进行了深入的利用和调试,同时也对软件编程和硬件电路设计进行了全面的理解和实践。通过这个实验,我们进一步了解了STM32单片机在物联网应用中的重要地位,以及如何有效地将软件和硬件结合在一起,实现系统的智能化和自动化。

本测试如下所示:

仿真运行情况:

开始仿真后LCD1602实时显示检测到的酒精浓度,可以通过滑动变阻器改变测量值。可通过按键设置报警值浓度,按下设置键进入设置模式,通过设置+调高报警值,通过设置-调低报警值。蜂鸣器报警电路在酒精浓度高于报警值时启动,有嘟嘟报警声,低于不启动。

下图检测到气体浓度是3mg/100mL,低于报警值20mg/100mL,蜂鸣器电路不工作。

img

下图检测到酒精浓度是23mg/100mL,大于等于报警值,三极管导通,蜂鸣器报警img

仿真过程中可通过按键设置酒精浓度报警值。

3. 程序

程序是用keil5 mdk版本打开的,如果打开有问题,核实下keil的版本。程序是HAL库版本编写的,有注释可以结合讲解视频理解。

mian函数

int main(void)
{
  /* USER CODE BEGIN 1 */
	ADC_ChannelConfTypeDef sConfig = {0};  //建立sConfig结构体
	char str[20];  //字符串的存放数组
	uint32_t adcv; //存放ADC转换结果
	float temp;
	set_flag = 0;


  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */
	sConfig.Rank = ADC_REGULAR_RANK_1;
	sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;   //采样周期为1.5个周期
  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_USART1_UART_Init();
  MX_TIM3_Init();
  /* USER CODE BEGIN 2 */
	LCD_Init();  //初始化LCD1602
	HAL_TIM_Base_Start_IT(&htim3);//开启定时器3
//	LCD_ShowString(0,0,dis_str);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		sConfig.Channel = ADC_CHANNEL_1;   //选择通道1
		HAL_ADC_ConfigChannel(&hadc1, &sConfig);  //选择ADC1的通道道1
		HAL_ADC_Start(&hadc1);										//启动ADC1
		HAL_ADC_PollForConversion(&hadc1, 10);		//等待ADC1转换结束,超时设定为10ms
		adcv = HAL_ADC_GetValue(&hadc1);					//读取ADC1的转换结果
		
		
		temp=(float)adcv*(3.3/4095)*100;		
	
		sprintf(str,"%4.0fmg/100ml",temp);
		LCD_ShowString(0,0,"MV:");	
		LCD_ShowString(0,4,str);	
	  HAL_UART_Transmit(&huart1, (uint8_t *)&"MV=", 3, 10);  //串口1发送字符串,数组长度为12,超时10ms
		HAL_UART_Transmit(&huart1, (uint8_t *)str, 12, 10);		 //串口1发送字符串,数组长度为5,超时10ms
		HAL_UART_Transmit(&huart1, (uint8_t *)&"nr", 2, 10); //串口1发送字符串,数组长度为2,超时10ms	
		
		if(set_flag){//设置模式
			sprintf(str,"^%3.0fmg/100ml",warming_val);
			LCD_ShowString(1,0,"ALM:");	
			LCD_ShowString(1,4,str);
		}else{
			sprintf(str,"%4.0fmg/100ml",warming_val);
			LCD_ShowString(1,0,"ALM:");	
			LCD_ShowString(1,4,str);			
		}
		
	  HAL_UART_Transmit(&huart1, (uint8_t *)&"ALM=", 4, 10);  //串口1发送字符串,数组长度为12,超时10ms
		HAL_UART_Transmit(&huart1, (uint8_t *)str, 12, 12);								//串口1发送字符串,数组长度为5,超时10ms
		HAL_UART_Transmit(&huart1, (uint8_t *)&"nr", 2, 10);						//串口1发送字符串,数组长度为2,超时10ms	
		
		if(temp>warming_val){//如果超过报警值
			HAL_GPIO_WritePin(GPIOA,BEEP_Pin, GPIO_PIN_RESET);//BEEP引脚拉低
		}else{
			HAL_GPIO_WritePin(GPIOA,BEEP_Pin, GPIO_PIN_SET);
		}

		HAL_ADC_Stop(&hadc1);											//停止ADC1
		HAL_Delay(300);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

img

4. 资料清单&下载链接

0、常见使用问题及解决方法–必读!!!!

1、程序代码

2、Proteus仿真

3、功能要求

4、讲解视频

5、MQ-3传感器说明

Altium Designer 软件资料

KEIL软件资料

Proteus软件资料

单片机学习资料

答辩技巧

设计报告常用描述

鼠标双击打开查找更多51 STM32单片机课程毕业设计.url

img

资料下载链接

  • 设计资料获取联系方式.doc

相关推荐

电子产业图谱