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

20 基于STM32的温度、电流、电压检测proteus仿真系统(OLED、DHT11、继电器、电机)

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于STM32F103C8T6 采用DHT11读取温度、滑动变阻器模拟读取电流、电压。
通过OLED屏幕显示,设置电流阈值为80,电流小阈值为50,电压阈值为60,温度阈值为30
随便哪个超过预祝,则继电器切断,LED灯灭掉,若电流小于50,则屏幕清屏,表示待机。

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

编辑

三、程序编程

#include "main.h"#include "adc.h"#include "gpio.h"#include "./HAL/key/key.h"#include "./HAL/OLED/OLED\_NEW.H"#include "./HAL/dht11/dht11.h"void Monitor\_function(void);						//监测函数void Display\_function(void);						//显示函数void Manage\_function(void);							//处理函数#define LED(a) (a?HAL\_GPIO\_WritePin(LED\_GPIO\_Port, LED\_Pin, GPIO\_PIN\_RESET):HAL\_GPIO\_WritePin(LED\_GPIO\_Port, LED\_Pin, GPIO\_PIN\_SET)) #define BEEP(a) (a?HAL\_GPIO\_WritePin(BEEP\_GPIO\_Port, BEEP\_Pin, GPIO\_PIN\_RESET):HAL\_GPIO\_WritePin(BEEP\_GPIO\_Port, BEEP\_Pin, GPIO\_PIN\_SET)) uint8\_t adc\_ch;   										//adc的个数uint32\_t adc\_buf\[4\];									//adc数值的存储数组uint16\_t temp,humi;										//温湿度uint16\_t dl,dy,wdnum;						//电流 电压  温度uint16\_t dlmin=50,dlmax=80,dymax=60,wdmax=300;			 //电流最小50 最大80 电压最大60 温度最大30uint8\_t flag\_led,flag\_beep;						//灯、报警标志位uint16\_t time\_num;static int mode=0; 
/* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/void SystemClock\_Config(void);uint16\_t dong\_get\_adc(){    //开启ADC1HAL\_ADC\_Start(&hadc1);    //等待ADC转换完成,超时为100msHAL\_ADC\_PollForConversion(&hadc1,100);    //判断ADC是否转换成功if(HAL\_IS\_BIT\_SET(HAL\_ADC\_GetState(&hadc1),HAL\_ADC\_STATE\_REG_EOC)){         //读取值return HAL\_ADC\_GetValue(&hadc1);}    return 0;
}/****
*******监测函数
*****/void Monitor\_function(void){	DHT11\_Read\_TempAndHumidity(&DHT11\_Data);//调用获取温湿度、电流、电压temp = DHT11_Data.temperature; 					//获取温度humi = DHT11_Data.humidity;    					//获取湿度//将获取的值存储到adc_buf中for(adc\_ch=0;adc\_ch<4;adc_ch++){    //分别存放通道1、2、3、4的ADC值adc\_buf\[adc\_ch\]=dong\_get\_adc();}dl=adc_buf\[0\]/4096.00*100;  //电流dy=adc_buf\[3\]/4096.00*100;  //电压}/****
*******显示函数
*****/void Display_function(void){	 //第一行Oled\_ShowCHinese(0,0,"电流");			Oled\_ShowString(32,0,":");			OLED\_ShowNum(40,0,dl,2,16);			Oled\_ShowCHinese(64,0,"电压");			Oled\_ShowString(96,0,":");			OLED\_ShowNum(104,0,dy,2,16);	//第二行Oled_ShowCHinese(0,2,"温度");  Oled\_ShowString(32,2,":");	    OLED\_Show\_Temp(40,2,temp);		 //第三行//			Oled\_ShowCHinese(0,4,"湿度");//			Oled\_ShowString(32,4,":");//			OLED\_Show_Humi(40,4,humi/10);}/****
*******处理函数
*****/void Manage_function(void){	if(dl > dlmax)					//电流超过电流MAX {flag_led=0;flag_beep=1;}  if(dy> dymax )								//电压大于电压MAX{flag_led=0;flag_beep=1;}	if(temp>wdmax)   //温度大于温度MAX{flag_led=0;flag_beep=1;}  if(dl>dlmin && dl < dlmax && dy < dymax  && temp < wdmax){flag_led=1;flag_beep=0;}	if(dl<dlmin){mode = 1;}	if(flag_beep==1)    BEEP(1);  elseBEEP(0);  if(flag_led==1)    LED(1);  elseLED(0);
}/* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/int main(void){  HAL\_Init();  SystemClock\_Config();  MX\_GPIO\_Init();  //GPIO口设置MX\_ADC1\_Init();  //ADC转换OLED_Init();									//OLED初始化OLED_Clear();									//OLED清屏flag_led = 0;  while (1){		if(mode == 0){		Monitor_function();					//监测函数Display_function();					//显示函数Manage_function();					//处理函数}		else{			OLED_Clear();									//OLED清屏}		HAL_Delay(10);time\_num++;		if(time\_num >= 5000)time_num = 0;}
}/*** @brief System Clock Configuration* @retval None*/void SystemClock_Config(void){RCC\_OscInitTypeDef RCC\_OscInitStruct = {0};RCC\_ClkInitTypeDef RCC\_ClkInitStruct = {0};RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};  /** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC\_OscInitStruct.OscillatorType = RCC\_OSCILLATORTYPE_HSI;RCC\_OscInitStruct.HSIState = RCC\_HSI_ON;RCC\_OscInitStruct.HSICalibrationValue = RCC\_HSICALIBRATION_DEFAULT;RCC\_OscInitStruct.PLL.PLLState = RCC\_PLL_ON;RCC\_OscInitStruct.PLL.PLLSource = RCC\_PLLSOURCE\_HSI\_DIV2;RCC\_OscInitStruct.PLL.PLLMUL = RCC\_PLL\_MUL4;  if (HAL\_RCC\_OscConfig(&RCC\_OscInitStruct) != HAL_OK){    Error_Handler();}  /** Initializes the CPU, AHB and APB buses clocks*/RCC\_ClkInitStruct.ClockType = RCC\_CLOCKTYPE\_HCLK|RCC\_CLOCKTYPE_SYSCLK|RCC\_CLOCKTYPE\_PCLK1|RCC\_CLOCKTYPE\_PCLK2;RCC\_ClkInitStruct.SYSCLKSource = RCC\_SYSCLKSOURCE_PLLCLK;RCC\_ClkInitStruct.AHBCLKDivider = RCC\_SYSCLK_DIV1;RCC\_ClkInitStruct.APB1CLKDivider = RCC\_HCLK_DIV2;RCC\_ClkInitStruct.APB2CLKDivider = RCC\_HCLK\_DIV1;  if (HAL\_RCC\_ClockConfig(&RCC\_ClkInitStruct, FLASH\_LATENCY\_0) != HAL_OK){    Error_Handler();}PeriphClkInit.PeriphClockSelection = RCC\_PERIPHCLK\_ADC;PeriphClkInit.AdcClockSelection = RCC\_ADCPCLK2\_DIV2;  if (HAL\_RCCEx\_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){    Error_Handler();}
}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/void Error\_Handler(void){  /* USER CODE BEGIN Error\_Handler_Debug *//* User can add his own implementation to report the HAL error return state */\_\_disable\_irq();  while (1){}  /* USER CODE END Error\_Handler\_Debug */}#ifdef  USE\_FULL\_ASSERT/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/void assert\_failed(uint8\_t \*file, uint32_t line){  /\* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\\r\\n", file, line) *//* USER CODE END 6 */}#endif /* USE\_FULL\_ASSERT */

四、实现现象

具体动态效果看B站演示视频:

基于STM32的温度、电流、电压检测系统(OLED、DHT11、继电器、电机)_哔哩哔哩_bilibili

全部资料(源程序、仿真文件、安装包、演示视频):

通过百度网盘分享的文件:基于STM32的温度、电流、电压检测系统(1).zip
链接:https://pan.baidu.com/s/1h93-TTKkkdf2hBryU9v55Q?pwd=p4sq 
提取码:p4sq 
–来自百度网盘超级会员V4的分享

相关文章:

20 基于STM32的温度、电流、电压检测proteus仿真系统(OLED、DHT11、继电器、电机)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STM32F103C8T6 采用DHT11读取温度、滑动变阻器模拟读取电流、电压。 通过OLED屏幕显示&#xff0c;设置电流阈值为80&#xff0c;电流小阈值为50&#xff0c;电压阈值为60&#xff0c;温度阈值…...

spring自定义属性编辑器

文章目录 spring自定义属性编辑器步骤 spring自定义属性编辑器 属性编辑器是用来解析bean的配置文件中的属性标签的&#xff0c;spring的BeanWrapperImpl默认会注册CustomCollectionEditor(集合)、CustomMapEditor(Map)、CurrencyEditor(货币)、ByteArrayPropertyEditor等&…...

在VMware16中安装Windows 10:完整教程

在VMware中安装Windows 10&#xff1a;完整教程 1.安装环境准备2.创建虚拟机 1.安装环境准备 1.虚拟机: VMware-workstation-full-16.2.2-19200509 2.系统镜像:win10 2.创建虚拟机 1.自定义 2.下一步 3.稍后安装系统 3.默认下一步 4.虚拟机取名和选择存放路径(按需更改…...

MATLAB系列09:图形句柄

MATLAB系列09&#xff1a;图形句柄 9. 图形句柄9.1 MATLAB图形系统9.2 对象句柄9.3 对象属性的检测和更改9.3.1 在创建对象时改变对象的属性9.3.2 对象创建后改变对象的属性 9.4 用 set 函数列出可能属性值9.5 自定义数据9.6 对象查找9.7 用鼠标选择对象9.8 位置和单位9.8.1 图…...

把设计模式用起来!(4) 用不好模式?之原理不明

&#xff08;清华大学出版社 《把设计模式用起来》书稿试读&#xff09; 上一篇&#xff1a;把设计模式用起来&#xff01;&#xff08;3&#xff09;用不好模式&#xff1f;之时机不对 为什么用不好设计模式&#xff1f;——原理不明 难搞的顾客&#xff1a;“抹这种霜&#…...

安卓13去掉下拉菜单的Dump SysUI 堆的选项 android13删除Dump SysUI 堆

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析3.1 位置13.2 位置24.代码修改5.编译6.彩蛋1.前言 客户需要去掉下拉菜单里面的Dump SysUI 堆图标,不让使用这个功能。 2.问题分析 android的下拉菜单在systemui里面,这里我们只需要定位到对应的添加代…...

vue3常用的组件间通信

一 props props 可以实现父子组件通信&#xff0c;props数据是只读。 1. 基本用法 在父组件中&#xff0c;你可以这样传递 props&#xff1a; <template><ChildComponent message"Hello, Vue 3!" /> </template><script setup> import C…...

Windows 查找特定进程的ID并杀死

"*分析用户信息.py*" 换为自己的文件名 Get-WmiObject Win32_Process | Where-Object { $_.CommandLine -like "*分析用户信息.py*" } 查找后 内容如下 __GENUS : 2 __CLASS : Win32_Process __SUPERCLASS …...

Snapchat API 访问:Objective-C 实现示例

Snapchat 是一个流行的社交媒体平台&#xff0c;它允许用户发送和接收短暂存在的图片和视频。对于开发者来说&#xff0c;访问 Snapchat API 可以为应用程序添加独特的社交功能。本文将介绍如何在 Objective-C 中实现对 Snapchat API 的访问&#xff0c;并提供一个详细的代码示…...

ps证件照蓝底换白底

ps证件照蓝底换白底 1、打开 Photoshop&#xff0c;导入需要处理的照片。 2、左侧工具栏中选择“魔棒工具”&#xff0c;点击证件照的背景区域进行选择。 3、使用快捷键 Shift F5 或者从顶部菜单选择“编辑” -> “填充”&#xff0c;在弹出的对话框中选择“填充内容”中…...

阿里云kafka消息写入topic失败

1. 问题现象描述 20240918,14:22&#xff0c;测试反馈说kafka有问题&#xff0c;生产者写入消息的时候报错&#xff0c;并发了一张日志截图&#xff0c;主要报错如下&#xff1a; to topic xxxx: org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for x…...

图像放大效果示例【JavaScript】

实现效果&#xff1a; 当鼠标悬停在小图&#xff08;缩略图&#xff09;上时&#xff0c;大图&#xff08;预览图&#xff09;会随之更新为相应的小图&#xff0c;并高亮当前悬浮的小图的父元素。 代码&#xff1a; 1. HTML部分 <!DOCTYPE html> <html lang"z…...

【C#生态园】云端之C#:全面解析6种云服务提供商的SDK

C#开发者必读&#xff1a;深度比较6种云服务SDK 前言 随着云计算技术的迅猛发展&#xff0c;越来越多的企业和开发者选择将应用程序部署到公共云平台上。针对C#开发者而言&#xff0c;各大云服务提供商纷纷推出了适用于C#的SDK&#xff0c;以便开发者能够更轻松地与其云服务进…...

远程升级又双叒叕失败?背后原因竟然是。。。

最近又遇到了远程升级接连失败的情况&#xff0c;耐心和信心都备受折磨&#xff01; 事情是这样的&#xff1a;有客户反馈在乡村里频繁出现掉线的情况&#xff0c;不敢耽搁&#xff0c;赶紧联系小伙伴排查测试&#xff0c;最后发现&#xff0c;只有去年某一批模块在当下环境才…...

【测试】——Selenium API (万字详解)

&#x1f4d6; 前言&#xff1a;本文详细介绍了如何利用Selenium进行Web自动化测试&#xff0c;包括定位元素&#xff08;如cssSelector和xpath&#xff09;、常用操作函数&#xff08;如点击、输入等&#xff09;、窗口管理、键盘鼠标事件和浏览器导航&#xff0c;以及处理弹窗…...

Redis:原理+项目实战——Redis实战3(Redis缓存最佳实践(问题解析+高级实现))

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;Redis&#xff1a;原理项目实战——Redis实战2&#xff08;Redis实现短信登录&#xff08;原理剖析代码优化&#xff09;&#x…...

刚刚,Stable Diffusion 2024升级,最强Ai绘画整合包、部署教程(解压即用)

2024Ai技术大爆发的元年 目前两款Ai神器大火 一款是大名鼎鼎的Chat GPT 另外一款—Stable Diffusion 堪称全球最强Ai绘画工具 Stable Diffusion Ai绘画2024版本更新啦&#xff01; 从4.8.7更新至**4.9版本&#xff01;**更新优化和大模型增加&#xff0c;无需安装&#xf…...

【AIGC】ChatGPT提示词助力高效文献处理、公文撰写、会议纪要与视频总结

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;高效英文文献阅读提示词使用方法 &#x1f4af;高效公文写作提示词使用方法 &#x1f4af;高效会议纪要提示词使用方法 &#x1f4af;高效视频内容分析提示词使用方法 &a…...

centos7更换国内下载源

&#x1f4d6;centos7更换国内下载源 在CentOS 7上更换为国内源可以通过替换 /etc/yum.repos.d/CentOS-Base.repo文件来实现。以下是一些常用的国内源以及如何更换的示例&#xff1a; 阿里云源&#xff1a; mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Bas…...

【Linux】常用指令【更详细,带实操】

Linux全套讲解系列&#xff0c;参考视频-B站韩顺平&#xff0c;本文的讲解更为详细 目录 一、文件目录指令 1、cd【change directory】指令 ​ 2、mkdir【make dir..】指令​ 3、cp【copy】指令 ​ 4、rm【remove】指令 5、mv【move】指令 6、cat指令和more指令 7、less和…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...