Пользователь
61,6
рейтинг
15 марта 2013 в 21:34

Самодельный тепловизор на базе Arduino менее чем за 100$ из песочницы


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

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

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

Итак, из компонентов для создания устройства, понадобится:
  • Старая веб-камера, разумеется, рабочая;
  • Микроконтроллер Arduino;
  • Сервоприводы, 2 штуки;
  • Датчик температуры MLX90614-BCI;
  • Китайская лазерная указка;
  • Корпуса для сервоприводов;
  • Любой штатив (оптимально).
  • Два резистора на 4.7кОм.


Веб-камера
Камера здесь будет являться источником исходной картинки а также своеобразным видоискателем для области сканирования. Подойдет практически любая дешевая вебка. Я нашел у себя в бардаке старую-добрую Logitech. Если же подходить к вопросу практично, чем меньше веб-камера по размерам, тем лучше. Поэтому огромный корпус моей старушки пришлось снять.

Сервоприводы и крепления
К этому моменту тоже можно подступиться с широким размахом. Нам понадобятся 2 сервопривода — один будет отвечать за движение по вертикали, второй по горизонтали соответственно. Учитывая, что на горизонтальном приводе держится и вертикальный и сама веб-камера, стоит взять более мощный. Хотя многие, уже сделавшие устройство спокойно пользуются одинаковыми маломощными.
Крепления для сервоприводов в оригинале называются «поворотно-наклонным механизмом» а у нас «Серво-кронштейном»
Я покупал все эти компоненты тут.
В сборе данный элемент конструкции выглядит примерно так:

Нижний привод крепится к штативу или другому корпусу/подставке туда же надо вставить и лазерную указку, к вертикальному сервоприводу приделывается веб-камера и датчик MLX90614 путем хитрых манипуляций с клеем или деталями от конструктора или например запчастями от старых электросчетчиков (как у меня).

Датчик температуры MLX90614-BCI
Самая сложная часть данной конструкции. Сложная в плане добычи. Найти его непросто (по крайней мере на отечественных сайтах) и он является самой дорогой частью конструкции. Сам я ждал его около двух месяцев, везли видимо из Китая. Подсказать где взять не смогу, ибо ту лавочку уже прикрыли. Автор проекта ссылается на Futureelectronics.
При выборе необходимо обратить особое внимание на последние буквы «BCI» в названии, что означает наличие у датчика насадки для обеспечения узкого поля зрения.
Выглядит он так:

Arduino и схема подключения
Схема подключения датчика и сервоприводов к микроконтроллеру простейшая:

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

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

Процесс съемки
Зачем здесь нужен китайский лазер и как же происходит процесс сканирования легко понять на примере моего шикарного ковра:

Не удивляйтесь, что ПО на русском, просто я уже некоторое время занимаюсь его доработкой под свои нужды, попутно изучая язык Java. К несчастью, пока моих знаний недостаточно для окончательного оформления готового продукта.

Итак, на картинке с веб-камеры есть две желтые точки и точка нашего лазера (снизу по центру). Вся калибровка состоит в том, чтобы выбрать координаты центра и левого нижнего угла будущей термограммы. В этом собственно и поможет лазерная указка:

Сегодняшнее ПО поддерживает всего два типа разрешения будущей картинки, в то время, как прошлая версия была богата на это дело, насчитывая шесть разных разрешений. Особенно было забавно получать сильно «пиксельные» картинки за 15 секунд. Думаю, разработчики осознали ненужность остальных режимов и убрали их, хотя программно они остались и могут быть активированы.

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

Как греется нетбук:


Мой Кот:


Старый счетчик:


Новый щит:


Окно:


Мой друг в темной комнате перед компьютером


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

Неудобства в работе связаны с жесткой привязкой прибора к компьютеру и необходимости всегда таскать нетбук. Какое-то время авторы вели разработку второй версии своего тепловизора, которая позиционировалась как обособленное устройство с другим датчиком температуры (который кстати использован в этом проекте) с собственным дисплеем и возможностью записи на карту памяти. Но к сожалению, как признался Макс Риттер, у него нет времени на завершение проекта.
В общем, дальнейшее развитие идеи лежит на плечах любителей и умельцев. Буду рад любым предложениям по доработке/усовершенствованию конструкции.
Спасибо за внимание!
Официальная страница проекта (Англ.)
Егор Кретов @Astrei
карма
72,0
рейтинг 61,6
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

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

  • +3
    Ну проблему автономности, как мне кажется, можно решить при помощи одноплатного ПК. А так прикольная штука)
  • +6
    любое устройство становится лучше, если в него добавить блютуз.
    Плюс приложение для смартфона.
    Про одноплатный пк уже сказали. А вообще, можно саму железку делать крайне тупой, все мозги выносить в программу смартфона. Тогда можно будет без умного ПК обойтись, в каком-то смысле контроллера хватит.
  • +3
    Спасибо!
    А сколько же времени требуется на сканирование все-таки? 1 минута или 10, или вообще пара часов?
    насколько я понимаю увеличив количество датчиков например хотябы до трех можно сократить в разы время сканирования.
    И что не дает сканировать быстрее даже с 1 датчиком? Это инерционность самого датчика? Т.е. интересует какое слабое место.
    Раз вы в разбирались в теме может подскажите почему не годится использовать матрицы вроде тех что идут в системы видеонаблюдения, отрезав видимую часть спектра? IR фильтры там не ставят, и ближний ИК они вполне неплохо видят. Более дальний ИК им не по зубам?
    • 0
      Скорость сканирования можно определить, внимательно рассмотрев окно управляющей программы — 7 минут и 1.5 минуты.
      Похоже, что скорость ограничивает именно инерционность датчика, и судя по документации на датчик, для получения более высокого разрешения по температуре, датчик производит несколько выборок.
      По поводу нескольких датчиков — самого интересовал такой датчик.
      Матрицы из камер видят только в ближней ИК области, тепловое излучение от нагретых тел находится в дальней. Разница в длине волны — в 10 раз.
      Для работы в дальней ИК области нужен не только подходящий датчик, но и специальная оптика — там работают только зеркала и линзы из необычных материалов — германия, пластмассы, и другие.
    • +1
      Извиняюсь за отсутствие информации о времени сканирования. Немного видно на скринах программы но надо было написать подробнее.
      Время сканирования при самом большом разрешении занимает 6 минут 45 секунд, в моих примерах в основном приведены результаты сканирования, занимающего 3 минуты. Для получения простенькой картины есть вариант с полутора минутами (качество будет в два раза хуже чем при шестиминутном сканировании).

      Насчет обычных матриц хочу добавить только, что попытки сделать из «мыльницы» тепловизор активно обсуждались тут, и боюсь, выводы неутешительные.
      • 0
        Мною из двух беззеркалок было успешно сделано два тепловизора. НО с рабочим диапазоном от 300 градусов и выше.
        Делалось под специфическую задачу металлообработки, где температуры 400-900 градусов.
        • 0
          Было бы здорово узнать поподробнее. Может напишете статью, если время позволяет?
          • 0
            Если брать вопрос самой переделки, то вот. Но у каждой модели будут свои особенности.
            А дальше только вопрос калибровки: включаем полностью ручное управление чувствительностью и экспозицией, снимаем тестовый объект, нагретый до разных, измеренных независимым методом, температур, смотрим, что будет на картинке. Строим калибровочные кривые яркости цветовых каналов, в зависимости от температуры. Потом снимаем целевой объект и по калибровочным кривым определяем его температуру.
            • 0
              Но это скорей получаются оптические тепловизоры (измерение температуры по цвету объекта). Хотя бы потому, что объектив (как я понял) Вы оставляете прежний, а материал линз ИК не пропускает.
              Будет ли разница в съемке нагретого металла и белого листа бумаги при хорошем освещении?
              • 0
                Нет, это не по цвету, а по яркости. Причём в ИК-диапазоне, весь видимый отрезается светофильтром.
                Материал линз отлично пропускает весь ИК, который способна видеть кремниевая матрица.
                Если это освещение не содержит инфракрасного излучения, то будет ещё какая: бумаги видно не будет вовсе, а вот металл — будет.
  • 0
    Как я понял, датчик показывает температуру поверхности объекта? Почему тогда ваш друг и кот столь холодны? :)
    Требуется калибровка?
    • +2
      Вообще датчик уже откалиброван на заводе. Исходя из своего опыта измерений могу сказать что поверхность многих вещей оказывается холоднее, чем кажется. Например намерять пирометром свою температуру в стиле 36.6, как обычным градусником не получится (пробовал), она будет ниже.
      Кстати, мне больше было интересно что хвост у кота несмотря на всю пушистость довольно холодный.
      • +7
        Эх, удивительные вы люди… Просто надо вспомнить школьную физику.
        1) Температуру здесь замеряют по инфракрасному излучению.
        2) Ртутный термометр, вставляя в подмышку, вы прогреваете до своей собственной температуры.
        3) Поверхность вашего друга охлаждается различными механизмами (потоотделение, конвекция)
        4) Поверхность кота, или его хвоста, оптимизированна так, что бы излучать поменьше.

        Соответственно, чем выше пушистость вашего друга, тем меньше будет температура замера. Кстати, медецинские термометры обычно измеряют температуру во всяких «технических отверстиях». Например в ушах, потому как — пота нет, конвекции нет. Инфракрасные термометры на лоб тоже ограничивают средства теплоотдачи в средУ.
  • 0
    Можно еще погуглить на тему сопряжения MLX90620 с ардуиной, что должно увеличить скрость сканирования, т.к. у этого градусника аж 64 сенсорных элемента, а стоит всего на 15..20$ дороже
  • 0
    Какое время требуется датчику для съема показателей в одной точки? Как точность зависит от времени?

    update: обновил комментарии — увидел ответы. Спасибо.
  • 0
    А какой угол охвата при разрешении 64x64?
  • 0
    Зона охвата настраивается в процессе калибровки. Ее можно сделать гораздо больше, чем исходное изображение, на сколько позволяют сервоприводы. Однако вся суть калибровки в совмещении изображений.
  • 0
    вот модуль и сервопривода не нужно, хотя правда стоит значительно дороже, но значительно быстрее
    • 0
      Модуль мне очень понравился, по сути уже готовый тепловизор в миниатюре. Не подскажите цену, мне надо решить, начинать копить на него или нет :)
      • 0
        Смотря какого разрешения, самый простой 8x8 был от 300 евро, получше от 1000 с ethernet.
        Самому очень понравилось, но я для себя пока решил что тепловизор мне еще не настолько нужен.
  • 0
    Очень много интересной электроники можно заказать на elbase.ru, там есть этот MLX90614. Но у них для частных лиц заказ от 1000р. Но если вы ИП, то уже нет этой проблемы, да и попросить кого-то заказать для вас тоже не сложно.
  • 0
    DAiMor, спасибо, но мне кажется, что это все равно дороговато для второстепенного инструмента.
    Дело в том, что хотя динамичность в изображении привлекательна и выглядит красиво, но по сути в некоторых областях применения она не обязательна. Я думаю, дешевый тепловизор из данной статьи прекрасно должен вписаться в нишу низкой ценовой категории подобного рода устройств. Как раз для тех случаев когда можно пожертвовать временем ради экономии средств.
  • 0
    Отличная идея! И почему с ней авторам не пойти на kickstarter? Для того, чтобы сделать 5-10 снимков фасада здания отлично подойдет.
    • +1
      Им уже, может быть, ни какого kick для start не нужно.
    • +1
      Автор проекта собирался организовать продажу упрощенной версии (уже без Arduino), но у него что-то не срослось. Я думаю все дело в том, что проект идеально подходит для Российских реалий, тогда как в Германии инженер может позволить себе тепловизор, ну или ему выдадут его на работе.
      К тому же проект по моему мнению еще сырой, и требует доработок, чем я и занимаюсь.
      • 0
        В Германии еще налаженная система аренды тепловизоров, вот например (http://www.erento.com/mieten/geraete_werkzeug/mess-_pruefgeraete/waermebildkamera/), 102 пункта аренды по Германии. Т.е. фактически вся Германия, на расстоянии в 20-30 км можно взять в аренду за смешные (по немецким меркам) 60 евро в день профессиональный тепловизор. Отснять весь объект и вернуть назад.
        У нас же все намного печальнее в этом отношении. Поэтому такой проект имел бы успех в СНГ.
  • 0
    Как же распределительная коробка со счетчиком то не аккуратно собрана…
    А так статья интересная. Давно видел похожую. Тот же принцип, но без ПК и камер.
  • 0
    Я вот не понимаю. Можно ведь снять инфракрасный фильтр с веб-камеры и поставить туда другой, который наоборот пропускает только инфра-красное излучение. Или ничего не получится?
  • 0
    Спасибо, интересно.
    Здорово было бы узнать более подробные характеристики готового устройства.
    Скажем, сравнение одной и той же картинки снятой за 1,5 минуты и за 7, на каком расстоянии различимо, например, излучение человека и т. д.
  • 0
    можно было бы сделать электромеханическую систему как в считывателях штрих кодов, тогда скорость сканирования возросла бы, да и датчик лучше аналоговый
  • 0
    быть может есть фотографии снаружи? утечки тепла из дома, например.
    • 0
      Если честно, не особо интересовался энергоаудитом. Но по возможности попробую сделать пару картинок.
  • +1
    Очень удивительно, что автор «забыл» упомянуть многочисленные обсуждения этого проекта на robocraft'е
    Например, вот эту статью.
    Особенно с учётом того, что скобы-сервы совсем не от той конструкции, что на фото с установкой.

    Что-нибудь посвежее есть?
    • 0
      Ну извините за «баян», но мне интересно развить этот проект, а не просто собрать и забыть. По поводу статьи на которую вы сослались — я только рад что кто-то скопировал текст и проявил интерес к проекту.
      А действительно нормальная статья про этот проект есть здесь. Собственно говоря, ей я всем и обязан, но вовсе этого и не скрываю.
      • 0
        Бог с ним, вопрос по существу:
        Какой частоты опроса пирометра Вам удалось достичь? И как возрастает погрешность при увеличении скорости движения сенсора (меня интересует именно «эффект памяти» датчика)?
        • 0
          При увеличении скорости сенсора получаемая картинка просто «поплывет», так как температура верхних пикселей будет присваиваться нижним. Если же Вы имели ввиду какую-то другую погрешность, я Вас не понял.

          Насчет частоты опроса признаю свою вопиющую неосведомленность в данном вопросе.
          Здесь используется протокол SMBus, с которым я только недавно познакомился. Максимальная частота SMBus для этого датчика 100 кГц, она же используется в работе.
          Вообще, этот огород уже много раз перекопали авторы проекта и именно из этого датчика, как мне кажется, больше не выжать.
          Я уже задумываюсь над заменой датчика MLX90614 другим, по возможности более «быстрым» (и дешевым, разумеется!), но они для меня — темный лес.

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

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

            > Также, я не понимаю всеобщего ажиотажа по поводу уменьшения времени сканирования. Изначально моей целью было повышение качества картинки…

            Так поставьте диафрагму чтобы отсечь лишнее. Для тепловизоров качество не эквивалентно разрешению.
            • 0
              Еще немного разобрался в коде управляющего скетча микроконтроллера. Управление вертикальным сервоприводом осуществляется так, что серводвигатель не делает следующий шаг пока не пройдет промежуток времени, названный «Минимальным периодом чтения». В комментариях к коду есть информация, что этот промежуток должен быть равен 125 (скорее всего миллисекунды?), иначе картинка и начнет плыть.
              Экспериментальным путем удалось установить, что «плыть» начинают не все пиксели, а сначала через раз, и дальше — больше. Таким образом если установить значение данной константы равным 100, плавание пикселей не заметно а то и вовсе не проявляется. А вот уже при 90, где-то каждый десятый начинает «проскакивать»
              Вот для сравнения картинки для различных значений минимального времени ожидания чтения:


              Каждый третий-пятый пиксели начинают дублироваться

              Некоторые из двоящихся пикселей начинают троиться

              пиксели принимают 7-9 одинаковых значений, что и дает такое красивое «северное сияние»

              >20 дубликатов пикселей, время сканирования при этом значении константы — несколько секунд (1-2)
              Объект съемки — обычный ЖК монитор.
  • 0
    Кстати, в сети я находил много очень интересных мнений по улучшению, связанных с изменением конструкции, например:

    Заменить систему механической развертки сервоприводов диском Нипкова.
    О диске Нипкова
    Такой вариант позволит избавиться от серводвигателей, а взамен получить больший размер конструкции (если хочется большого разрешения) и частоту кадра, сравнимую с настоящим тепловизором. Конкретно для меня непонятно, будет ли мешать датчику излучение самого диска или нет. Также стоит сказать, что датчик MLX90614 вряд ли подойдет, т.к. здесь потребуется огромная скорость считывания.

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

    Изменить алгоритм сканирования
    В настоящий момент алгоритм являет собой т.н. «пилу» датчик сканирует снизу-вверх, после чего смещается в сторону с одновременным движением вниз. Одним из предложений было сделать сканирование по спирали, что позволит вообще избавиться от лишних движений. Для этого надо лишь доработать ПО. Особенной роли в прибавке скорости это действие конечно не сыграет, но тоже неплохо.
    • +1
      Есть такой проект тепловизора с диком Нипкова, датчик при этом такой же, как и здесь — MLX90614, правда разрешение картинки очень низкое.
      Насколько мне известно, практически любое зеркальное покрытие работает в нужном диапазоне длин волн, однако излучение, падающее на зеркало, не должно встречать на своем пути обычного стекла (в обычных зеркалах зеркальное покрытие закрыто слоем стекла). Были мысли об использовании в тепловизоре зеркал для телескопов.
      По поводу быстродействующих датчиков — есть подозрение, что одиночный датчик при большой скорости опроса будет давать слишком сильный шум, и его придется охлаждать (и не факт, что удастся обойтись без жидкого азота).
      • 0
        Огромнейшее спасибо за ссылку! Давно искал хоть какой-нибудь материал по теме.

        Насколько хватило моего знания английского при беглом чтении, понял, что диск там не вращается, а движется сервоприводом туда-обратно. Кроме того, датчик хоть и MLX90614, но с широким полем зрения в 90 градусов (тогда как в текущем проекте самая «узкая» модель ряда). По времени снятия показаний с датчика выходит 100 мс на один замер, также задержка в начале каждой из восьми строк длительностью 1 сек для каких-то сомнительных операций. Итого, за одну картинку — 30 сек.
        Как и предполагалось, из-за влияния самого диска, нельзя получить достоверные данные о температуре снимаемых объектов, а жаль. Видимо необходимо сделать некое подобие системы компенсации температуры диска.
  • 0
    А не будет ли датчик измерять еще и температура диска Нипкова?
  • 0
    Идеальная задача для Raspberry, а не для ардуины. А вообще прикольная игруха.

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