基于STM32的室内环境监测系统、基于STM32的智能家居系统

news2024/11/19 11:25:45

程序源码无删减

整个开发用到的所有资料如下:
开发软件MDK
JLINK驱动安装包及相关文件
stm32开发资料-stm32f103c8t6
PCtoLCD2002 取模软件
stm32配套的液晶屏资料以及相关程序
Stm32f103c8t6 UCOSII
各传感器的数据手册以及程序、BMP180、DHT11温度模块、HC-SR04 超声波模块、光敏电阻传感器、热敏传感器、无源蜂鸣器

基于STM32的室内环境监测系统

概述

采用STM32F103C8T6核心板作为系统控制单元,结合相关的传感器模块和软件资源完成以STM32F103C8T6为核心的室内环境监测系统。使用超声波传感器检测距离,通过LCD显示屏显示距离;通过温湿度传感器DHT11将检测到的实时室内温湿度数据发送给主控LCD显示,同时系统能够根据设定温度自动驱动加热模块进行升温,驱动风扇进行降温,达到自动控温的目的,也可手动进行升降温控制;使用光照传感器将采集的ADC数据进行分析周围光照强度,将光照的亮弱实时数据发送给主控LCD显示;通过产生PWM波来控制LED灯的点亮程度,从而在光照不足的情况下,任意切换LED灯显示模式。

本设计的研究内容:

硬件电路的绘制,设备连线的处理,STM32F103C8T6核心板 GPIO 端口的使用研究,通过程序流程编写,实现在设备运行过程中进行电机测试,显示队员信息,实现蜂鸣器报警,进行图像测试。同时使用光敏电阻感应光照强度,通过LCD显示屏的亮灭来表示光照强度;实现在设备运行过程中实时显示室内温湿度数据并实现自动升降温功能以及使用超声波测距模块检测异常温度目标的距离;实现在设备运行过程中手动控制LED的亮灭和点亮方式。

第2章 系统需求分析

2.1功能与性能需求分析
要求所设计的室内环境监测系统能够测量家庭室内的温度、湿度, 并在LCD上显示,并设定26-27℃为标准温度,当室内温度低于26℃时, 控制电机自动转动来进行升温操作(考虑到安全性等问题,用电机转动来表示升温,降温类似),当室内温度高于27℃时, 控制电机自动转动来进行降温操作,并用超声波测距模块检测异常温度目标的距离。要求所设计的室内环境监测系统能够测量家庭室内的光照强度, 当室内光强较大时,LCD屏亮屏并显示明亮字样,当室内光强较小时,LCD屏灭屏并显示黑暗字样。要求所设计的室内环境监测系统能够手动控制八个LED灯的亮灭和点亮方式。要求所设计的室内环境监测系统能够实现在设备运行过程中进行电机测试,显示队员信息,实现蜂鸣器报警,进行图像测试。
2.2 课题任务目标
根据室内环境监测系统设计任务需求完成从系统设计方案制定、传感器模块选择、硬件电路设计、各个模块布局、电路绘制、实物焊接和软件程序调试,基本程序及驱动程序设计等,微控制器选用32位的STM32F103C8T6核心板为微控制器。通过对STM32F103C8T6核心板GPIO端口的使用,运用UART串口通信实现蓝牙模块的通信功能;通过串行SPI总线通信完成对LCD显示屏的显示及触摸控制,能够实时的在LCD触摸屏上查看系统各个模块运行状态;选用STM32F103C8T6单片机作为测温湿度以及测距系统的核心,用DHT11温湿度传感器进行温湿度检测,将温湿度数据实时显示在屏幕上,并用程序逻辑实现通过控制电机实现自动升降温功能,用超声波测距模块检测异常温度目标的距离。系统能够根据设定温度自动驱动加热模块进行升温,驱动风扇进行降温,达到自动控温的目的,也可手动进行升降温控制。

第3章 系统硬件设计

3.1 主控制电路设计
STM32F103C8T6是专门为嵌入式应用而设计的一款高性能、低功耗的芯片,其采用Cortex-M3为其内核的架构。工作频率最高可达到72MHz,采用单周期乘法以及硬件除法以及通过采用Thumb-2高密度指令集,由于中断处理需要较高的实时,在系统存储方面内核降低了相关方面的要求;内核在处理速度上有着明显的优势,在Flash上,其拥有128KB的高容量存储空间。
芯片内拥有3个16位定时器,每个定时器可通过相关寄存器的配置轻松实现PWM功能,例如控制电机的占空比;实现捕获比较功能,实现例如测频;而有关电源管理、时钟方面设备拥有上电复位和掉电复位硬件电路,同时嵌入一个可编程电压探测器用于检测VDD来确保MCU处于安全运行状态。内部拥有嵌套矢量中断控制器(NVIC)用来处理43个中断通道;拥有3种低功耗模式其包括停止、休眠、待机。
在这里插入图片描述

图3.1 MCU主控制电路
3.2 时钟电路设计
时钟电路如图3所示,时钟电路由8MHz的石英晶振和两个电容并联组成,两端分别接STM32芯片的OSCIN和OSCOUT引脚,时钟电路为主控制器提供高速的时钟,8MHz的外部晶振经过STM32内部的倍频可实现72MHz的主时钟频率。
在这里插入图片描述

图3.2 时钟晶振电路
3.3复位电路设计
复位电路采用的是按键复位其的原理是单片机RST引脚接收到电平信号,只要保证电平的充放电时间大于2us,即可实现复位。复位电路由电容并联电阻构成,结合“电容电压不能突变”的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的R,C值来决定。在这个电路中,这里选用1k、10K的电阻和1000UF的电容。
在这里插入图片描述

图3.3 复位电路
3.4 多路传感器信号采集电路设计
传感器采集电路如图3.4.1和图3.4.2所示。NTC热敏温度传感器是一种在单总线通信协议下的温度传感器,目前由于其众多优点例如相当高的测量精度以及廉价等,是目前市场上比较流行的温度传感器,在生活中也随处可见。在其内部存在高速存储器RAM以及可擦写非易失EEPRAM,NTC热敏温度传感器可实现-55到+125温度测量,并且精度可达到0.5度左右,其独特的单总线技术使得与MCU的通信变得更加容易,方便技术人员的开发,其工作电压为3到5.5V。EEPRM中保存了温度寄存器和相应的结构寄存器,在单总线通信协议下,这种设计结构非常方便的实现数据的读取,不仅方便而且安全。相应的存储单元中的序列号是在生产商出场之前刻好的,其内部显示的一些序列号可以相似的理解位MAC地址。NTC热敏温度传感器的存储机制很大程度上实现了地址式的访问数据光,一根总线实现数据的访问集命令和数据指令为一体。其硬件电路如下图所示,中间的DQ引脚连接STM32,实现数据传输,但其必须严格遵守单总线通信协议才能准确的采集温度数据;DHT11温湿度传感器实时检测室内温湿度情况;超声波测距模块起到安全提醒作用;光敏传感器通过对室内光照强度的监控来配合微处理器实现对LCD屏的控制。
在这里插入图片描述

图3.4.1 光敏、超声波传感器电路
在这里插入图片描述

图3.4.2 蜂鸣器、温湿度传感器电路
3.5 系统硬件电路原理图设计
系统硬件原理图如图3.5.1和图3.5.2所示。
在这里插入图片描述

图3.5.1 系统硬件电路原理图设计
在这里插入图片描述

图3.5.2 系统硬件电路原理图设计

第4章 系统软件设计

4.1 主程序流程
主程序主要定时器的初始化。在主函数死循环中完成取消息任务,判断消息是否分拣处理好:是则继续取新的消息,否则说明消息没处理好,继续投递消息到消息队列的尾部去。图4.1给出了主程序流程图。由于查询或中断直接处理任务而影响了其他事件的服务。本次设计中引入了消息驱动机制,在 STM32单片机软件体系中,使用任务调度的方法。这种方法不仅有清晰的体系层次结构,而且有科学的写作风格,使今后的很多工作易于被升华和升级。通过建立动态连接库,中断源通过消息投递函数Postmessege()将消息投递到消息队列尾部之后转而去执行其他任务,不会将时间消耗在某一个任务上,中断函数处理迅速。具体的工作则是由主函数中消息循环中的拾取消息函数Getmessege()来获得新的消息,通过分拣函数 Dispatchmessege()来指向某一个具体的处理函数,再返回处理结果。其主程序在消息驱动上主要是对消息的判断以及实现定时器的配置,这样的结构能够提高时钟的利用,简化代码在中断中占用过多。
在这里插入图片描述

在这里插入图片描述

图4.1 系统程序流程图

4.2 中断服务函数
定时器2更新中断和比较中断共用定时器2的中断服务函数,更新中断是定时器2通过外部触发引脚 TIM2_ETR对外部被测信号进行计数,当计数到Oxffff时(因为定时器2主计数器是16位)发生溢出,产生更新中断。由于定时器2计数器只有16位,测量频率范围太窄,需要扩展成32位计数器。为了扩展计数器,这里设置了一个32位的扩展计数器FreqExtcounter,每当发生更新中断时,FreqExtcounter则加上0x1000。比较中断发生在定时器4输出溢出触发脉冲时,当溢出1Hz脉冲的上升沿时,比较中断产生,TIM2_ERT 的值锁存到TIM2_CCR1。捕捉标志位为1S时,当TIM2_CCR1为Oxffff且更新中断标志位为1时,则表明发生了更新中断,但未执行更新中断操作,FreqExtcounter没加上0x1000。当执行完 TIM2比较中断,再执行更新中断时会加上0x1000,因此这里频率Freqency等于FreqExtcounter。其他情况则是频率Freqency等于FreqExtcounter加上捕捉寄存器TIM2_CCR1的值再加上1。中断程序流程如图4.2所示。比较中断1S发生一次,发生时频率Freqency更新一次,更 新 后 将 频 率送到频率缓冲区,等待主函数通过 Getmessege()取得ISR(中断服务程序)发出的消息,送到Dispatchmessege()处理。
在这里插入图片描述

图4.2中断服务函数流程图

第5章 系统综合测试
在这里插入图片描述

图5.1 功能主界面

图5.2 图像显示测试

图5.3 队员信息显示测试
在这里插入图片描述

图5.4 光敏传感器测试
在这里插入图片描述

图5.5 温湿度传感器测试
在这里插入图片描述

图5.6 手动升降温测试
在这里插入图片描述

图5.7 超声波测试
在这里插入图片描述

图5.8 蜂鸣器测试
在这里插入图片描述

图5.9 电机测试
在这里插入图片描述

图5.10 LED测试

程序源码无删减

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

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

相关文章

EthernetOnTCP--基于Qt QSslSocket 套接字在PCAP 集线器上实现以太网隧道

在上一篇文章中,我们使用PCAP建立了本地的软件集线器(Hub)。考虑到较远距离的跨车间调试,有必要使用Tcp连接构造一个以太网的隧道,使得两个车间之间的调试设备可以虚拟的连接在一个Hub上。当然,我们可以使用…

【ROS】—— 机器人系统仿真 —Rviz中控制机器人模型运动与URDF集成Gazebo(十五)

文章目录前言1. Arbotix使用流程1.1 安装 Arbotix1.2 创建新功能包,准备机器人 urdf、xacro 文件1.3 添加 Arbotix 配置文件1.4 编写 launch 文件配置 Arbotix1.5 启动 launch 文件并控制机器人模型运动2. URDF集成Gazebo2.1 URDF与Gazebo基本集成流程2.2 URDF集成G…

Spring Boot整合Redis(gradle + gson + lombok + redisTemplate)

本文创建了gradle项目,用来整合Spring Boot和Redis,用到了gradle gson lombok redisTemplate等技术。 重要文件: 文件名说明build.gradlegradle配置文件Redis2Application.java启动类Controller.java控制器类StudentService.java业务逻辑…

深入解析Linux虚拟化KVM-Qemu分析之virtio设备

说明: KVM版本:5.9.1QEMU版本:5.0.0工具:Source Insight 3.5, Visio 1. 概述 先来张图: 图中罗列了四个关键模块:Virtio Device、Virtio Driver、Virtqueue、Notification(eventfd…

Linux——简单了解文件与目录结构

1、 Linux 文件 1.1 概述 Linux系统 一切皆文件。 从我们刚接触到Linux系统,就能听到这句话:Linux系统 一切皆文件。 我们来看看Linux文件系统和Windos的差异: Windows ,我们知道一台新的电脑到手之后,往往都只有一…

Vue2的双向绑定真的就是观察者模式吗?

导语建议先看看往期的推文,对vue响应式有一定理解后再阅读本文。Vue的双向绑定(数据劫持)响应式与观察者模式(特别是附录,观察者模式与发布订阅模式)关于Vue2深入响应式原理,作者原话为&#xf…

搭建nacos环境(保姆级教程)

2.2.1 服务发现中心 根据上节讲解的网关的架构图,要使用网关首先搭建Nacos。 首先搭建Nacos服务发现中心。 在搭建Nacos服务发现中心之前需要搞清楚两个概念:namespace和group namespace:用于区分环境、比如:开发环境、测试环…

【Linux】进程间管道通信、线程池

目录 一、进程间通信的概念 二、匿名管道 2.1 什么是管道 2.2 管道的实现 2.3 管道的使用 三、进程池 3.1 进程池实现逻辑 3.2 模拟任务表 3.3 进程池的创建 四、命名管道 4.1 创建命名管道 4.2 命令管道的使用 一、进程间通信的概念 进程具有独立性,…

面试系列:单点登录的知识(一)

大家好,我是车辙,由于目前接手的业务涉及到了单点登录,所以一直在疯狂的去补充这方面的知识。也写下了这篇面试形式的文章,写的不好大家轻点 Diss。 面试开始 在焦急的等待中,一位看上去比较年轻的小伙子走了过来。我…

Leetcode:701. 二叉搜索树中的插入操作(C++)

目录 问题描述: 实现代码与解析: 递归: 原理思路: 迭代: 原理思路: 问题描述: 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二…

Codeforces Round #843 (Div. 2)——A,B,C,E

​​​​​​​​​​​Dashboard - Codeforces Round #842 (Div. 2) - Codeforces A: 思维构造 题意:给定一个由 ab 组成的字符串,将该字符串拆分成 3 个部分(a,b,c),要求中间部分的字典序最大…

2022 年终总结

在 12 月 31 号晚上这天,打开朋友圈大家都在告别 2022、迎接 2023,我却想不到任何值得发的内容。没有外出体会元旦的节日氛围,也没有观看任何跨年活动,2022 年最后一秒跟全年的 3153.6 万秒没有任何区别。 甚至这篇总结都差点没有…

RK3568源码编译与交叉编译环境搭建

本篇进行飞凌OK3568-C开发板的Linux系统开发需要用的软件交叉编译环境的配置。 对于软件开发,如果只是使用C/C代码,则在自己的Ubuntu虚拟机中添加RK3568对应的交叉编译器(gcc/g)即可,如果要进行Qt开发,则还要再交叉编译与RK3568配…

UDS诊断系列介绍09-1485服务

本文框架1. 系列介绍1.1 14服务概述1.2 85服务概述2. 14服务请求与应答2.1 14服务请求2.2 14服务正响应3. 85服务请求与应答3.1 85服务请求3.2 85服务正响应3.3 否定应答4. Autosar系列文章快速链接1. 系列介绍 UDS(Unified Diagnostic Services)协议&a…

graalvm+spring-cloud-gateway打造又快又小的类nginx本地网关

前言 网关是微服务架构的入口,外网请求通过网关转发到独立的微服务。项目一般会经过多个环境的测试,最终发布到生产。一个http请求,如:http://public_host/api/v1/some_service/some_path?ab&cd会先经过公网域名&#xff0c…

ThinkPHP5.x未开启强制路由(s参数)RCE

官方公告:https://blog.thinkphp.cn/869075 由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞,受影响的版本包括5.0和5.1版本 ThinkPHP5基础 环境搭建 官网直接下载完整包 https://www.thinkphp.cn/down/870.…

ElasticSearch集群架构及底层原理

前言ElasticSearch考虑到大数据量的情况,集群有很多的部署模式,本篇不会具体进行演示了,只是说明一下有哪些架构可以选,及一些原理的简单介绍,如果要看具体操作的那么可以自行进行搜索,这不是本篇博客要介绍…

OCR文字识别软件哪个好?7大文字识别软件

由于从各种文档中提取文本的需求非常普遍,许多办公软件或公司都提供了OCR工具。在本文中,我们为您推出了一系列功能强大且易于使用的最佳 OCR 软件。 什么是 OCR 软件? OCR 软件是一种程序或工具,可以使用光学字符识别技术识别数…

小红书数据分析网站:揭晓普通博主1个月涨粉百万的密码!

导语: 随着2023年的来临,回首小红书动态,行业热度依旧高涨,越来越多的达人涌入小红书。在时尚领域,更是出现了如氧化菊这样的大势变装博主!短短一周涨粉13W的变装博主为何能突围,强势吸睛呢&am…

[LCTF]bestphp2022安洵杯 babyphp

目录 <1> [LCTF]bestphp‘s revenge SoapClient触发反序列化导致ssrf serialize_hander处理session方式不同导致session注入 crlf漏洞 <2> 安洵杯 babyphp SoapClient 触发ssrf session反序列化 利用文件操作原生类读取flag <3> XCTF Final Web1 解…