当前位置: 首页 > news >正文

基于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的汽车防窒息系统 系统简介 随着社会的发展目前汽车的流行&#xff0c;汽车大…...

GoogleNet神经网络介绍

一、简介 GoogleNet&#xff0c;也称为GoogLeNet&#xff0c;是谷歌工程师设计的一种深度神经网络结构&#xff0c;它在2014年的ImageNet图像识别挑战赛中取得了冠军。该神经网络的设计特点主要体现在其深度和宽度上&#xff0c;通过引入名为Inception的核心子网络结构&#x…...

AI水下颜色校正解决方案,助力企业打造水下视觉盛宴

水下摄影作为一种独特且富有挑战性的拍摄方式&#xff0c;正受到越来越多旅行者和摄影师的青睐。然而由于海水的光线折射和金属成分的影响&#xff0c;水下拍摄的照片和视频往往存在严重的偏色问题&#xff0c;无法真实还原水下世界的美丽与神奇。美摄科技凭借深厚的技术积累和…...

LINUX笔记温习

目录 DAY1 DAY2 day3&#xff1a; day4 day5 day6 day7 day8 day9 day10 day11 day12 day13 day14 day15 20day DAY1 1、多层级文件夹创建要带-p&#xff1b; 2、创建多文件&#xff0c;要先到该目录下才能创建(第一个目录必须存在才能有效建立)&#xff1b; D…...

钉钉服务端API报错 43008 参数需要multipart类型

钉钉服务端API报错 43008 参数需要multipart类型 problem 使用媒体文件上传接口&#xff0c;按照文档输入参数&#xff0c;结果返回报错 # 参数 {"access_token": "xxx""type": "image","media": "/Users/xxx/xxx/s…...

HarmonyOS NEXT应用开发案例——阻塞事件冒泡

介绍 本示例主要介绍在点击事件中&#xff0c;子组件enabled属性设置为false的时候&#xff0c;如何解决点击子组件模块区域会触发父组件的点击事件问题&#xff1b;以及触摸事件中当子组件触发触摸事件的时候&#xff0c;父组件如果设置触摸事件的话&#xff0c;如何解决父组…...

【C语言】联合和枚举

个人主页点这里~ 联合和枚举 一、联合体1、联合体类型的声明2、联合体成员的特点3、与结构体对比4、计算联合体大小 二、枚举1、枚举的声明2、枚举的优点3、枚举类型的使用 一、联合体 1、联合体类型的声明 联合体的定义与结构体相似&#xff0c;但是联合体往往会节省更多的空…...

苹果手机黑屏打不开怎么办?5种方法让你轻松应对

苹果手机以其卓越的性能和流畅的操作体验赢得了全球用户的喜爱。然而&#xff0c;就像其他电子产品一样&#xff0c;苹果手机偶尔也会遇到一些问题。其中&#xff0c;苹果手机黑屏打不开是许多用户都曾遇到过的困扰。当您按下电源键&#xff0c;却发现手机屏幕一片漆黑&#xf…...

鸿蒙:滑动条组件Slider

滑动条组件&#xff0c;通常用于快速调节设置值&#xff0c;如音量调节、亮度调节等应用场景。 说明 该组件从API Version 7开始支持。 子组件 无 接口 Slider(options?: {value?: number, min?: number, max?: number, step?: number, style?: SliderStyle, direc…...

【智能家居项目】RT-Thread版本——DHT11获取温湿度 | MQTT上传到服务器 | 服务器控制外设

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《智能家居项目》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 这篇文章中&#xff0c;本喵将使用RT-Thread Studio来实现这个智能家居的项目&#xff0c;最终…...

Docker 轻量级可视化工具 Portainer

1. 是什么 它是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便管理Docker环境&#xff0c;也包括单机环境和集群环境。 2. 安装 官网&#xff1a;Kubernetes and Docker Container Management Software 安装路径&#xff1a;Install the Compose plug…...

推特Twitter有直播功能吗?如何用Twitter直播?

现在各大直播平台已经成为社交媒体营销的一种重要渠道&#xff0c;它让品牌能够即时地与全球受众进行互动。据统计&#xff0c;直播市场正在迅速增长&#xff0c;预计到2028年将达到2230亿美元的规模。在这个不断扩张的市场中&#xff0c;许多社交媒体平台如YouTube、Facebook、…...

蓝桥杯算法基础(32):素数,埃式筛法,快速幂,斐波那契与矩阵幂运算

素数 有些人认为一个人一生中有三个周期&#xff0c;从他或她出生的那一天开始。 这三个周期是身体周期&#xff0c;情感周期的和智力的周期&#xff0c;他们有周期的长度为23&#xff0c;28&#xff0c; 和33天。每一个周期都有一个高峰。在一个周期的高峰期&#xff0c; 一个…...

VSCode - 离线安装扩展python插件教程

1&#xff0c;下载插件 &#xff08;1&#xff09;首先使用浏览器打开 VSCode 插件市场link &#xff08;2&#xff09;进入插件主页&#xff0c;点击右侧的 Download Extension 链接&#xff0c;将离线安装包下载下来&#xff08;文件后缀为 .vsix&#xff09; 2&#xff0c;…...

2024年中级职称现在报名,时间还太早了吗?什么时候合适?

甘建二十年耕耘职称&#xff0c;关于职称大小事都了解 想要评湖北职称&#xff0c;请认准甘建二&#xff0c;关于职称评审条件、申报时间、评审资料、申报材料、评审流程、证书查询、出证时间、考试答辩等关于职称所有的事情都知道&#xff0c;找甘建二准没错。 我们通常都会觉…...

《责任链模式(极简c++)》

本文章属于专栏- 概述 - 《设计模式&#xff08;极简c版&#xff09;》-CSDN博客 模式说明 方案&#xff1a; 责任链模式将请求的发送者和接收者解耦&#xff0c;构成一个链条&#xff0c;并由多个对象对请求进行处理&#xff0c;直到找到合适的处理者为止。优点&#xff1a; …...

【学习】JMeter和Postman两种测试工具的主要区别有哪些

Postman和JMeter都是常用的API测试工具&#xff0c;但它们之间存在一些不同之处。以下是Postman和JMeter的主要区别&#xff1a; 语言支持 Postman是一个基于Chrome的应用程序&#xff0c;因此它使用JavaScript作为编程语言。这意味着你可以使用JavaScript来编写测试脚本和断…...

【压缩字符串算法解析与实现】

压缩的要求是将连续相同字符替换为字符 数字形式&#xff0c;例如 “AAABCCDDDD” 变为 “A3BC2D4”。 问题描述与分析 给定一个字符串&#xff0c;我们需要判断是否可以进行压缩&#xff0c;并且只在压缩后的字符串长度比原字符串长度更短时进行压缩。如果字符串可以压缩&a…...

test02

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…...

K8S Pod 水平自动扩缩容 HPA

介绍 HPA&#xff08;Horizontal Pod Autoscaler&#xff09;水平扩缩意味着可根据观察到的CPU、内存使用率或自定义度量标准来自动扩展或缩容Pod的数量&#xff08;Deployment、StatefulSet 或其他类似资源&#xff09;。与“垂直”扩缩不同&#xff0c;对于 K8S&#xff0c;…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...