智能烧水壶(WIFI版)03——温度采集和过温报警功能实现篇

2024-02-11 14:10

本文主要是介绍智能烧水壶(WIFI版)03——温度采集和过温报警功能实现篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

前面我们已经创建好产品并建立起app端和设备端的连接,接下来我们将实现智能烧水壶的温度采集和过温报警功能。

一、智能烧水壶的功能设定

  • 智能烧水壶的功能设定如下表,我们将整个智能烧水壶拆分成几个模块,逐个实现功能;本文实现烧水壶的温度采集和声音报警功能,温度采集主要用于水温的温控调节,当温度高于105摄氏度时说明水壶已经处于干烧状态,此时蜂鸣器进行声音报警。
功能说明
煮沸触摸按键1,触发方式:轻触。默认煮沸。
触摸按键控制煮沸键
app控制:煮沸
保温键触摸按键1,触发方式:轻触
轻触进入默认的自来水模式下的55度保温模式
指示灯按下煮沸键,煮沸灯亮,煮沸完成后灯灭。
按键保温键,温度未到(高于或低于)设定温度,保温键亮橙色;温度到设定温度,保温键亮绿色。
app设定保温,温度未到(高于或低于)设定温度,保温键亮橙色;温度到设定温度,保温键亮绿色。
按键提示按煮沸:按下红灯亮,松开灭。蜂鸣器滴一声提醒。
保温键:按下橙灯亮,松开灭。蜂鸣器滴一声提醒。
煮水模式app控制:纯净水模式,自来水模式。
默认自来水模式。
纯净水模式:直接加热到设定温度后恒温。
自来水模式:烧沸腾后凉值设定温度。
温度模式app控制。
恒温模式。
恒温模式:
可app设置温度45,55,70,90度(或者45-90度),选择后恒定在设定温度。默认55度。

二、温度采集的方案制定

1.温度采集原理

本案例中温度采集方案是使用热敏电阻,热敏电阻在不同温度下有不同的阻值,根据此特性,通过电路设计和软件程序配合采集到热敏电阻的阻值,从而计算出当前的温度值。
采样电路图如下:R8为10k的定值电阻,R6为热敏电阻(常温为100k阻值),ADC是电压采样点,采集电压后,根据欧姆定律即可算出热敏电阻的阻值。
在这里插入图片描述

  • 得到热敏电阻阻值Rt,根据B3950的热敏曲线即可算出当前温度值。
    在这里插入图片描述
    上图是该系列热敏电阻的热敏曲线
上述参数含义
R0:25℃下的电阻阻值  本文中选用的热敏电阻在25℃阻值为10k
R:当前温度下电阻的阻值
T0:开尔文温度(273.15+25)
T:开尔文温度(273.15+当前摄氏度温度)
B:	热敏特性常数
exp:e^n(e的n次方)
通过采样电路采样热敏电阻两端的电压,从而计算出R的阻值,再根据R的阻值计算当前的温度
R=R0 expB (1/T-1/T0) ||\/
T=1/(ln(R/R0)/B+1/T0)近似为T=1/(log(R/R0)/B+1/T0)
得到的T为开尔文温度,换算成摄氏度即
temp = T - 273.15

测温原理已经知道了,接下来是软件实现阶段。

2.软件方案设定

上一篇文章我们对现有的tuya_demo_template工程进行了修改,实现了一个基础的嵌入式框架,现在我们在此基础上进行开发,实现温度采集功能。

  • 所用的SOC引脚图如下:
    在这里插入图片描述
  • 温度采集方案设定
    根据上面所述的测温原理可以知道,我们需要使用AD采集功能,测量出热敏电阻的两端电压;故我们使用所选SOC自带的ADC采样功能进行电压采集,此SOC自带12位精度的ADC,可以满足我们的采样精度。
    得到电压后,按照上述原理所推出的公式进行C语言代码实现,计算出当前温度值。
  • 无源蜂鸣器驱动。采用频率为5K的脉冲驱动蜂鸣器,本案例中蜂鸣器用于按键按下提示音以及高温报警功能。
引脚说明
TUYA_ADC2ADC
buzzer_pinP17

三、功能实现

1.代码实现

  • 在工程里建立几个文件,b3950.c 、kettle_app.c、timer.c、gpio_control.c,最后的文件组成如下:
├── src	
|    ├── tuya_drive
|    |  	└── b3950
|    |    		└── b3950.c           //温度传感器驱动相关
|    |  	└── gpio_control
|    |    		└── gpio_control.c           //gpio 控制相关
|    |  	└── timer
|    |    		└── timer.c           //定时器相关
|    ├── tuya_device.c             //应用层入口文件
|    └── kettle_app.c            //智能烧水壶主要应用文件
|
├── include				//头文件目录
|    ├── tuya_drive_h
|    |  	└── b3950_h
|    |    		└── b3950.h   
|    |  	└── gpio_control_h
|    |    		└── gpio_control.h           
|    |  	└── timer_h
|    |    		└── timer.h           //定时器相关   
|    ├── tuya_device.h                
|    └── kettle_app.h       
|
└── output              //编译产物

其中b3950.c文件中的内容主要是实现温度采集的代码,kettle_app.c 文件主要是智能烧水壶的应用代码,timer.c函数中是定时器的相关代码,主要用于驱动无源蜂鸣器的频率产生。

b3950.c中函数实现如下:

//初始化adc设备
void b3950_init(void)
{/*create adc device,get handle*/temper_adc = (tuya_adc_t *)tuya_driver_find(TUYA_DRV_ADC, TUYA_ADC2);/*adc_dev cfg*/TUYA_ADC_CFG(temper_adc, TUYA_ADC2, 0

这篇关于智能烧水壶(WIFI版)03——温度采集和过温报警功能实现篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/699986

相关文章

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python中将嵌套列表扁平化的多种实现方法

《Python中将嵌套列表扁平化的多种实现方法》在Python编程中,我们常常会遇到需要将嵌套列表(即列表中包含列表)转换为一个一维的扁平列表的需求,本文将给大家介绍了多种实现这一目标的方法,需要的朋... 目录python中将嵌套列表扁平化的方法技术背景实现步骤1. 使用嵌套列表推导式2. 使用itert

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

Python使用python-can实现合并BLF文件

《Python使用python-can实现合并BLF文件》python-can库是Python生态中专注于CAN总线通信与数据处理的强大工具,本文将使用python-can为BLF文件合并提供高效灵活... 目录一、python-can 库:CAN 数据处理的利器二、BLF 文件合并核心代码解析1. 基础合

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

golang版本升级如何实现

《golang版本升级如何实现》:本文主要介绍golang版本升级如何实现问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录golanwww.chinasem.cng版本升级linux上golang版本升级删除golang旧版本安装golang最新版本总结gola

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分