搭建个人智能家居 8 - MLX90614红外测温

前言

到目前为止,我们这个智能家居系统添加了5个外设,分别是:LED灯、RGB灯、DHT11温度传感器、SGP30和PMS5003空气颗粒物检测传感器。今天再添加一个测温类的传感器 — “MLX90614红外测温传感器”,这个红外测温传感器可以实现短距离非接触式测温,在这个系统中可以用作人体测温、某些无法实现接触测温的场景等。

前文回顾:

搭建个人智能家居 开篇(搭建Home Assistant)
搭建个人智能家居 2 -安装ESPHome
搭建个人智能家居 3 -第一个设备“点灯”
搭建个人智能家居 4 -WS2812B-RGB灯
搭建个人智能家居 5 -DHT11温湿度测量
搭建个人智能家居 6 -SGP30 CO₂与TVOC测量
搭建个人智能家居 7 - 空气颗粒物检测

在这里插入图片描述

MLX90614红外测温

在这里插入图片描述

以前用arduino nano和MLX90614做过一个触发式非接触人体测温实验,想着也可以把MLX90614加到这个智能家居系统里,可以实时非接触的测量某个物体的温度。MLX90614除了做人体测温外还可以测量其他物体的温度,这就需要了解一下红外测温的原理:
红外测温的原理是将被测物体发射的红外线具有的辐射能转变成电信号。红外线辐射能量的大小与物体本身的温度是相关联的,根据转变成电信号大小,就可以确定物体的温度。所有在零度以上的物体都会自行辐射出红外线,红外测温身边的作用就是收集物体发射的红外线。
发射率:
不同的物体测温发射率不一样,如果用MLX90614在不更改发射率的前提下,分别测量一个表面光滑和一个表面粗糙,且温度相同的两个物体,测出来的读数是不一样的。因为两个物体对能量的反射不同。影响发射率的主要因素有:材料种类、表面粗糙度、理化结构和材料厚度等。
黑体是一种理想化的辐射体,它吸收所有波长的辐射能量,没有能量的反射和透过,所以它的表面的发射率为 1 ,但是我们需要测量的东西不一定是黑体,所以在使用MLX90614测温时需要先确定被测物体的测温发射率。
本文以测量人体温度展开实验,测人体温度时发射率一般设置为0.95较为合适。其他物体可以在网上搜索“红外测温发射率参照表”来查找。
在这里插入图片描述这是在网上找到的别人整理出来的测温发射率表格,可用作参考。

ESPHome

进入正题,打开ESPHome控制台编写Yaml文件。
步骤不赘述了,见:
搭建个人智能家居 2 -安装ESPHome
由于MLX90614是I2C通讯的,所以我们先要定义I2C总线,这个系统中前面在添加“SGP30”的时候有定义过I2C总线,如果没有定义的可以参考一下定义I2C总线,下面定义的是软件的I2C,如果IO口占用了可自行更改。

#I2C总线定义
i2c:
  - id: bus_a 
    sda: GPIO12
    scl: GPIO13
    scan: true

其中“id”就相当于定义的这条I2C总线的名字,后面实验直接用这个“id”即可调用;
“sda”和“scl”是定义这总线占用的IO口;
“scan”为是否开启搜索I2C地址空间;
总线速度可以通过“frequency”关键字来设置。

MLX90614测温

#MLX90614
  - platform: mlx90614
    i2c_id: bus_a
    object:
      name: MLX90614
      emissivity: 0.95
    update_interval: 1s

注意这一段代码需要放在Sensor类的后面,否则会报错,因为MLX90614是归属于Sensor类。
可以看到上面的代码中“emissivity”发射率设置的是0.95,因为本文以测人体为例所以设置的是0.95的发射率。如果不填的话默认发射率是1,不适合测量人体温度。测量其他物体需要自行更改发射率。
上面代码中“object”为测量目标对象温度的实体,如果需要测量环境温度的可以加上/更改“ambient”实体。如:

#MLX90614
  - platform: mlx90614
    i2c_id: bus_a
    object:
      name: MLX90614
    ambient:
      name: MLX90614_AM
      emissivity: 0.95
    update_interval: 1s

以上代码是输出目标对象温度和环境温度,更新时间间隔为1秒。
update_interval”为更新时间设置可按自己的需求更改。

系统至今完整代码

captive_portal:
    

#I2C总线定义
i2c:
  - id: bus_a 
    sda: GPIO12
    scl: GPIO13
    scan: true


#UART串口定义
uart:
   tx_pin: GPIO19
   rx_pin: GPIO18
   baud_rate: 9600
   id: uart_1
    


#Bin_LED    
light:
  - platform: binary
    name: "led"
    output: bin_led



#WS2812_RGB
  - platform: neopixelbus
    type: GRB
    variant: WS2812
    pin: GPIO4
    num_leds: 25
    name: "RGB_LED"




output:
  - id: bin_led
    platform: gpio
    pin: GPIO2 


#DHT11
sensor:
  - platform: dht
    pin: GPIO5
    temperature:
      name: "Current temperature"
    humidity:
      name: "Current humidity"
    model: DHT11
    update_interval: 10s


#SGP30
  - platform: sgp30
    i2c_id: bus_a
    address: 0x58
    eco2:
      name: "Roome eCO2"
      accuracy_decimals: 1
    tvoc:
      name: "Roome TVOC"
      accuracy_decimals: 1
    baseline:
      eco2_baseline: 0x86C5
      tvoc_baseline: 0x8B38
    #store_baseline: yes
    update_interval: 1s



#PMS5003
  - platform: pmsx003
    type: PMSX003
    pm_2_5:
      name: "PM2.5 concentration"
    uart_id: uart_1



#MLX90614
  - platform: mlx90614
    i2c_id: bus_a
    object:
      name: MLX90614
      emissivity: 0.95
    update_interval: 1s

编译生成固件
在这里插入图片描述
烧录到ESP32
在这里插入图片描述
关于接线
MLX90614的SDA引脚接ESP32的D12,SCL引脚接ESP32的D13;如果这个I2C总线原来就接有设备并且地址不同,可以把两个设备的数据线并联起来。如果地址一样就再定义一个I2C总线吧。

Home Assistant

打开HomeAssistant控制台
步骤不赘述了,见:
搭建个人智能家居 开篇(搭建Home Assistant)
搭建个人智能家居 3 -第一个设备“点灯”
在这里插入图片描述
启动HomeAssistant后进入控制台,发现已经把MLX90614红外测温这个实体刷新出来了。
在这里插入图片描述
距离5MM测量耳后处温度,测量温度98.6℉左右 98.6℉换算成摄氏度为37℃。
在这里插入图片描述
前段时间由于某些问题,重装了系统,丢失了一些文件导致原名称为BIN_LED的项目文件挂掉了,所以新建了个项目名称为“NEW_ROOM”接着干。

系统现况

在这里插入图片描述

结束

前面有收到小伙伴门反馈HomeAssistant安装后在浏览器打不开,关于这个问题,如果是在Ubuntu等系统里搭建的,可以尝试用搭建服务的本机浏览器打开"localhost:8123",看是否能打开,如果不能打开有可能是HomeAssistant没有成功启动或者搭建有问题;
如果是虚拟机加镜像安装的,看启动完后是否出现了本机地址“IPv4 addresses for enp2s1:xxx.xxx.xxx.xxx”,如果没出现启动有问题,如果出现了在局域网内用edge浏览器打开这个IP加8123的端口号刷新几遍一般会出来,没出来多刷新几次
在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐