【开源】基于STM32单片机控制的太阳能热水器

项目编号:STM32-T012

项目名称:基于STM32单片机控制的太阳能热水器

【摘要】

本设计基于 STM32F103C8T6 单片机实现对太阳能热水器的智能控制,系统集成了水位传感器、水温传感器、继电器控制模块、OLED 显示屏以及蜂鸣器等功能模块。通过传感器实时采集水箱内的水位和温度数据,并在 OLED 上直观显示,用户能够及时掌握热水器的运行状态。当水位或水温超过设定阈值时,蜂鸣器将发出声响报警,以提醒用户采取措施,避免溢水或过热等安全隐患。系统的供电部分设计为双电源模式,当市电接入时优先由 220VAC 转 DC 模块提供能量,保证系统的稳定运行;在市电断开情况下,系统能够自动切换至 5V 锂电池供电,从而实现不间断工作。同时,太阳能板结合充电控制板可对锂电池进行充电,有效利用清洁能源,提高系统的节能性与可持续性。继电器的加入使得系统能够根据控制逻辑自动完成上水与加热操作,从而减少人工干预,提高智能化程度。本设计在硬件选型上注重低功耗与高可靠性,在功能实现上兼顾实用性与安全性,整体方案不仅能够满足家庭对热水器的日常使用需求,还体现了绿色节能与智能控制相结合的设计理念,具有较高的应用价值与推广意义。

【所用硬件】

1、STM32F103C8T6最小系统板

STM32F103C8T6 最小系统板是基于意法半导体(ST)Cortex-M3 内核的微控制器开发板,核心芯片为 STM32F103C8T6,主频 72MHz,具有 64KB Flash 和 20KB SRAM,满足中等复杂度的嵌入式应用需求。该板集成 USB、USART、SPI、I2C 等通信接口,支持多种外设扩展。最小系统板包含必要的外围电路,如 8MHz 晶振、复位电路、电源管理(3.3V 稳压),并提供 GPIO 引脚引出,方便连接传感器、显示屏等模块。其低功耗、高性能特性使其广泛应用于智能硬件、工业控制等领域。在本设计中,它作为主控单元,负责数据采集、处理及外设控制,确保电子秤系统的稳定运行。

2、OLED显示模块

OLED(有机发光二极管)显示屏模块是一种自发光显示器件,无需背光,具有高对比度、宽视角和快速响应的特点。本设计采用的OLED模块通常为0.96英寸或1.3英寸,分辨率为128×64像素,支持I2C或SPI通信协议,可直接与STM32等微控制器连接。其工作电压为3.3V~5V,功耗低,适合便携式设备。

3、蜂鸣器模块

蜂鸣器模块是一种常见的声音报警装置,广泛应用于电子设备中用于提示或报警功能。该模块通常由一个蜂鸣器和驱动电路组成,能发出高频的蜂鸣声。按照驱动方式可分为有源蜂鸣器和无源蜂鸣器两种类型。有源蜂鸣器只需提供直流电压即可发声,控制简单,适用于固定频率提示场景;无源蜂鸣器则需要外部提供特定频率的驱动信号才能工作,适用于需要调节音调或生成特定声音模式的场合。模块通常采用 5V 或 3.3V 供电,可通过三极管或专用驱动芯片控制启停,响应速度快,可靠性高,常用于智能设备、安防系统、工业仪表等场景中。

4、水温传感器

DS18B20是一款数字温度传感器,采用单总线通信方式,只需一根数据线即可实现与单片机的连接,使用方便且节省资源。该传感器测量范围为-55℃至+125℃,精度可达±0.5℃,具有低功耗、响应快和抗干扰能力强等特点。DS18B20内部集成了温度寄存器和非易失性存储器,能够存储报警阈值,实现超限报警功能,广泛应用于智能家居、工业控制和环境监测等场景。

5、水位传感器

水位传感器是一种用于检测和测量液体高度的装置,常应用于水箱、池塘、地下水井等场景。它通过电极、电容或压力等原理,将液位变化转换为电信号,供单片机或控制系统处理,从而实现水位监测与控制。该传感器具有结构简单、安装方便、灵敏度高的特点,能够有效防止水位过高或过低引发的设备损坏和安全隐患,广泛应用于智能家居、农业灌溉和工业自动化领域。

6、继电器

继电器模块是一种常用的电气控制器件,能够通过单片机等低电压信号控制高电压或大电流设备的通断,实现弱电与强电之间的隔离和转换。其内部由电磁线圈、触点和驱动电路组成,输入端接收控制信号后,电磁线圈动作带动触点切换,从而控制负载工作。继电器模块具有驱动能力强、使用安全可靠、寿命长等优点,广泛应用于家电控制、工业自动化、电源管理等领域,是嵌入式系统中常见的执行器件。

7、充电控制板

MH-CD42锂电池充电模块是一款基于TP4056芯片的智能充电管理模块,主要用于单节锂电池的充电控制。该模块采用恒流恒压充电模式,具备过充、过放和过流保护功能,能够有效延长电池寿命并提升使用安全性。模块自带充电状态指示灯,红灯表示正在充电,蓝灯表示充电完成,使用直观方便。其输入电压通常为5V,可通过USB或直流电源供电,广泛应用于便携式设备、电源管理和嵌入式系统中。

8、太阳能板

太阳能板模块是一种将光能直接转化为电能的装置,通常由多片光伏电池组成,通过光生伏特效应输出直流电。其输出电压和电流与光照强度和板面积密切相关,具有效率高、无噪声、绿色环保的特点。太阳能板模块结构坚固,适应户外长期使用,可为电池充电或直接为低功耗设备供电。在智能家居、独立供电系统和可再生能源应用中被广泛使用,是实现清洁能源利用的重要器件。

9、3.7V锂电池

3.7V锂电池是一种以锂离子为主要能量载体的可充电电池,具有能量密度高、重量轻、体积小和循环寿命长等优点。其标称电压为3.7V,充满电时电压可达4.2V,放电截止电压约为2.75V。该电池在充放电过程中稳定性好,内阻低,适合为便携式设备、嵌入式系统和小型电子产品提供电源。由于具备安全性和可靠性,3.7V锂电池被广泛应用于手机、智能穿戴设备、移动电源和各种物联网装置中。

10、220VAC转5VDC充电头

220VAC转5VDC充电头是一种常见的电源适配器,能够将家庭市电220V交流电通过变压、整流、滤波和稳压等电路转换为稳定的5V直流电输出。该装置体积小巧,输出电压稳定,转换效率高,并具备过流、过压和短路保护功能,使用安全可靠。它常用于手机、平板、单片机系统等低压设备供电或充电,是电子产品中最常见的电源接口形式之一,具有通用性强和应用范围广的特点。

【系统框架图】

【软件流程图】

【核心代码展示】

#include "app_task.h"
#include "main.h"
#include "m5310a.h"
#include "delay.h"
#include "usart.h"
#include "timer.h"
#include "esp8266.h"
#include "io.h"
#include "led.h"
#include "oled.h"
#include "sim800l.h"
#include "rtc.h"
#include "Encoder.h"
#include "beep.h"
#include "mpu6050.h"
#include "inv_mpu.h"
#include "adc.h"
#include "key.h"
#include "dth11.h"
#include "ds18b20.h"
#include "PAJ7620.h"
#include "max30102.h"
#include "stm32f10x_adc.h"
#include "HCSR04.h"
#include "rfid.h"
/*******************************
作者:阿华学长
V 联系:AHuaXueZhang32
微信公众号:阿华学长单片机设计
持续分享更多单片机资料,关注我!
******************************/
u8 str[100];
OLED oled;
USER user;
TaskControlBlock TaskList[MAX_TASKS] = {0};
uint8_t RegisteredTasks = 0; // 已注册任务数
uint32_t SystemTick = 0;     // 系统时间基准
// 任务注册函数
int8_t Task_Register(uint8_t id, uint32_t interval, void (*task_func)(void *), void *param)
{
if (RegisteredTasks >= MAX_TASKS)
return -1;
TaskList[RegisteredTasks].TaskID = id;
TaskList[RegisteredTasks].PollingInterval = interval;
TaskList[RegisteredTasks].TimerCounter = 0;
TaskList[RegisteredTasks].RunFlag = 0;
TaskList[RegisteredTasks].EnableFlag = 1;
TaskList[RegisteredTasks].TaskHook = task_func;
TaskList[RegisteredTasks].TaskParam = param;
TaskList[RegisteredTasks].Delay = 0;

RegisteredTasks++;
return 0;
}
// 任务使能控制
void Task_Enable(uint8_t id, uint8_t enable)
{
for (int i = 0; i < RegisteredTasks; i++)
{
if (TaskList[i].TaskID == id)
{
TaskList[i].EnableFlag = enable;
break;
}
}
}
/**
@brief LED 闪烁任务
@param pt
*/
void Led_Task(void *pt)
{
LED1 = !LED1;
}
/**
@brief OLED 显示任务
@param pt
/
void OLED_Task(void pt)
{
if (oled.page == PAGE_1)
{
/ 太阳能热水器 */
OLED_ShowChinese(16, 0, 5, 16, 1);
OLED_ShowChinese(32, 0, 6, 16, 1);
OLED_ShowChinese(48, 0, 7, 16, 1);
OLED_ShowChinese(64, 0, 8, 16, 1);
OLED_ShowChinese(80, 0, 9, 16, 1);
OLED_ShowChinese(96, 0, 10, 16, 1);
 /** 水温: */
 OLED_ShowChinese(0, 16, 11, 16, 1);
 OLED_ShowChinese(16, 16, 12, 16, 1);
 OLED_ShowChinese(32, 16, 13, 16, 1);
 sprintf(str, "%2.1lfC", ds18b20.temp);
 OLED_ShowString(48, 16, str, 16, 1);
 
 /** 水位: */
 OLED_ShowChinese(0, 32, 14, 16, 1);
 OLED_ShowChinese(16, 32, 15, 16, 1);
 OLED_ShowChinese(32, 32, 16, 16, 1);
 sprintf(str, "%2d%%", user.water);
 OLED_ShowString(48, 32, str, 16, 1);
}
OLED_Refresh();
}
/**
@brief 水位获取任务
@param pt
*/
void Water_Task(void *pt)
{
user.water = Get_Adc(ADC_Channel_7) * 100 / 4095;
}
/**
@brief 水温获取任务
@param pt
*/
void DS18B20_Task(void *pt)
{
DS18B20_Get_Temp();
}
/**
@brief 控制任务
@param pt
*/
void Control_Task(void *pt)
{
if (ds18b20.temp > user.temp_hight_value || user.water > user.water_hight_value)
{
BEEP = 0;
}
else
{
BEEP = 1;
}
if (ds18b20.temp < user.temp_low_value)
{
JDQ1 = 1;
}
else
{
JDQ1 = 0;
}
if (user.water < user.water_low_value)
{
JDQ2 = 1;
}
else
{
JDQ2 = 0;
}
}
void Task_Init(void)
{
Task_Register(1, 1000, Led_Task, NULL);
Task_Register(2, 200, OLED_Task, NULL);
Task_Register(3, 500, Water_Task, NULL);
Task_Register(4, 1000, DS18B20_Task, NULL);
Task_Register(4, 500, Control_Task, NULL);
}
void Task_Run(void)
{
for (int i = 0; i < RegisteredTasks; i++)
{
if (TaskList[i].RunFlag && TaskList[i].EnableFlag)
{
// 执行任务函数
if (TaskList[i].TaskHook != NULL)
{
TaskList[i].TaskHook(TaskList[i].TaskParam);
}
// 清除运行标志
TaskList[i].RunFlag = 0;
}
}
}
void TaskTime(void)
{
static u32 tick_time = 0;
tick_time++;
// 遍历任务列表更新计数器
for (int i = 0; i &lt; RegisteredTasks; i++)
{
    if (TaskList[i].EnableFlag)
    {
        TaskList[i].TimerCounter++;
        
        // 达到时间间隔时设置运行标志
        if (TaskList[i].TimerCounter &amp;gt;= TaskList[i].PollingInterval)
        {
            TaskList[i].RunFlag = 1;
            TaskList[i].TimerCounter = 0;
        }
    }
}
}

【原理图】

【硬件实物图】

【实物演示】

实物演示视频:以下是本项目的实物演示视频,展示了太阳能热水器系统的实际运行效果。

如果视频无法播放,请直接访问:https://www.bilibili.com/video/BV1hwg7z3EXb/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值