风筝
发表于: 2020-8-23 12:05:35 | 显示全部楼层

当前形势下的COVID-19新冠肺炎依然严峻。每个人都尽最大努力保护自身的同时,重要的是采取负责任的行动并集体解决这个问题。如今,在许多公共场所和其他聚会中,对每个人进行体温检测作为检查发烧的预防措施已变得非常普遍。用于执行此操作的设备叫做非接触式红外温度计。正如许多人可能已经注意到的那样,对该产品的需求激增,但是要自己制作一个不仅可以满足其目的而且还提供比商业产品更有用的功能的产品并不难。


因此,本文的目的是设计一种低成本、易于制作的非接触式温度计,该温度计可以测量体温,并将其与个人照片一起记录到Excel中,以便可以轻松与相关机构共享记录。让我们开始吧…。


低成本且易于制作 - Android应用程序

我们可以分辨出温度计上的一些重要部件,如红外温度传感器、微控制器、显示屏、驱动器和电池。现在,我们的目标是降低成本,在这些元件中最贵的是IR温度传感器。遗憾的是,作为一个创客来说,除了MLX90614和MLX90615之外,您似乎没有其他更好的选择。另外,如果您使用模拟传感器,则可以有许多更便宜的选择,但是制作和校准设备并不容易。在本篇文章中,我们将使用Melexis公司的MLX90615传感器。


选择传感器后,我们只剩下微控制器、显示器和电池。因此,我们决定通过使用Android手机来降低这三个部分的成本。如今,几乎每个人都有一部优质android手机。我们可以创建一个简单的Android应用程序,该应用程序可以与温度计通信并执行其他活动,例如数据记录和图像捕获。这样,我们不仅可以使其运行更快,而且还可以通过与WhatsApp、Gmail或任何其他平台上的图片即时共享日志结果来增加其潜在的应用程序。这就是为什么我们选择了“ Easy Scan”的Android应用程序的原因,该应用程序是开源的,APK也可以免费下载。以下是本项目所需的元件清单:

●    MLX90615红外温度传感器

●    TCRT5000红外传感器

●    Arduino Nano开发板


为什么选择TCRT5000和Arduino Nano?

对于许多人来说,都会有这样的疑问。使用TCRT5000红外传感器的原因是要检测温度计的位置并自动获取温度读数。这样一来,您就无需在应用程序启动后对其进行任何操作,使其易于使用。另外,仅当传感器与人的距离合适时才读取读数,因此我们不必担心读数错误。


使用Arduino Nano的原因是它具有内置的USB接口,这对于在控制器和手机之间进行通信很重要。如果您没有,也可以使用Mega甚至UNO。但是从成本上来讲,您甚至可以使用低功耗微控制器(如STM8S)或任何其他支持I2C、ADC和UART的控制器来完成该项目。


MLX90615和TCRT5000与Arduino的连接方式

我们项目的电路图非常简单,只需要将MLX90615和TCRT5000传感器与的Arduino nano开发板连接即可。非接触式体温计的完整电路图如下。

Contactless-Body-Thermometer-Schematic.png

MLX90615和TCRT500分别使用3.3V和5V供电,因此我们可以相应地为其供电。 I2C通信引脚A4(SDA)和A5(SCL)用于与MLX90615传感器通信。将TCRT5000与运算放大器一起使用,我们需要使其更加可靠并且我们的红外传感器应不受阳光的影响。因此,我们将IR二极管连接至Arduino的数字引脚,并将光电二极管连接至Arduino的模拟引脚。这样,我们可以在正常阶段测量光电二极管的值,然后在打开IR LED之后再次测量,这两个值之间的差异应有助于我们处理噪声。

MLX90615-Sensor.png

您可以根据需要为此制作一款PCB,但是为了快速制作原型,我直接将部件焊接在面板板上。完成后,设置将如下所示,我们将为此3D打印外壳。

Contactless-Thermometer-Setup.jpg



非接触式智能温度计– Arduino程序

感谢Arduino社区,该项目的Arduino程序非常简单。您可以从下面的链接下载Sergey Kiselev提供的MLX90615的头文件。

●   下载MLX90615头文件

该项目的完整Arduino程序可以在本页底部找到,该代码的解释如下。


我们添加所需的头文件并声明变量。这里有两个重要的变量,一个是error_correction值,另一个是范围灵敏度值。即使MLX90615在出厂时已校准,但我发现只有在向其中添加错误校正值时,这些值才有意义。本例中必须在从传感器获得的值上加上3.2,以获得可靠的值。我在手持温度计上测试了该值,添加此错误校正值后,发现它是可靠的。下一个变量是范围灵敏度,如果我们减小此值,则可以增加温度计的范围。

  1. float calibration = 3.2; //add this to actual value
  2. int Range_sensitivity = 200; //Decrease this value to increase range
  3. #include <Wire.h>
  4. #include "MLX90615.h"
  5. MLX90615 mlx = MLX90615();
复制代码

避免由于日照导致红外传感器的误触发:

下一组代码是此项目中使用TCRT5000进行纠错的方式。可以将其用作简单的位置传感器,但是IR位置传感器的最大缺点是,如果来自太阳的IR射线直接落在其上,它将被触发。


为避免此问题,我们按照电路中的说明测量了来自TCRT5000传感器的两个值,IR传感器的发射器LED连接到数字引脚,接收器LED连接到模拟引脚。现在,在程序中,我们将从红外传感器读取两个值,一个是“Noise”,另一个是“Noise加Signal”。在关闭发射器IR LED的同时测量噪声值,以使接收器IR LED仅显示环境中存在的阳光强度。然后,我们将在打开IR LED后测量Noise 加Signal值。然后在程序中,我们只需要从“噪声加信号”中减去“噪声”就可以得到信号值。执行该操作的代码如下所示。

  1. digitalWrite(2,HIGH);    // Turn on IR LED
  2. delayMicroseconds(500);  // Forward rise time of IR LED
  3. Noise_P_Signal=analogRead(A7);        // Read value from A0 => noise+signal
  4. digitalWrite(2,LOW);     // Turn off IR LED
  5. delayMicroseconds(500);  // Fall time of IR LED
  6. Noise=analogRead(A7);        // Read value from A0 => noise only
  7. Signal = Noise - Noise_P_Signal;
复制代码

一旦知道信号和噪声值,就可以将其与Range_灵敏度值进行比较,以检查传感器是否靠近皮肤;如果是,则可以通过串行通信发送温度值,否则,我们将输出位置误差。如果噪声值很高(本例中大于500),则意味着传感器面对阳光直射,在这种情况下我们将无法读取温度,因为我发现传感器值在面对阳光直射时非常不可靠。同样,这应该有助于避免错误的读数。

  1. if (Signal>Range_sensitivity && Noise >500) //dec. signal to increase rage
  2. {
  3.   if (trigger == true)
  4.    Serial.println("start");
  5.    digitalWrite(13,HIGH);
  6.    temperature = (mlx.get_object_temp()) + error_correction;
  7.   Serial.println(temperature,1);
  8.   delay(100);
  9.   trigger = false;
  10. }
  11. else
  12. {
  13.   delay(100);
  14.   trigger = true;
  15.   digitalWrite(13,LOW);
  16.   Serial.println("position_error");
  17. }
复制代码

Android应用程序Easy Scan

该项目最丰富的功能是EAndroid应用程序Easy Scan。您可以从下面的链接下载此应用程序APK文件。下载Easy Scan Android应用程序


由于它不在本文讨论范围之内,因此我们不会详细介绍如何开发此应用程序,但是,如果您是开发人员,请随时在Github上使用Easy Scan Android应用程序并添加新功能或根据需要进行调整根据您的要求。


如前所述,Android应用程序允许我们用照片存储所有温度值,还可以通过Whatsapp电子邮件等将其共享为excel文件。下面显示了一些应用程序的屏幕截图。

Easy-Scan-Android-Application.png


使用Easy Scan Android应用程序测试非接触式智能红外测温仪

硬件准备好后,上传下面给出的Arduino代码。然后打开串口监视器,您会看到显示位置错误。如果将手靠近传感器,则会看到温度值。您可以使用任何现有的红外测温仪来检查值是否正确。串口监视器屏幕截图如下。

Contactless-IR-Thermometer-Serial-Monitor.png


这将帮助我们确保硬件和程序能够按预期运行。之后,使用OTG连接器并将您的设备连接到手机。两种带有Type-C和微型USB端口的手机均经过测试,发现可以正常工作。确保在设置选项下打开手机中的OTG。


建立连接后,使用先前共享的APK安装Easy Scan应用程序,然后启动该应用程序。将设备放在物体上,如果连接一切正常,您应该在应用程序上看到温度值。

Contactless-Smart-IR-Thermometer.jpg

该应用程序允许您设置阈值温度,如果温度高于此阈值,则会提示您拍照。所有扫描的记录都可以在应用程序中随时间和日期进行查看,还可以Excel格式共享以维护记录。希望您喜欢本篇文章。如果您有任何技术疑问,可以随时在下面进行回复。


代码

本文使用的完整代码如下: main.rar (750 Bytes, 下载次数: 14)

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1479



手机版|

GMT+8, 2024-3-29 14:01 , Processed in 0.101061 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表