本文主要是介绍智能烧水壶(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_ADC2 | ADC |
buzzer_pin | P17 |
三、功能实现
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——温度采集和过温报警功能实现篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!