查看: 5006|回复: 13

[项目] 测温枪—疫情的刚需

[复制链接]
测温枪


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

202003115197..png

进出大门要先来一"枪"

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

202003115894..png

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

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

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

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

202003115661..png

图片来自网络图片

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

202003118135..png

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

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

202003113569..png

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

202003112903..png
程序编写

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

定义头文件
[C] 纯文本查看 复制代码
#include <Wire.h> 
#include "SparkFunMLX90614.h"
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

定义OLCD引脚
[C] 纯文本查看 复制代码
#define OLED_MOSI   9
#define OLED_CLK   10
#define OLED_DC    11
#define OLED_CS    12
#define OLED_RESET 13

初始化OLCD
[C] 纯文本查看 复制代码
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

读取数据
[C] 纯文本查看 复制代码
temperature = String(therm.object(), 2);

数据算法
[C] 纯文本查看 复制代码
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创客实验室”,回复“测温枪”获取完整代码。

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


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℃,请问怎么校正呢?
回复

使用道具 举报

高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2020 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail