基于STM32的智能饮水机系统设计

news2024/11/27 7:42:40

一、项目背景

随着智能化的迅速发展,人们对于生活中的各类设备也越来越有智能化的需求,其中智能饮水机是一种比较常见的设备。智能饮水机不仅可以提供饮用水,还可以通过智能化的技术满足人们对于水质、水温、出水量等方面的需求。因此,当前设计了一种基于STM32的智能饮水机系统,以满足人们对智能化饮水机的需求。

智能饮水机系统其主要功能包括:

【1】控制加热芯片:通过继电器模块控制加热芯片,在水烧开后自动断电。

【2】液位感应:使用液位传感器感应水箱水位,当水位过低时通过语音模块进行播报提示。

【3】移动端控制:Android手机端可以显示当前双水箱内的水温,设置出水温度及出水量,并且还可以控制出水操作。

【4】主控芯片:采用STM32F103RCT6主控芯片,这款芯片有着强劲的处理能力和丰富的外设资源,可以满足饮水机系统的控制需求。

【5】WIFI通信:选择ESP8266与手机端通信,可以实现远程控制。

【6】水温测量:采用DS18B20实现水温测量,能够准确地测量水温。

【7】出水开关控制:采用SG90电机实现出水开关控制,可以精准地控制出水量。

【8】本地有2个指示灯,绿色和红色灯。可以表示加热状态。

image-20230522220850283

二、系统硬件设计

【1】系统核心芯片选择

STM32F103RCT6作为本系统的主控芯片,其具有较高的计算速度和稳定性,在众多STM32系列中也是使用比较广泛的型号之一。

【2】温度测量模块

温度测量采用DS18B20数字温度传感器,通过单总线协议与主控芯片进行通信,实现对水温的精准测量。

【3】液位检测模块

液位检测采用液位传感器,通过测量水箱内水位来判断是否需要进行添加水操作。

【4】控制加热芯片模块

继电器模块负责控制加热芯片,当水烧开后自动断电,以确保水的安全。

【5】出水操作模块

出水操作通过SG90电机实现,其可以控制水龙头的开关,实现出水的自动控制。

【6】WIFI通信模块ESP8266作为WIFI模块,与手机端进行通信,实现了智能饮水机系统的远程操控和监测。

三、系统软件设计

【1】温度测量与显示模块

STM32芯片通过单总线协议与DS18B20传感器进行通信,获取当前水温数据,并将其通过LCD1602液晶显示屏展示在饮水机面板上。

【2】液位检测模块

液位传感器负责检测水箱内水位情况,并将水位数据传递给主控芯片。当水位过低时,系统会通过语音提示模块向用户发出添加水的提醒。

【3】控制加热芯片模块

主控芯片通过继电器模块控制加热芯片的开关,在水烧开后自动断电,以保证水的安全性。

【4】出水操作模块

出水操作通过SG90电机控制,实现了对饮水机出水的自动控制。同时,在Android手机端,用户可以设置出水温度和出水量,使得出水操作更加便捷。

【5】WIFI通信模块

系统通过ESP8266与Android手机端进行通信,实现了智能饮水机系统的远程操控和监测功能。用户可以通过手机端查看当前双水箱内的水温并进行相应的操作。

ESP8266配置成AP+TCP服务器模式,开启WIFI热点等待手机连接,手机连接之后使用TCP客户端模式连接饮水机完成数据通信。

四、核心代码

4.1 SG90控制代码

SG90电机是一种小型舵机,用于模型航空、船模、车模和机器人等小型机械装置中,可以控制舵、飞控等运动部件的转动角度。其最大扭矩为1.6kg/cm(4.8V时),转速为0.12秒/60度(4.8V时),工作电压为4.8V~6V。SG90电机采用三线接口,其中红色接VCC(正极)、棕色接GND(负极)、橙色接PWM信号线,可以通过控制器的PWM信号控制电机的角度。

以下是使用延时模拟PWM波形控制SG90电机旋转并封装成子函数的示例代码:

#include "stm32f10x.h"

#define SG90_PIN GPIO_Pin_5
#define SG90_PORT GPIOB

void SG90_rotate(uint8_t angle);

int main(void)
{
    // 初始化GPIOB时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    
    // 配置PB5为推挽输出
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = SG90_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(SG90_PORT, &GPIO_InitStructure);
    
    while (1)
    {
        SG90_rotate(0); // 转到0度
        delay_ms(1000);
        
        SG90_rotate(90); // 转到90度
        delay_ms(1000);
        
        SG90_rotate(180); // 转到180度
        delay_ms(1000);
    }
}

void SG90_rotate(uint8_t angle)
{
    // 计算PWM波形高电平持续时间
    uint32_t high_time = 500 + angle * 11.11;
    
    // 发送PWM波形
    GPIO_SetBits(SG90_PORT, SG90_PIN);
    delay_us(high_time);
    GPIO_ResetBits(SG90_PORT, SG90_PIN);
    delay_us(20000 - high_time);
}

在上面的代码中,将SG90电机控制引脚连接到了STM32F103的PB5口,并通过计算PWM波形高电平持续时间来控制电机旋转角度。使用了SG90_rotate子函数来实现控制过程。当调用SG90_rotate函数并传入目标旋转角度时,函数会自动计算出对应的PWM波形高电平持续时间,并发送PWM波形来控制电机旋转到指定角度。使用了delay_msdelay_us这两个函数来实现延时操作。

4.2 DS18B20温度传感器

DS18B20是一种数字温度传感器,它可以直接测量环境温度并转换为数字信号输出。DS18B20温度传感器采用一线式总线接口(也叫单总线接口),具有精度高、抗干扰能力强、可靠性高和使用方便等优点。

DS18B20温度传感器的测量范围为-55℃~+125℃,精度为±0.5℃。传感器内置了温度补偿电路,可以自动补偿温度影响导致的测量误差。

DS18B20温度传感器有多种封装形式,包括TO-92封装、SOIC封装和TO-263封装。其中TO-92封装是最常见的,也最容易使用,它的引脚分别为GND(负极)、DQ(数据线)和VDD(正极)。传感器可以通过单总线接口连接控制器,控制器通过发送指令读取传感器的数据。

以下是接口函数的代码示例:

#include "stm32f103xb.h"
#include <stdint.h>

#define DS18B20_GPIO_Port GPIOB
#define DS18B20_GPIO_Pin  GPIO_PIN_6

void delay_us(uint16_t us)
{
    uint16_t i;
    for(i=0; i<us*8; i++);
}

void DS18B20_Init(void)
{
    // 设置PB6为输出模式
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = DS18B20_GPIO_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(DS18B20_GPIO_Port, &GPIO_InitStruct);

    // 拉低总线500us-1000us复位DS18B20
    HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_RESET);
    delay_us(600);
    HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_SET);
    delay_us(60);

    // 等待DS18B20拉低总线告知存在
    while(HAL_GPIO_ReadPin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin) == GPIO_PIN_SET);
    delay_us(240);

    // 发送SKIP ROM指令(跳过ROM应答)
    HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_RESET);
    delay_us(2);
    HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_SET);
    delay_us(60);

    // 等待DS18B20转换完成
    while(HAL_GPIO_ReadPin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin) == GPIO_PIN_SET);
}

float DS18B20_ReadTemperature(void)
{
    float temperature = 0;

    // 发送START CONVERT指令(启动转换)
    HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_RESET);
    delay_us(2);
    HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_SET);
    delay_us(60);

    // 等待DS18B20转换完成
    while(HAL_GPIO_ReadPin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin) == GPIO_PIN_SET);

    // 发送READ SCRATCHPAD指令(读取温度值)
    HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_RESET);
    delay_us(2);
    HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_SET);
    delay_us(60);

    // 读取温度值
    uint8_t data[9] = {0};
    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_RESET);
            delay_us(2);
            HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_SET);
            delay_us(10);
            data[i] |= (HAL_GPIO_ReadPin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin) << j);
            delay_us(50);
        }
    }

    // 计算温度值
    int16_t rawTemperature = (data[1] << 8) | data[0];
    if (rawTemperature & 0x8000) {
        rawTemperature = ~rawTemperature + 1;
        temperature = (float)rawTemperature * -0.0625;
    } else {
        temperature = (float)rawTemperature * 0.0625;
    }

    return temperature;
}

调用方式:

DS18B20_Init(); // 初始化
float temperature = DS18B20_ReadTemperature(); // 读取温度值

五、总结

本项目是基于STM32的智能饮水机系统设计,实现了自动断电、液位感应、语音提示、手机远程控制等功能。其中,STM32主控芯片选择STM32F103RCT6,WIFI选择ESP8266与手机端通信,水温测量采用DS18B20,出水开关控制采用SG90电机实现。

通过继电器模块控制加热芯片,在水烧开后自动断电,避免了过度烧水和安全隐患。同时,利用液位传感器感应水箱水位,当水位过低时通过语音模块进行播报提示,提醒用户及时加水。

在Android手机端,用户可以方便地查看当前双水箱内的水温,设置出水温度及出水量,并控制出水操作。这极大地提高了用户的使用体验和方便性。

本项目具有实用性和创新性,不仅满足了用户对智能化、便捷化的需求,也展示了STM32等技术在智能家居领域的应用前景。

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

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

相关文章

深入浅出:单链表的实现和应用

&#x1f331;博客主页&#xff1a;青竹雾色间. &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 ✨人生如寄&#xff0c;多忧何为 ✨ 目录 前言 单链表的基本概念 节点 头节点 尾节点 单链表的基本操作 创建单链表 头插法&#xff1a; 尾插法&#…

OpenGL蓝宝书第九章学习笔记:片段着色器和帧缓存

前言 本篇在讲什么 OpenGL蓝宝书第九章学习笔记之片段着色器和帧缓存 本篇适合什么 适合初学OpenGL的小白 本篇需要什么 对C语法有简单认知 对OpenGL有简单认知 最好是有OpenGL超级宝典蓝宝书 依赖Visual Studio编辑器 本篇的特色 具有全流程的图文教学 重实践&am…

Node服务器 - koa框架

1 koa的基本使用 2 koa的参数解析 3 koa响应和错误 4 koa静态服务器 5 koa的源码解析 6 和express对比 koa的基本使用过程 const Koa require(koa)// 创建app对象 const app new Koa()// 注册中间件(middleware) // koa的中间件有两个参数: ctx/next app.use((ctx, next…

Apple Vision Pro:空间计算的未来已来,你准备好了吗?

“ 正如iPhone带我们进入移动计算时代&#xff0c;Apple Vision Pro将带我们进入空间计算时代。” 我虽然没有亲身体验&#xff0c;但观看了许多国内外第一批体验者的体验分享&#xff0c;看得出来&#xff0c;这些体验者都十分兴奋&#xff0c;根据他们的描述&#xff0c;我…

Mac安装zookeeper

文章目录 1.下载zookeeper安装包2.解压安装包3.修改配置文件4.启动服务端5.启动客户端 1.下载zookeeper安装包 https://archive.apache.org/dist/zookeeper/ 选择需要的版本下载 下载的时候要注意下载已经编译好的二进制版本 2.解压安装包 将下载的安装包解压到你想要的位…

基于Faster RCNN时间钢铁表面的缺陷检测

目标检测在许多行业中都有许多实际应用。大多数时候,在工业环境中,物体检测目标很小。因此,有效地训练目标检测模型变得非常困难。其中一个问题是钢材表面缺陷检测。即使使用深度学习,也很难高精度地解决问题。在本文中,我们将使用 PyTorch 库训练 Faster RCNN 对象检测模…

【3DsMAX】从零开始建房(5)

目录 1. 制作护栏 2. 制作梯子 3. 制作二层窗户 1. 制作护栏 选中顶部三条边线 点击“利用所选内容创建图形” 选择线性 此时我们就成功的创建了一个二维样条线 选中样条线上其中的一个点&#xff0c;移动点使线条缩短 缩小一点 渲染 同样的方法再制作一根 新建一个圆柱体 …

浅谈Spring Cloud OpenFeign

OpenFeign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用OpenFeign&#xff0c;可以做到使用HTTP请求访问远程服务&#xff0c;就像调用本地方法一样的&#xff0c;开发者完全感知不到这是在调用远程方法&#xff0c;更感知不到在访问HTTP请求。 Spring Cloud OpenFe…

临期食品电商 APP 的设计与开发

摘 要 &#xff1a; 在移动互联网和电子商务产业的快速发展中&#xff0c;越来越多的消费者开始慢慢的接触网上购 物&#xff0c;互联网经济的全面动员将席卷全球&#xff0c;各种电商应用将在时代的浪潮中层出不穷。在未来各国的 不断发展中互联网很可能会成为销售各种货物的…

在线商城前台开发环境配置

一、项目配置 node 15.14.0 官网下载 https://nodejs.org/zh-cn/download/releases npm 7.7.6 下载node后自动安装npm&#xff0c;如果版本不对就更换对应版本 npm install react7.7.6 下载项目源码 链接&#xff1a;https://www.123pan.com/s/bT07Vv-WICcv.html 解压到一…

【P50】JMeter 汇总报告(Summary Report)

文章目录 一、汇总报告&#xff08;Summary Report&#xff09;参数说明二、准备工作三、测试计划设计 一、汇总报告&#xff08;Summary Report&#xff09;参数说明 可以查看事务或者取样器在某个时间范围内执行的汇总结果 使用场景&#xff1a;用于评估测试结果 使用频率…

java boot将一组yml配置信息装配在一个对象中

其实将一组yml数据封进一个对象中才是以后的主流开发方式 我们创建一个springboot项目 找到项目中的启动类所在目录 在同目录下创建一个类 名字你们可以随便取 我这里直接叫 dataManager 然后 在yml中定义这样一组数据信息 然后 我们在类中定义三个和这个配置信息相同的字段…

全志V3S嵌入式驱动开发(触摸屏驱动)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 所谓的触摸屏&#xff0c;其实就是在普通的lcd屏幕之上&#xff0c;再加一层屏而已。这个屏是透明的&#xff0c;这样客户就可以看到下面lcd屏幕的…

想要提高办公效率,可以采用表单自定义工具

当前&#xff0c;随着社会的进步和科技的发展&#xff0c;表单自定义工具逐渐在现代化办公场所中得到重用和喜爱。因为它的灵活、简便、易操作等优势特性&#xff0c;使得其突破了传统表单制作工具的局限&#xff0c;成为广大中大型企业实现流程化管理和数字化进程的得力助手。…

UnityVR--组件5--Animation动画

目录 新建动画Animation Animation组件解释 应用举例1&#xff1a;制作动画片段 应用举例2&#xff1a;添加动画事件 Animator动画控制器 应用举例3&#xff1a;在Animator中设置动画片段间的跳转 本篇使用的API&#xff1a;Animation、Animator以及Animator类中的SetFlo…

程序语言排行榜有哪些

程序语言排名 程序语言排行NO.1Java Java是基于类的面向对象的编程语言&#xff0c;拥有跨平台、面向对象、泛型编程的特性&#xff0c;广泛应用于企业级Web应用开发和移动应用开发。任职于Sun Microsystems的詹姆斯高斯林等人于1990年代初开发Java语言的雏形&#xff0c;最初被…

超低功耗待机血压计语音IC方案,智能提示NV080C-S8

随着我国步入21世纪的步伐和改革开放的不断深入&#xff0c;我国医疗水平和人民的生活水平不断提高&#xff0c;致使我国已经成为了全球老龄化为严重的国家&#xff0c;老年人占据的比重越来越大&#xff0c;一些常见的却不容易治愈的老年性疾病的预防工作已成为现今确保老年人…

LVM逻辑卷元数据丢失恢复案例 —— 筑梦之路

Lvm常见的故障主要是pv出现异常&#xff0c;有以下几种情况 一个是pv所在的磁盘发生了lvm的元数据损坏一个是系统无法识别到pv所在的磁盘一个是系统异常&#xff0c;断电等导致重启后盘符发生变化&#xff0c;也就是系统识别的磁盘uuid发生变化&#xff0c;但是wwid还是可以对应…

4.6 Monitor概念

目录 1、对象头2、原理Monitor3、原理之Synchronized4、原理之Synchronized进阶1&#xff09;轻量级锁2&#xff09;锁膨胀3&#xff09;自旋优化4&#xff09;偏向锁5&#xff09;锁消除 1、对象头 64 位虚拟机 在加锁的过程中&#xff0c;Mark Word中的62位将会指向操作系统…

外包呆了5年终上岸,劝各位别去了...

有些测试员朋友找工作过程中问我&#xff0c;或者网上问有外包公司的offer&#xff0c;要不要去外包公司?在这里我结合我自己的经历和身边一些朋友的情况来谈谈这个问题。首先我呆过两家外包公司&#xff0c;并且身边有不少朋友是在外包公司工作。所以我只是尽量客观的分析这个…