STM32项目分享:智能热水器

目录

一、前言

二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

PCB图

五、程序设计

六、实验效果 ​

七、包含内容

项目分享


一、前言

项目成品图片:

哔哩哔哩视频链接:

https://www.bilibili.com/video/BV1vPiCBKE6j/?spm_id_from=333.337.search-card.all.click&vd_source=a90461cae133c0c360a3780433efae62

(资料分享见文末)

二、项目简介

1.功能详解

基于STM32的智能热水器

功能如下:

  1. 环境采集:采集环境光照强度、水位、水温
  2. 显示功能:屏幕显示当前时间、光照强度、热水器水位、水温;第二页显示定时开始时间和结束时间
  3. 模式切换:可以通过按键切换自动模式和手动模式
  4. 自动模式:当前时间处于定时工作时间内:光照小于光照阈值时开启照明灯,水位小于最低水位时开启进水水泵加水且此时蜂鸣器报警提醒;水位超过最大水位时开启排水水泵放水;温度低于最低温度时蜂鸣器报警并开启加热片加热水直到温度达到最高温度时停止加热; 当水位过低时加热功能不启动;当时间处于定时时间外则热水器不自动工作,只能通过手动模式控制。
  5. 手动模式:通过按键控制LED照明灯、加水、放水、加热
  6. 阈值调节:可通过按键设置当前时间、温度上限、温度下限、光照阈值、水位上限、水位下限、定时开始时间和结束时间
  7. 蓝牙APP:通过连接蓝牙APP,可以查看信息数据和控制指令下发,包括模式切换、手动外设控制

2.主要器件

  • STM32F103C8T6最小系统板
  • OLED显示屏(4针IIC协议)
  • 光敏传感器
  • 水位传感器
  • DS18B20温度传感器
  • 大功率LED灯模块
  • PTC加热片
  • 继电器
  • 水泵模块
  • 有源蜂鸣器

三、原理图设计

四、PCB硬件设计

PCB图

五、程序设计

#include "stm32f10x.h" #include "led.h" #include "beep.h" #include "usart.h" #include "usart2.h" #include "usart3.h" #include "delay.h" #include "ds18b20.h" #include "LDR.h" #include "oled.h" #include "key.h" #include "Modules.h" #include "TIM2.h" #include "TIM3.h" #include "adcx.h" #include "flash.h" #include "JDQ.h" #include "MyRTC.h" #include "stm32f10x_iwdg.h" /****************异方辰电子工作室******************* STM32 *项目 : STM32智能热水器 *版本 : V1.0 *MCU : TM32F103C8T6 *接口 : 见代码 *BILIBILI : 异方辰电子 *小红书 : 异方辰电子 *CSDN : 异方辰电子 *授权IP : 辰哥单片机设计、异方辰、YFC电子、北海单片机设计 **********************BEGIN***********************/ SensorModules sensorData; //声明传感器数据结构体变量 SensorThresholdValue Sensorthreshold; //声明传感器阈值结构体变量 DriveModules driveData; //声明驱动器状态结构体变量 uint16_t time_num = 0; //10ms计时 static uint8_t app_cmd = 0; // 0 无指令 3 开 4 关 uint8_t mode = 0; //系统模式 1自动 2手动 3设置 u8 Flag_setTime = 0; u8 setTime_Type = 0; // 时间设置临时变量 uint16_t tempTime[3]; // 当前时间临时变量 uint16_t tempTime_start[3]={0,0,0}; // 开始时间临时变量 uint16_t tempTime_end[3]={1,1,1}; // 结束时间临时变量 uint8_t timeFieldIndex = 0; uint8_t lastTimeFieldIndex = 0; extern uint8_t usart2_buf[256]; //串口2接收数组 char display_buf[16]; //显示数组 //系统静态变量 static uint8_t count_a = 1; //自动模式按键数 uint8_t count_m = 1; //手动模式按键数 static uint8_t count_s = 1; //设置模式按键数 int main(void) { SystemInit(); //配置系统时钟为72M delay_init(72); //传感器初始化 DS18B20_Init(); //ds18b20初始化 LDR_Init(); //光敏电阻初始化 //执行器初始化 LED_Init(); //大功率LED灯初始化 BUMP1_Init(); //抽水水泵初始化 BUMP2_Init(); //放水水泵初始化 JRP_Init(); //加热片初始化 BEEP_Init(); //蜂鸣器初始化 Key_Init(); //按键初始化 OLED_Init(); //OLED初始化 MyRTC_Init(); //RTC时钟初始化 USART1_Config();//串口1初始化 USART2_Config();//串口2初始化 USART3_Config();//串口3初始化 TIM2_Init(72,1000-1); TIM3_Int_Init(1000-1,72-1); //定时1ms中断 OLED_Clear(); delay_ms(300); FLASH_ReadThreshold(); MyRTC_SetTime(); while (1) { SensorScan(); //获取传感器数据 Bluetooth_Control();//蓝牙控制函数 // 将数据存入Flash FLASH_W(FLASH_START_ADDR,Sensorthreshold.luxValue, Sensorthreshold.tempValue_MIN ,Sensorthreshold.tmepValue_MAX , Sensorthreshold.waterleveVlaue_MAX,Sensorthreshold.waterleveVlaue_MIN , MyRTC_Time[3],MyRTC_Time[4],MyRTC_Time[5], tempTime_start[0],tempTime_start[1],tempTime_start[2], tempTime_end[0],tempTime_end[1],tempTime_end[2]); MyRTC_ReadTime(); switch(mode) { case AUTO_MODE: if(SetAuto() ==1) { OLED_autoPage1(); //显示主页面1固定信息 SensorDataDisplay1(); //显示传感器1数据 } else { OLED_autoPage2(); //显示主页面2固定信息 SensorDataDisplay2(); //显示传感器2数据 } AutoControl(); /*按键1按下时切换模式*/ if (KeyNum == KEY_1) //系统模式mode 1自动 2手动 3设置 { KeyNum = 0; mode = MANUAL_MODE; count_m = 1; OLED_Clear(); } if (KeyNum == KEY_Long1) { KeyNum = 0; mode = SETTINGS_MODE; count_s = 1; OLED_Clear(); } Control_Manager(); break; case MANUAL_MODE: OLED_manualOption(SetManual()); ManualControl(SetManual()); OLED_manualPage1(); ManualSettingsDisplay1(); if (KeyNum == KEY_1) //系统模式mode 0手动 1自动(默认) { KeyNum = 0; mode = AUTO_MODE; count_a = 1; OLED_Clear(); } Control_Manager(); break; case SETTINGS_MODE: OLED_settingsOption(SetSelection()); //实现阈值设置页面的选择功能 ThresholdSettings(SetSelection()); //实现阈值调节功能 if(Flag_setTime == 0) { if (SetSelection() <= 4) { OLED_settingsPage1(); //显示阈值设置界面1固定信息 SettingsThresholdDisplay1(); //显示传感器阈值1数据 } else //否则显示设置页面2 { OLED_settingsPage2(); //显示阈值设置界面2固定信息 SettingsThresholdDisplay2(); //显示传感器阈值2数据 } } //判断是否退出阈值设置界面 if (KeyNum == KEY_1) { KeyNum = 0; mode = AUTO_MODE; //跳转到主界面 count_a = 1; OLED_Clear(); //清屏. // 将修改好的阈值存入Flash中 FLASH_W(FLASH_START_ADDR,Sensorthreshold.luxValue, Sensorthreshold.tempValue_MIN ,Sensorthreshold.tmepValue_MAX , Sensorthreshold.waterleveVlaue_MAX,Sensorthreshold.waterleveVlaue_MIN , MyRTC_Time[3],MyRTC_Time[4],MyRTC_Time[5], tempTime_start[0],tempTime_start[1],tempTime_start[2], tempTime_end[0],tempTime_end[1],tempTime_end[2]); } break; case TIME_SET_MODE: switch(setTime_Type) { case 5: // 修改当前时间 if (Flag_setTime == 1) { for (int i = 0; i < 3; i++) { tempTime[i] = MyRTC_Time[i+3]; } Flag_setTime = 2; timeFieldIndex = 0; lastTimeFieldIndex = 0; } OLED_ShowChinese(32,0,20,16,1); //当 OLED_ShowChinese(48,0,21,16,1); //前 OLED_ShowChinese(64,0,22,16,1); //时 OLED_ShowChinese(80,0,23,16,1); //间 OLED_ShowChar(96,0,':',16,1); OLED_TIME_SET_MODE(tempTime); // 显示时间设置模式 TimeSettings(tempTime); // 时间设置函数 break; case 6: // 修改开始时间 OLED_ShowChinese(32,0,24,16,1); //开 OLED_ShowChinese(48,0,8,16,1); //始 OLED_ShowChinese(64,0,22,16,1); //时 OLED_ShowChinese(80,0,23,16,1); //间 OLED_ShowChar(96,0,':',16,1); OLED_TIME_SET_MODE(tempTime_start); // 显示时间设置模式 TimeSettings(tempTime_start); // 时间设置函数 break; case 7: // 修改结束时间 OLED_ShowChinese(32,0,12,16,1); //结 OLED_ShowChinese(48,0,13,16,1); //束 OLED_ShowChinese(64,0,22,16,1); //时 OLED_ShowChinese(80,0,23,16,1); //间 OLED_ShowChar(96,0,':',16,1); OLED_TIME_SET_MODE(tempTime_end); // 显示时间设置模式 TimeSettings(tempTime_end); // 时间设置函数 break; } if (KeyNum == KEY_1) { KeyNum = 0; if(Flag_setTime == 2) { for (int i = 0; i < 3; i++) { MyRTC_Time[i+3] = tempTime[i]; } } MyRTC_SetTime(); // RTC设置时间 mode = SETTINGS_MODE; count_a = 1; Flag_setTime = 0; OLED_Clear(); } break; default: break; } } }

六、实验效果

七、包含内容

项目分享

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

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

相关文章

毕业季必备:6款AIGC痕迹消除工具实测,第3款效果最稳

毕业季必备&#xff1a;6款AIGC痕迹消除工具实测&#xff0c;第3款效果最稳 TL;DR 太长不看 2026毕业季AIGC检测空前严格&#xff0c;《学位法》实施后AI写作被列为学术不端。实测6款毕业论文降AI工具&#xff1a;比话降AI效果最稳&#xff08;知网AI率<15%&#xff0c;不达…

DeepSeek写的论文AI率98%怎么降?亲测这套方法有效

DeepSeek写的论文AI率98%怎么降&#xff1f;亲测这套方法有效 TL;DR&#xff1a;DeepSeek写论文快是快&#xff0c;但AI率动辄90%以上&#xff0c;直接交上去等于自爆。本文分享一套亲测有效的降AI方法&#xff1a;不要用DeepSeek自己改&#xff08;成功率不到30%&#xff09;&…

保姆级教程:AI率从90%降到10%的完整操作指南

保姆级教程&#xff1a;AI率从90%降到10%的完整操作指南 TL;DR&#xff1a;论文AI率90%看起来很吓人&#xff0c;但按照本教程操作完全可以降到10%以下。核心流程分三步&#xff1a;第一步用提示词粗改打乱结构&#xff08;90%→50%&#xff09;&#xff0c;第二步用专业工具深…

5款降AI工具横评:比话、嘎嘎、率降谁更靠谱

5款降AI工具横评&#xff1a;比话、嘎嘎、率降谁更靠谱 TL;DR&#xff1a;实测5款主流降AI工具后&#xff0c;结论是&#xff1a;嘎嘎降AI以99.26%的达标率和4.8元/千字的价格成为性价比之王&#xff1b;比话降AI专攻知网&#xff0c;承诺AI率<15%否则退款&#xff0c;适合高…

NVIDIA Triton推理加速实战

&#x1f493; 博客主页&#xff1a;借口的CSDN主页 ⏩ 文章专栏&#xff1a;《热点资讯》 深度探索Triton推理加速&#xff1a;实战案例与未来挑战目录深度探索Triton推理加速&#xff1a;实战案例与未来挑战 引言&#xff1a;推理加速的实战价值与行业痛点 Triton核心架构&am…

YOLO26改进 - 卷积Conv | 增强感受野与多尺度特征捕获:引入RFB感受野块(Receptive Field Block)多分支卷积结构

前言 本文介绍了感受野块&#xff08;RFB&#xff09;模块在YOLO26中的结合应用。RFB模块是一种多分支卷积块&#xff0c;由多分支卷积层和扩张池化或卷积层组成&#xff0c;通过模拟多尺度感受野和控制感受野偏心性&#xff0c;增强轻量级CNN模型学习到的深层特征&#xff0c…

实用指南:JDBC以及工具类介绍

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2026 年,macbook air 2015 升级注意事项

最近看到 macbook air 2015 可以升级 m.2硬盘,随买了 SN570 ,容量 1T,为了升级耗费了好多天,试了好多坑,现在把这几个坑记录下 1. 制作 macos 按照 U盘1.1 容量大于16G的好U盘 1.2 关闭 WIFI 1.3 使用磁盘工具抹除…

大数据领域Kafka的数据备份与恢复

知识金字塔构建者&#xff1a;Kafka数据备份与恢复的底层逻辑与实践指南 1. 引入与连接&#xff1a;当Kafka集群崩溃时&#xff0c;我们该如何拯救数据&#xff1f; 1.1 一个让工程师冒冷汗的场景 想象一下&#xff1a;你是某电商公司的大数据工程师&#xff0c;正值618大促高峰…

知网AI率降到10%以下?这4款降AI工具亲测有效

知网AI率降到10%以下&#xff1f;这4款降AI工具亲测有效 TL;DR 太长不看 知网AI率降到10%以下不是梦&#xff0c;关键是选对工具。实测4款有效的降AI工具&#xff1a;比话降AI专攻知网检测&#xff08;承诺15%以下&#xff0c;不达标退款&#xff09;&#xff0c;嘎嘎降AI性价比…

DeepSeek写的论文怎么降AI?亲测从90%降到5%的完整攻略

DeepSeek写的论文怎么降AI&#xff1f;亲测从90%降到5%的完整攻略 TL;DR 太长不看 DeepSeek写的论文AI率通常在70%-90%&#xff0c;仅靠DeepSeek自己改写只能降20%-30%&#xff0c;必须配合专业工具。亲测最有效的方案&#xff1a;先用DeepSeek粗改一遍&#xff08;把长句拆短、…

知网AIGC检测实测:比话和学术猹谁能降到15%以下

知网AIGC检测实测&#xff1a;比话和学术猹谁能降到15%以下 TL;DR&#xff1a;实测对比比话降AI和学术猹两款8元/千字的工具。学术猹是有道出品&#xff0c;平均AI率可降至14.3%&#xff0c;文科论文表现出色&#xff1b;比话降AI专攻知网&#xff0c;承诺AI率<15%否则退款&…

计算机Java毕设实战-基于Java+springboot的校园编程俱乐部管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

详细介绍:NoSQL 数据库和内存数据库 - MongoDB简单了解

详细介绍:NoSQL 数据库和内存数据库 - MongoDB简单了解2026-01-24 22:11 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; …

【课程设计/毕业设计】基于springboot的校园编程俱乐部管理系统【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

自主搭建AI系统:全流程硬件配置与实施要点解析

人工智能技术于各行各业越来越深入地应用着&#xff0c;越来越多的组织开始思量着自主去搭建AI系统。这样的部署方式能够更优地满足数据安全、业务定制以及持续优化的需求&#xff0c;然而与此同时也给技术团队提出了更高的要求。一个完整的AI系统搭建牵涉到硬件选型、软件部署…

组织本地化部署AI系统需系统性规划与专业技术知识

随着人工智能技术迅猛发展&#xff0c;越来越多组织着手考虑于本地环境里部署、搭建AI系统。这般本地化地部署&#xff0c;不但能够更为妥善地契合数据安全以及隐私保护的要求&#xff0c;而且还能够依照具体业务需求予以深度定制。然而&#xff0c;AI系统搭建属于一个牵涉硬件…

WSL2迁移D盘+修改默认用户

WSL2迁移D盘+修改默认用户1. 迁移 WSL2 到 D 盘查看 WSL 发行版wsl --list --verbose关闭 WSLwsl --shutdown导出镜像到 D 盘wsl --export Ubuntu-22.04 D:\WSL\Ubuntu.tar注销 C 盘旧镜像wsl --unregister Ubuntu-22.…