Подключение бесконтактного инфракрасного датчика температуры MLX90614 к Arduino
С момента появления COVID-19 бесконтактные инфракрасные температурные сканеры стали появляться повсюду в мире — от аэропортов до ресторанов. Возможно, вас интересуют эти температурные сканеры, или вы хотите собрать свой собственный. В таком случае модуль Melexis MLX90614 может быть лучшим недорогим вариантом.
Обзор оборудования модуля MLX90614
В основе модуля лежит высокоточный бесконтактный инфракрасный датчик температуры от Melexis — MLX90614. В отличие от большинства датчиков температуры, этот датчик измеряет температуру без физического контакта. Это может быть очень полезно для мониторинга температуры движущихся объектов, таких как вращающийся вал двигателя или предметы на конвейерной ленте. Просто направьте датчик на то, что хотите измерить, и он определит температуру, поглощая излучаемые ИК-волны.
Возможности
MLX90614 выполняет два измерения температуры: температуру объекта и температуру окружающей среды. Температура объекта — это бесконтактное измерение, «наблюдаемое» датчиком, а температура окружающей среды измеряет температуру на кристалле датчика. Температура окружающей среды может использоваться для калибровки данных, но то, что нам действительно нужно, — это измерение температуры объекта.
Поскольку датчику не нужно касаться измеряемого объекта, он может определять более широкий диапазон температур, чем большинство цифровых датчиков: измерения температуры объекта варьируются от -70 до 382,2°C, а температура окружающей среды — от -40 до 125°C. Оба измерения имеют разрешение 0,02°C со стандартной точностью 0,5°C при комнатных температурах.
Встроенный оптический фильтр
MLX90614 имеет встроенный оптический фильтр, который отсекает видимый и ближний инфракрасный свет, уменьшая их влияние на измерения. Он также обеспечивает защиту от фонового освещения и солнечного света.
Требования к питанию
Модуль оснащён прецизионным стабилизатором напряжения 662K 3,3V и преобразователем логических уровней, поэтому вы можете использовать его с любым микроконтроллером на 3,3V или 5V без каких-либо проблем.
MLX90614 потребляет менее 2 мА во время измерения. Это низкое энергопотребление позволяет использовать его в устройствах с батарейным питанием, таких как портативные тепловые сканеры.
Вот полные характеристики:
Температура объекта |
-70°C to 382.2°C |
|---|---|
Температура окружающей среды |
-40°C to 85°C |
Точность |
±0.5°C (при комнатных температурах) |
Разрешение |
±0.2°C |
Поле зрения |
90° |
Напряжение питания |
3.3 to 5.5V |
Рабочий ток |
2mA |
Для получения дополнительной информации обратитесь к техническому описанию ниже.
Как работают инфракрасные термометры?
Если вы когда-либо использовали или видели, как кто-то использует инфракрасный термометр, вы, возможно, задавались вопросом: «Как вообще возможен такой способ измерения?»
Инфракрасные термометры, такие как MLX90614, используют тот факт, что любой объект, включая людей, с температурой выше абсолютного нуля (0°K или -273°C) излучает (невидимый для человеческого глаза) свет в инфракрасном спектре, прямо пропорциональный его температуре. См. `закон Стефана-Больцмана `_.
Внутри MLX90614 представляет собой пару из двух устройств: инфракрасного термостолбикового детектора и ASSP (процессора обработки сигналов). Вот внутренняя блок-схема MLX90614, показывающая и термостолбик, и ASSP.
ИК-излучение, испускаемое объектом или человеком, сначала фокусируется собирающей (выпуклой) линзой на специальный инфракрасный детектор, называемый термостолбиком (Thermopile). Термостолбик определяет, сколько инфракрасной энергии излучается объектами в его поле зрения (FOV), и генерирует электрический сигнал, пропорциональный этому.
Напряжение, создаваемое термостолбиком, считывается 17-битным АЦП процессора ASSP, обрабатывается и передаётся микроконтроллеру.
И самое лучшее — весь этот процесс происходит за доли секунды.
Поле зрения (FOV)
Поле зрения (FOV) ИК-термометра — одна из наиболее важных характеристик, о которых нужно знать.
Оно определяется углом, в пределах которого датчик чувствителен к тепловому излучению. Это означает, что датчик обнаружит все объекты в поле зрения и вернёт среднюю температуру всех объектов в нём.
Важно, чтобы измеряемый объект полностью заполнял поле зрения. В противном случае датчик может обнаружить объекты, которые не должны быть измерены, что приведёт к неточным измерениям.
Поле зрения также определяет соотношение между расстоянием до объекта и областью измерения. Если датчик находится близко к объекту, область измерения очень узкая, но расширяется по мере удаления.
Поле зрения MLX90614 имеет коническую форму и относительно широкое: 90°. Это означает, что на каждый 1 см удаления от объекта область измерения увеличивается на 2 см. Если вы находитесь на расстоянии 30 см (примерно 1 фут) от объекта, область измерения составит 60 см (примерно 2 фута).
Выходные интерфейсы MLX90614
MLX90614 поддерживает два интерфейса; для доступа ко второму потребуется первый. Двухпроводный интерфейс SMBus является основным средством связи с MLX90614. После настройки SMBus вы можете настроить MLX90614 для генерации PWM-сигнала (с широтно-импульсной модуляцией), представляющего измеренную температуру.
Интерфейс SMBus
Основной интерфейс MLX90614 — это двухпроводный интерфейс SMBus, который по сути аналогичен I2C (слегка нестандартный тип I2C, называемый «repeated-start») и использует те же два сигнала — SDA и SCL — для передачи данных и тактирования соответственно. Ведущее устройство управляет тактовым сигналом, а сигнал данных управляется в обоих направлениях.
Каждый MLX90614 имеет I2C-адрес по умолчанию 0x5A. Однако его можно запрограммировать на один из 127 I2C-адресов, так что вы можете подключить до 127 устройств на одну шину для получения более обширной карты температур.
Интерфейс PWM
Данные MLX90614 также можно считывать через интерфейс PWM. Обратите внимание, что для использования PWM MLX90614 сначала необходимо настроить через SMBus.
После настройки MLX90614 выдаёт непрерывный 10-битный PWM-сигнал на выводе SDA, представляющий измеренную температуру объекта. По умолчанию PWM-сигнал охватывает диапазон от -20°C до 120°C с разрешением 0,14°C, но это также можно настроить через SMBus.
Термореле / Термопереключатель
Настроив этот диапазон (установив минимальные и максимальные значения температуры), PWM-выход можно превратить в сигнал «термореле / термопереключателя».
Когда температура превышает установленный порог, вывод PWM срабатывает и может использоваться как источник прерывания или для прямого управления реле. Обратите внимание, что выходная нагрузочная способность составляет всего 25 мА.
Распиновка модуля MLX90614
Модуль MLX90614 выводит следующие подключения.
VCC — это вывод питания. Его можно подключить к выходу 3,3V или 5V Arduino.
GND — это земля.
SCL — вывод тактирования I2C, подключите к линии тактирования I2C Arduino.
SDA — вывод данных I2C, подключите к линии данных I2C Arduino.
Схема подключения модуля MLX90614 к Arduino
Теперь, когда мы знаем всё о модуле, можно приступить к его подключению к Arduino!
Начните с подключения вывода VCC к источнику питания — 5V подойдёт. Используйте то же напряжение, на котором основана логика вашего микроконтроллера. Для большинства Arduino это 5V. Для устройств с логикой 3,3V используйте 3,3V. Подключите GND к общей земле.
Подключите вывод SCL к выводу тактирования I2C, а вывод SDA — к выводу данных I2C на Arduino. Обратите внимание, что на каждой плате Arduino свои выводы I2C. На платах Arduino с компоновкой R3 линии SDA (данные) и SCL (тактирование) расположены на штыревых разъёмах рядом с выводом AREF. Они также известны как A5 (SCL) и A4 (SDA).
На следующей иллюстрации показана схема подключения.
Установка библиотеки
Для датчика MLX90614 доступно несколько библиотек. Однако в нашем примере мы используем библиотеку Adafruit, которая очень проста в использовании, хотя поддерживает только базовые измерения температуры, а не расширенные функции датчика. Библиотеку можно загрузить из Менеджера библиотек Arduino IDE.
Для установки библиотеки перейдите в Sketch > Include Library > Manage Libraries… Подождите, пока Менеджер библиотек загрузит индекс и обновит список установленных библиотек.
Отфильтруйте поиск, введя „adafruit mlx90614“. Нажмите на запись и выберите Install.
Код Arduino
Ниже представлен базовый скетч Arduino, позволяющий быстро проверить функциональность MLX90614. Загрузите его на Arduino. Вы должны увидеть температуру окружающей среды и объекта, выводимые через последовательный интерфейс.
#include <Adafruit_MLX90614.h>
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
void setup() {
Serial.begin(9600);
while (!Serial);
if (!mlx.begin()) {
Serial.println("Error connecting to MLX sensor. Check wiring.");
while (1);
};
}
void loop() {
Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempC());
Serial.print("*C\tObject = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C");
Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempF());
Serial.print("*F\tObject = "); Serial.print(mlx.readObjectTempF()); Serial.println("*F");
Serial.println();
delay(500);
}
После загрузки скетча откройте монитор последовательного порта, установив скорость передачи данных 9600 бод. Вы должны увидеть потоковый вывод температуры окружающей среды и температуры объекта.
Попробуйте направить датчик на предметы вокруг вас или на лоб, чтобы убедиться, что у вас нет температуры!
Примечание:
Электромагнитные помехи могут дать некорректные результаты. Поэтому при использовании инфракрасного термометра убедитесь, что ваш телефон, микроволновая печь, WiFi-роутер, телевизор или любое электрическое устройство находятся на достаточном расстоянии.
Объяснение кода:
Скетч начинается с подключения библиотеки Adafruit_MLX90614. В той же глобальной области определяется объект Adafruit_MLX90614 с именем mlx.
#include <Adafruit_MLX90614.h>
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
В функции setup мы инициализируем последовательную связь с ПК и вызываем функцию begin().
Функция begin() инициализирует интерфейс I2C. Эта функция опционально принимает параметр (7-битный адрес вашего датчика), но если оставить её без параметра, она предполагает адрес по умолчанию (0x5A).
void setup() {
Serial.begin(9600);
while (!Serial);
if (!mlx.begin()) {
Serial.println("Error connecting to MLX sensor. Check wiring.");
while (1);
};
}
В функции loop мы просто выводим текущие значения температуры окружающей среды и объекта с помощью функций readAmbientTempC()/mlx.readAmbientTempF() и readObjectTempC()/readObjectTempF().
void loop() {
Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempC());
Serial.print("*C\tObject = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C");
Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempF());
Serial.print("*F\tObject = "); Serial.print(mlx.readObjectTempF()); Serial.println("*F");
Serial.println();
delay(500);
}