测温枪—疫情的刚需

2020-03-112.9万
精华项目
AI 快速预览详细 收起
本文介绍了红外测温枪在疫情期间的应用。红外测温枪通过被动吸收目标的红外辐射能量来获得物体温度数值。文章详细介绍了所需的GY-906传感器模块及其特点,以及如何与OLED显示屏连接并编写程序。通过这些步骤,可以实现快速、非接触的温度测量,适用于疫情防控场景。
测温枪


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

测温枪—疫情的刚需图1

进出大门要先来一"枪"

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

测温枪—疫情的刚需图2

红外测温仪,一秒测温,方便快捷

怎么办呐?这就要请出我们的这个神器"测温枪"了。说实话喊它"枪",它自己都不知道去哪里喊冤。怪就怪样子长的像"枪",操作起来"枪口"对准脑门,扣动扳机,嘀嗒一声后,看显示屏,1秒钟就得出了数据,所以这个名就因此名副其实的坐实了。
既然喊它为"测温枪",今天就来说说它如何测体温?

测温枪,学名是“红外线测温仪”或者“红外线辐射测温仪”。它的原理是:被动吸收目标的红外辐射能量,从而获得物体温度数值。
测温枪—疫情的刚需图3
图片来自网络图片
现在小区门口的测温枪基本是这个原理

所以思路缕清后,我们只需把一个这样的卡比放在测温枪中,测量出它吸收辐射后释放的热辐射量,就能换算出被测物对应的温度了。
测温枪—疫情的刚需图4
图片来自网络图片
由于制作这个项目需要用到一块GY-906传感器模块。选用这颗传感器除了是因为使用红外的非接触测温外,最重要的是它的通讯方式是I2C通信协议(也有写成IIC的)主要用到SDASCL两条线。
测温枪—疫情的刚需图5
GY-906主要特点:
  • 工作电压:3.6V~5V
  • 物体温度范围:-70℃~382.2℃
  • 环境温度范围:-40℃~125℃
  • 分辨率:0.02℃

测温枪—疫情的刚需图6

图片来自网络图片

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

测温枪—疫情的刚需图7

OLED屏因其小巧轻薄耗电低等特点,越来越多的应用于嵌入式电子设备中。OLED屏种类不同,显示的颜色也不同,常用的有白色显示、蓝色显示和黄蓝双色显示。屏幕的尺寸和内置驱动芯片也多种多样,常用的驱动接口有SPI和IIC两种。本篇中使用的使一款0.96寸蓝色IIC驱动屏,其内置驱动芯片为SSD1306。
测温枪—疫情的刚需图8

OLED显示屏驱动库非常多,本篇我们使用两个库:「Adafruit_SSD1306」和「Adafruit_GFX」。在Arduino IDE中点击「项目」—「加载库」—「管理库」,分别查找选择最新版本进行安装。

测温枪—疫情的刚需图9

由于我们的测温传感器使用了IIC,所以我们的显示屏不能在使用IIC了,具体接线如下

测温枪—疫情的刚需图10
程序编写

和往常一样,我们在程序中首先添加所需的库文件。这里的Wire库(内置)用于使用I2C协议进行通信,ML90614库用于与传感器通信。 SPI、GFX和SSD1306库用于与4线SPI协议通信到OLED显示模块。

定义头文件
[mw_shl_code=c,false]#include <Wire.h>
#include "SparkFunMLX90614.h"
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>[/mw_shl_code]

定义OLCD引脚
[mw_shl_code=c,false]#define OLED_MOSI   9
#define OLED_CLK   10
#define OLED_DC    11
#define OLED_CS    12
#define OLED_RESET 13[/mw_shl_code]

初始化OLCD
[mw_shl_code=c,false]Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);[/mw_shl_code]

读取数据
[mw_shl_code=c,false]temperature = String(therm.object(), 2);[/mw_shl_code]

数据算法
[mw_shl_code=c,false]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;[/mw_shl_code]

代码下载

关注微信公众号“KIDLINTEACH创客实验室”,回复“测温枪”获取完整代码。

最后附上整个制作过程视频,仅供欣赏。


创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(15)
DFS1w2cb8o8
DFS1w2cb8o8
厉害厉害
20060606
20060606
模块在哪有卖的
20060606
20060606
视频为什么放不了
Darren-maker
Darren-maker
我按照上面的步骤,但是测出来的温度是40℃,我实际温度35.5℃,请问怎么校正呢?
44107900
44107900
谢谢分享!
DFHJM_IpFmV
DFHJM_IpFmV
此乃神器也!b( ̄▽ ̄)d
honlyn
honlyn
一直想知道,红外温枪如何校正
gada888
gada888
有卖的,就是不便宜
这个人很菜
这个人很菜
赞一个,一般自己做的总是要比外面买的便宜,这个很划算
DFHk-0ykaN8
DFHk-0ykaN8
好棒,抗疫情神器
shangwe4416
shangwe4416
上月就想做一个,计划买那个串口输出的红外传感模块不用考虑这个那个补偿的,没货就买个普通的模块也没货有货的比年前贵了好些倍
txm派瑞深山锹🐛🐜🐞🦂
txm派瑞深山锹🐛🐜🐞🦂回复shangwe4416
对,我找了3周都没货
txm派瑞深山锹🐛🐜🐞🦂
txm派瑞深山锹🐛🐜🐞🦂
这个传感器我找了一周没货,请问版主是哪买的?
txm派瑞深山锹🐛🐜🐞🦂
txm派瑞深山锹🐛🐜🐞🦂
由于特殊时期,现在已经买不到mlx90614系列的非接触式红外测温传感器了,除非出高价
gray6666
gray6666
好棒,抗疫情神器
visionsl
visionsl
好大的一柄枪!
- 没有更多了 -