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

news2024/9/24 5:29:24

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于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(){    //开启ADC1
  HAL\_ADC\_Start(&hadc1);    //等待ADC转换完成,超时为100ms
    HAL\_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);  else
    BEEP(0);  if(flag_led==1)    LED(1);  else
    LED(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的分享

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

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

相关文章

虚幻引擎的射线检测/射线追踪

射线检测在 FPS/TPS 游戏中被广泛应用 什么是射线检测? 两个点行成一条线 , 射线检测是从一个起始点发出一条到终点的射线 , 如果射线命中一个游戏对象&#xff0c;就可以获取到对象命中时的 位置、距离、角度、是否命中、骨骼 等非常多的信息 , 这些信息在射击游戏中至关重…

价格便宜又好用的云电脑挑选:ToDesk云电脑 vs 青椒云

云计算技术的成熟使得云电脑因其便捷、灵活和高效而成为日常工作、学习和娱乐的首选工具。而在众多云电脑品牌之中&#xff0c;ToDesk云电脑与青椒云电脑 较为热门 。在此&#xff0c;笔者将围绕价格、性能、用户体验等关键指标对 比 这两款云电脑&#xff0c; 帮助 你们 找到最…

信号分解降噪 | Matlab实现基于TVFEMD-IMF能量熵增量的数据降噪方法

信号分解降噪 | Matlab实现基于TVFEMD-IMF能量熵增量的数据降噪方法 目录 信号分解降噪 | Matlab实现基于TVFEMD-IMF能量熵增量的数据降噪方法效果一览基本介绍程序设计参考资料 效果一览 基本介绍 信号分解降噪 | Matlab实现基于TVFEMD-IMF能量熵增量的数据降噪方法。该方法引…

地平线静态目标检测 MapTR 参考算法-V1.0

简介 高清地图是自动驾驶系统的重要组件&#xff0c;提供精确的驾驶环境信息和道路语义信息。传统离线地图构建方法成本高&#xff0c;维护复杂&#xff0c;使得依赖车载传感器的实时感知建图成为新趋势。早期实时建图方法存在局限性&#xff0c;如处理复杂地图元素的能力不足…

【python】requests 库 源码解读、参数解读

文章目录 一、基础知识二、Requests库详解2.1 requests 库源码简要解读2.2 参数解读2.3 处理响应2.4 错误处理 一、基础知识 以前写过2篇文章&#xff1a; 计算机网络基础&#xff1a; 【socket】从计算机网络基础到socket编程——Windows && Linux C语言 Python实现…

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【LMS调测】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 基本概念 LMS全称为Lite Memory Sanitizer&#xff0c;是一种实时…

新版本大疆上云API指令飞行(drc)模式通讯搭建思路

一、大疆上云API mqtt官方通讯指导 1.1drc链路 1.2mqtt交互时序图 二、自行搭建mqtt说明 2.1工具&#xff1a;用emqx搭建mqtt服务器&#xff0c;mqttx作为客户端测试工具 2.2端口说明&#xff1a;1883&#xff0c;普通mqtt消息端口&#xff0c;8083&#xff0c;ws通信协议端…

商业银行应用安全架构设计实践

传统的信息安全工作通常偏向于事中或事后检测漏洞,随着敏捷开发工作的逐步推进,商业银行认识到安全架构设计在实现IT降本增效方面的独特优势。近几年,商业银行逐步构建了安全架构设计工作体系,在组织人员、安全技术与管控流程方面,与企业IT架构密切协同,着力建设安全公共…

课程表-LeetCode100

现在你总共有 numCourses 门课需要选&#xff0c;记为 0 到 numCourses - 1。给你一个数组 prerequisites &#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示在选修课程 ai 前 必须 先选修 bi 。 例如&#xff0c;想要学习课程 0 &#xff0c;你需要先完成课程 1…

Python | Leetcode Python题解之第432题全O(1)的数据结构

题目&#xff1a; 题解&#xff1a; class Node:def __init__(self, key"", count0):self.prev Noneself.next Noneself.keys {key}self.count countdef insert(self, node: Node) -> Node: # 在 self 后插入 nodenode.prev selfnode.next self.nextnode.…

【机器学习】——支持向量机

文章目录 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;概述SVM 的工作原理线性不可分数据&#xff1a;软间隔与核技巧SVM 的数学形式SVM 的优势SVM 的缺点SVM 的应用 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;概述 支持向量机&#…

JavaSE高级(3)——lombok、juint单元测试、断言

一、lombok的使用 默认jvm不解析第三方注解&#xff0c;需要手动开启 链式调用 二、juint单元测试 下载juint包 public class TestDemo {// 在每一个单元测试方法执行之前执行Beforepublic void before() {// 例如可以在before部分创建IO流System.out.println("befor…

荣耀手机AI搜索革新体验:一键总结归纳,让信息获取更高效

在信息爆炸的时代&#xff0c;我们每天都被海量的数据包围&#xff0c;如何快速、准确地获取所需信息成为了现代人的一大挑战。 近日&#xff0c;荣耀手机宣布其AI搜索功能正式上线&#xff0c;这一创新举措不仅为使用者带来了前所未有的便捷体验&#xff0c;更在智能手机领域…

栈:只允许在一端进行插入或删除操作的线性表

一、重要术语&#xff1a; 栈顶、栈底、空栈 二、线性表的基本操作 三、栈的相关操作&#xff1a; 把线性表中的list改成stack insert改成 push delete 改成 pop 总结&#xff1a;“后进先出” 四、顺序栈&#xff1a; 缺点&#xff1a;栈的大小不可变 1.定义&#xff1a; …

生物反馈治疗仪——精神患者治疗方案

生物反馈治疗仪标准型由治疗仪主机、专用软件、电极帽&#xff08;含脑电放大器、电极线&#xff09;套装、电源适配器与显示器配套使用&#xff0c;终身免费软件升级。 与显示配套使用&#xff0c;对儿童多动症有辅助治疗作用。建议每周训练2&#xff5e;3次&#xff0c;每次训…

CSS的表格属性

border属性 规定CSS表格边框。 table,td{border: 1px solid green;/*1px表示设置边框的大小&#xff0c;solid表示边框为实线&#xff0c;green表示边框的颜*/} border-collpapse属性 设置表格的边框是否被折叠成一个单一的边框或隔开。 table{border-collapse: collapse;} wi…

2024从传统到智能,AI做PPT软件的崛起之路

随着AI技术的飞速进步&#xff0c;它已悄然渗透至我们的工作与学习之中&#xff0c;不仅助力写作与绘画创作&#xff0c;就连PPT制作这一传统办公领域也迎来了AI的革新。我最近有幸探索了一系列AI驱动的PPT制作工具&#xff0c;亲身体验后深感震撼——合理利用这些ai做ppt工具&…

Windows11系统安装,配置CUDA、cuDNN等

已经有大几年没有安装过 Windows 的系统了&#xff0c;今天因为黑神话悟空&#xff0c;准备把 Win 11 装一台&#xff0c;玩玩游戏&#xff0c;顺便把一些 CUDA 相关的异步解析项目也安装到 Window 上。 下载安装 PE 因为十几年前&#xff0c;只会用 PE 装系统&#xff0c;所…

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【Trace调测】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 基本概念 Trace调测旨在帮助开发者获取内核的运行流程&#xff0c…

java项目之基于springboot框架开发的景区民宿预约系统的设计与实现(源码+文档)

项目简介 基于springboot框架开发的景区民宿预约系统的设计与实现的主要使用者分为&#xff1a; 管理员的功能有&#xff1a;用户信息的查询管理&#xff0c;可以删除用户信息、修改用户信息、新增用户信息&#xff0c;根据公告信息进行新增、修改、查询操作等等。。 &#x1…