基于STM32的汽车防窒息系统
文章目录
- 基于STM32的汽车防窒息系统
- 系统简介
- 材料
- 展示视频
- 制作
- 硬件连接
- 原理图
- PCB
- 实物图
- GSM模块使用
- GSM模块代码
- SGP30模块
- SGP30模块代码
- 步进电机驱动
- 步进电机代码
- 其他模块
- 主逻辑代码
- 总结
基于STM32的汽车防窒息系统
系统简介
随着社会的发展目前汽车的流行,汽车大量普及,小朋友也享受到了便利,但是由于粗心等原因将儿童遗留在车里,随着夏天到来,温度的升高,存在窒息等情况,本系统通过车内空气质量、二氧化碳浓度等来检测车内空气是否有害,通过人体红外传感器检测是否存在人,如果存在人再通过GSM模块通知其父母来解救儿童。
材料
- STM32F103C8T6系统主控;
- SGP30甲醛、二氧化碳浓度传感器;
- MQ-5有害气体检测模块;
- 人体红外传感器;
- 二项四线步进电机;
- SIM900A GSM模块 (需要用
移动
手机卡); - 0.96寸OLED屏幕;
- DHT11温湿度模块。
使用Keil 5
编程
展示视频
基于Stm32的防窒息系统
制作
硬件连接
- SGP30采用IIC连接在PB0、PB1;
- DHT11连接在PB11;
- SIM900A连接在串口2-PA2、PA3;
- MQ-5连接在PB12;
- 人体红外连接在PA1;
- 蜂鸣器连接在PA5;
- OLED采用IIC连接在PB6、PB7;
- 两个警报的LED灯连接在PA6、PA7;
原理图
PCB
实物图
GSM模块使用
GSM模块采用串口通信,通过AT指令来操控,具体操控办法可参考之前博客。https://blog.csdn.net/weixin_42320020/article/details/116004960
GSM模块代码
void sim800c_test(void)
{ OLED_CLS();sim800c_send_cmd((u8*)0X1A,"+CMGS:",10);sim800c_send_cmd("ATE0","OK",200);//2?????IWDG_ReloadCounter();while(sim800c_send_cmd("AT","OK",100))//检测是否应答AT指令 {OLED_ShowStr1(0,0,(char*)"SBLJZ ",1); //连接成功sim800c_send_cmd((u8*)0X1A,"+CMGS:",10);} while(sim800c_send_cmd("AT","OK",100))//检测是否应答AT指令 {OLED_ShowStr1(0,0,(char*)"SBLJZ ",1); //连接成功sim800c_send_cmd((u8*)0X1A,"+CMGS:",10);} OLED_ShowStr1(0,0,"LJCG ",1); //连接成功delay_ms(10); while(sim800c_send_cmd("AT+CMGF=1","OK",200)){} //设置文本模式 OLED_ShowStr1(0,1,"WBMS ",1);//文本模式while(sim800c_send_cmd("AT+CSCS=\"UCS2\"","OK",200)){} //设置TE字符集为UCS2 while(sim800c_send_cmd("AT+CSMP=17,167,2,25","OK",200)){} //设置编码方式 OLED_ShowStr1(0,2,"ZFMS ",1);//字符模式//发送短信测试OLED_ShowStr1(0,3,"ZZSZ ",1); //正在发送if(sim800c_send_cmd("AT+CMGS=\"00310035003500350035003500350035003000350035\"",">",800) == 0);//短信对象手机号u2_printf("53D1751F7A92606F62166E295EA68FC79AD8FF0165516211FF01 "); //发送短信内容 IWDG_ReloadCounter();if(sim800c_send_cmd((u8*)0X1A,"+CMGS:",800)==0){OLED_ShowStr1(0,4," FSCG ",16);Index_sim800c = 600;return;}OLED_ShowStr1(0,4," FSSB ",1);IWDG_ReloadCounter();delay_ms(2000);
}
需要注意的是,如果要发送中文短信,需要设置相应字符集以及编码方式,同时发送的手机号和短信内容都要转换为对应的UNICODE码。 执行代码后会向目标手机发送需要求助的短信。
SGP30模块
模块使用IIC方式进行通信
SGP30模块代码
u32 SGP30_Read(void)
{u32 dat;u8 crc;SGP30_IIC_Start();SGP30_IIC_Send_Byte(SGP30_read); //发送器件地址+读指令SGP30_IIC_Wait_Ack();dat = SGP30_IIC_Read_Byte(1);dat <<= 8;dat += SGP30_IIC_Read_Byte(1);crc = SGP30_IIC_Read_Byte(1); //crc数据,舍去crc = crc; //为了不让出现编译警告dat <<= 8;dat += SGP30_IIC_Read_Byte(1);dat <<= 8;dat += SGP30_IIC_Read_Byte(0);SGP30_IIC_Stop();return(dat);
}void CO2_Read(void)
{SGP30_Write(0x20, 0x08);sgp30_dat = SGP30_Read();//读取SGP30的值CO2Data = (sgp30_dat & 0xffff0000) >> 16;//取出CO2浓度值TVOCData = sgp30_dat & 0x0000ffff; //取出TVOC值
}
步进电机驱动
二相四线步进电机只有两个线圈A、B,两线圈正极A+、B+挨着,负极A-、B-挨着,由于要带动窗户玻璃下落,我们采用一二相励磁法(此励磁发扭矩大,输出稳定),只需要按照顺序驱动去驱动即可。
励磁顺序为:
A+ | → | A+、B+ | → | B+ | → | B+、A- | → | A- | → | A-、B- | → | B- | → | B-、A+ |
---|
步进电机代码
void Motor(uint8_t State)
{static uint8_t Index = 0;if(State == 1){Index++;}else if(State == 2){Index--;}else{}switch(Index % 8){case 0:A1 = 1;B1 = 0;A2 = 0;B2 = 0;break;case 1:A1 = 1;B1 = 1;A2 = 0;B2 = 0;break;case 2:A1 = 0;B1 = 1;A2 = 0;B2 = 0;break;case 3:A1 = 0;B1 = 1;A2 = 1;B2 = 0;break;case 4:A1 = 0;B1 = 0;A2 = 1;B2 = 0;break;case 5:A1 = 0;B1 = 0;A2 = 1;B2 = 1;break;case 6:A1 = 0;B1 = 0;A2 = 0;B2 = 1;break;case 7:A1 = 1;B1 = 0;A2 = 0;B2 = 1;break;}
}
其他模块
其他模块比较常见就不一一赘述了。
主逻辑代码
void main(void)
{if(((CO2Data > 600)||(!MQ_5)||(temperature > 40))&&(ADC_x > 30)){BuzzerShortBi();if(!Index_sim800c)sim800c_test();//发送短信}DHT11_Data();ADC_x = Get_Adc(1) >> 5;sprintf((char*)Show, "D:%3d", (u16)(ADC_x));OLED_Show(80, 6, (u8*)Show);if((CO2Data > 600)||(!MQ_5))LED1 = !LED1;elseLED1 = 1;if(ADC_x > 30){LED0 = !LED0;}else{LED0 = 1;}SGP30_Write(0x20, 0x08);sgp30_dat = SGP30_Read();//读取SGP30的值CO2Data = (sgp30_dat & 0xffff0000) >> 16;//取出CO2浓度值TVOCData = sgp30_dat & 0x0000ffff; //取出TVOC值sprintf((char *)Show,"CO2:%dppm ",CO2Data);OLED_Show(0, 0, (u8*)Show);if(((CO2Data > 600)||(!MQ_5)||(temperature > 40))&&(ADC_x > 30)){if(Frne){Frne--;Motor(2);}}else{Motor(0);Frne = 100;}
}
总结
项目本身还是比较好的,还预留了ESP8266到串口2、按键等方便扩展和进行其他功能的添加。
禁止转载!!!
相关文章:
基于STM32的汽车防窒息系统
文章目录 基于STM32的汽车防窒息系统系统简介材料展示视频制作硬件连接原理图PCB实物图GSM模块使用GSM模块代码 SGP30模块SGP30模块代码 步进电机驱动步进电机代码 其他模块主逻辑代码 总结 基于STM32的汽车防窒息系统 系统简介 随着社会的发展目前汽车的流行,汽车大…...
GoogleNet神经网络介绍
一、简介 GoogleNet,也称为GoogLeNet,是谷歌工程师设计的一种深度神经网络结构,它在2014年的ImageNet图像识别挑战赛中取得了冠军。该神经网络的设计特点主要体现在其深度和宽度上,通过引入名为Inception的核心子网络结构&#x…...
AI水下颜色校正解决方案,助力企业打造水下视觉盛宴
水下摄影作为一种独特且富有挑战性的拍摄方式,正受到越来越多旅行者和摄影师的青睐。然而由于海水的光线折射和金属成分的影响,水下拍摄的照片和视频往往存在严重的偏色问题,无法真实还原水下世界的美丽与神奇。美摄科技凭借深厚的技术积累和…...
LINUX笔记温习
目录 DAY1 DAY2 day3: day4 day5 day6 day7 day8 day9 day10 day11 day12 day13 day14 day15 20day DAY1 1、多层级文件夹创建要带-p; 2、创建多文件,要先到该目录下才能创建(第一个目录必须存在才能有效建立); D…...
钉钉服务端API报错 43008 参数需要multipart类型
钉钉服务端API报错 43008 参数需要multipart类型 problem 使用媒体文件上传接口,按照文档输入参数,结果返回报错 # 参数 {"access_token": "xxx""type": "image","media": "/Users/xxx/xxx/s…...
HarmonyOS NEXT应用开发案例——阻塞事件冒泡
介绍 本示例主要介绍在点击事件中,子组件enabled属性设置为false的时候,如何解决点击子组件模块区域会触发父组件的点击事件问题;以及触摸事件中当子组件触发触摸事件的时候,父组件如果设置触摸事件的话,如何解决父组…...
【C语言】联合和枚举
个人主页点这里~ 联合和枚举 一、联合体1、联合体类型的声明2、联合体成员的特点3、与结构体对比4、计算联合体大小 二、枚举1、枚举的声明2、枚举的优点3、枚举类型的使用 一、联合体 1、联合体类型的声明 联合体的定义与结构体相似,但是联合体往往会节省更多的空…...
苹果手机黑屏打不开怎么办?5种方法让你轻松应对
苹果手机以其卓越的性能和流畅的操作体验赢得了全球用户的喜爱。然而,就像其他电子产品一样,苹果手机偶尔也会遇到一些问题。其中,苹果手机黑屏打不开是许多用户都曾遇到过的困扰。当您按下电源键,却发现手机屏幕一片漆黑…...
鸿蒙:滑动条组件Slider
滑动条组件,通常用于快速调节设置值,如音量调节、亮度调节等应用场景。 说明 该组件从API Version 7开始支持。 子组件 无 接口 Slider(options?: {value?: number, min?: number, max?: number, step?: number, style?: SliderStyle, direc…...
【智能家居项目】RT-Thread版本——DHT11获取温湿度 | MQTT上传到服务器 | 服务器控制外设
🐱作者:一只大喵咪1201 🐱专栏:《智能家居项目》 🔥格言:你只管努力,剩下的交给时间! 这篇文章中,本喵将使用RT-Thread Studio来实现这个智能家居的项目,最终…...
Docker 轻量级可视化工具 Portainer
1. 是什么 它是一款轻量级的应用,它提供了图形化界面,用于方便管理Docker环境,也包括单机环境和集群环境。 2. 安装 官网:Kubernetes and Docker Container Management Software 安装路径:Install the Compose plug…...
推特Twitter有直播功能吗?如何用Twitter直播?
现在各大直播平台已经成为社交媒体营销的一种重要渠道,它让品牌能够即时地与全球受众进行互动。据统计,直播市场正在迅速增长,预计到2028年将达到2230亿美元的规模。在这个不断扩张的市场中,许多社交媒体平台如YouTube、Facebook、…...
蓝桥杯算法基础(32):素数,埃式筛法,快速幂,斐波那契与矩阵幂运算
素数 有些人认为一个人一生中有三个周期,从他或她出生的那一天开始。 这三个周期是身体周期,情感周期的和智力的周期,他们有周期的长度为23,28, 和33天。每一个周期都有一个高峰。在一个周期的高峰期, 一个…...
VSCode - 离线安装扩展python插件教程
1,下载插件 (1)首先使用浏览器打开 VSCode 插件市场link (2)进入插件主页,点击右侧的 Download Extension 链接,将离线安装包下载下来(文件后缀为 .vsix) 2,…...
2024年中级职称现在报名,时间还太早了吗?什么时候合适?
甘建二十年耕耘职称,关于职称大小事都了解 想要评湖北职称,请认准甘建二,关于职称评审条件、申报时间、评审资料、申报材料、评审流程、证书查询、出证时间、考试答辩等关于职称所有的事情都知道,找甘建二准没错。 我们通常都会觉…...
《责任链模式(极简c++)》
本文章属于专栏- 概述 - 《设计模式(极简c版)》-CSDN博客 模式说明 方案: 责任链模式将请求的发送者和接收者解耦,构成一个链条,并由多个对象对请求进行处理,直到找到合适的处理者为止。优点: …...
【学习】JMeter和Postman两种测试工具的主要区别有哪些
Postman和JMeter都是常用的API测试工具,但它们之间存在一些不同之处。以下是Postman和JMeter的主要区别: 语言支持 Postman是一个基于Chrome的应用程序,因此它使用JavaScript作为编程语言。这意味着你可以使用JavaScript来编写测试脚本和断…...
【压缩字符串算法解析与实现】
压缩的要求是将连续相同字符替换为字符 数字形式,例如 “AAABCCDDDD” 变为 “A3BC2D4”。 问题描述与分析 给定一个字符串,我们需要判断是否可以进行压缩,并且只在压缩后的字符串长度比原字符串长度更短时进行压缩。如果字符串可以压缩&a…...
test02
欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…...
K8S Pod 水平自动扩缩容 HPA
介绍 HPA(Horizontal Pod Autoscaler)水平扩缩意味着可根据观察到的CPU、内存使用率或自定义度量标准来自动扩展或缩容Pod的数量(Deployment、StatefulSet 或其他类似资源)。与“垂直”扩缩不同,对于 K8S,…...
Spring日志框架
前言 本文我们简单说说关于Spring中的日志框架,以及对应的注解 我们知道,公司服务器在运行的时候,一定会打印日志,有很多优点,比如预防报警,或者是某重大事故尝试修复等等都需要查看日志 应该说日志对我们来说并不陌生,我们在之前刷题或者是程序遇到bug的时候也经常会将程序的状…...
(九)关系数据理论
函数依赖:设R(U)是属性集U上的关系模式。X、Y是属性集U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X,记作X→Y。(即只要X 上的…...
【经验分享】Ubuntu下如何解决问题arm-linux-gcc:未找到命令
【经验分享】Ubuntu下如何解决问题arm-linux-gcc:未找到命令 前言问题分析解决方法 前言 在编译过程中发现一个问题,明明之前安装了gcc-4.6版本,版本信息都是正常显示的,刚安装上去的时候也是可以用的。但不知道什么原因突然不能…...
【算法刷题day10】Leetcode:232.用栈实现队列、225. 用队列实现栈
文章目录 Leetcode 232.用栈实现队列解题思路代码总结 Leetcode 225. 用队列实现栈解题思路代码总结 stack、queue和deque对比 草稿图网站 java的Deque Leetcode 232.用栈实现队列 题目:232.用栈实现队列 解析:代码随想录解析 解题思路 一个栈负责进&a…...
sql注入详解
ps:简单说下这里只写了我能理解的明白的,后面的二阶注入,堆叠注入没写 手工sql注入 1.存在sql注入本质上就是数据库过滤的不严格或者未进行过滤,1 and 11,返回正常,1 and 12 返回不正常,说明带到数据库里面…...
[蓝桥杯 2022 省 B] 李白打酒加强版
题目链接 [蓝桥杯 2022 省 B] 李白打酒加强版 题目描述 话说大诗人李白,一生好饮。幸好他从不开车。 一天,他提着酒壶,从家里出来,酒壶中有酒 2 2 2 斗。他边走边唱: 无事街上走,提壶去打酒。 逢店加一倍…...
【检索增强】Retrieval-Augmented Generation for Large Language Models:A Survey
本文简介 1、对最先进水平RAG进行了全面和系统的回顾,通过包括朴素RAG、高级RAG和模块化RAG在内的范式描述了它的演变。这篇综述的背景下,更广泛的范围内的法学硕士研究RAG的景观。 2、确定并讨论了RAG过程中不可或缺的核心技术,特别关注“…...
EVM Layer2 主流解决方案
深度解析主流 EVM Layer 2 解决方案:zk Rollups 和 Optimistic Rollups 随着以太坊网络的不断演进和 DeFi 生态系统的迅速增长,以太坊 Layer 2 解决方案日益受到关注。 其中,zk Rollups 和 Optimistic Rollups 作为两种备受瞩目的主流 EVM&…...
go中结构体标签:omitempty、json꞉“name“、 gorm꞉“column꞉name“、yaml꞉“name“
在Go语言中,结构体标签(Struct Tags)提供了一种在编译时附加到结构体字段上的元数据,这些标签可以被运行时的反射(reflection)机制读取。结构体标签的存在意义和用途非常广泛,主要包括ÿ…...
七月论文审稿GPT第4版:通过paper-review数据集微调Mixtral-8x7b,对GPT4胜率超过80%
前言 在此之前,我司论文审稿项目组已经通过我司处理的paper-review数据集,分别微调了RWKV、llama2、gpt3.5 16K、llama2 13b、Mistral 7b instruct、gemma 7b 七月论文审稿GPT第1版:通过3万多篇paper和10多万的review数据微调RWKV七月论文审…...
wordpress 用户密码的加密算法/域名注册价格及续费
题意 你有一个长度为n(2≤n≤2∗104)n(2 \le n \le 2*10^4)n(2≤n≤2∗104)的二进制01串01串01串 你需要找到不相交的两个长度至少为⌊n2⌋⌊\frac{n}{2}⌋⌊2n⌋的二进制串使得它们互为倍数关系(也可以相等) 思路 若能在[n/21,n][n/21,n][n/21,n]…...
个人备案网站会影响吗/推广小程序
认识<hr>标签,添加水平横线 语法: html4.01版本 <hr> xhtml1.0版本 <hr /> 注意: 1. <hr />标签和<br />标签一样也是一个空标签,所以只有一个开始标签,没有结束标签。 2. <hr…...
用织梦做的政府网站/结构优化设计
sqlserver批量导出视图 select text from syscomments s1 join sysobjects s2 on s1.ids2.id where xtype Vsqlserver批量导出存储过程 select text from syscomments s1 join sysobjects s2 on s1.ids2.id where xtype Psqlserver批量导出函数 select text from syscom…...
垂直型网站名词解释/赣州seo顾问
《Windows Azure Platform 系列文章目录》 最近在帮助一个客户设置WAF (Web Application Firewall),WAF厂商要求在负载均衡器上,设置多个公网IP地址。架构如下图: 我研究了一下,在Azure ARM模式下可以实现,在这里记录一…...
关于配色的网站/广州推广工具
会发现这里这两个方法无法重载 因为在 public Integer method(List stringList);和 public String method(List integers);中 参数最终都是在编译时候擦除类型 变成List 这样就无法重载了,重载必须方法签名不同...
wordpress加密页面/自己怎么做网页
在vb.net中利用OleDb的OleDbCommand类操作数据库,有以下这些方法: ExecuteNoQuery() 返回值类型integer,常用来执行增删改操作,返回操作影响的行数 ExecuteReader() 返回一个只读的数据集,常用来作查询操作 ExecuteScalar() 返回值…...