Digitrode
цифровая электроника вычислительная техника встраиваемые системы
Инфракрасный термометр на Arduino и MLX90614 своими руками
Сегодня вопрос измерения температуры стоит наиболее остро, нежели ранее. В связи со вспышкой коронавируса и общего ухудшения здоровья населения желательно измерять температуру тела как можно чаще с целью выявления заболевания на ранней стадии, причем для сторонних людей относительно возможного зараженного это делать лучше бесконтактным способом.
В этом проекте мы создадим бесконтактный ИК термометр используя 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 представлен далее.
Как только код Arduino будет готов, мы можем загрузить его в наше оборудование с помощью внешнего программатора TTL или платы FTDI, поскольку у Arduino pro mini нет встроенного программатора. Затем просто нажмите кнопку, чтобы активировать тепловую пушку, и вы заметите, что лазерный луч падает на объект, а температура объекта отображается на OLED-экране, как показано на следующем изображении.
Инфракрасный термометр на Ардуино с датчиком MLX90614
Большинство методов измерения температуры требуют некий физический контакт температурного датчика с объектом, температура которого должна быть измерена.
Но по мере развития технологий меняется и способ измерения температуры. Как быть если нам необходимо измерить температуру объекта без физического контакта с ним? В этом нам окажет помощь инфракрасный термометр.
Принцип работы инфракрасных термометров прост — все тела при температуре выше 0° Кельвина (абсолютный ноль) в той или иной степени излучают инфракрасную энергию, которая может быть обнаружена датчиком инфракрасного термометра.
Конструкция инфракрасного термометра имеет оптическую систему, которая фокусирует инфракрасную энергию, излучаемую объектом. Далее инфракрасный датчик преобразует энергию в электрический сигнал, который затем может быть передан в микроконтроллер для интерпретации и отображения в единицах температуры.
Сегодня мы соберем термометр, используя инфракрасный датчик MLX90614, Arduino Uno и LCD дисплей Nokia 5110 для отображения измеренной температуры.
MLX90614 представляет собой инфракрасный датчик для измерения температуры бесконтактным способом. Он может измерять температуру в диапазоне от -70 до 380 градусов Цельсия с точностью около 0,5°C.
Ниже перечислены некоторые особенности датчика MLX90614:
- Малый размер и низкая стоимость.
- Легко интегрировать.
- Заводская калибровка в широком температурном диапазоне: от -40°C до 125°C для температуры окружающей среды и от -70°C до 380°C для температуры объекта.
- Высокая точность: 0,5°C в широком температурном диапазоне 0 .. + 50°C
- Разрешение измерения: 0,02 ° C
- Настраиваемый выход ШИМ для непрерывного чтения
- Датчик доступен в версиях с питанием от 3В и 5В
Схема подключения MLX90614 к Ардуино
Схема подключения очень проста, потому что дисплей используется в виде шилда для Ардуино, который избавит нас от необходимости подключения его с помощью соединительных проводов, и все, что нам нужно сделать, это подключить дисплей к Ардуино.
Соединение Ардуино и датчика температуры показано на схеме ниже.
Скетч инфракрасного термометра
Наша цель сегодня — измерить температуру, обработать ее и отобразить на LCD дисплее. Для того чтобы мы могли легко общаться с температурным датчиком MLX90614, мы используем библиотеку температурного датчика mlx90614 от Adafruit и для удобного вывода текста на экран графическую библиотеку Nokia 5110.
Мы начинаем, как обычно, с подключения всех библиотеки, которые нам понадобятся в работе:
Затем создадим объект библиотеки LCD, определяя контакты Ардуино к которым подключены контакты LCD:
После этого мы пропишем переменные для шрифтов и других элементов, необходимых для отображения, после чего создадим экземпляр датчика температуры:
Далее напишем функцию void setup(). Начнем с кода, инициализирующий LCD-дисплей и датчик температуры, после чего используем LCD.drawbitmap() для создания пользовательского интерфейса на дисплее.
Интерфейс уже был разработан и преобразован в C-файл и уже прикреплен к коду. Причина использования пользовательского интерфейса заключается в возможности отображения данных более удобным и эффективным способом:
Далее идет функция void loop(). Работа функции void loop() проста. Мы начинаем с определения единицы измерения, в которой должна отображаться температура (в градусах Цельсия или Фаренгейта), затем мы читаем температуру от датчика температуры и выводим на экран.
Полный код проекта:
Инфракрасный термометр Arduino/MLX90614 (658 bytes, скачано: 1 363)
Скопируйте код и загрузите его в Ардуино, затем направьте датчик температуры на объект, температуру которого вы хотите измерить. Через некоторое время температура этого объекта будет показана на экране.
Бесконтактный умный инфракрасный термометр на Arduino и смартфоне
Текущая пандемия коронавируса внесла существенные коррективы в жизнь людей по всему миру. Одним из значительных изменений, которые постигли человечество в этом плане, является необходимость в измерении температуры на входе во многие здания, чтобы таким образом уменьшить вероятность проникновения в здание людей с симптомами COVID-19. Делается это с помощью бесконтактных термометров, которые с начала пандемии стали дефицитным товаром и существенно повысилась цена их приобретения. Поэтому, возможно, вас заинтересует проект бесконтактного термометра, который можно сделать своими руками.
На нашем сайте ранее мы уже рассматривали бесконтактный термометр на основе платы Arduino и датчике температуры MLX90614, который выводит измеренное значение температуры на экран OLED дисплея. В этой же статье мы рассмотрим создание более простого в изготовлении, но более функционального бесконтактного инфракрасного термометра на основе платы Arduino и смартфона на операционной системе Android, с помощью которого можно будет измерять температуру и вести лог измерений температуры с фотографиями лиц, у которых производилось измерение температуры. В дальнейшем этот лог температуры с фотографиями можно будет передавать для хранения в какое-нибудь централизованное место.
Как уменьшить стоимость бесконтактного термометра?
При ближайшем рассмотрении нам для изготовления бесконтактного термометра понадобятся инфракрасный датчик температуры, микроконтроллер, дисплей, драйвер дисплея и батарейка. Одним из самых дорогих устройств в этом списке будет бесконтактный инфракрасный датчик температуры. К сожалению, выбор среди доступных на рынке подобных датчиков невелик и придется выбирать между MLX90614 и MLX90615. Существенно сэкономить в этом плане можно с помощью аналогового датчика температуры (если вы умеете уверенно с ними работать), но общая схема термометра в этом случае немного усложнится и вам придется терпеть некоторые «муки», связанные с калибровкой подобного устройства. Но здесь выбор за вами. Мы же для нашего проекта решили использовать датчик MLX90615 от компании Melexis.
Когда датчик температуры выбран, нам осталось определиться с микроконтроллером, дисплеем и батареей. С целью удешевления проекта нашего термометра мы решили использовать в его составе смартфон потому что смартфоны сейчас уже не являются новинкой – они есть у большинства активного населения. Поэтому мы написали приложение на Android под названием “Easy Scan” (его можно скачать далее в статье), которое будет взаимодействовать с нашим термометром и выполнять ряд операций – вести лог данных температуры и захватывать изображения. С помощью данного подхода мы не только сможем просто хранить необходимые нам данные, но также мы сможем их передавать по электронной почте, по WhatsApp и т.п.
Поэтому теперь для нашего проекта бесконтактного термометра понадобятся лишь следующие компоненты:
- MLX90615 IR Temperature Sensor – инфракрасный датчик температуры MLX90615 (купить на AliExpress). К сожалению, на момент публикации данной статьи удалось найти на Aliexpress данный датчик только вместе с платой (это дороже), возможно, вам удастся найти его в продаже в виде отдельного датчика (это будет дешевле).
- TCRT5000 IR Sensor – инфракрасный датчик TCRT5000 (купить на AliExpress).
- Плата Arduino Nano (купить на AliExpress).
- Резисторы (купить на AliExpress).
Почему TCRT5000 и Arduino Nano?
Инфракрасный датчик TCRT5000 в нашем проекте будет использоваться для определения позиции (точки измерения температуры) и обеспечения автоматического считывания значений температуры. С помощью него нам не будет нужно производить никаких «танцев с бубном» в Android приложении и работа с ним значительно упростится. Также дополнительным достоинством использования данного датчика в нашем проекте является то, что с его помощью значения температуры будут считываться только тогда, когда человек находится на «правильном» расстоянии от нашего термометра, поэтому нам не нужно будет беспокоиться о ложных считываниях.
Причина, по которой в данном проекте мы будем использовать плату Arduino Nano, заключается в том, что у данной платы есть встроенный USB интерфейс – а он нам крайне важен для обеспечения взаимодействия между платой и смартфоном.
Схема проекта
Схема бесконтактного термометра на основе платы Arduino и смартфона представлена на следующем рисунке.
Как видите, схема достаточно проста – нам в ней нужно всего лишь подключить датчики MLX90615 и TCRT5000 к плате Arduino Nano.
Датчики MLX90615 и TCRT500 работают от питающих напряжений 3.3V и 5V соответственно, поэтому мы без проблем сможем запитать их от платы Arduino. Контакты интерфейса I2C платы Arduino A4 (SDA) и A5 (SCL) используются для взаимодействия с датчиком MLX90615. Обычно датчик TCRT5000 используется вместе с операционным усилителем в режиме компаратора, но в нашей схеме инфракрасный датчик должен быть невосприимчив к солнечному свету. Поэтому мы подключили инфракрасный диод (IR diode) к цифровому контакту платы Arduino, а фотодиод – к ее аналоговому контакту. Таким образом мы сможем измерять значение с выхода фотодиода в режиме нормального функционирования и после приема сигнала с инфракрасного диода, разница между этими двумя значениями будет помогать нам в борьбе с шумом. Более подробно это будет рассмотрено в разделе про объяснение кода программы.
Вы можете собрать устройство на печатной плате, но мы в целях убыстрения процесса спаяли компоненты проекта на перфорированной плате. А в дальнейшем мы напечатали корпус устройства на 3D принтере исходя из размеров нашей перфорированной платы.
Объяснение программы для Arduino
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Программа для нашего термометра значительно упрощается благодаря библиотеке для работы с датчиком MLX90615, разработанной Сергеем Киселевым, скачать ее можно по следующей ссылке.
Вначале в коде программы нам будет необходимо подключить используемые библиотеки и объявить необходимые переменные. В нашем проекте будут использоваться две важные для нас переменные: error_correction value (ошибка коррекции) и range sensitivity value (значение диапазона чувствительности). Хотя датчик MLX90615 поставляется уже откалиброванным с завода-изготовителя, мы обнаружили, что показания с него будут обладать большей чувствительностью (точностью), если мы добавим к ним значение ошибки коррекции. В нашем случае мы будем добавлять 3.2 к значению, которое мы будем получать с датчика. Мы проверяли работу нашего термометра вместе с сертифицированным термометром и обнаружили, что добавление данного корректировочного значения делает показания нашего термометра более надежными (точными). Следующая важная переменная у нас – это Range sensitivity (чувствительность и диапазон). Если мы будем уменьшать ее значение, то диапазон работы нашего термометра будет увеличиваться.