基于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、按键等方便扩展和进行其他功能的添加。

禁止转载!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/786818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【技巧】如何解除Excel“打开密码”?

给Excel表格设置“打开密码”&#xff0c;可以保护表格不被他人随意打开&#xff0c;那如果后续不需要保护了&#xff0c;不想每次打开Excel都需要输密码&#xff0c;要怎么去除“打开密码”呢&#xff1f; 今天分享3个方法&#xff0c;最后一个方法记得收藏起来&#xff0c;以…

基于51单片机的智能报警系统Proteus仿真

地址&#xff1a;https://pan.baidu.com/s/10dhkyV5O629UpFHHV67LpQ 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectroni…

LVS、HAProxy

集群&#xff1a;将很多个机器组织到一起&#xff0c;作为一个整体对外提供服务。集群在扩展性、性能方面都可以做到很灵活。集群的分类&#xff1a;负载均衡集群&#xff1a;Load Balance。高可用集群&#xff1a;High Available。高性能集群&#xff1a;High Performance Com…

Python学习从0到1 day20 第二阶段 面向对象 ② 封装

缘分 朝生暮死犹如露水 —— 24.4.1 学习目标&#xff1a; 1.理解封装的概念 2.掌握私有成员的使用 一、面向对象三大特性&#xff1a; 面向对象编程&#xff0c;是许多编程语言都支持的一种编程思想 简单理解是&#xff1a;基于模板&#xff08;类&#xff09;去创建实体&…

枚举---算法

1、定义 枚举算法&#xff1a;也称之为穷举算法&#xff0c;这种算法就是在解决问题的时候去使用所有的方式去解决这个问题&#xff0c;会通过推理去考虑事件发生的每一种可能&#xff0c;最后推导出结果。优点&#xff1a;简单粗暴&#xff0c;它暴力的枚举所有可能&#xff…

Mysql故障和优化

一、MySQL故障 二、MySQL优化 1.硬件优化&#xff1a; 2.数据库设计与规划 1.提前估计数据量&#xff0c;使用什么存储引擎 2.数据库服务器专机专用&#xff0c;避免额外的服务可能导致的性能下降和不稳定性 3.增加多台服务器&#xff0c;以达到稳定、高效的效果。主从同步、…

风控系统:通过净值及盈亏开启和关闭自动交易

一、风控对交易员的好处 帮助交易员执行交易纪律并保护他们的交易资金。 纪律风控&#xff1a;对不符合交易纪律的交易执行风控&#xff0c;对交易纪律性差的交易员执行约束操作。净值风控&#xff1a;对满足条件的净值执行风控&#xff0c;防止交易员的账户净值过度下降。手数…

Memory Analyzer Tool使用教程

下载地址&#xff1a;https://eclipse.dev/mat/previousReleases.php 下载JDK8对应的MAT版本 使用jps查看pid jps 使用jmap生成heap dump文件 jmap -dump:formatb,live,filexxx.bin <pid> 使用MAT打开heap dump文件 查看GC Roots

【Linux入门】Linux简史

Linux 是什么&#xff1f;Linux 是一款叫做操作系统的软件。 操作系统这款软件有什么样的意义呢&#xff1f;简单来说&#xff0c;比如有顾客买了一台笔记本电脑&#xff0c;这台笔记本电脑由电脑硬件组成&#xff0c;在这堆硬件上一定搭载了一款操作系统。正因为操作系统存在&…

ssm013小型企业办公自动化系统的设计和开发+vue

小型企业办公自动化系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对小型企业办公信息管理混乱&am…

git删除某次commit的代码

这里写目录标题 1.问题背景2.问题拆解尝试&#xff1a;a.使用git reset --hard HEAD &#xff08;不行&#xff0c;局限性太大&#xff09;尝试&#xff1a;b.使用git rebase -i HEAD &#xff08;可以&#xff0c;但push -f不太友好&#xff09;尝试&#xff1a;c.使用git rev…

ETL工具-nifi干货系列 第六讲 处理器JoltTransformJSON

1、处理器作用 使用Jolt转换JSON数据为其他结构的JSON,成功的路由到success,失败的failure。处理JSON的实用程序不是基于流的&#xff0c;因此大型JSON文档转换可能会消耗大量内存。 Jolt&#xff1a;JSON 到 JSON 转换库&#xff0c;用 Java 编写&#xff0c;其中转换的 &qu…

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…

Golang 内存管理和垃圾回收底层原理(二)

一、这篇文章我们来聊聊Golang内存管理和垃圾回收&#xff0c;主要注重基本底层原理讲解&#xff0c;进一步实战待后续文章 垃圾回收&#xff0c;无论是Java 还是 Golang&#xff0c;基本的逻辑都是基于 标记-清理 的&#xff0c; 标记是指标记可能需要回收的对象&#xff0c…

2023年EI会议论文已见刊/检索进展汇总

2023年录用的会议论文已在SPIE、ACM、IEEE等出版社正式上线见刊&#xff0c;并已陆续完成EI Compendex数据库收录&#xff0c;详情如下&#xff1a; EIECT 2023——IEEE出版&#xff0c;并完成EI收录 会议信息&#xff1a; 第三届电子信息工程与计算机技术国际学术会议&…

探索使用对比损失的孪生网络进行图像相似性比较

点击下方卡片&#xff0c;关注“小白玩转Python”公众号 简介 在计算机视觉领域&#xff0c;准确地测量图像相似性是一项关键任务&#xff0c;具有广泛的实际应用。从图像搜索引擎到人脸识别系统和基于内容的推荐系统&#xff0c;有效比较和查找相似图像的能力非常重要。Siames…

QA测试开发工程师面试题满分问答3: python的深拷贝和浅拷贝问题

在 Python 中&#xff0c;深拷贝&#xff08;deep copy&#xff09;和浅拷贝&#xff08;shallow copy&#xff09;是用于创建对象副本的两种不同方式。 浅拷贝是创建一个新的对象&#xff0c;该对象与原始对象的内容相同&#xff08;包括内部嵌套对象的引用&#xff09;&…

Higress 基于自定义插件访问 Redis

作者&#xff1a;钰诚 简介 基于 wasm 机制&#xff0c;Higress 提供了优秀的可扩展性&#xff0c;用户可以基于 Go/C/Rust 编写 wasm 插件&#xff0c;自定义请求处理逻辑&#xff0c;满足用户的个性化需求&#xff0c;目前插件已经支持 redis 调用&#xff0c;使得用户能够…

LeetCode刷题:无重复字符的最长子串 详解 【3/1000 第三题】

&#x1f464;作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打怪升级之旅 LeetCode解锁1000题: 打怪升级之旅htt…

【THM】Active Reconnaissance(主动侦察)-初级渗透测试

介绍 在网络安全模块的第一个房间里,我们主要进行被动侦察。在第二个房间中,我们重点关注主动侦察以及与之相关的基本工具。我们学习使用网络浏览器来收集有关我们目标的更多信息。此外,我们讨论使用简单的工具(例如ping、traceroute、telnet和 )nc来收集有关网络、系统和…