【毕业设计】Stm32酒驾检查系统 - 单片机 嵌入式 物联网

本文主要是介绍【毕业设计】Stm32酒驾检查系统 - 单片机 嵌入式 物联网,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 0 前言
  • 1 简介
  • 2 主要器件
  • 3 实现效果
  • 4 设计原理
    • 4.1 MQ-3酒精乙醇传感器模块
    • 4.2 STM32F103C8T6
  • 5 部分核心代码
  • 6 最后


0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 基于Stm32的酒驾检查系统设计与实现

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:3分

🧿 选题指导, 项目分享:

https://gitee.com/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md


1 简介

基于STM32单片机酒精浓度检测报警系统。

2 主要器件

  • STM32F103C8T6,主控芯片
  • MQ-3传感器,检测酒精浓度数据
  • 蜂鸣器
  • 案件
  • 语音播报模块
  • 风扇

3 实现效果

屏幕上会显示实时的酒精浓度

整体展示
在这里插入图片描述

酒精浓度超标是,指示灯变化,语音播报模块播报,风扇转动,蜂鸣器报警

在这里插入图片描述

4 设计原理

4.1 MQ-3酒精乙醇传感器模块

简介

MQ-3气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(Sn02)。当传感器所处环境中存在酒精蒸汽时,传感器的电导率随空气中酒精气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。MQ-3气体传感器对酒精的灵敏度高,可以抵抗汽油、烟雾、水蒸气的干扰。这种传感器可检测多种浓度酒精气氛,是一款适合多种应用的低成本传感器

实物图

在这里插入图片描述
MQ-3气体传感器对酒精的灵敏度高,可以抵抗汽油、烟雾、水蒸气的干扰。这种传感器可检测多种浓度酒精气氛,是一款适合多种应用的低成本传感器。

该模块主要特点如下:

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

4.2 STM32F103C8T6

简介
STM32F103C8T6是一款基于ARM Cortex-M3内核(ARM公司在ARM11以后改用Cortex命名,并分成A、R和M三类,M系列有M0、M0+、M3、M4、M7)的32位的微控制器,采用LQFP48封装,由意法半导体公司(ST)推出,属于STM32系列(ST公司还有SPC5X系列微控制器)。其程序存储器FLASH容量是64KB (64K x 8bit),RAM容量是20KB(20K x 8bit),2个12bit ADC合计12路通道(外部通道只有PA0到PA7、PB0到PB1,并不是18通道),37个通用I/O口(PA0-PA15、PB0-PB15、PC13-PC15、PD0-PD1),4个16bit定时器(TIM1(高级控制定时器,带死区插入,常用于产生PWM控制电机)、TIM2、TIM3、TIM4),2IIC,2SPI,3USART,1CAN,工作电压2V~3.6V,工作温度为-40°C ~ 85°C,系统时钟最高可到72MHz(一般是由8MHz的外部时钟经锁相环9倍频到72MHz)。

相关引脚分布

本项目中STM32主要通过ADC采集MQ-3模块的值转换为酒精浓度值显示在LCD屏幕上。同时,驱动语音播报模块、风扇和蜂鸣器。

5 部分核心代码

/* USER CODE BEGIN PV */uint32_t adc_value=0;
uint32_t Alcohol=0;
uint8_t a=1;
/* USER CODE END PV *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_ADC_Start_DMA(&hadc1,&adc_value,1);	Alcohol=((float)adc_value*3.3/4096*0.36-1.08)*10000;//电压数据转换(此处由于还未找到相关公式,暂时这样代替,如有了解的大佬可以在评论区补充一下)printf("Alcohol=%d\r\n",Alcohol);		HAL_Delay(1000);}/* USER CODE END 3 */
}//中断回调函数,当有酒精时,DO口电平由高电平边低电平,PA4触发外部中断,进入中断函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){if(GPIO_Pin==Alcohol_DO_Pin){HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,1);}//设置一个按键中断,为了把酒精触发的LED点亮之后熄灭(实际项目中可改为关闭蜂鸣器等)if(GPIO_Pin==KEY1_Pin){HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,0);}
}/* USER CODE END 4 */
//显示提示信息POINT_COLOR=BLACK;//设置字体为蓝色	      LCD_ShowString(10,100,136,16,16,"Alcohol: .   mg/L");LCD_ShowString(10,120,120,16,16,"Threshol1: .   ");LCD_ShowString(10,140,120,16,16,"Threshol2:0.500");while(1){adcx=Get_Adc_Average(ADC_Channel_1,10);//LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值temp=((float)adcx*(5.0/4096))*0.36-1.08;printf("value:%f",temp);t=KEY_Scan(0);		//得到键值if(t==KEY0_PRES){threshol1+=0.01;}else if(t==KEY1_PRES){threshol1-=0.01;}threshol_1=threshol1;LCD_ShowxNum(90,120,threshol_1,1,16,0);//显示浓度值threshol_2=(threshol1-threshol_1)*1000;LCD_ShowxNum(106,120,threshol_2,3,16,0);if(temp > threshol1 && temp < threshol2)		//如果浓度大于阈值{PB9=0;						//开启蜂鸣器delay_ms(1000);	delay_ms(1000);	PB9=1;						//蜂鸣器关闭delay_ms(1000); LCD_Fill(70,200,170,300,RED);}else if(temp > threshol2){		//急促PB9=0;						//开启蜂鸣器delay_ms(300);	PB9=1;						//蜂鸣器关闭delay_ms(50);LCD_Fill(70,200,170,300,BROWN);}else{PB9=1;		//蜂鸣器关闭LCD_Fill(70,200,170,300,GREEN);}adcx=temp;LCD_ShowxNum(74,100,adcx,1,16,0);//显示浓度值temp-=adcx;temp*=1000;LCD_ShowxNum(90,100,temp,3,16,0);LED0=!LED0;delay_ms(250);	}			

6 最后

这篇关于【毕业设计】Stm32酒驾检查系统 - 单片机 嵌入式 物联网的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/325555

相关文章

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定