Модуль GY-906 (MLX90614): бесконтактное измерение температуры

Модуль GY-906 (MLX90614): бесконтактное измерение температуры

Как устроен инфракрасный датчик температуры GY-906, как подключить его к Arduino и собрать на нём простой бесконтактный термометр.

Два датчика в одном корпусе

GY-906 — модуль на сенсоре MLX90614, который измеряет температуру объекта на расстоянии по интенсивности его инфракрасного излучения. Широкую известность он получил как основа бесконтактных термометров, но годится и для множества других задач, где нужен быстрый контроль температуры: в медицине, промышленности, сельском хозяйстве.

Внутри сенсора два измерителя. Вспомогательный следит за температурой окружающего воздуха в диапазоне от -40 до +125 °C; его показания можно использовать как опорные или отдельно. Основной смотрит на объект перед «объективом» и работает в диапазоне от -70 до +380 °C.

Сенсор MLX90614

Разновидности сенсора

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

Таблица обозначений вариантов MLX90614

В статье рассматривается средний по характеристикам вариант GY-906-BCC. Он рассчитан на трёхвольтовое питание и имеет угол обзора 35 градусов, при котором точнее всего измеряется температура предметов на расстоянии 5–10 см. Точность такого датчика — в пределах 0,5 °C. Существуют и другие исполнения:

  • версии повышенной точности (до 0,02 °C), маркировка которых начинается с буквы D; стоят они в несколько раз дороже;
  • длиннофокусные с углом обзора 10 градусов, снимающие показания со лба на расстоянии 30–40 см; они дороже, крупнее и требуют точного наведения: если в поле зрения попадёт лишь часть лба или запястья, результат окажется заниженным.

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

Модуль GY-906 на плате для подключения к Arduino

Подключение к Arduino

Модуль подключается двумя сигнальными линиями — SDA и SCL. На Arduino UNO и других платах на ATmega328 и ATmega168 это выводы A4 (SDA) и A5 (SCL); их соединяют с одноимёнными контактами модуля и подают питание от 3,3 до 5 В. По данным производителя, на одну шину можно повесить до 127 таких сенсоров.

Проще всего работать с датчиком через библиотеку Adafruit_MLX90614; ей может потребоваться вспомогательная интерфейсная библиотека того же разработчика. После установки обеих можно сразу запускать скетчи из примеров. При желании обмен с сенсором реализуется и собственным кодом — протокол подробно описан в даташите.

Настройка коэффициента излучения

Разные материалы излучают тепло по-разному, и без учёта этого показания могут сильно расходиться с реальностью. Поэтому под конкретную задачу датчику задают коэффициент излучения, взятый из справочной таблицы. Для кожи человека принято среднее значение 0,98. Записывается оно скетчем установки emissivity из примеров библиотеки: коэффициент вносят в соответствующую переменную, запускают программу и дожидаются подтверждения. После перезагрузки модуль начинает считать температуру с новым значением.

Пример: бесконтактный термометр

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

Тепловизионный снимок лица человека после мороза

Прототип термометра, кроме датчика, включает:

  • четырёхразрядный семисегментный индикатор на TM1637 (CLK — A0, DIO — A1, библиотека TM1637Display);
  • зелёный светодиод на выводе 4 — температура в норме;
  • красный светодиод на выводе 5 — температура выше 37 градусов;
  • пищалку на выводе 2;
  • белый светодиод на выводе 3 в роли подсветки, показывающей, куда направлен датчик.

При включении скетч проверяет наличие датчика (если его нет, загорается красный светодиод и программа останавливается), затем кратко зажигает все светодиоды и подаёт короткий сигнал. В основном цикле каждые полсекунды вызывается mlx.readObjectTempC(), а три последних значения хранятся в буфере. Когда все три превышают 30 градусов, считается, что перед датчиком появился тёплый объект и переходный период уже пройден; на индикатор выводится последнее измерение. Если оно выше 37, красный светодиод мигает и звучит прерывистый сигнал, иначе загорается зелёный и раздаётся одиночный писк. После этого устройство ждёт, пока объект уберут, гасит светодиоды, выводит на индикатор прочерки и готово к следующему замеру.

Код учебный: в нём использованы паузы delay(), которых в рабочей прошивке следует избегать.

Ограничения и практические замечания

  • Наиболее точные и стабильные результаты получаются при наведении на лоб; запястье немного уступает по достоверности.
  • При температуре окружающей среды выше 30 градусов описанная программа будет работать некорректно, так как порог обнаружения объекта задан жёстко. Здесь пригодился бы встроенный датчик температуры воздуха: по нему можно рассчитывать порог срабатывания.
  • Медицинской сертификации у датчика нет, поэтому для медучреждений он однозначно рекомендован быть не может. Для бытового применения его точности достаточно, чтобы уверенно выявить человека с повышенной температурой.

В целом GY-906 — компактный и простой в подключении модуль с широким диапазоном измерений, набором исполнений под разные задачи и возможностью настройки под материал объекта.

← Все статьи