如何实现一种基于STM32单片机的智能浴室水温调控仪设计

发布者:快乐飞跃最新更新时间:2023-08-23 来源: elecfans关键字:STM32  单片机 手机看文章 扫描二维码
随时随地手机看文章

一、功能简介

本项目使用Proteus8.12仿真STM32单片机控制器,使用LCD1602、DS18B20、继电器加热、电机模块等。


系统运行后,LCD1602显示DS18B20采集温度值、温度上限阈值。开启加水,一段时间后开启加热,当水位到达后停止注水,继续加热到设定温度,可通过K1、K2键对温度上限设置,若检测温度大于或等于上限,关闭加热装置;若温度低于上限,开启加热装置;


主要功能如下:

(1)水温,水位实时检测;

(2)水温设定,超限关闭加热;

(3)继电器控制加热、注水;

(4)LCD1602液晶显示。


二、软件设计

//系统参数初始化

void sys_parm_init(void)

{

//初始自动模式

sys_ctrl.mode=0;

//温度上限值

sys_ctrl.temph=37;

sys_ctrl.sign=0;//默认温度符号为正

}

//开机界面显示

void sys_open_show(void)

{

lcd1602_clear();

lcd1602_show_string(0,0,"Temp: C");

lcd1602_show_string(0,1,"Set TH: C");

}

//系统参数设置

void sys_parm_set(void)

{

u8 key=0;

key=KEY_Scan(0);

//温度上限设置

if(key==KEY1_PRESS)//加

{

sys_ctrl.temph+=THRESHOLD_STEP;

if(sys_ctrl.temph>TEMP_MAX)sys_ctrl.temph=0;

}

else if(key==KEY2_PRESS)//减

{

sys_ctrl.temph-=THRESHOLD_STEP;

if(sys_ctrl.temph

}

}

//系统数据采集

void sys_data_get(void)

{

static u8 i=0;

while(1)

{

i++;

//间隔采集温度

if(i%1==0)

{

sys_ctrl.temp=DS18B20_GetTemperture()*10;//放大10倍,保留小数点后1位

if(sys_ctrl.temp<0)

{

sys_ctrl.sign=1;//负温度符号

sys_ctrl.temp=-sys_ctrl.temp;

}

else

sys_ctrl.sign=0;//正温度符号

}

break;

}

}

//系统数据显示

void sys_data_show(void)

{

u8 buf[6];

//正常界面显示温度

while(1)

{

//温度符号显示

if(sys_ctrl.sign==1)

lcd1602_show_num(5,0,'-',0);

else

lcd1602_show_num(5,0,' ',0);

//温度显示

buf[0]=sys_ctrl.temp/1000+0x30;

if(buf[0]==0x30)buf[0]=' ';

buf[1]=sys_ctrl.temp%1000/100+0x30;

if(buf[0]==' ' && buf[1]==0x30)buf[1]=' ';

buf[2]=sys_ctrl.temp%1000%100/10+0x30;

buf[3]='.';

buf[4]=sys_ctrl.temp%1000%100%10+0x30;

buf[5]='�';

lcd1602_show_string(6,0,buf);

//温度上限显示

lcd1602_show_nums(7,1,sys_ctrl.temph,2,1);

break;

}

}

//系统功能控制

void sys_fun_ctrl(void)

{

static u8 flag=0;

while(1)

{

//如果液位到达,停止加水

if(YW_SWITCH==0 && flag==0)

{

delay_ms(10);

if(YW_SWITCH==0)

{

ZS_RELAY(1);//停止加水

flag=1;

}

}

//如果温度到达设定温度,停止加热

if(sys_ctrl.temp>=sys_ctrl.temph*10)

{

JR_RELAY(1);//停止加热

}

else

{

JR_RELAY(0);//开始加热

}

break;

}

}

//应用控制系统

void appdemo_show(void)

{

u8 i=10;

LED_Init();

KEY_Init();

lcd1602_init();

DS18B20_Init();

jr_zs_gpio_init();

yw_switch_gpio_init();

sys_parm_init();//系统参数初始化

//等待温度数据稳定

while(i--)

{

sys_ctrl.temp=DS18B20_GetTemperture()*10;

delay_ms(100);

}

sys_open_show();//系统开机显示

ZS_RELAY(0);//开始加水

delay_ms(2000);

JR_RELAY(0);//开始加热

while(1)

{

sys_data_get();//系统数据采集

sys_data_show();//系统数据显示

sys_parm_set();//系统参数设置

sys_fun_ctrl();//系统功能控制

}

}

三、实验现象

图片

图片

图片


关键字:STM32  单片机 引用地址:如何实现一种基于STM32单片机的智能浴室水温调控仪设计

上一篇:stm32定时器时间计算
下一篇:STM32G0开发笔记:EEPROM M24C02的使用方法

推荐阅读最新更新时间:2024-10-30 10:21

再造STM32---第十七部分:USART—串口通讯
本章参考资料:《STM32F4xx 中文参考手册》 USART 章节。 学习本章时,配合《STM32F4xx 中文参考手册》 USART 章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。 特别说明, 本书内容是以 STM32F42xxx 系列控制器资源讲解。 17.1 串口通讯协议简介: 物理层: 规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。其实就是硬 件部分。 协议层: 协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。其实就是软件部分。 1-RS232标准: RS232标准串口通讯结构图: 1、 RS232标准串口主要用于工业设备直接通信 2、电平转换芯片一般有M
[单片机]
再造STM32---第十七部分:USART—串口通讯
芯旺微-KungFu内核车规级MCU KF32A136
产品描述: KF32A136是KungFu内核32位汽车级MCU,其具备高达256KB Flash,32KB RAM,主频高达48Mhz,支持CAN和LIN接口。KF32A136可提供超小型封装-QFN32,最大封装支持LQFP64,具备小资源小封装高性能的特点,广泛应用在汽车众多节点控制单元中. 独特优势: 自主KungFu内核及配套工具链 应用场景: 车灯控制,座椅控制、空调面板控制、车窗开关控制等 未来前景: 提升了小资源小封装控制器的性价比,拓宽国产车规级芯片产品在众多节点控制单元的应用范围,加速汽车电子国产化进程。
[汽车电子]
芯旺微-KungFu内核车规级<font color='red'>MCU</font> KF32A136
单片机教程实战5 动态扫描显示接口
动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以我们就可以自行决定何时显示哪一位了。而所谓动态扫描就是指我们采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。   在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示
[单片机]
<font color='red'>单片机</font>教程实战5 动态扫描显示接口
51单片机——静态数码管流动显示
共阴极数码管码表: 0x3f , 0x06 , 0x5b , 0x4f ,0x66 , 0x6d , 0 1 2 3 4 5 0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c , 6 7 8 9 A B 0x39 , 0x5e , 0x79 , 0x71 , 0x00 C D E F 无显示 实际应用中,定义一个数组即可: ​unsigned char code DIG_CODE ={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D,
[单片机]
51单片机最小系统介绍
前言 在学习51单片机的时候我们最先接触到的就是单片机最小系统,单片机最小系统又叫最小应用系统,顾名思义就是能够使单片机实现简单运行的最小元件的组合。 提示:以下将以51单片机最小系统为例进行介绍 一、51单片机最小系统模块构成 二、电源电路 一个系统的正常工作离不开电源,单片机常见的电源电压分为5V 和低功耗的3.3V。本文介绍的是STC89C51这款芯片,该芯片是在5V电压下正常工作。 1.电源引脚 VCC(VDD):第40脚,电源端,接+5V电源,用于给整个系统供电。 VSS(GND):第20脚,接地端,接GND端。 EA :第31引脚,EA为片外程序存储器选用端,该引脚低电平时,选用片外程序存储器,高电平或悬空时选
[单片机]
51<font color='red'>单片机</font>最小系统介绍
stm32 hal can接收大量数据的轰炸后,不能继续接收
原因:若在接收的时候发送数据, 发送中的处理: hal_can_transmit()中会进行hal_lock(hcan);然后更改can状态为HAL_CAN_STATE_BUSY_TX相关的。 再谈一下接收中的处理,不用多说肯定是在接收中断国会开启下一次接收,即hal_can_receive_it();那么这里边又干了什么: /* Check if CAN state is not busy for RX FIFO0 */ if((FIFONumber == CAN_FIFO0) && ((hcan- State == HAL_CAN_STATE_BUSY_RX0) ||
[单片机]
单片机的功耗
单片机的功耗是非常难算的,而且在高温下,单片机的功耗还是一个特别重要的参数。 暂且把单片机的功耗按照下面的划分。 1.内部功耗(与频率有关) 2.数字输入输出口功耗 2.1输入口 2.2输出高 2.3输出低 3.模拟输入口功耗 首先我们计算内部功耗单片机的功耗一般和工作频率有关,在固定频率下与功能有关,有两种计算办法。 第一种,固定频率,增减功能引起电流变化: 第二种,频率变化,不考虑使用模块: 数字输出口,按照表格中的数据,得出内部的Rdson,可计算出输出高和输出低在内部的功耗。 这里需要注意的是,输入口的功耗一般不大,但是设计的IO口有电流注入的时候功耗较大,这时候嵌位二极管是工作的,注意这部分
[单片机]
<font color='red'>单片机</font>的功耗
单片机存储器的配置
单片机存储器配置: 片内RAM 128字节(00H—7FH); 片内RAM前32个单元是工作寄存器区(00H—1FH) 片内RAM有128个可按位寻址的位,占16个单元。 位地址编号为:00H—7FH,分布在20H—2FH单元(P.27) 片内21个特殊功能寄存器(SFR)中:地址号能被 8整除的 SFR中的各位也可按位寻址(P.27-28) 可寻址片外RAM 64K字节 (0000H—FFFFH) 可寻址片外ROM 64K字节 (0000H—FFFFH) 片内 ROM 4K字节 (000H—FFFH) 扩展阅读:半导体存储器 存储器配置(片内RAM) 1、片内RAM 128字节(
[单片机]
<font color='red'>单片机</font>存储器的配置
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved