康康 发表于 2020-3-11 12:20:55

测温枪—疫情的刚需

测温枪

​大疫当前不准出门,必不得已过路卡进商店必先测体温,无论年老年少,贫穷与富有,不管官多大谁都难逃这"温柔一枪"。

进出大门要先来一"枪"
按说测量体温应该用温度计,怎么还用上了枪?好吓人!按照常理来说应该每人发一个温度计,腋窝里一夹过个几分钟就出结果了,用枪打是不是很复杂。说的一点都没错,但是有没有考虑人员很多,每人发一温度计排队测体温,也不知道这个"测温长龙"什么时候能测完,既不方便又很麻烦,况且多人共用体温计还不卫生。

红外测温仪,一秒测温,方便快捷
怎么办呐?这就要请出我们的这个神器"测温枪"了。说实话喊它"枪",它自己都不知道去哪里喊冤。怪就怪样子长的像"枪",操作起来"枪口"对准脑门,扣动扳机,嘀嗒一声后,看显示屏,1秒钟就得出了数据,所以这个名就因此名副其实的坐实了。既然喊它为"测温枪",今天就来说说它如何测体温?
测温枪,学名是“红外线测温仪”或者“红外线辐射测温仪”。它的原理是:被动吸收目标的红外辐射能量,从而获得物体温度数值。图片来自网络图片现在小区门口的测温枪基本是这个原理
所以思路缕清后,我们只需把一个这样的卡比放在测温枪中,测量出它吸收辐射后释放的热辐射量,就能换算出被测物对应的温度了。图片来自网络图片由于制作这个项目需要用到一块GY-906传感器模块。选用这颗传感器除了是因为使用红外的非接触测温外,最重要的是它的通讯方式是I2C通信协议(也有写成IIC的)主要用到SDA和SCL两条线。GY-906主要特点:
[*]工作电压:3.6V~5V
[*]物体温度范围:-70℃~382.2℃
[*]环境温度范围:-40℃~125℃
[*]分辨率:0.02℃

图片来自网络图片
如上所示,您可以将感应范围视为传感器点的圆锥形状。因此,当我们远离测量对象时,感应区域增加了两倍。每1cm的含义我们远离物体移动感应区域增长2cm。在我们的温度枪中,我们在传感器顶部放置了一个激光二极管,以了解传感器当前指向的传感区域。我发现,如果枪指向离物体2厘米处,并且随着我们离开时精度下降,则值是可靠的。

OLED屏因其小巧轻薄耗电低等特点,越来越多的应用于嵌入式电子设备中。OLED屏种类不同,显示的颜色也不同,常用的有白色显示、蓝色显示和黄蓝双色显示。屏幕的尺寸和内置驱动芯片也多种多样,常用的驱动接口有SPI和IIC两种。本篇中使用的使一款0.96寸蓝色IIC驱动屏,其内置驱动芯片为SSD1306。
OLED显示屏驱动库非常多,本篇我们使用两个库:「Adafruit_SSD1306」和「Adafruit_GFX」。在Arduino IDE中点击「项目」—「加载库」—「管理库」,分别查找选择最新版本进行安装。

由于我们的测温传感器使用了IIC,所以我们的显示屏不能在使用IIC了,具体接线如下
程序编写
和往常一样,我们在程序中首先添加所需的库文件。这里的Wire库(内置)用于使用I2C协议进行通信,ML90614库用于与传感器通信。 SPI、GFX和SSD1306库用于与4线SPI协议通信到OLED显示模块。
定义头文件#include <Wire.h>
#include "SparkFunMLX90614.h"
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
定义OLCD引脚#define OLED_MOSI   9
#define OLED_CLK   10
#define OLED_DC    11
#define OLED_CS    12
#define OLED_RESET 13
初始化OLCDAdafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
读取数据temperature = String(therm.object(), 2);
数据算法float tempFloat;
                // First convert each temperature to Kelvin:
                if (_defaultUnit == TEMP_F)
                {
                        // Convert from farenheit to Kelvin
                        tempFloat = (calcTemp - 32.0) * 5.0 / 9.0 + 273.15;
                }
                else if (_defaultUnit == TEMP_C)
                {
                        tempFloat = calcTemp + 273.15;
                }
                else if (_defaultUnit == TEMP_K)
                {
                        tempFloat = calcTemp;
                }
                // Then multiply by 0.02 degK / bit
                tempFloat *= 50;
                rawTemp = (int16_t) tempFloat;
代码下载
关注微信公众号“KIDLINTEACH创客实验室”,回复“测温枪”获取完整代码。

最后附上整个制作过程视频,仅供欣赏。
https://v.youku.com/v_show/id_XNDU4MjcxODgxMg==.html

visionsl 发表于 2020-3-14 18:23:12

好大的一柄枪!

gray6666 发表于 2020-3-14 20:26:22

好棒,抗疫情神器

txm派瑞深山锹 发表于 2020-3-14 21:25:14

由于特殊时期,现在已经买不到mlx90614系列的非接触式红外测温传感器了,除非出高价

txm派瑞深山锹 发表于 2020-3-14 21:30:00

这个传感器我找了一周没货,请问版主是哪买的?

shangwe4416 发表于 2020-3-15 07:26:57

上月就想做一个,计划买那个串口输出的红外传感模块不用考虑这个那个补偿的,没货就买个普通的模块也没货有货的比年前贵了好些倍

DFHk-0ykaN8 发表于 2020-3-16 15:21:34

好棒,抗疫情神器

Vibranium 发表于 2020-3-17 10:28:42

赞一个,一般自己做的总是要比外面买的便宜,这个很划算

gada888 发表于 2020-3-24 12:58:54

有卖的,就是不便宜

txm派瑞深山锹 发表于 2020-3-26 09:36:17

shangwe4416 发表于 2020-3-15 07:26
上月就想做一个,计划买那个串口输出的红外传感模块不用考虑这个那个补偿的,没货就买个普通的模块也没货有 ...

对,我找了3周都没货

honlyn 发表于 2020-4-16 10:38:11

一直想知道,红外温枪如何校正

DFHJM_IpFmV 发表于 2020-4-26 11:54:24

此乃神器也!b( ̄▽ ̄)d

44107900 发表于 2020-5-5 15:43:29

谢谢分享!

Darren-maker 发表于 2020-5-11 15:56:18

我按照上面的步骤,但是测出来的温度是40℃,我实际温度35.5℃,请问怎么校正呢?

20060606 发表于 2020-6-26 07:59:57

视频为什么放不了

20060606 发表于 2020-8-3 09:06:25

模块在哪有卖的

DFS1w2cb8o8 发表于 2020-8-3 12:06:00

厉害厉害
页: [1]
查看完整版本: 测温枪—疫情的刚需