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

【STM32项目开源】STM32单片机多功能饮水机系统

目录

一、设计背景和意义

1.1设计背景:

1.2设计意义:

二、实物展示

三、硬件功能介绍

2.1 硬件清单:

2.2 功能介绍:

四、软件设计流程图

五、硬件PCB展示

六、软件主函序展示

七、单片机实物资料

资料获取 查看主页介绍:兆龙电子单片机设计


一、设计背景和意义

1.1设计背景:

在现代家庭、办公场所及公共场所的日常饮水管理中,饮水机的便捷性、安全性与智能化控制是核心需求。传统饮水机存在明显局限:一方面,高端智能饮水机(如商用大型智能饮水设备、品牌定制化饮水系统)功能虽全但成本高昂,安装调试复杂,依赖特定品牌售后支持,难以普及到普通家庭、小型办公室等场景,且设备兼容性差,更换或升级成本高,无法灵活满足不同人群的饮水习惯需求;另一方面,普通简易饮水机(如基础加热型、手动按键式)虽操作简单,但功能单一,仅能实现基础的加热或制冷,缺乏水质监测、水温精准控制、水量自动调节及安全预警等功能,无法满足现代化生活场景下对饮水健康、便捷管理的需求。

现有饮水机控制方案还存在功能割裂与集成度低的问题:部分高端饮水设备虽具备多模式控制与安全监测功能,但依赖复杂的电路设计与专业维护,后期使用成本高,难以覆盖预算有限的家庭或小型办公群体;而低成本饮水机又在功能完整性与智能化上存在欠缺,无法实现饮水数据与移动端 APP、智能提醒的联动,导致加热能耗浪费严重、水质安全无法保障,无法为用户饮水习惯分析及设备优化管理提供数据支撑。基于此,本设计以 STM32 单片机为核心,融合高精度参数采集模块(如水温传感器、水位传感器、TDS 水质传感器、水流传感器)、LCD 显示模块、数据存储模块及继电器控制与报警模块,构建低成本、高集成度的 STM32 单片机多功能饮水机系统,以解决传统饮水机设备功能单一、智能化程度低、能耗高及安全性不足的问题。

1.2设计意义:

本设计通过整合 STM32 单片机的高效数据处理能力与多模块协同工作机制,在智能饮水管理领域具有多重实用价值,具体体现在以下三方面:

从使用体验与管理效率角度,该系统突破了传统饮水机的局限:一是实现了多参数同步监测与多功能联动(如支持水温、水位、水质 TDS 值、水流速度等核心指标,联动加热模块、制冷模块、出水控制、自动补水等功能),无需人工频繁操作或查看状态,减少操作繁琐性;二是配备 LCD 实时显示模块,直观呈现当前水温、水位、水质状态及运行模式,同时支持数据自动存储(可通过 SD 卡或 WiFi 传输至手机 APP / 云端平台),方便用户长期追溯饮水数据与设备运行规律,为饮水健康分析与设备管理优化提供完整数据支撑;三是新增异常预警与自动调控功能,当监测到某项参数超出安全范围(如水温过高、水位过低、水质超标、干烧风险)时,系统自动触发声光报警,同时联动继电器切断加热电源、停止出水、启动补水等,无需人工干预即可及时处理异常,大幅提升了饮水管理的便捷性与安全性。

从技术实践与成本控制角度,本设计以 STM32 单片机为核心,充分利用其低功耗、高性价比的优势,搭配低成本的高精度参数传感器(如 DS18B20 水温传感器、HC-SR04 水位传感器、GP2Y0A21YK 水流传感器、TDS 水质检测模块)与通用外围模块,在保证数据精度(水温测量误差可控制在 ±0.5℃以内,水位检测响应时间可控制在 2 秒以内)的前提下,有效降低了系统整体成本,相比同功能的高端智能饮水机成本降低 40%-60%,更易普及到普通家庭、小型办公室及学校宿舍等场景。同时,系统支持模块化扩展(如后续可新增语音控制模块、远程预约功能),为后续功能升级预留了空间,具备良好的灵活性与可扩展性。

从应用场景与行业价值角度,该系统可广泛适配多类饮水场景:在普通家庭生活中,可作为家庭饮水的智能管理中心,实时调控水温、监测水质,保障饮水健康;在高校电子信息与自动化相关专业教学中,可作为单片机应用与智能设备控制的实践案例,帮助学生理解嵌入式系统与多种传感器协同工作原理;在小型办公室或出租房场景中,可为用户提供低成本的智能饮水方案,减少能耗浪费与设备维护成本,提升饮水体验。此外,本设计探索了 STM32 单片机在低成本智能饮水设备领域的应用方案,推动传统饮水机从 “单一加热、人工操作” 向 “多参数监测、智能控制、自动响应” 升级,为低成本智能化饮水设备的开发提供了可参考的集成思路,具有较好的实践应用与行业推广价值。

二、实物展示

下方为实物演示视频

点击下方链接跳转演示视频https://www.bilibili.com/video/BV119e1zkEmN/?spm_id_from=333.1387.upload.video_card.click&vd_source=2a672ca4e8794dca68cbe6d047b42ca5

下方为实物展示图片

三、硬件功能介绍

2.1 硬件清单:

  • STM32F103C8T6
  • LCD1602液晶显示
  • 继电器控制电路
  • 水泵
  • 加热片
  • 声光报警
  • 红外传感器
  • 水位传感器
  • 蓝牙模块

2.2 功能介绍:

(1)使用STM32F103C8T6单片机做主控制器。
(2)使用LCD1602显示采集到的水温、模式、设置水温值
(3)使用DS18b20检测当前饮水机水温值
(4)使用水位传感器检测是否有水
(5)使用继电器控制加热片加热和水泵出水
(6)当无水的情况下,蜂鸣器进行声光报警提醒,并停止所有的功能,直到检测到有水
(7)四个按键分别对应:加热、出水,温度加、温度减的功能
(8)蓝牙模块与手机APP通信

四、软件设计流程图

五、硬件PCB展示

六、软件主函序展示


#include "sys.h"
#include "delay.h"
#include "lcd1602.h"
#include "ds18b20.h"
#include "timer.h"
#include "usart1.h"
#include "gpio.h"
#include "stdbool.h"
#include "stdio.h"
#include <stdlib.h>
#include "string.h"#define STM32_RX1_BUF       Usart1RecBuf 
#define STM32_Rx1Counter    RxCounter
#define STM32_RX1BUFF_SIZE  USART1_RXBUFF_SIZE#define FLASH_SAVE_ADDR  ((u32)0x0800F000)  				//设置FLASH 保存地址(必须为偶数)bool Mode = 0;//0是自动模式,1是手动模式
unsigned char temp_hight = 35,temp_low = 10,setn=0;//温度上限下限
short temperature;//温度
bool flag = 0,Twinkle = 0;
unsigned char openTime = 2;//出水时间
unsigned char volume = 2;
bool openFlag = 0;//出水标志
bool closeFlag = 0;//关闭标志
bool sendFlag = 0;
unsigned char miao=0;
bool ssflag = 0;void STM32_FlashWriteData(void)  //STM32 Flash写入数据
{u16 temp_buf[2];STMFLASH_Write(FLASH_SAVE_ADDR + 0x03,temp_buf,2); //存入数据}void STM32_FlashReadData(void)  //STM32 Flash读出数据
{u16 temp_buf[2];STM32F10x_Read(FLASH_SAVE_ADDR + 0x05,temp_buf,2); //读出数据
}void STM32_FlashCheck(void) 
{STM32_FlashReadData();
}void displayCursor()
{if(setn == 1)//显示设置页面{LCD_Write_Com(0x80+0x40+5);LCD_Write_Com(0x0f);}if(setn == 2){LCD_Write_Com(0x80+0x40+14);LCD_Write_Com(0x0f);}
}void keyscan()//按键扫描
{if(key2 == 0)//加键按下{delay_ms(20);if(key2 == 0){while(key2 == 0);if(setn == 0)//调出水量(不在设置状态下){if(volume < 5)volume++;}if(setn == 1){if(temp_hight - temp_low > 1)//上限必须大于下限,下限才能加{temp_low++;	}	LCD_Write_Char(4,1,temp_low/10+48);//显示十位LCD_Write_Char(5,1,temp_low%10+48);//显示个位LCD_Write_Com(0x80+0x40+8);LCD_Write_Com(0x0f);//光标闪烁}if(setn == 2){if(temp_hight < 99){temp_hight++;	}	LCD_Write_Char(13,1,temp_hight/10+48);//显示十位LCD_Write_Char(14,1,temp_hight%10+48);//显示个位LCD_Write_Com(0x80+0x40+2);LCD_Write_Com(0x0f);//光标闪烁}}	}if(key3 == 0)//减键按下{delay_ms(20);if(key3 == 0){while(key3 == 0);if(setn == 0)//调出水量(不在设置状态下){if(volume > 2)volume--;}if(setn == 1){if(temp_low > 0)//下限最小到0{temp_low--;	}	LCD_Write_Char(4,1,temp_low/10+48);//显示十位LCD_Write_Char(5,1,temp_low%10+48);//显示个位LCD_Write_Com(0x80+0x40+5);LCD_Write_Com(0x0f);//光标闪烁}if(setn == 2){if(temp_hight - temp_low > 1)//上限必须大于下限,上限才能减{temp_hight--;	}	LCD_Write_Char(13,1,temp_hight/10+48);//显示十位LCD_Write_Char(14,1,temp_hight%10+48);//显示个位LCD_Write_Com(0x80+0x40+14);LCD_Write_Com(0x0f);//光标闪烁}}	}if(key1 == 0)//设置键按下{delay_ms(20);if(key1 == 0){while(key1 == 0);//等待按键松开beep = 0;ssflag = 0;setn++;if(setn > 2)//按下次数超过两次退出设置{setn = 0;LCD_Write_Com(0x0c);//光标光标LCD_Write_String(0,0,"Temperature:   C");LCD_Write_String(0,1,"                ");STM32_FlashWriteData();//存储 }if(setn == 1)//显示设置页面{LCD_Write_String(0,0,"  Set The Temp  ");LCD_Write_String(0,1,"T-L:00C  T-H:00C");LCD_Write_Char(4,1,temp_low/10+48);//显示十位LCD_Write_Char(5,1,temp_low%10+48);//显示个位LCD_Write_Char(13,1,temp_hight/10+48);LCD_Write_Char(14,1,temp_hight%10+48);}displayCursor();}	}}
void chushui(bool flag)//显示Open
{if(flag == 1){LCD_Write_String(0,1,"      Open      ");relay2=1;//开启出水继电器}else{relay2=0;//关闭出水继电器LCD_Write_String(0,1,"                ");}
}bool test=0;int main(void)
{	delay_init();	    //延时函数初始化	  delay_ms(500);       //上电瞬间加入一定延时在初始化STM32_FlashCheck();DS18B20_GPIO_Init(); //ds18b20引脚初始化DS18B20_Init();			//初始化DS18B20uart1_Init(9600);KEY_AND_RELAY_GPIO_Init();LCD_Init();         //屏幕初始化LCD_Write_String(0,0,"Temperature:   C");LCD_Write_String(0,1,"Volume: 200ml   ");LED1 = 1;Mode = 0;//自动模式miao=openTime;memset(STM32_RX1_BUF,0,STM32_RX1BUFF_SIZE);STM32_Rx1Counter = 0;TIM3_Init(499,7199);   //定时器初始化,定时50ms//Tout = ((arr+1)*(psc+1))/Tclk ; //Tclk:定时器输入频率(单位MHZ)//Tout:定时器溢出时间(单位us)while(1){  keyscan();if(setn ==0){///////显示温度LCD_Write_Char(13,0,temperature/10+48);LCD_Write_Char(14,0,temperature%10+48);if(closeFlag==1)//关闭出水继电器{closeFlag = 0;openFlag = 0;chushui(0);}if(shuiwei == 1)//有水{beep = 0;if(temperature <= temp_low){relay1=1;}//低于下限开启加热继电器if(temperature >= temp_hight){relay1=0;}//高于上限停止if(Mode == 0)//在自动模式下{if(key5 == 0 && HW==0)//出水按键,必须在检测到有杯子的情况下才有效{delay_ms(10);if(key5 == 0 && HW==0){while(key5 == 0);//等待按键松开chushui(1);//显示Openmiao=openTime;//时间赋值openFlag = 1;}}}else//在手动模式下{if(key5 == 0&& HW==0)//出水按键,必须在检测到有杯子的情况下才有效{delay_ms(10);if(key5 == 0){chushui(1);test=0;}}else {if(test==0)chushui(0);}if(HW==1){chushui(0);test=0;}}}else{relay1 = 0;//没有水关闭加热继电器relay2=0;//关闭出水继电器ssflag = 0;beep = 1;//蜂鸣器提示报警if(Twinkle == 0)LCD_Write_String(0,1," Without Water! ");elseLCD_Write_String(0,1,"                ");}}delay_ms(10);}	
}void TIM3_IRQHandler(void)//定时器3中断服务程序,用于记录时间
{ static u16 timeCount1=0;static u16 timeCount2=20;if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 { TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除中断标志位  timeCount1++;if(timeCount1 >= 10)//500ms{timeCount1 = 0;Twinkle = !Twinkle;}timeCount2++ ;if(timeCount2 >= 20)//1秒{timeCount2 = 0;temperature=ReadTemperature();if(openFlag == 1)//出水标志{if(HW == 1){closeFlag=1;};if(miao > 0){miao--;}else {closeFlag=1;miao=openTime;}}sendFlag = 1;}}
}

七、单片机实物资料

资料获取 查看主页介绍:兆龙电子单片机设计

http://www.dtcms.com/a/537556.html

相关文章:

  • redis-哨兵模式配置整理
  • Cookie 快速导入浏览器
  • Day02 js的运算符及语句
  • 合肥关键词排名首页seo广告优化
  • Halcon学习--(6)Blob分析
  • 快速上手大模型:深度学习2(实践:深度学习基础、线性回归)
  • 网站建设多少钱十年乐云seowordpress倒入数据库
  • 如何搭建内网网站wordpress响应式主题下载
  • 队列的实现
  • undo表空间满会导致业务出问题吗
  • 电子商城网站建设流程贵州建设学校网站
  • h5游戏免费下载:地球日
  • 合肥万户网站建设wordpress主题怎么编辑
  • Redix数据库基础
  • 达内网站开发成功的软文营销案例
  • 哪里有配音的网站青岛专业做网站的公司有哪些
  • 机器视觉的手机模组背光贴合应用
  • LeetCode 每日一题 2025/10/20-2025/10/26
  • 怎么做招聘网站设计2023年做网站怎么样
  • 大气微电影类网站织梦模板完整版广州有什么好玩的地方景点推荐
  • 网站网站是怎么做的百度网盘网页版官网
  • 国外最新创意产品网站岳阳招聘网最新招聘
  • 东莞做网站需要避免这些因素WordPress如何导入本地插件
  • 网站设计与建设报告如何给给公司建立网站
  • 中航建设集团有限公司网站国际新闻界期刊
  • 合合信息与上海交通大学开展课题合作研究,共探智能文档图像处理前沿技术
  • 罗湖商城网站设计价格网站系统分析
  • 沈阳网站建设蓝顶网络wordpress怎么让手机端好看
  • Java---StringBuilder
  • 大航母网站建设怎么样防制网站怎么做