Термокамера FLIR Lepton и Raspberry Pi
Первая ассоциация, которая возникает у старшего поколения при слове тепловизор — фильм Хищник. Именно в этом голливудском фильме 80-х годов инопланетный охотник использовал тепловизор для наблюдения за своими жертвами в темноте ночных джунглей. С тех самых пор я мечтал заиметь такое устройство для личных целей.
Спустя много лет, в 2013-м году у меня наконец-то получилось раздобыть недорогой датчик MLX90620 с матрицей 16×4 точек. Каждая точка в этом устройстве представляет собой микроболометр — термочувствительный элемент, меняющий свое сопротивление вследствие нагревания, под воздействием падающего на него электромагнитного излучения. Оптика для тепловизоров обычно изготавливается из германия, который хорошо пропускает и преломляет волны в диапазоне тепловидения.
В свое время на одном из тематических ресурсов была опубликована небольшая статья про использование MLX90620 с Arduino. Сегодня в продаже есть и более совершенные матрицы, в ценовом диапазоне MLX (а есть даже и дешевле). Основная проблема при покупке таких приборов — их двойное назначение. Бывало, что отказывали в покупке подобных матриц в США.
И вот, спустя еще 3 года, в руках оказался куда более интересный прибор — термокамера FLIR Lepton. В этом датчике тоже используется микроболометрическая матрица, но уже с разрешением 80×60 точек! Это гораздо веселее, чем 16×4, согласитесь? Вот так она выглядит:
Немного важных параметров:
Примечание
детектируемый спектр: 8-14мкм;
размер пиксела: 17мкм;
оптимальная частота кадров: 8,6Гц;
чувствительность: менее 50мК;
температурная коррекция: автоматическая;
угол обзора: 51 по горизонтали и 63,5 по диагонали;
формат данных: 14бит, 16бит (c АРУ) или 24бит RGB (с АРУ).
Надо сказать, FLIR Lepton — очень популярная термокамера, так что инструкций по её использованию в интернете предостаточно. В качестве референса использовалась инструкция от sparkfun.
Подключение
На плате виден интерфейс I2C и SPI. По первому происходит обмен управляющими командами, а второй служит для приема видеопотока с датчика. Оставшиеся два пина VIN и GND — питание.
Для эксперимента с датчиком нам потребуется более или менее мощная вычислительная система, например, Raspberry Pi. Подключим FLIR Lepton к микрокомпьютеру по следующей схеме:
Как видим, ничего сложного. Требуется всего восемь проводков мама-мама. Следующий шаг — установка на RPi соответствующих программ.
Установка ПО для просмотра видеопотока
Первое, что нам потребуется сделать — это активировать SPI и I2C интерфейсы в RPi. Делается это так.
1. Открываем меню настроек RPi с помощью команды:
sudo raspi-config
Команду нужно вводить в терминале, разумеется. По-умолчанию в Raspbian стоит терминал LXTerminal. Его и используем.
2. Затем, в появившемся меню выбираем пункт Advanced options.
3. В Advanced options выбираем пункт Enable/Disable automatic loading of SPI kernel module.
4. Соглашаемся со всем, что скажут и выполняем аналогичные действия для пункта I2C.
Теперь мы можем подключиться к камере. Попробуем получить с нее изображение с помощью стандартного пакета LeptonModule. В пакете есть примеры работы с FLIR Lepton на разных платформах.
5. LeptonModule использует фреймворк Qt4, сначала поставим его. Qt в нем используется для экранных форм, необходимых для отображения видеопотока с камеры.
sudo apt-get install qt4-dev-tools
В результате появится что-то типа этого:
Отвечаем yes и ждем завершения установки.
6. Теперь ставим сам LeptonModule. Скачиваем исходные коды с github командой:
cd /home/pi
git clone https://github.com/PureEngineering/LeptonModule
7. Собираем библиотеки. Для этого внутри домашней папки выполняем:
cd LeptonModule/software/raspberrypi_libs/leptonSDKEmb32PUB
make
8. Далее собираем бинарник в папке raspberrypi_video:
cd ../../raspberrypi_video
qmake && make
Подсказка
Папки на картинках могут не совпадать, ибо там используется старый пакет.
9. Всё. Запускаем бинарник.
sudo ./raspberrypi_video
Предупреждение
Если запустится черное окошко с красным квадратом, как на скриншоте, значит модуль инициализировался с ошибкой. Сначала надо проверить все соединения. Если все верно, пробуем сделать грязный хак: на sparkfun советуют нежно вытащить сам датчик из паза, и затем так же нежно воткнуть обратно. Способ дикий, но рабочий и достаточно безопасный. Таковы особенности стандартных библиотек, увы.
Рабочий поток с камеры должен выглядеть следующим образом:
Совет
Стандартная библиотека не единственный способ получения видеопотока с датчика. На форуме FLIR можно найти разные решения так называемой «проблемы красного квадрата». Не всем нравится вытаскивать датчик из слота при каждом запуске. Вот к примеру небольшое приложение, которое мне понравилось: https://groups.google.com/forum/#!msg/flir-lepton/GWHD1KMVYaE/S4pq5vXmpOkJ
Ну и разумеется, вы всегда можете сами написать приложение для получения данных с датчика на любом языке. Благо, протокол обмена весьма простой и хорошо документированный. Для начала рекомендуем разобрать код еще одного полезного примера — raspberrypi_capture, о котором сейчас и пойдет речь.
Просто снимок
Для того чтобы захватить один кадр, можно не ставить Qt и использовать стандартную SDK библиотеку. Достаточно собрать пример из папки raspberrypi_capture:
cd LeptonModule/software/raspberrypi_libs/leptonSDKEmb32PUB/raspberrypi_capture
make
После этого запускаем бинарник, и получаем кадр в инопланетном формате PGM:
../raspberrypi_capture
Примечание
PGM — редко встретишь на просторах интернета. Это очень примитивный формат, представляющий изображение в градациях серого. Файл PGM — это набор целых чисел, часто 16-битных.
Но градации серого — это не то что мы все ждем от снимков тепловизора. Даешь радужную палитру! Чтобы превратить pgm файлы во что-то удобное и цветное, мы используем python-скрипт, конвертирующий pgm в png с заданной палитрой. Скрипт можно скачать на гитхабе:
https://github.com/makeitlab/software_tools/tree/master/Converters/Pgm2Png
Для работы скрипту потребуется библиотека pypng.
Скрипт имеет два аргумента. Первый аргумент — целевой файл. Это может быть файл, а могут быть все файлы в текущей директории (*). Второй аргумент задает масштаб, ибо не очень то интересно смотреть снимки разрешением 80×60. Собственно, пример использования:
python.exe pgmtocolor.py * 3
Смотрим на теплое
Для того, чтобы поснимать разные теплые уголки нашего хакспейса и внешнего мира, мы собрали на базе FLIR Lepton мобильный термофотоаппарат:
Хотелось скорее запустить аппарат, так что корпус получился весьма утилитарный. Внутри размещается Raspberry Pi B rev.2, два аккумулятора 18650, стабилизатор напряжения типа UBEC и сам FLIR Lepton. Сзади корпуса имеется кнопка затвора, а на верхней боковине тумблер питания.
Наконец, небольшая подборка снимков хорошо известных предметов. Горячий ноутбук и трубы отопления.
Девушка с кружкой чая и суп на плите.
Блок питания ноутбука, торчащий из розетки — слева. Справа — чайник.
Другое место и время — офис. В полу коридора виден мощный след трубы отопления. Пол реально теплый в этом месте. Справа радиатор на стене под холодным окном.
Системник с открытым бортом и щиток с автоматами.
В окрестностях хакспейса. На левом снимке дверь изнутри здания. Видны мостики холода. Справа теплое окно второго этажа, снятое с улицы.
Капот припаркованной машины — слева. То, что под капотом — справа.
Теплый тормозной диск — слева. Человек, зашедший с улицы — справа. Щеки и подбородок еще не нагрелись.
Важно
Конечно, тепловизором сегодня никого не удивишь. Готовый прибор можно купить за 100-150 тыс. руб., так что о дефиците технологии уже говорить не приходится. Но для целей DIY такие готовые приборы дороговаты — в 7 раз дороже, чем FLIR Lepton. В этих условиях датчик с неплохим разрешением за 250$ — это крайне выгодное предложение.
Применений для FLIR Lepton можно найти массу: от приборов контроля утечек тепла и охранных систем, до гибридных систем машинного зрения робота. Собственно, как раз для последнего варианта он нам и понадобился.
Совет
О новых идеях с тепловизором и других проектах на базе Raspberry Pi и Arduino читайте в обучающих материалах AlashEd Wiki.