改造一台智能空气净化器【APP控制,滤芯NFC识别、寿命计算】

简介: 本文方案在保持原始功能的同时改善了净化强度工作方式,增加滤芯寿命计算功能。可以自动检测空气中有害物质的浓度,根据污染浓度实时自动调节净化强度,还能检测空气净化器滤芯使用情况,计算滤芯使用寿命,提醒更换滤芯等功能。

先附上源码:
[github]: “空气净化器demo

一. 硬件方案

1. 硬件框图

在这里插入图片描述

2. 特性描述

  • 主控模块主控模块采用涂鸦自研的WBRU模组,用于控制整机运行,包括按键检测,LED指示,负载控制,数据通讯等工作
  • 采用四合一粉尘传感器实时测量输出温湿度、VOC 浓度、PM1.0/PM2.5 /PM10质量浓度
  • 蜂鸣器采用压电式无源蜂鸣器,通过模组输出相应频率PWM信号驱动
  • 微动开关可以防止误打开滤芯所在后盖
  • 光敏传感器可以检测环境光线强度,自动调节显示亮度
  • LED可直观显示定时、异常警报等信息
  • NFC读卡器可以有效检测滤芯的匹配情况与使用寿命

3. 设计方案

3.1 主控单元

本方案选用一款低功耗WBRU模组作为主控板,并基于该模组进行SoC开发;实现电机控制和传感器数据采集。

alt

3.2 电机控制

空气净化器的风机是由选用稻津的 MI-JK48HM710,控制信号主要由PWM、FG、BRK,控制信号与模组之间通讯需进行电平转换。

alt

3.3 按键与感光传感器

​ 系统有两个按键,主按键: 长按开关机,短按切换不同的工作模式(自动,睡眠,最爱);屏幕按键: 短按切换屏幕和指示灯的状态(PM2.5,PM10,TVOC,温度,湿度,关), 长按进入配网模式。系统中有一个光敏二极管,用于控制夜间光线较暗时显示的亮度。

alt

3.4 显示电路

​ 方案使用一个TM1650驱动IC来驱动一个3位8段数码管和5个模式指示灯。数码管用于显示空气指标,通过屏幕按键控制,分别为PM2.5数据,PM10数据,TVOC数据,温度,湿度。

alt

3.5 NFC驱动

方案使用MFRC522,它是高度集成的非接触式读写卡芯片,可根据不同主机接口实现SPI、串行UART、I2C协议通讯。方案中使用SPI通讯来实现滤芯NFC检测功能(通过NFC判断滤芯工作时间,以及是否更换新滤芯)。

alt

alt

3.6 四合一传感器驱动

AM1002 是一款高性价比的多参数空气质量传感器集成模组,能够实时测量输出温湿度、VOC 浓度、PM1.0/PM2.5 /PM10 质量浓度。

alt

3.7 电源

​ 方案使用 LOWPOWER(微源半导体)的lp6498ab6f输出5V给一些传感器供电,ASM1117由5V转3.3V给模组供电,供电电流不低于150mA。lp6498ab6f的规格如下:最大输入电压4.530V;输出电压范围0.812V。开关频率600KHZ,最大持续电流可达1.2A。

alt

3.8 其他驱动

​ 此外,还有蜂鸣器,UV灯,以及机械微动开关用于仓门检测。

在这里插入图片描述

在这里插入图片描述

alt

4. 原理图与PCB

alt

alt

alt

二. 整机搭建

1. 实物展示图

alt

三. 嵌入式功能实现

1. 功能需求

**产品功能简述:**有自动、手动、睡眠三种模式,可以通过按键和APP选择切换。其中自动模式会根据环境自动控制风扇转速、UV灯、屏幕灯光等;还可以通过NFC检测滤芯是否安装,并读取滤芯生产信息;同时能够智能计算滤芯寿命。

功能 说明
设备功能 1. 主按键: 长按开关机,短按切换不同的工作模式(自动、手动、睡眠)。
2. 屏幕按键: 短按切换屏幕和指示灯的状态(PM2.5,PM10,TVOC,温度,湿度,关), 长按进入配网模式。
3. 显示屏:三位断码屏,显示空气指标,通过屏幕按键控制,分别为PM2.5数据、PM10数据、TVOC数据、温度、湿度。
4. 蜂鸣器:按键音及报警提醒。
5. 如果滤芯仓门是打开的,则设备断电不工作。
6. NFC芯片:每次开机,检测滤芯NFC是否存在,读取滤芯信息并上报。
APP功能 1. 总开关。
2. 童锁:APP上开启后,设备端按键无法使用。
3. 静音:APP上开启后,设备端按键静音。
4. 定时:APP上设置后,启动定时开关功能。
5. 智能杀菌:需要APP手动开启。
6. 空气指标显示:分别为PM2.5数据、PM10数据、TVOC数据、温度、湿度。
7. 滤芯寿命显示及重置,支持APP手动重置,也支持NFC识别后自动重置。
8. 工作模式:自动模式,手动模式,睡眠模式三种。
自动模式,运行自动模式功能。
手动模式,可以手动设置此模式下的风速档位。
睡眠模式,进入睡眠档位20%风速,屏幕LED灯关闭。
9. 风速档位:睡眠(20%),低(40%),中(70%),高(100%)。
智能功能 1. 自动模式—风扇自动调节功能。
2. 自动模式—环保功能:当室内空气质量优(0-35)且保持一段时间(2h)时,关闭风扇,以节省能源,如果PM2.5再次超过35,则启动风扇自动调节。
3. 自动模式—睡眠功能:当光线传感器检测到房间已经变暗,设备自动关闭灯光和屏幕。此时如果空气质量优保持一段时间时(30min),则风扇降为最低档位(20%风速)。
4. 智能杀菌功能:温度20°以上,湿度65%以上,且近4h无触发过杀菌(开启UV灯),则开启UV杀菌持续1h。
5. 滤芯NFC检测功能:检测滤芯是否存在,并读取滤芯类别和生产信息,可防盗版。
6. 滤芯寿命智能计算功能:智能计算滤芯的粉尘累计吸附量,得到滤芯剩余寿命,并根据粉尘吸附速度和设备使用频率估算滤芯剩余可用时间。
配网功能 通用Wi-Fi+BLE配网,长按配网按键重置配网。

2. 环境搭建

2.1 开发环境搭建

(1)开发环境搭建可以参考Wi-Fi 模组二次开发教程——1. SoC开发环境搭建。如果已经有虚拟机和乌班图的开发环境可直接跳至4.2 下载编译依赖工具处进行剩余环境搭建。

(2)产品创建可以参考Wi-Fi模组二次开发教程——2. 涂鸦IoT平台介绍。创建产品后,添加产品标准功能DP点和自定义功能DP点。空气净化器DP点如下表。

(3)参考Wi-Fi模组二次开发课程——3. 快速上手来完成代码修改编译、固件上传、获取token、烧录授权和设备配网。

2.2 功能DP点
DP ID 功能点 标识符 数据传输类型 数据类型 功能点属性
1 开关 switch 可下发可上报 bool
2 PM2.5 pm25 只上报 value 数值范围: 0-700,间距: 1, 倍数: 0,单位: ug/m3
3 模式 mode 可下发可上报 enum 枚举值: manual, auto, sleep
4 风速 fan_speed_enum 可下发可上报 enum 枚举值: sleep, low, mid, high
5 滤芯寿命 filter_life 只上报 value 数值范围: 0-100,间距: 1, 倍数: 0,单位: %
7 童锁 child_lock 可下发可上报 bool
8 灯光 light 可下发可上报 bool
9 UV杀菌 uv 可下发可上报 bool
11 滤芯复位 filter_reset 可下发可上报 bool
12 室内温度 temp_indoor 只上报 value 数值范围: -20-50,间距: 1, 倍数: 0,单位: ℃
13 室内湿度 humidity 只上报 value 数值范围: 0-100,间距: 1, 倍数: 0,单位: %
14 TVOC tvoc 只上报 value 数值范围: 0-999,间距: 1, 倍数: 0,单位: ug/m3
16 滤芯剩余天数 filter_days 只上报 value 数值范围: 0-1000,间距: 1, 倍数: 0,单位: day
17 累计工作时间 runtime_total 只上报 value 数值范围: 0-5256000,间距: 1, 倍数: 0,单位: min
18 倒计时 countdown_set 可下发可上报 enum 枚举值: cancel, 1h, 2h, 3h, 4h, 5h
19 倒计时剩余时间 countdown_left 只上报 value 数值范围: 0-360,间距: 1, 倍数: 0,单位: min
20 累计吸收颗粒 pm_total 只上报 value 数值范围: 0-10000000,间距: 1, 倍数: 0,单位: mg
22 故障告警 fault 只上报 fault 故障值: e1, e2
23 温标切换 temp_unit_convert 可下发可上报 enum 枚举值: c, f
101 PM10 pm10 只上报 value 数值范围: 0-999,间距: 1, 倍数: 0,单位: ug/m3
102 滤芯种类 filter_type 只上报 enum 枚举值: standard, Antibacterial, Aldehyde_removal, Professional
103 静音 sound_switch 可下发可上报 bool

3. 总体设计

3.1 模块划分

对功能需求进行分析梳理后,可将空气净化器demo程序划分为以下八大模块:

No. 模块 处理内容
1 外设驱动组件 按键、电机、段码显示屏、NFC读卡器、空气质量传感器等驱动程序
2 设备基础服务 设备开关、状态处理、模式切换、本地定时等
3 显示处理服务 段码液晶屏显示空气指标数据、LED灯指示段码屏显示的空气指标内容
4 环境检测服务 检测空气质量环境、光线亮暗情况
5 数据计算处理 自动风扇转速算法滤芯寿命和粉尘吸附量的计算和存储、滤芯NFC数据解析
6 用户事件处理 按键事件检测和处理、仓门开关事件检测和处理
7 定时事件处理 各定时事件的判断和处理
8 联网相关处理 配网相关处理、数据上报与接收处理、云端时间获取
3.2 代码结构
tuya_air_cleaner_demo
├── platform             /* 涂鸦通用 Tuya IoTOS SDK 的开发编译环境和工具链 */
├── sdk                  /* 存放涂鸦通用 Tuya IoTOS SDK 的头文件和库文件 */
└──  app                 /* 存放涂鸦通用 Tuya IoTOS SDK 的 demo */
    ├── src              /* 源文件目录 */
    │   ├── common
    │   │   ├── tuya_device.c                     /* 应用层入口 */
    │   │   ├── tuya_dp_process.c                 /* DP上下发处理 */
    │   │   ├── tuya_iot_funtion.c                /* 连接IOT云 */
    │   │   └── tuya_key_funtion.c                /* 按键处理 */
    │   ├── driver
    │   │   ├── mfrc522
    │   │   │   ├── tuya_mfrc522_app.c            /* NFC芯片mfrc522中间层驱动 */
    │   │   │   └── tuya_mfrc522.c                /* NFC芯片mfrc522驱动 */
    │   │   ├── tm1650
    │   │   │   ├── soc_i2c.c                     /* 软件I2C模拟驱动 */
    │   │   │   ├── tm1650_app.c                  /* 液晶显示屏芯片tm1650中间层驱动 */
    │   │   │   └── tm1650.c                      /* 液晶显示屏芯片tm1650驱动 */
    │   │   ├── tuya_buz_driver.c                 /* 蜂鸣器驱动 */
    │   │   ├── tuya_hardware_driver.c            /* 硬件GPIO驱动 */
    │   │   ├── tuya_lcd_display.c                /* 液晶屏应用层驱动 */
    │   │   └── tuya_motor_driver.c               /* 风扇电机驱动 */
    │   └── function
    │       ├── tuya_air_quality_funtion.c        /* 空气质量获取和显示功能 */
    │       ├── tuya_automatic_mode_funtion.c     /* 自动模式相关功能 */
    │       ├── tuya_countdown_funtion.c          /* 倒计时功能 */
    │       ├── tuya_filter_funtion.c             /* 滤芯寿命相关功能 */
    │       ├── tuya_mode_funtion.c               /* 模式切换相关功能 */
    │       ├── tuya_nfc_funtion.c                /* 滤芯NFC检测相关功能 */
    │       └── tuya_timer_funtion.c              /* Timer相关功能 */
    └── include
        ├── common
        │   ├── tuya_device.h
        │   ├── tuya_dp_process.h
        │   ├── tuya_iot_funtion.h
        │   └── tuya_key_funtion.h
        ├── driver
        │   ├── mfrc522
        │   │   ├── tuya_mfrc522_app.h
        │   │   └── tuya_mfrc522.h
        │   ├── tm1650
        │   │   ├── soc_i2c.h
        │   │   ├── tm1650_app.h
        │   │   └── tm1650.h
        │   ├── tuya_buz_driver.h
        │   ├── tuya_hardware_driver.h
        │   ├── tuya_lcd_display.h
        │   └── tuya_motor_driver.h
        └── function
            ├── tuya_air_quality_funtion.h
            ├── tuya_automatic_mode_funtion.h
            ├── tuya_countdown_funtion.h
            ├── tuya_filter_funtion.h
            ├── tuya_mode_funtion.h
            ├── tuya_nfc_funtion.h
            └── tuya_timer_funtion.h
3.3 应用框架

下图所示为基于 Tuya Wi-Fi SDK 的应用框架:

  • Platform:所使用的芯片平台,芯片 + 协议栈由芯片公司维护。

  • Port:Tuya Wi-Fi SDK 所需要的抽象接口,需要用户根据具体的芯片平台移植实现。

  • Tuya Wi-Fi SDK : 封装了涂鸦 Wi-Fi 通信协议,提供构建涂鸦 Wi-Fi 应用所需的服务接口。

  • Application:基于Tuya Wi-Fi SDK 构建的应用。

  • Tuya SDK API:API用于设备实现Wi-Fi相关的管理、通信等,API的调用将采用基于消息的异步机制,API的执行结果将会以 Message 或者 Call back 的方式通知给设备的 Application。

  • SDK Config:Tuya Wi-Fi SDK 可裁剪可配置,通过配置文件中的宏定义可将 Tuya Wi-Fi SDK 设置成不同模式,例如配置成适用于多协议设备的通用配网模式、单模配网模式、是否使用 OS 等。

  • Main Process:为 Tuya SDK API 的主引擎,Application 需要一直调用,如果 Platform 架构是带OS的,Tuya Wi-Fi SDK 会基于 Port 层提供的OS相关接口自动创建一个任务用于执行Main Process,如果是非OS平台,需要设备 Application 循环调用。

  • Message or Call back:SDK 通过 Message 或者设备 Application注册的 Call back 函数向设备 Application 发送数据(状态、数据等)。

3.4 驱动软件模块

3.5 方案流程图

(1)模式选择功能流程图:

模式流程图.drawio

(2)按键功能流程图

(3)滤芯检测流程图

4. 功能实现

4.1 外设驱动
4.1.1 段码液晶屏

段码液晶屏由 3 * 8 断码屏和 5 个指示灯构成,分别对应PM2.5,PM10,TVOC,温度,湿度。

其中外挂驱动芯片 TM1650,I2C 通信,本文demo中使用 2 * GPIO 模拟 I2C 。

段码液晶屏部分代码:

/**
* @brief: tuya_lcd_show_num
* @desc: show num on lcd
* @param[in] number:-99<number<999
* @return OPERATE_RET  OPRT_OK is sucess, other is fail
*/
OPERATE_RET tuya_lcd_show_num(IN INT_T number)
{
   
    OPERATE_RET op_ret = OPRT_OK;
    MINUS_FLAG_E minus_flag = MINUS_NULL;
    UCHAR_T i = 0;
    UCHAR_T bit[3];

    if (number > MAX_NUM) {
   
        number = MAX_NUM;
    }
    if (number < MIN_NUM) {
   
        number = MIN_NUM;
    }
    if (number < 0) {
   
        if (number > -10) {
     //-10<number<0
            minus_flag = MINUS_TEN;
        } else {
                //-100<number<-10
            minus_flag = MINUS_HUNDRED;
        }
        number = number * (-1);
    }

    bit[0] = number / 100 % 10;  //hundred
    bit[1] = number / 10 % 10;   //ten
    bit[2] = number % 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值