智能烧水壶(WIFI版)05——水温调节和灯光提示功能实现篇
前言
前面我们已经实现了烧水壶的按键功能,本文将实现烧水壶的煮沸、保温功能、灯光提示功能,同时实现按键触发烧水和煮沸。
一、智能烧水壶功能设定
- 智能烧水壶的煮沸功能、保温功能、灯光指示以及按键控制功能设定如下:
功能 | 说明 |
---|---|
煮沸 |
触摸按键1,触发方式:轻触。默认煮沸。 触摸按键控制煮沸键 app控制:煮沸 |
保温键 |
触摸按键1,触发方式:轻触 轻触进入默认的自来水模式下的55度保温模式 |
指示灯 |
按下煮沸键,煮沸灯亮,煮沸完成后灯灭。 按键保温键,温度未到(高于或低于)设定温度,保温键亮橙色;温度到设定温度,保温键亮绿色。 app设定保温,温度未到(高于或低于)设定温度,保温键亮橙色;温度到设定温度,保温键亮绿色。 |
按键提示 |
按煮沸:按下红灯亮,松开灭。蜂鸣器滴一声提醒。 保温键:按下橙灯亮,松开灭。蜂鸣器滴一声提醒。 |
煮水模式 |
app控制:纯净水模式,自来水模式。 默认自来水模式。 纯净水模式:直接加热到设定温度后恒温。 自来水模式:烧沸腾后凉值设定温度。 |
温度模式 |
app控制。 恒温模式。 恒温模式: 可app设置温度45,55,70,90度(或者45-90度),选择后恒定在设定温度。默认55度。 |
二、水温调节及灯光指示的方案制定
1.加热方案
本案例使用继电器控制加热电阻加热,通过控制继电器的关断实现水温的温度控制。
- 继电器控制电路如下:
通过控制P9引脚输出的高低电平控制继电器的关断。P9为高电平时,继电器闭合,烧水壶开始加热;P9为低电平时,继电器断开,烧水壶停止加热。
2.灯光提示功能设定
提示灯有三个,分别为红色灯、绿色灯、橙色灯,灯的引脚设定如下
led1 | P24 红色 led2 | P26 橙色 led3 | P6 绿色
灯光提示设定:
烧水壶状态 | 灯光显示 |
---|---|
配网时 | 绿灯闪烁 ,红、橙灯灭 |
加热时 | 煮沸灯亮,煮沸完成后灯灭 |
保温时 | 温度未到(高于或低于)设定温度,保温键亮橙色;温度到设定温度,保温键亮绿色 |
煮沸键灯光提示 | 按键按下红灯亮、松开红灯灭 |
保温键灯光提示 | 按键按下橙灯亮、松开橙灯灭 |
3. 按键触发功能设定
- 按键触发功能设定:
按键 | 触发功能 |
---|---|
煮沸键正常按下 | 按一下煮沸,再按一下取消煮沸 |
保温键正常按下 | 按一下保温,再按一下取消保温 |
保温键长按5秒 | 触发配网模式 |
具体的功能细节已经确定,现在我们开始实现这些功能。
三、功能实现
1.代码实现
1.继电器和led指示灯控制代码
- 在之前开发的基础上增加程序,填充gpio_control.c文件,实现继电器控制和灯光控制,
── src
| ├── tuya_drive
| | └── b3950
| | └── b3950.c //温度传感器驱动相关
| | └── gpio_control
| | └── gpio_control.c //gpio 控制相关
| | └── ts02n_key
| | └── ts02n_key.c //按键驱动
| | └── timer
| | └── timer.c //定时器相关
| ├── tuya_device.c //应用层入口文件
| └── kettle_app.c //智能烧水壶主要应用文件
|
├── include //头文件目录
| ├── tuya_drive_h
| | └── b3950_h
| | └── b3950.h
| | └── gpio_control_h
| | └── gpio_control.h
| | └── ts02n_key_h
| | └── ts02n_key.h //按键驱动
| | └── timer_h
| | └── timer.h //定时器相关
| ├── tuya_device.h
| └── kettle_app.h
|
└── output //编译产物
gpio_control.c增加代码及说明如下:主要是继电器、LED以及蜂鸣器的引脚初始化和相关的控制函数,其中绿灯直接复用配网状态指示灯。在控制逻辑的代码中根据需求调用这些函数即可。
#define led1_pin 24
#define led2_pin 26
#define buzzer_pin 17
#define relay_pin 14
//gpio引脚初始化
void kettle_gpio_init()
{//led pin inittuya_pin_init(led1_pin, TUYA_PIN_MODE_OUT_PP_HIGH);tuya_pin_init(led2_pin, TUYA_PIN_MODE_OUT_PP_HIGH);//buzzer pin inittuya_pin_init(buzzer_pin, TUYA_PIN_MODE_OUT_PP_LOW);//relay pin inittuya_pin_init(relay_pin, TUYA_PIN_MODE_OUT_PP_LOW);
}
//控制红灯亮灭,为提高效率,如果设置状态和上一次一致则不需要操控IO
void led1_set(IN BOOL_T bONOFF)
{static bool last_status = 0;if(last_status != bONOFF) {if(bONOFF == TRUE) {tuya_pin_write(led1_pin, TUYA_PIN_LOW);}else {tuya_pin_write(led1_pin, TUYA_PIN_HIGH);}last_status = bONOFF;}}
//控制橙灯亮灭,为提高效率,如果设置状态和上一次一致则不需要操控IO
void led2_set(IN BOOL_T bONOFF)
{static bool last_status = 0;if(last_status != bONOFF) {if(bONOFF == TRUE) {tuya_pin_write(led2_pin, TUYA_PIN_LOW);}else {tuya_pin_write(led2_pin, TUYA_PIN_HIGH);}last_status = bONOFF;}
}
//控制绿灯亮灭,直接使用配网提示灯的控制接口
void state_led_set(IN BOOL_T bONOFF)
{static bool last_status = 0;if(last_status != bONOFF) {if(bONOFF == TRUE) {tuya_set_led_light_type(wifi_led_handle, OL_LOW, 0, 0); //Turn on indicator light}else {tuya_set_led_light_type(wifi_led_handle, OL_HIGH, 0, 0); //Turn off indicator light}last_status = bONOFF;}
}
//控制加热继电器开关
void relay_set(IN BOOL_T bONOFF)
{static bool last_status = 0;if(last_status != bONOFF) {if(bONOFF == TRUE) {tuya_pin_write(relay_pin, TUYA_PIN_HIGH);}else {tuya_pin_write(relay_pin, TUYA_PIN_LOW);}last_status = bONOFF;}
}
2 .按键逻辑控制代码
代码思想:
水壶模式 | 触发 |
---|---|
boil(煮沸模式) |
按下煮沸键,煮沸灯亮,煮沸完成后灯灭。 水加热煮沸后,停止加热,同时切换到nature模式(即无操作) |
keep_warm_mode1(自来水保温模式) | 加热到煮沸,关闭继电器,然后切换到keep_warm_mode2模式 |
keep_warm_mode2(纯净水保温模式) |
温度未到(高于或低于)设定温度,保温键亮橙色 温度到设定温度,保温键亮绿色。 为防止继电器在临界温度时频繁关断,所以保温温度会有范围波动 |
干烧报警 | 温度高于105摄氏度,说明壶中缺水,蜂鸣器报警 |
- 在kettle_app.c中添加逻辑控制代码
//创建主应用线程
rt = tuya_hal_thread_create(NULL, "app_kettle_thread", 512*4, TRD_PRIO_4, app_kettle_thread, NULL);if (rt != OPRT_OK) {PR_ERR("Create app_kettle_thread error!: %d", rt); return;
}
//主应用线程代码,获取当前的水壶模式,然后进行相应的处理。
void app_kettle_thread(void)
{static int temp_work_status = 0;while(1){temp_work_status = get_kettle_work_status();//According to the different Settings of the corresponding processingswitch (temp_work_status) {case nature: {PR_DEBUG("nature");//Turn off the light when the temperature reaches the set valuestate_led_set(OFF); //Turn off the light when the temperature reaches the set valueled1_set(OFF); }break;case boil: {if(get_water_temperature() >= Boil_Temperature) {set_kettle_work_status(nature); //Switch to cool moderelay_set(OFF);led1_set(OFF);led2_set(OFF);set_dp_boil_value(0);report_one_dp_status(DP_BOIL);PR_DEBUG("boil->nature");}else {relay_set(ON);led1_set(ON);led2_set(OFF);state_led_set(OFF); }}break;//tap water keep warmcase keep_warm_mode1: {state_led_set(OFF);if(get_water_temperature() >= Boil_Temperature) {set_kettle_work_status(keep_warm_mode2);relay_set(OFF);led1_set(OFF);led2_set(ON);state_led_set(OFF); PR_DEBUG("keep_warm_mode1->keep_warm_mode2");}else {relay_set(ON); led1_set(OFF);led2_set(ON);state_led_set(OFF); PR_DEBUG("keep_warm_mode1 relay_set on");}}break;//clear water keep warmcase keep_warm_mode2: {//cur_temp > set temper close the heatingif(get_water_temperature() > (get_keep_wram_temperature() - 5)) { relay_set(OFF);led1_set(OFF);led2_set(ON);state_led_set(OFF); PR_DEBUG("keep_warm_mode2 relay_set 0");//cur_temp < set temper open the heating}else if(get_water_temperature() < (get_keep_wram_temperature() - 7)) { relay_set(ON);led1_set(OFF);led2_set(ON);state_led_set(OFF); PR_DEBUG("keep_warm_mode2 relay_set 1");}else {// cur_temp == set temper//It indicates that the temperature has reached the insulation valueled1_set(OFF);led2_set(OFF);state_led_set(ON); relay_set(OFF);}}break;default:break;}//干烧报警//Over temperature protection, Limiting_Temperature:105 lack water warningif(get_water_temperature() > Limiting_Temperature) {timer_init(); //buzzer on , Voice call the policeset_dp_fault_status(TRUE); //app display warningreport_one_dp_status(DP_FAULT);relay_set(OFF); //turn off relay}else {if(get_dp_fault_status() == TRUE) {set_dp_fault_status(FALSE);report_one_dp_status(DP_FAULT);}}tuya_hal_system_sleep(1000);}}
- 实现按键控制水壶模式切换
//煮沸按键:按下一次,水壶模式变为煮沸(boil),再按一下取消煮沸设定,水壶模式变为(nature)
void key1_cb_fun()
{ //Button press promptled1_set(OFF);buzzer_flag = 1;//Button press promptif(get_kettle_work_status() == boil) { //if current status is boil, close boiling set_kettle_work_status(nature);set_dp_boil_value(FALSE);report_one_dp_status(DP_BOIL);}else {set_kettle_work_status(boil);set_dp_boil_value(TRUE);report_one_dp_status(DP_BOIL);}}
//保温按键:按下一次,水壶模式变为保温模式(keep_warm_mode1/keep_warm_mode2),再按一下取消保温设定,水壶模式变为(nature)
void key2_cb_fun()
{//Button press promptled2_set(OFF);buzzer_flag = 1;//Button press promptif(get_kettle_work_status() == keep_warm_mode1) {//if current status is keep_warm_mode1,turn off insulation functionset_kettle_work_status(nature);set_dp_keep_warm_switch(0);report_one_dp_status(DP_KEEP_WARM);}else {set_kettle_work_status(keep_warm_mode1);//离线保温默认水质为自来水//tap water warm mode :1.boil -> 2.keep warm set_kettle_keep_warm_temper(Default_Warm_Temperature);//离线保温默认设置保温到55°set_dp_keep_warm_switch(1);report_one_dp_status(DP_KEEP_WARM);report_one_dp_status(DP_TEMP_SET);}}
- 此时烧水壶离线控制的基本功能已经实现,已经可以控制烧水和保温了;后面我们将实现云端控制功能。
下篇章节快速入口:
智能烧水壶(WIFI)06——云端控制篇
技术支持
您可以通过以下方法获得涂鸦的支持:
- 涂鸦智能IoT平台
- Demo中心
- 涂鸦智能开发者平台
智能烧水壶(WIFI版)05——水温调节和灯光提示功能实现篇相关推荐
- 智能烧水壶(WIFI版)04——TS02N触摸按键驱动篇
前言 本文主要内容是实现烧水壶的触摸按键驱动,触摸按键芯片选用TS02N. 一.智能烧水壶按键功能设定 智能烧水壶的按键功能设定如下,实现功能之前,我们首先要实现按键采集芯片的驱动. 功能 说明 煮沸 ...
- 智能烧水壶(WIFI版)01——硬件设计篇
一.概述 烧可饮用热水应该是大部分人生活中必不可少的一部分,但往往会发生想喝的时候来不及烧,烧完之后长时间未饮用,水变凉的尴尬情况.这时候如果拥有一款智能恒温烧水壶,可远程控制,支持保温模式还可支持预 ...
- 智能烧水壶(Bluetooth LE版)——硬件设计篇
一.概述 前面已经设计了一款Wi-Fi控制的智能烧水壶,为了满足不同使用群体的需求,又设计了一款蓝牙控制的智能烧水壶,硬件电路上兼容,只需要把Wi-Fi模块换成Bluetooth LE模块即可. 1. ...
- 微型计算机智能体重评测,华为智能体脂秤WiFi版评测:17项身体指标秒知道 与肥胖生活断舍离...
压力测试 现代人正处于高压的社会工作环境下,作为曾经体验过华为手环压力测试的小编我,惊喜的发现华为智能体脂秤WiFi版竟然支持压力检测! 这项功能是华为与中国科学院心理研究所联合研发,基于心率变异性( ...
- 微型计算机智能体重评测,荣耀智能体脂秤WiFi版评测:17项身体指标 比你更懂你...
本帖最后由 艾玛伍兹122 于 2019-8-16 16:45 编辑 2.不正经搞机社-660x200.jpg (104.36 KB, 下载次数: 0) 2019-8-16 16:25 上传 现代生活 ...
- wifi卡慢延迟高_健康生活好助手:华为智能体脂秤 WiFi 版 体验评测
点击右上角关注我们,每天给您带来最新最潮的科技资讯,让您足不出户也知道科技圈大事! 为了让自己严格执行减肥计划,一台体脂秤是肯定少不了的,只有时刻记住那个沉重的数字,管住嘴.迈开腿才会有动力. 不过随 ...
- 十分钟开发物联网:智能加湿器(Wifi版)
智能加湿器设备集成了温湿度传感器.加湿器控制单元.以及Wifi传输模块,ShineBlink万能核心板采集温湿度传感器数据,并将它们上传至机智云,然后我们就可以在远程通过手机App或者Web网页端来访 ...
- WT588F02KD-24SS语音芯片(数码管显示驱动ic)在多功能烧水壶的应用设计方案
WT588F02KD-24SS语音芯片(数码管显示驱动ic)在多功能烧水壶的应用设计方案 现代人除了写字楼及个别家庭在使用饮水机消费纯净水或蒸馏水外,大多数的家庭仍然是饮用烧开的自来水.而早前流行于欧 ...
- 智能恒温水壶系统设计_如何安装和设置Ecobee智能恒温器
智能恒温水壶系统设计 A smart thermostat is a great accessory to have in your house, not only to be able to adj ...
最新文章
- Android逆向之路---脱壳360加固
- 一个实验教会你配置IPv6地址
- python-ConfigParser模块【读写配置文件】
- 8idmp导入oracle 11g,11g导入8i的dmp文件问题
- SSH整合中,使用父action重构子类action类.(在父类中获取子类中的泛型对象)
- 老司机教你分析日志:分析用户的地理位置信息
- C++:构造函数的重载
- php7.0 freetype_php7.0.5安装教程
- tp中自定义跳转页面
- 排序算法-冒泡排序(入门级别)
- Hibernate.cfg.xml 整理
- Intel HM55 AHCI 驱动 安装指南
- 财会法规与职业道德【2】
- 立锜1.2V~5.5V稳压芯片RT9078-33GJ5
- 推荐学习法——思维导图
- Soul源码总结-01-20
- node.js使用puppeteer来html生成pdf
- SPOOL_INTERNAL_ERROR
- iReport学习一:中文字体显示
- 中国书法艺术会消亡吗?