飞道的博客

HaaS年度经典案例:HaaS抗疫测温仪

286人阅读  评论(0)

1、背景

在新冠舆情肆虐的今天,人们从来没有如此关注自己和身边人的体温,只要一听到有人发高烧那必定远远躲开。现在去公共场所,在入口的地方也必定需要进行测温。那作为工程师,就想到DIY一个云端一体测温仪。

能持续不断地监控家庭成员 和 到访朋友的温度哦,如果温度异常蜂鸣器就会警报,并且可推送消息到您的手机端。

 

2、方案

2.1、硬件选型

硬件就选用HaaS EDU K1做为一个主要模块。HaaS EDU K1集成阿里专用高性能MCU-HaaS1000,支持双频2.4G/5G Wi-Fi, BT5.0/BLE5.0,丰富的传感器,包含9轴运动传感器,磁力计,温湿度,大气压,光照,声音等传感器,双屏配置,适应各种场景,自带1200mA可充电锂电池,可脱离外接电源使用,标配type-c接口,充电/烧录/串口调试一口搞定。更重要的是有外接扩展接口,非常方便的可以扩展外部的传感器或其他器件。

同样的选用HaaS100的话,除了需要单独外接屏幕外,其他都是完全一致的。

由于HaaS EDU K1内置的温湿度只能测量内部的温度,无法测量人的体温。所以这里选用GY-906红外测温传感器模块,他是开源硬件平台上常用的红外测温模块。

这样的话,HaaS EDU K1搭配GY-906就形成一个简单的红外测温仪。

 

2.2、原理

测温方式一般可分为接触式和非接触式,接触式测温只能测量被测物体与测温传感器达到热平衡后的温度,所以响应时间长,且极易受环境温度的影响。而红外测温是根据被测物体的红外辐射能量来确定物体的温度,不与被测物体接触,具有影响动被测物体温度 分布场,温度分辨率高、响应速度快、测温范围广、不受测温上限的限制、稳定性好等特点。

由于物体红外辐射能量的大小和波长的分布与其表面温度关系密切,因此通过对物体自身红外辐射的测量,能准确地确定其表面温度,红外测温就是利用这一原理测量温度的。红外测温器由光学系统、光电探测器、信号放大器和信号处理及输出等部分组成。

GY-906红外测温传感器模块内部有一个MLX90614模块,他是一个通用的红外测温模块,他在出厂前改模块已进行了校验及线性化,具有非接触,体积小,精度高,成本低等优点。非常适合用在手持设备及医疗设备中。

 

3、制作

3.1、物料

材料清单

图片

购买链接

HaaS EDU K1

即将上市开售

GY-906红外测温传感器模块 

购买链接

杜邦线

母对母10CM:链接1链接2链接3

 

3.2、组装

GY-906的管脚只有四个,名称和功能如下

名称

功能

VIN

电源, 可直接使用3.3伏供电

SCL

SMBus接口的时钟信号

SDA

PWM或者SMBus接口的时钟信号

GND

电源地

MLX90614支持PWM和SMBus方式,实际使用中, 发现SMBus能和I2C协议兼容,可以直接接CPU的I2C。本文中就采用SMBus方式。

HaaS EDU K1扩展接口中有I2C1接口,可以直接用,完整的接线如下所示

 

HaaS EDU K1 引脚

GY-906引脚

VCC_3V3 (2)

VIN

GND(30)

GND

I2C_SCL1(15)

SCL

I2C_SDA1(17)

SDA

 

3.3、云端配置

参考文章《阿里云物联网平台快速入门实践》创建一个名叫“HaaS抗疫测温仪”的产品,并添加一个设备“HaaS_Temp0”,并且有人体温度这个属性。

 

3.4、软件编码

HaaS EDU K1开源代码中有一个application/exaple/edu_demo,里面是出厂时随机示例程序的代码。本案例直接在此代码上新增软件编码。

3.4.1 读取温度

新增一个mlx90614.h和mlx90614.c, 读取温度的代码在mlx90614.c中


  
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "aos/hal/i2c.h"
  4. #include "mlx90614.h"
  5. static i2c_dev_t i2c_dev;
  6. void mlx90614_init(void)
  7. {
  8.    i2c_dev.port                 = 1;
  9.    i2c_dev.config.address_width = I2C_HAL_ADDRESS_WIDTH_7BIT;
  10.    i2c_dev.config.freq          = I2C_BUS_BIT_RATES_100K;
  11.    i2c_dev.config.mode          = I2C_MODE_MASTER;
  12.    i2c_dev.config.dev_addr      = SLAVE_ADDR;
  13.    hal_i2c_init(&i2c_dev);
  14. }
  15. uint16_t mlx90614_readreg(uint8_t regAddr) {
  16.     uint16_t data;
  17.     uint8_t in_buff[ 3];
  18.     int32_t ret0 = -1;
  19.    ret0 =  hal_i2c_mem_read(&i2c_dev, i2c_dev.config.dev_addr, regAddr,
  20.                         1, in_buff, 3, 1000);
  21.    data = (in_buff[ 1] << 8 | in_buff[ 0]);
  22.     return data;
  23. }
  24. float mlx90614_readtemp(uint8_t regAddr) {
  25.     float temp;
  26.     uint16_t data;
  27.    data = mlx90614_readreg(regAddr);
  28.    temp = data* 0.02 - 273.15;
  29.     return temp;
  30. }

3.4.2 本地显示

用于本地OLED显示的代码在thermometer.c中,按HaaS EDU K1示例框架代码增加thermometer_task 这个任务,里面每隔1秒去读取温度的值。并提供对外的获取温度的接口,外部需要比每次一秒更加高的频率来获取温度。而且可以增加当温度超过正常值蜂鸣器报警等功能。


  
  1. void thermometer_task(void)
  2. {
  3.     float temp;
  4.     uint8_t temp_str[ 10];
  5.     while ( 1)
  6.    {
  7.        temp = mlx90614_readtemp(RAM_TOBJ1);
  8.         sprintf(temp_str, "T : %5.1fC", temp);
  9.        OLED_Icon_Draw( 14, 4+ 20, &icon_thermo_24_24, 0);
  10.        OLED_Show_String( 42, 8+ 20, temp_str, 16, 1);
  11.        OLED_Refresh_GRAM();
  12.        temp_notify = temp;
  13.        aos_msleep( 1000);
  14.    }
  15. }
  16. float get_temp()
  17. {
  18.     return temp_notify;
  19. }

3.4.3 上传云端

HaaS EDU K1上传数据到阿里云物联网平台只要是使用Linkkit这个SDK。这个每个600ms去读取一次温度,并上报到云端,在这里为了避免数据太多,可以过滤掉正常数据,比如只有当温度值大于37.5°C时才上传到云端。


 


  
  1. void report_temp(void)
  2. {
  3.     float temp = 0;
  4.     int res = 0;
  5.     char property_payload[ 30] = { 0};
  6.    temp = get_temp();
  7.    LOGI( "APP", "temp -> %f\n",temp);
  8.     //if(temp > 37.5){
  9.        HAL_Snprintf(property_payload, sizeof(property_payload), "{\"BodyTemperature\": %5.1f}", temp);
  10.        res = IOT_Linkkit_Report(EXAMPLE_MASTER_DEVID, ITM_MSG_POST_PROPERTY,
  11.                                    ( unsigned char *)property_payload, strlen(property_payload));
  12.   // }
  13. }

HaaS EDU K1本身自带wifi, 通过类似如下命令完成wifi联网,之后会自动连接云云端。

netmgr -t wifi -c haas-open 12345678

连上后,可以在云端查看到上传的温度。

 

4、总结

本案例通过HaaS EDU K1和GY-906红外测温模组,非常简单就制作了一个云端一体的抗疫测温仪。随时随地地保护您和家人的健康。从这个案例可以看出HaaS软硬件积木,硬件积木组合方便,且天生自带连云功能,是您学习开发非常好的助手。

5、开发者技术支持

如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号

更多技术与解决方案介绍,请访问阿里云AIoT首页https://iot.aliyun.com/


转载:https://blog.csdn.net/HaaSTech/article/details/113780315
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场