Тепловизионная камера на MLX90640 и Raspberry Pi


В этом проекте мы создадим собственную тепловизионную камеру с использованием датчика MLX90640 и платы Raspberry Pi. Дальняя инфракрасная камера MLX90640 представляет собой массив из 768 (32×24) тепловых датчиков, которые могут определять температуру от -40 до 300°C с точностью приблизительно 1°C.

Тепловизионная камера на MLX90640 и Raspberry Pi

Ранее на нашем сайте мы рассматривали проект тепловизионной камеры с использованием AMG8833 и платы Raspberry Pi. Но AMG8833 имеет более низкое разрешение 8×8 пикселей, что в сумме составляет 64 тепловых детектора, а датчик MLX90640 обеспечивает более высокое разрешение 32×24 пикселей, что соответствует 768 отдельным тепловыделяющим детекторам. Это более высокое разрешение обеспечивает более подробные тепловые изображения. AMG8833 обеспечивает более низкую частоту обновления 10 Гц, что делает его менее подходящим для мониторинга быстро меняющихся тепловых событий, в то время как MLX90640 поддерживает более высокую частоту обновления до 64 Гц для более плавного захвата тепловизионного видео.

Пример термального изображения с датчика MLX90640

Эта самодельная тепловизионная камера с использованием MLX90640 и Raspberry Pi использует код Python и несколько библиотек Python, таких как Numpy и Matplotlib, для визуализации тепловых изображений на 7-дюймовом ЖК-экране HDMI. Таким образом, создание тепловизионной камеры с использованием Raspberry Pi и MLX90640 — это увлекательный и доступный проект, который может выполнить любой человек с базовыми навыками работы с электроникой. Независимо от того, хотите ли вы обнаружить изменения температуры вокруг дома, определить утечки тепла в строительных конструкциях, создать систему обнаружения лихорадки или просто сделать уникальные инфракрасные фотографии, этот проект станет отличной отправной точкой в этом деле.

Ранее на нашем сайте мы рассматривали проект тепловизора на ESP32 и датчике MLX90640.

Необходимые компоненты

  1. Плата Raspberry Pi 4 (купить на AliExpress).
  2. Датчик MLX90640 (купить на AliExpress).
  3. ЖК-дисплей TS-Pro 7 дюймов (можете использовать любой другой дисплей для Raspberry Pi, с которым привыкли работать).
  4. SD-карта 16/32 ГБ.
  5. Адаптер постоянного тока 5 В, 3 А для Raspberry Pi.
  6. Источник бесперебойного питания с аккумулятором (опционально).
  7. Мышь и клавиатура (опционально).

Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158

ИК-датчик температуры MLX90640

Распиновка микросхемы MLX90640

MLX90640 от Melexis — это компактная, бесконтактная и недорогая матрица тепловых датчиков дальнего инфракрасного диапазона, которая объединяет 768 (32×24) тепловых датчиков в компактном стандартном 4-выводном корпусе TO39.

Этот датчик способен получать подробные тепловые изображения , измеряя инфракрасное излучение, испускаемое объектами в поле его зрения, и преобразуя его в показания температуры в диапазоне от -40°C до 300°C .

Различные коммутационные платы MLX90640

Датчик достигает высокой степени точности, поддерживая приблизительно ±1°C во всем рабочем диапазоне. Кроме того, MLX90640 включает в себя дополнительные функции, такие как датчик температуры окружающей среды и датчик напряжения питания, что повышает его точность и надежность. Данные с ИК-датчиков, а также измерения напряжения окружающей среды и питания хранятся во внутренней оперативной памяти и могут быть доступны через интерфейс I2C.

Тепловизионная камера MLX90640 оснащена матрицей 32×24, в общей сложности получаем 768 отдельных пикселей дальнего инфракрасного диапазона. Каждый пиксель фиксирует данные о температуре, что позволяет получать подробные тепловые изображения и точные измерения температуры по всему полю зрения датчика.

Структурная схема изображения с MLX90640

MLX90640 не только функционален, но и удобен в использовании, подходит как любителям, так и профессионалам. Он поддерживает рабочие напряжения 3,3 В и 5 В и взаимодействует через настраиваемый интерфейс I2C, который может достигать скорости передачи данных до 1 МГц. Этот датчик совместим с такими платформами, как Arduino, Raspberry Pi или STM32.

Возможность датчика регулировать частоту кадров от 0,5 до 64 Гц позволяет пользователям точно настраивать его производительность в зависимости от конкретных требований приложения, будь то отслеживание быстро движущихся объектов или проведение подробных тепловых оценок в течение более медленного периода. Более подробную информацию об этой тепловизионной камере см. в техническом описании MLX90640.

Особенности и преимущества датчика

  • Малый размер, низкая стоимость, ИК-матрица 32×24 пикселей.
  • Легко интегрировать.
  • Стандартный для отрасли четырехвыводной корпус TO39.
  • Заводская калибровка.
  • Эквивалентная разность температур шума (NETD): 0,1K RMS при частоте обновления 1 Гц.
  • Цифровой интерфейс совместимый с I2C.
  • Программируемая частота обновления 0,5 Гц…64 Гц.
  • Напряжение питания 3,3 В.
  • Потребление тока менее 23мА.
  • 2 варианта поля зрения – 55°x35° и 110°x75°.
  • Рабочая температура -40°С ÷ 85°С.
  • Целевая температура -40°C ÷ 300°C.
  • Соответствует нормам RoHS.

Применение MLX90640

  • Высокоточные бесконтактные измерения температуры.
  • Обнаружение вторжения/движения.
  • Обнаружение присутствия/локализация человека.
  • Температурный чувствительный элемент для интеллектуального кондиционирования воздуха в здании.
  • Датчик теплового комфорта в системе управления автомобильным кондиционером.
  • Микроволновые печи.
  • Промышленный контроль температуры движущихся частей.
  • Визуальные ИК-термометры.

Распиновка MLX90640

Тепловизионная камера MLX90640 имеет 4 контакта, которые необходимо подключить к контроллеру/плате, и в настоящее время поддерживаются платы Raspberry Pi, STM32F405R и ESP32.

  1. VCC : Контакт питания, должен быть подключен к источнику питания управления 3,3 В или 5 В.
  2. GND : Заземляющий контакт, соответствует подключению земли (GND).
  3. SDA : Контакт данных для связи I2C, подключенный к GPIO контроллера.
  4. SCL : Тактовый вывод для связи I2C, подключенный к GPIO контроллера

Некоторые варианты модуля тепловизионной камеры MLX90640 оснащены поддержкой протокола связи UART в дополнение к стандартному интерфейсу I2C. Эта функция обеспечивает большую гибкость при интеграции датчика с более широким спектром микроконтроллеров и систем, которые могут предпочесть UART из-за простоты или особых требований к приложению.

Расстояние измерения и поле зрения

Тепловой датчик MLX90640 обеспечивает поле зрения (FOV) 55 градусов или 110 градусов в зависимости от модели.

Принцип измерения поля зрения тепловизионного датчика

Поле зрения (Field of View, FOV) теплового датчика MLX90640 определяется 50%-ным сигналом излучения, полученным его термобатареей, и ориентировано вдоль главной оси датчика. Он измеряет средневзвешенную температуру объектов в пределах этого FOV, требуя полного покрытия цели в пределах FOV для точных показаний.

Варианты MLX90640

MLX90640 — это инфракрасная тепловая матрица датчиков, которая выпускается в двух вариантах: MLX90640BAA и MLX90640BAB.

Варианты MLX90640: MLX90640BAA и MLX90640BAB

  1. MLX90640BAA: имеет более широкое поле зрения 110 ° x 75°. Этот вариант подходит для приложений, где необходимо одновременно наблюдать за большой площадью, например, для наблюдения за широкой зоной или обнаружения присутствия людей в помещении.
  2. MLX90640BAB: имеет более узкое поле зрения 55° x 35°. Этот вариант лучше подходит для сфокусированных тепловых измерений, что делает его идеальным для таких приложений, как тепловое тестирование электронных устройств или обнаружение целевых объектов.

Протокол связи MLX90640

MLX90640 использует протокол связи I2C с поддержкой режима FM+, допуская тактовую частоту до 1 МГц. Он работает исключительно как ведомое устройство на шине I2C. Оба контакта, SDA и SCL, допускают напряжение 5 В, что позволяет напрямую подключаться к сети I2C с напряжением 5 В. Адрес ведомого устройства датчика программируется, поддерживая до 127 различных адресов.

Формат команды записи I2C (по умолчанию используется SA=0x33)

Каждый сеанс начинается с состояния START (SDA переходит из состояния HIGH в состояние LOW, пока SCL находится в состоянии HIGH) и заканчивается состоянием STOP (SDA переходит из состояния LOW в состояние HIGH, пока SCL находится в состоянии HIGH).

Формат команды чтения I2C (по умолчанию используется SA=0x33)

Устройство адресуется с помощью 7-битного адреса подчиненного устройства, за которым следует бит чтения/записи, где HIGH указывает на операцию чтения, а LOW указывает на операцию записи. За каждой передачей байта следует подтверждение (ACK), когда приемник устанавливает линию SDA на низкий уровень, чтобы указать на прием.

Частота обновления MLX90640

Частоту обновления MLX90640 можно настроить с помощью «регистра управления 1» ( 0x800D ), с вариантами от 0,5 Гц до 64 Гц, что соответствует обновлению данных от каждых 2 секунд до каждых 15,6 миллисекунд.

Управление частотой обновления = 011b (4 Гц)

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

Схема проекта и настройка оборудования

Схема подключения датчика MLX90640 к плате Raspberry Pi представлена на следующем рисунке. Как видим, подключение очень простое, поскольку MLX90640 требует всего лишь протокол связи I2C для связи с Raspberry Pi 4.

Схема подключения датчика MLX90640 к плате Raspberry Pi

  • VCC : Подключите контакт VCC MLX90640 к одному из контактов 3,3 В на Raspberry Pi.
  • GND : Подключите контакт GND MLX90640 к одному из контактов заземления на Raspberry Pi.
  • SDA : Подключите вывод SDA MLX90640 к выводу SDA на Raspberry Pi GPIO (вывод 3).
  • SCL : Подключите вывод SCL MLX90640 к выводу SCL на Raspberry Pi GPIO (вывод 5).

Примечание: для варианта датчика с контактами UART подключите PS к GND чтобы включить связь I2C.

Для визуализации тепловых изображений вам понадобится портативный дисплей HMI. В моем случае я использовал 7-дюймовый дисплей TS-7 Pro от компании SounFounder.

Обратная сторона 7-дюймового дисплея TS-7 Pro

Благодаря разрешению 1024×600 пикселей он предлагает удобный способ отображения контента и взаимодействия с платой Raspberry Pi, которая идеально помещается на дисплее.

Дисплей TS-7 Pro с подключенными платой Raspberry Pi и датчиком MLX90640

Аналогично, нам также нужен блок питания для Raspberry Pi и блока дисплея. Я использовал PiPower UPS Supply от SunFounder, который представляет собой специальный портативный UPS Supply, разработанный для Raspberry Pi 4.

Источник питания PiPower

Печатная плата поставляется с аккумуляторной батареей напряжением 7,4 В и емкостью 2000 мАч.

Комплект поставки PiPower

Вот как выглядит наше устройство после подключения портативного источника бесперебойного питания PiPower к Raspberry Pi.

Плата Raspberry Pi с подключенным портативным источником бесперебойного питания PiPower

Вы можете сдвинуть кнопку питания на печатной плате PiPower, и вы увидите, как Raspberry Pi немедленно загрузится.

Подготовка Raspberry Pi для использования с MLX90640

Сначала установите операционную систему на свою Raspberry Pi. Если у вас есть HDMI-монитор , вы можете напрямую начать программирование. В моем случае я подключил свой Raspberry Pi к VNC-просмотрщику через SSH-терминал. Это означает, что я могу программировать свой Raspberry Pi удаленно.

Собранная конструкция проекта

Откройте терминал Raspberry Pi. Давайте сначала обновим Raspberry Pi. Следующая команда обновляет список доступных пакетов и их версий.

Затем выполните команду обновления, чтобы установить более новые версии имеющихся у вас пакетов.

Затем установите библиотеку matplotlib для создания статических, интерактивных и анимированных визуализаций на Python.

Установите библиотеку SciPy. Эта библиотека используется для научных и технических вычислений.

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

Затем установите пакет python-smbus, необходимый для доступа к шине I2C через Python.

Следующая команда установит i2c-tools, полезные для проверки и отладки коммуникаций I2C.

Теперь откройте файл конфигурации загрузки Raspberry Pi в текстовом редакторе nano с помощью следующей команды.

Включение интерфейса I2C в файле настроек Raspberry Pi

Добавьте dtparam=i2c_arm=on, i2c_arm_baudrate=400000, чтобы включить интерфейс I2C и установить скорость передачи данных для более быстрой передачи данных.

Теперь перезагрузите Raspberry Pi чтобы изменения вступили в силу.

После перезапуска Raspberry Pi выполните следующую команду для сканирования и отображения устройств, подключенных к шине I2C, что полезно для проверки подключения.

Вывод 0x33 указывает на то, что обнаружено устройство по адресу I2C 0x33 на шине I2C вашего Raspberry Pi. Этот адрес соответствует устройству, которое активно взаимодействует через I2C, а именно датчику тепловизионной камеры MLX90640.

Определение подключенных устройств к шине I2C платы Raspberry Pi

Это подтверждает, что датчик MLX90640 правильно подключен и распознан вашим Raspberry Pi.

Я просмотрел технические характеристики датчика от компании Melexis, которые содержат сложные математические уравнения и многочисленные расчеты. Понимание всех этих математических деталей может показаться сложным, требующим почти докторской степени по физике или математике. К счастью, компания Adafruit разработала библиотеку, которая обрабатывает все эти сложные расчеты, значительно упрощая процесс для пользователей.

Выполните следующую команду.

Она установит RPi.GPIO для управления выводами GPIO на Raspberry Pi и Adafruit Blinka, уровень совместимости, позволяющий запускать библиотеки CircuitPython на Raspberry Pi.

Наконец, нам нужно установить библиотеку Adafruit MLX90640. Поэтому выполните следующую команду.

Эта последовательность команд настраивает Raspberry Pi для использования датчика MLX90640, гарантируя, что все необходимые библиотеки и инструменты установлены и настроены правильно.

Скрипт Python для сбора показаний средней температуры

Поскольку настройка Raspberry Pi завершена, нам необходимо перейти к программированию.

Откройте Thonny IDE и вставьте следующий скрипт Python в окно редактора.

Этот скрипт Python устанавливает соединение I2C для непрерывного считывания и отображения средней температуры с датчика тепловизионной камеры MLX90640 с частотой обновления 2 Гц.

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

Тестирование считывания средней температуры с датчика MLX90640

Это тестирование подтверждает работу вашего датчика MLX90640. Для наблюдения значений температуры до 300 градусов вы можете поместить горячий объект рядом с датчиком.

Визуализация тепловизионного изображения с помощью MLX90640 и Raspberry Pi

Для визуализации тепловых изображений с помощью matplotlib и numpy я использовал код Python из репозитория GitHub от Maker Portal. Я модифицировал скрипт Python в соответствии со своими конкретными потребностями.

Тепловые данные с датчика MLX90640 считываются и визуализируются с помощью функции «imshow», которая отображает данные с началом координат в верхнем левом углу, требуя горизонтального переворота данных для точного представления пространственного выходного сигнала датчика.

Датчик MLX90640, который я использую, поддерживает максимальную частоту обновления 64 Гц, но из-за ограничений моего Raspberry Pi я установил ее на 4 Гц.

Эксплуатация шины I2C на высоких скоростях, например, 1 Мбит/с, для требовательных приложений, таких как тепловидение в реальном времени с датчиком MLX90640, может привести к увеличению энергопотребления и тепловыделения. Крайне важно обеспечить адекватное охлаждение Raspberry Pi, чтобы предотвратить тепловое дросселирование или повреждение. Для поддержания стабильной работы и предотвращения перегрева при превышении скорости связи I2C типичных 400 кбит/с рекомендуется использовать надлежащую вентиляцию или активные решения по охлаждению, такие как радиаторы или вентиляторы.

При запуске этого модифицированного кода отображаются тепловые изображения, как показано на рисунке ниже.

Получение тепловизионного изображения с датчика MLX90640

Вы можете взаимодействовать с тепловизионной камерой MLX90640, расположившись или проведя рукой перед датчиком.

Получение тепловизионного изображения с датчика MLX90640 в динамике

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

Интерполяция данных в реальном времени с использованием MLX90640

Интерполяция — это вычислительный метод в Python, используемый для оценки неизвестных значений путем вычисления между двумя известными значениями.

Принцип интерполяции

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

В обновленном скрипте Python интерполяция применяется к данным с датчика тепловизионной камеры MLX90640, что позволяет отображать постоянно обновляемый поток тепловизионного видео в реальном времени .

Скрипт Python извлекает тепловые данные размером 24×32 пикселя, которые затем визуализируются в реальном времени с помощью функции Matplotlib imshow. Для выравнивания с ориентацией датчика массив данных переворачивается по горизонтали перед отображением. Визуализация включает динамически настраиваемую цветовую карту для диапазонов температур, что повышает четкость и понимание изображения.

Для эффективной обработки данных скрипт использует интерактивный график Matplotlib (plt.ion()), который непрерывно обновляется в цикле.

Однако эта настройка приводит к максимальной частоте кадров около 4 кадров в секунду из-за ограничений вычислений и передачи данных, присущих Raspberry Pi, а также ограничений разрешения датчика. Для улучшения визуального качества вывода можно использовать методы интерполяции или сглаживания, хотя они потребуют тщательного управления, чтобы избежать дальнейшего снижения частоты кадров. Несмотря на эти улучшения, производительность системы принципиально ограничена аппаратными возможностями Raspberry Pi и скоростью связи I2C.

При запуске этого кода вы заметите значительное улучшение визуального качества тепловизионного видео.

Тестирование работы проекта с включенной интерполяцией

Ранее пикселизированные изображения теперь стали более гладкими и визуально привлекательными, демонстрируя мощный эффект интерполяции.

Тестирование работы проекта с включенной интерполяцией в динамике

Заключение

В этом проекте показано, как построить самодельную тепловизионную камеру высокого разрешения с использованием датчика MLX90640 и платы Raspberry Pi. В этой установке используется массив 32×24 из 768 тепловых датчиков MLX90640, что значительно превосходит возможности ранее использовавшегося датчика AMG8833. Он обеспечивает улучшенную детализацию с более высокой частотой обновления до 64 Гц. Используя доступные инструменты и библиотеки, такие как Python, Numpy и Matplotlib, любой человек с базовыми навыками работы с электроникой может создать тепловизионную систему, способную обнаруживать едва заметные изменения температуры. Будь то для практического применения в доме или для захвата уникальных инфракрасных изображений, этот проект представляет собой ценное и экономически эффективное введение в мир тепловидения. Вы можете построить систему обнаружения лихорадки с помощью MLX90640 и OpenCV.

Видео, демонстрирующее работу проекта

Ссылка на видео на YouTube

(Проголосуй первым!)
Загрузка...
32 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *