Предисловие




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

Подготовка


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

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




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

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


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

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



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



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



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


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

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




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

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



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



А вот и видео с демонстрацией работы тепловизора:



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

Прошивка
Приложение

Итоги


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

Комментарии (40)


  1. Meklon
    18.05.2016 11:56

    Великолепно. Нужна еще вебкамера с той же направленностью, чтобы overlay делать. Сколько стоил датчик?


    1. sacredik
      18.05.2016 12:06

      Примерно 20$-28$


      1. DUMON
        18.05.2016 12:11
        +1

        Если что, sacredik также является одним из авторов устройства, так что не удивляйтесь, если он отвечает на вопросы в комментариях)


      1. sacredik
        18.05.2016 12:34
        +1

        Что касается камеры. Изначально хотели взять веб-камеру от ноутбука, была найдена такая веб-камера (но к сожалению она была неисправна). Новую камеру не хотелось покупать, а модули к arduino заказывать было уже некогда(да и у них, как нам показалось, не очень картинка). При работе мы просто ставили веб-камеру рядом без установки ее в корпус(пример картинки со стаканом — это изображение с веб-камеры стоящей перед корпусом).


  1. abstracto
    18.05.2016 11:58

    за файлы для 3d принтера был-бы благодарен.


    1. sacredik
      18.05.2016 12:07
      +1

      К сожалению не использовали 3dпринтер. Сервоприводы взяли вместе с кронштейном.


    1. supercawa
      18.05.2016 17:07
      +2

      Ищите на ThingIverse.com по ключевому слову sg90, вот к примеру, что то похожее (http://www.thingiverse.com/thing:501701). Ну или купите на Aliexpress за 40 рублей (так же ищите по ключевому слову «sg90», а потом отсортируйте по цене результат поиска в первых строках как раз будут кронштейны, что на фото в этой статье).


      1. abstracto
        18.05.2016 17:15
        +1

        блин вот реально, комментарий написать силы есть, а подумать нет. большое спасибо! понять не могу как самому в голову не пришло


  1. mmMike
    18.05.2016 12:00
    +4

    Я же правильно понимаю, что это сделано под "влиянием" https://geektimes.ru/post/257850/ ?


    А можно подробности (если конечно такие измерения проводили) из практической эксплуатации этого датчика:


    1. Минимальное время для измерения одной точки? Т.е. для более менее точного измерения температуры при переходе от пятна с 20 градусами, до 100 градусами, на сколько нужно зафиксировать позицию, что бы получить результат ну скажем с 20% точностью.
    2. какой угол зрения датчика с данной "линзой" ?

    спасибо заранее..


    1. sacredik
      18.05.2016 13:07

      Угол, если не ошибаюсь, 5 градусов(по документации).Всего мы брали «матрицу 64(столбца)*48(строк)». Весь скан, с учетом передвижения, занимает примерно 3 минуты. На видео демонстрации за 1 подъем устройство берет 48 точек, приблизительное время подъема 2,83 секунды. Тестировал на стакане с залитой из чайника водой на расстоянии примерно 50 см. Выдавал 69.9 градусов в центре (с учетом того, что от момента заливания закипевшей воды до сканинга прошло около 15-20 минут). Через 6 минут после выдавал в центре стакана 59.02. Добавил результаты на гитхаб(skan60_20(1), skan60_20(2)) (папка results, в том же репозитории, что и код ссылки в статье)


      1. mmMike
        18.05.2016 14:07

        Угол, если не ошибаюсь, 5 градусов(по документации).

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


        Весь скан, с учетом передвижения, занимает примерно 3 минуты

        Я вот и хотел спросить, а на основе чего именно такая скорость сканирования была выбрана.
        Из соображений "если больше, то больше ошибка определения температуры"? Или еще каких?


        Т.е. можно ли существенно быстрее?


    1. AlanDrakes
      18.05.2016 20:05

      Никак не возьму себя в руки, чтобы вплотную заняться этим датчиком, но что есть:.
      1. Измеряемую температуру отображает почти мгновенно. Реально достаточно 1-2 периодов измерений для получения точного результата (0.3-0.5 секунд).
      2. Есть датчик с «родной» линзой — около 5°, вероятно даже более острый угол.
      Чтобы получить дальнобойный — нужна внешняя оптика. Естественно, не {стекло, акрил, пластик} а германиевая линза. Крайне дорого.

      PS: Мне тоже вспомнилась та самая статья.


      1. mmMike
        19.05.2016 07:08

        Спасибо за информацию.


        Как то хотел сделать нечто то подобное. Но останавливает практически 0-я ценность результата и вторичность (не интересно повторять).
        А пока только наблюдаю за тем как цена за 2 года плавно снизилась с 60$ до 35$ (на e-bay).


        Измеряемую температуру отображает почти мгновенно. Реально достаточно 1-2 периодов измерений для получения точного результата (0.3-0.5 секунд).

        Мда… тогда и понятно откуда 3 минуты взялось. Это для разового измерения в интерактивном режиме 300ms "почти мгновенно". Для режима сканирования это слезы.


        Придется ждать падения цен на MLX90614 или появления дешевых матриц типа MLX90620.


        Есть датчик с «родной» линзой — около 5°, вероятно даже более острый угол.

        В документации то диаграмма весьма красивая нарисована. Ну раз никто не нашел время проверить по факту, то наверное нужно считать, что так оно и есть.


        Было бы интересно, если бы со штатной "линзой" в этом ценовом диапазоне, хотя бы на 50 метрах ловился контраст между 20 и 30 градусами (человек/животное). Для FOV=5 это не реально.


        Но по факту, никто из похвалившихся разработкой, на открытой местности тестов не делает. Все в помещении на 5 метрах максимум картинки тестов.


        1. AlanDrakes
          19.05.2016 12:32

          Придется ждать падения цен на MLX90614 или появления дешевых матриц типа MLX90620.

          MLX90620 — крайне дорого (для «побаловаться»). Так что, я для себя её не рассматриваю.
          В документации то диаграмма весьма красивая нарисована. Ну раз никто не нашел время проверить по факту, то наверное нужно считать, что так оно и есть.

          Но вот проверял нагретым предметом, перемещая его перед сенсором где-то на расстоянии в пол метра (паяльник). Показания меняются достаточно резко при попадании жала в поле зрения.
          Есть датчик без линзы с широким углом обзора. Им приходится едва ли не тыкать в предмет, чтобы узнать его температуру.
          Но по факту, никто из похвалившихся разработкой, на открытой местности тестов не делает. Все в помещении на 5 метрах максимум картинки тестов.

          Он не столь дальнобойный, с возрастанием расстояния будет больше погрешностей от усреднения температур объектов в кадре. Например, рядом будут стоять горячее/холодное вёдра воды, где-нибудь метрах в 20-30 и различить их будет сложно. Вот дополнительная оптика отлично бы подошла, но крайне дорого.

          Как более настоящий тепловизор я бы подумал о Seek Thermal Compact (206x156 px), но цена в 30k деревянных не слишком радует. =(


  1. mikdim
    18.05.2016 12:07
    +1

    А каков бюджет на данную конструкцию?


    1. nikita_baz
      18.05.2016 12:31

      Около 50-60$ получилось


      1. DUMON
        18.05.2016 12:39
        +1

        nikita_baz также является автором проекта (именно он и был отсканирован на картинке в статье)


  1. Solexid
    18.05.2016 12:07
    +1

    Годная вешь. Вот тоже собираюсь сделать на досуге подобное, только с ультрозвкуковым дальномером, Можно списочек ссылками на серв которые вы использовали? Было бы очень хорошо.


    1. mrClouda
      18.05.2016 13:26

      И объединить их, УЗ/Лазерный дальномер и тепловизор…


  1. IronHead
    18.05.2016 12:35
    +1

    Тут еще инфа, для тех, кто хочет сделать подобное http://cxem.net/arduino/arduino19.php


  1. Neolith
    18.05.2016 12:39

    А какова предельная дальность у теплового датчика? Погрешность в значениях не интересует, главное на каком расстоянии можно «засечь» температурную аномалию. Скажем можно ли определить с 30-50м человека хотя бы как размытое пятно?


    1. sacredik
      18.05.2016 13:16

      На 30 метрах не пробовал(плохие сервоприводы заедают при повороте, либо замирают на одной позиции оси x, а потом резко перепрыгивают).На 4-5 метрах выдавало, что на моей спине 29 градусов.


  1. Astrei
    18.05.2016 13:21

    Этот девайс уже не в один диплом вошел :)
    За все время существования устройства так не были поставлены два интересных эксперимента, о которых меня постоянно спрашивали:
    — можно ли увидеть теплопотери в здании, сняв его снаружи?
    — можно ли увеличить разрешение устройства, добавив к нему ИК-линзу?
    Так и не нашел времени сделать один из них, может вы найдете, было бы круто.

    Как я понимаю, программу вы сами составляли? Можете поделиться как реализовали наложение ложных цветов на массив значений температуры. В оригинальном софте цвета назначались автоматически, а мне для экспериментов надо было снимать ИК-timelapse, соответственно хотелось чтобы цвет всегда соответствовал определенной температуре. Когда начал писать свою программу, столкнулся с проблемой создания такого градиента.


    1. OTIOSE
      18.05.2016 14:53

      теплопотери увидеть можно, но зависит от площади утечки.

      Вот это снималось на расстоянии ладони от стены


    1. Meklon
      18.05.2016 15:06

      Взять 8-битную шкалу. Задать диапазон от 0(10 градусов) до 255 (50 градусов), например. Все, что за пределами диапазона обрезать клиппингом. 8-бит изображение — обычный grayscale. Потом можно любой другой цветовой схемой заменить. Главное в 256 значений уложиться — проще выводить на 8-битный экран.


  1. OTIOSE
    18.05.2016 14:48
    +5

    Мы с друзьями в 11 классе тоже подобную штуку делали. GUI писали на си шарпе, датчик тот же. После пары испытаний смогли добиться неплохого качества, не без помощи интерполяции, конечно.


    чья-то рука

    раковина


    1. IronHead
      18.05.2016 15:03
      +5

      То чувство, когда комментарии к статье несут больше полезного, чем сама статья


      1. DUMON
        18.05.2016 19:59

        Надеюсь, что хоть это поднимет вам настроение

        Сарказм
        Сарказм


    1. Astrei
      19.05.2016 02:19

      Потрясающий результат! Жаль что не описали процесс разработки, думаю многим было бы интересно.


  1. Delsian
    18.05.2016 15:18

    Не проще ли было датчик зафиксировать и направить на отклоняемое гальванометром зеркало? Любое посеребренное зеркало прекрасно отражает ИК-излучение и двигать его на порядок легче


    1. R4PAP
      18.05.2016 16:47

      Зеркало отражает не так хорошо. Если конечно речь идет о чём-нибудь сильно различающемся по температуре, то ещё можно.
      Мы пробовали сканировать человека через зеркало. Фигуру, конечно, можно различить, но шума очень много.


      1. iliasam
        18.05.2016 23:06
        +1

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


  1. sav13
    18.05.2016 15:44

    А скорость сканирования чем обусловлена?
    Можно, например, заставить в несколько раз быстрее сервы двигаться?

    Датчик с фокусирующим модулем?
    Какое максимальное расстояние, например картинку человека получить?


  1. PKav
    18.05.2016 15:59

    Можно немного ускорить сканирование поменяв алгоритм прохода — сделать чтобы сканирование шло не только снизу вверх, но и сверху вниз.
    А вообще, можно установить несколько датчиков параллельно и сканировать несколько линий за раз. Или установить несколько сервоприводов и поровну разделить между ними область сканирования. А совсем быстро можно сканировать применив технологию как в сканерах штрихкодов, где зеркало очень быстро отклоняется при помощи электромагнитного поля, формируя лазерную «полоску». Только Arduino тут уже не отделаешься.


    1. IronHead
      18.05.2016 16:08
      +1

      Отвечаю для Delsian sav13 PKav
      Скорость сканирования по большей части определяется временем измерения температуры в 1 точке сканирования. Причем чем точнее нужен результат — тем дольше нужно находится в этой точке. То есть к примеру для погрешности в 1 градус — нужно измерять 1 сек, для погрешности в 10 градусов — хватит и 0,5 сек (цифры от балды, лень лезть в даташит на MLX90...)
      То есть всякие сверхбыстрые системы отклонения типа гальванометров и серебряных зеркал — ничего не изменят.
      Существенно ускорить вывод первичной картинки можно путем комбинации сканирования на обратном проходе и чересстрочного сканирования в 2 захода с интерполяцией промежуточного результата. Тогда превью можно получить в плохом разрешении, а потом дождаться детализации картинки.
      И да, сервоприводы тупо дешевле и подходят по всем параметрам сканирования, так что систему развертки существенно не улучшить.


  1. Hellsy22
    18.05.2016 17:08

    Метод не нов. Конкретная реализация ничем не выделяется среди множества таких же. Можно было бы, к примеру, отвязать девайс от ком-порта, чтобы не пришлось таскать за собой этот самый ком-порт. Или написать приложение для андроида, чтобы использовать девайсы с OTG.

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

    Бытовые тепловизоры, выполненные в виде гаджетов для смартфона, стоят около 250$.


  1. m0Ray
    18.05.2016 22:16

    О погрешностях измерения на больших расстояниях. Насколько они велики? Каково их происхождение?
    Задача у меня есть: находить огрехи теплоизоляции зданий. Расстояние, с которого можно будет вести съёмку, будет от 5 до 15 метров, скажем. Хотелось бы получать с помощью подобного устройства хотя бы приблизительную тепловую карту.
    Сгодится ли такое устройство для решения задачи? Можно ли улучшить качество измерений (например, применив какие-нибудь светофильтры)? Или погрешности на таких расстояниях не позволят?


    1. Astrei
      19.05.2016 02:55

      Датчик не показывает температуру определенной точки, а среднюю температуру в какой-то области. Чем дальше сканируемая поверхность от датчика, тем эта область больше. Можно представить по аналогии с фонариком и стеной. Ближе — яркое пятно света, дальше — тусклое, но большое.
      Если я правильно считаю, то на 5 метрах диаметр «пятна», с которого датчик измеряет температуру будет около 40 сантиметров, а на пятнадцати — уже больше метра. Это можно скомпенсировать как на железном уровне, добавив ИК-линзу, так и софтово, используя специальные алгоритмы.


    1. TeiSinTai
      19.05.2016 12:31

      Кстати, было бы интересно повесить такую штуку на дрона — часть сканирования переложить на него — тогда можно приблизиться к зданию и повысить тем самым разрешение.


      1. m0Ray
        19.05.2016 13:33

        Да приблизиться к зданию проблем нет. Вблизи картинка будет, конечно, хорошей — только она будет захватывать весьма небольшой участок.
        Это полезно, когда место утечки тепла известно с точностью до пары метров. Но сначала нужно снять «общий план» — и вот тут надо отойти подальше.
        Дрон, хм… Только в безветреную погоду. А у нас тут в полях-степях это редкость.