Сегодня вопрос измерения температуры стоит наиболее остро, нежели ранее. В связи со вспышкой коронавируса и общего ухудшения здоровья населения желательно измерять температуру тела как можно чаще с целью выявления заболевания на ранней стадии, причем для сторонних людей относительно возможного зараженного это делать лучше бесконтактным способом.

В этом проекте мы создадим бесконтактный ИК термометр используя Arduino и инфракрасный температурный датчик. Эта конструкция будет создана с использованием бесконтактного датчика температуры под названием MLX90614; следовательно, его можно использовать не только для измерения температуры тела, но также для измерения температуры компонентов, температуры поверхности, в системах вентиляции с подогревом и многого другого. Конечно, эти тепловые пистолеты легко доступны на рынке от известных производителей, таких как Fluke, Flir и т. д. но они довольно дорогие и, кроме того, интереснее, создавать свои собственные гаджеты.
Перед тем как приступить к проекту, важно знать, как работает датчик MLX90614. На рынке доступно много датчиков температуры, и мы широко используем датчики DHT11 и LM35 для многих применений, где необходимо измерять температуру воздуха. Но здесь для теплового пистолета нам нужен датчик, который мог бы измерять температуру конкретного объекта (не окружающей среды) без непосредственного контакта с объектом. Для этого у нас есть бесконтактные датчики температуры, которые используют лазер или ИК для расчета температуры объекта. MLX90614 – один из таких датчиков, который использует ИК-энергию для определения температуры объекта.

Датчик MLX90614 компанией Melexis Microelectronics, в него встроено два устройства: одно – инфракрасный термобатарея (датчик), а другое – устройство обработки сигналов DSP (вычислительный модуль). Он работает на основе закона Стефана-Больцмана, который гласит, что все объекты излучают инфракрасную энергию, и интенсивность этой энергии будет прямо пропорциональна температуре этого объекта. Чувствительный элемент в датчике измеряет, сколько ИК-энергии излучается целевым объектом, и вычислительный модуль преобразует ее в значение температуры с использованием встроенного 17-разрядного АЦП и выводит данные через протокол связи I2C. Датчик измеряет как температуру объекта, так и температуру окружающей среды для калибровки значения температуры объекта. Особенности датчика MLX90614 следующие.
- Рабочее напряжение: от 3,6 В до 5 В
- Диапазон температур объекта: от -70° C до 382,2° C
- Диапазон температур окружающей среды: от -40° C до 125° C
- Разрешение / Точность: 0,02° C
Одним из вопросов, на который технические характеристики не дают прямого ответа, является измерение расстояния между датчиком и объектом. Значение этого расстояния задается термином Поле зрения (FOV), для нашего датчика поле зрения составляет около 80°.

Диапазон чувствительности должен быть в конической форме от точки датчика, как показано выше. Таким образом, по мере удаления от измерительного объекта зона чувствительности увеличивается в два раза. То есть на каждый 1 см мы удаляемся от объекта, зона чувствительности увеличивается на 2 см. В нашем тепловом пистолете мы поместили лазерный диод на верхнюю часть датчика, чтобы знать, куда в данный момент направлена чувствительная область датчика. В ходе тестов обнаружено, что значения были достоверными, если пистолет удален на расстоянии 2 см от объекта, и по мере удаления точность снижается.
Принципиальная схема подключения компонентов инфракрасного термометра довольно проста и приведена далее.

Вся схема питается от батареи 9 В через кнопку. При нажатии кнопки батарея 9 В подключается к выводу RAW Arduino, который затем регулируется до 5 В с помощью встроенного регулятора напряжения. Эти 5 В затем используется для питания модуля OLED, датчика и лазерного диода.

Для упрощения конструирования корпуса термометра можно воспользоваться 3D моделью (https://www.thingiverse.com/thing:3706609).

Программа для Arduino должна прочитать значение температуры с MLX90614 и отобразить его на OLED-дисплее. К счастью для нас, программа будет очень простой, поскольку Adafruit предоставила нам библиотеку (https://github.com/sparkfun/SparkFun_MLX90614_Arduino_Library) для удобного чтения данных с MLX90614. Полный код инфракрасного термометра на Arduino представлен далее.
#include <Wire.h>
#include <SparkFunMLX90614.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
IRTherm therm;
void setup()
{
Serial.begin(9600);
therm.begin();
therm.setUnit(TEMP_C);
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();
display.setRotation(2);
}
String temperature;
char runner;
void loop()
{
if (therm.read())
{
temperature = String(therm.object(), 2);
Serial.print("Object: ");
Serial.print(temperature); Serial.println("C");
display.clearDisplay();
runner++;
delay(5);
}
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(display.width()/4,display.height()/12);
if (therm.object()>=100)
display.setCursor(display.width()/4,display.height()/12);
display.println(temperature);
display.drawLine(display.width()/runner,display.height() - display.height()/2.5, display.width()/runner+1, display.height() - display.height()/2.5, WHITE);
display.setCursor(0,display.height()-display.height()/4);
display.setTextSize(1);
display.println(" Arduino Thermlgun");
display.setCursor(display.width()- display.width()/4,display.height()/12);
display.println("deg C");
display.display();
if (runner>20)
runner=0;
}
Как только код Arduino будет готов, мы можем загрузить его в наше оборудование с помощью внешнего программатора TTL или платы FTDI, поскольку у Arduino pro mini нет встроенного программатора. Затем просто нажмите кнопку, чтобы активировать тепловую пушку, и вы заметите, что лазерный луч падает на объект, а температура объекта отображается на OLED-экране, как показано на следующем изображении.

© digitrode.ru