[Из песочницы] Тепловизор на платформе Arduino UNO

Предисловие


37831938e0254755aca0ab96cd54a85e.jpg

Шел 6-й семестр обучения, перед нами (т.к. над проектом работали 3 человека) стала серьёзная задача — необходимо сделать аппаратный курсовой проект. Было много различных идей: автопилот для автомобиля, прибор ночного видения и др. Но выбор пал на тепловизор, так как он получался не сильно простым и не сильно затратным. Да и кто не мечтал о своем личном тепловизоре? В данной статье мы расскажем о том, как нам удалось собрать тепловизор с довольно неплохими характеристиками в домашних условиях.

Подготовка


Прежде всего, необходимо было определиться, какие модули нам были необходимы для создания недорогого тепловизора, но при этом обладающего приемлемыми характеристиками. В итоге, взвесив все «за» и «против», было решено построить тепловизор на основе сервокронштейна, образованного из двух сервоприводов, ИК-датчика, лазера для лучшего позиционирования сканируемой области, а также Arduino для управления сигналами устройства. Определившись с нужными модулями, необходимо было это все где-то купить. Необходимый нам ИК-датчик оказался довольно редким и не самым дешевым. Но всё это нашлось в известном китайском интернет-магазине, оставалось только дождаться, пока придут посылки.

Разработка схемы


ff3141718ed84c6ab2e0afad073827f6.png

Для воплощения нашей задумки мы решили остановиться на Arduino UNO. Мы решили выбрать именно её, так как у нас уже был опыт работы с этой платформой и требовалась быстрота сборки устройства. На схеме в качестве подтягивающих резисторов R1 и R2 используются резисторы номиналом 4.7 кОм. В качестве ИК-датчика был выбран MLX90614 bci. В основном из-за того, что у него узкое поле зрения, а также из-за его легкости в эксплуатации. Также датчик достаточно компактный и мало весит, что облегчает работу сервоприводам, которые и так работали с небольшими заеданиями. Для лазера и сервокронштейна были выбраны первые приглянувшиеся, совместимые с arduino, модули. С лазером повезло (да и что могло быть не так с лазером), а сервоприводы, как уже упоминалось, пришли не очень хорошие — плохо реагировали на короткие передвижения, часто заедали. Пришлось раскручивать и смазывать, что немного улучшило ситуацию.

Сборка тепловизора


Со сборкой схемы проблем не возникло. После того, как схема была собрана и проверена на работоспособность, стало необходимо спрятать всё ненужное, дабы всё выглядело приемлимо и не было лишних вопросов. Было несколько вариантов, но так как лежал бесхозным кусок оргстекла, то выбор был очевиден. Поэтому мы решили изготовить корпус из оргстекла, в котором будут лежать все провода и плата, а наверху оставить только сервокронштейн с датчиками и лазером. Как мы считаем, получилось красиво и практично.

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

968d331ac1964bb5a0af622f86b08947.jpg

Так выглядело наше устройство на пути к полной готовности:

6bf9665430254cc08c7d98d05d5dbf19.jpg

Инфракрасный датчик был соединен с лазером и закреплен на сервокронштейне. Данная конструкция, несмотря на все недочеты, показала себя на хорошем уровне. Все модули, за исключением заедающих сервоприводов, выполняли возложенные на них функции. В результате у нас получилось вот такое компактное устройство:

6333959da294449f894100f1cc5edf38.jpg

Работа с тепловизором


Самым простым способом управлять устройством является управление с компьютера. Питание также осуществляется от компьютера. Датчик посылает данные измерений в com-порт. Поэтому была написана программа для подачи команд устройству и считывания данных с датчика.
Алгоритм работы тепловизора довольно прост:

  • Открываем com-порт arduino
  • Осуществляем позиционирование датчика. Для задания области сканирования устанавливаются 2 точки: bot — нижняя левая точка изображения, mid — центр изображения.
  • Запускаем сканирование (сканирование ведётся примерно 2 минуты при использовании режима »64×48 пикселей»)
  • Собираем полученные от датчика данные в массив
  • Формируем изображение


Интерфейс программы


24cedb9d390f43b1a2c16af3fff715b7.jpg

Как можно видеть на скриншоте, интерфейс программы выполнен в минималистичном стиле — только всё самое необходимое для работы. Названия кнопок говорят сами за себя. При нажатии на определённый пиксель тепловой карты будет выведена соответствующая ему температура. Цвета для температуры выбираются относительно текущих результатов сканирования, т.е. самая высокая температура будет обозначена красным, а самая низкая — синим, пусть даже эти значения будут отличаться на 2–3 градуса.
Как можно проверить работоспособность тепловизора? Конечно же просканировав одного из его создателей! Как можно видеть из представленной выше тепловой карты, самым горячим местом является лоб — аж 33,42 ºС. Существуют определенные проблемы с «дальнобойностью» датчика — на расстоянии более чем в 50 см результаты имеют довольно большую погрешность. Но на близком расстоянии показатели температуры определяются очень точно.

Ниже можно увидеть ещё один пример работы устройства:

25419b261d0c40989acaa0f813711276.jpg

Как показывает сканирование, температура воды внутри стакана находится на уровне 38 ºС.

ef33a586e1284ea1897467556436176b.jpg

А вот и видео с демонстрацией работы тепловизора:
Для интересующихся представлены ссылки на исходный код прошивки и приложение:
Прошивка
Приложение

Итоги


У нас получилось устройство, которым можно сканировать небольшие статические предметы. Но есть и минусы — оно совсем непригодно для больших предметов, а если предмет движется, то нет и малейшего шанса получить правильную картину. Однако несомненным плюсом этого устройства является его дешевизна. Все промышленные тепловизоры стоят несколько тысяч долларов, порой и несколько десятков тысяч. И для простого человека промышленный тепловизор совершенно бесполезен, побалуется неделю и положит его пылиться на полку. А для домашних экспериментов достаточно будет и нашего устройства, дешевого и простого.

© Geektimes