image

Всем привет!

Пришла зима, а с ней и задача проверить теплоизолирующие свойства построек загородной резиденции дачи. А тут ещё оказалось, что на известном китайском сайте появились вполне доступные тепловизионные модули. Не собрать ли себе экзотическую и, возможно, даже полезную вещь — самодельный тепловизор? Почему бы и нет, вроде и Raspberry где-то валялась… Что из этого вышло — расскажу под катом.

MLX90640. Что это?


А это, собственно, тепловизионная матрица с микроконтроллером на борту. Производства ранее неизвестной мне фирмы Melexis. Тепловизионная матрица имеет размерность 32 на 24 пикселя. Это немного, но при интерполяции изображения вроде как достаточно, чтобы хоть что-нибудь разглядеть.

image

Сенсор выпускается в двух модификациях, корпуса которых отличаются углом обзора матрицы. Более приземистая конструкция A обозревает окружающий мир под углом 110 (по горизонтали) на 75 (по вертикали) градусов. B — под 55 на 37,5 градусов соответственно. Корпус устройства имеет только четыре вывода — два для питания, два для общения с управляющим устройством по I2C интерфейсу. Даташит для заинтересовавшихся можно скачать здесь.

А что тогда такое GY-MCU90640?


Китайские товарищи ставят MLX90640 на плату с еще одним микроконтроллером на борту (STM32F103). По всей видимости, для более простого управления матрицей. Называется всё это хозяйство GY-MCU90640. И стОит на момент приобретения (конец декабря 2018 года) в районе 5 тыс. руб. Выглядит следующим образом:

image

Как можно заметить, есть две разновидности плат, с узко- или широкоугольной версией сенсора на борту.

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

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

image

Но для задач визуализации я бы больше рекомендовал более «дальнобойную» версию B. По одной очень значимой причине. В перспективе при съемке её можно разворачивать (вручную или на платформе с приводом) и делать составные «фото», увеличивая тем самым более чем скромное разрешение в 32 на 24 пикселя. Собирать тепловизионные снимки 64 на 96 пикселей, например… Ну да ладно, в дальнейшем по тексту фото будут с моей широкоугольной версии A.

Подключение к Raspberry PI


Управлять тепловизионным модулем можно двумя способами:

  1. Закоротить перемычку «SET» на плате и по I2C обращаться напрямую к внутреннему микроконтроллеру MLX90640.
  2. Оставить перемычку в покое и общаться с модулем через установленный на плате STM32F103 через RS-232 подобный интерфейс.

Если вы пишете на C++, наверное, будет удобнее проигнорировать лишний микроконтроллер, закоротить перемычку и воспользоваться API от производителя, которое лежит вот здесь.

Скромным питонистам тоже можно пойти первым путём. Вроде как есть пара библиотек на Python (здесь и здесь). Но у меня, к сожалению, с ходу ни одна не заработала.

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

Благодаря прозорливости китайских инженеров или просто счастливому стечению обстоятельств у платки оказалось очень удачное расположение выводов:

image

Осталось только поставить колодку и вставить платку в разъем малины. На плате установлен преобразователь 5 в 3 Вольта, поэтому нежным Rx и Tx выводам Raspberry вроде как ничего не угрожает.

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

Софт


На известном китайском сайте для доступа к GY-MCU90640 предлагается вот такое чудо:

image

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

Благодаря переводчику Гугла и активному копипастингу примерно через час-полтора протокол был расшифрован. Надо будет не забыть выложить на Github, кстати. Оказалось, что платка понимает шесть базовых команд, среди которых есть запрос кадра по COM порту.

Каждый пиксель матрицы — это, по сути, значение температуры объекта, на который этот пиксель смотрит. Значение температуры в градусах Цельсия, умноженных на 100 (двухбайтное число). Собственно, есть даже специальный режим, в котором платка будет слать кадры с матрицы на Raspberry 4 раза в секунду.

Скрипт для получения тепловизионных снимков здесь:
import serial, time
import datetime as dt
import numpy as np
import cv2

# function to get Emissivity from MCU
def get_emissivity():
	ser.write(serial.to_bytes([0xA5,0x55,0x01,0xFB]))
	read = ser.read(4)
	return read[2]/100

# function to get temperatures from MCU (Celsius degrees x 100)
def get_temp_array(d):

	# getting ambient temperature
	T_a = (int(d[1540]) + int(d[1541])*256)/100

	# getting raw array of pixels temperature
	raw_data = d[4:1540]
	T_array = np.frombuffer(raw_data, dtype=np.uint16)
	
	return T_a, T_array

# function to convert temperatures to pixels on image
def td_to_image(f):
	norm = np.uint8((f/100 - Tmin)*255/(Tmax-Tmin))
	norm.shape = (24,32)
	return norm

########################### Main cycle #################################
# Color map range
Tmax = 40
Tmin = 20

print ('Configuring Serial port')
ser = serial.Serial ('/dev/serial0')
ser.baudrate = 115200

# set frequency of module to 4 Hz
ser.write(serial.to_bytes([0xA5,0x25,0x01,0xCB]))
time.sleep(0.1)

# Starting automatic data colection
ser.write(serial.to_bytes([0xA5,0x35,0x02,0xDC]))
t0 = time.time()

try:
	while True:
		# waiting for data frame
		data = ser.read(1544)
		
		# The data is ready, let's handle it!
		Ta, temp_array = get_temp_array(data)
		ta_img = td_to_image(temp_array)
		
		# Image processing
		img = cv2.applyColorMap(ta_img, cv2.COLORMAP_JET)
		img = cv2.resize(img, (320,240), interpolation = cv2.INTER_CUBIC)
		img = cv2.flip(img, 1)
		
		text = 'Tmin = {:+.1f} Tmax = {:+.1f} FPS = {:.2f}'.format(temp_array.min()/100, temp_array.max()/100, 1/(time.time() - t0))
		cv2.putText(img, text, (5, 15), cv2.FONT_HERSHEY_SIMPLEX, 0.45, (0, 0, 0), 1)
		cv2.imshow('Output', img)
		
		# if 's' is pressed - saving of picture
		key = cv2.waitKey(1) & 0xFF
		if key == ord("s"):
			fname = 'pic_' + dt.datetime.now().strftime('%Y-%m-%d_%H-%M-%S') + '.jpg'
			cv2.imwrite(fname, img)
			print('Saving image ', fname)
		
		t0 = time.time()

except KeyboardInterrupt:
	# to terminate the cycle
	ser.write(serial.to_bytes([0xA5,0x35,0x01,0xDB]))
	ser.close()
	cv2.destroyAllWindows()
	print(' Stopped')

# just in case 
ser.close()
cv2.destroyAllWindows()


Результаты


Скрипт опрашивает тепловизионную матрицу и выводит кадры на консоль монитора, на который подключен Raspberry PI, 4 раза в секунду. Этого достаточно для того, чтобы не испытывать большого дискомфорта при съемке объектов. Для визуализации кадра используется пакет OpenCV. При нажатии на кнопку «s» в папку со скриптом сохраняются тепловизионные «тепловые карты» в формате jpg.

image

Для большей информативности я вывел минимальную и максимальную температуры на кадре. То есть глядя на окраску, можно видеть какая примерно температура у наиболее разогретых или охлажденных предметов. Погрешность измерения — примерно градус с бОльшую сторону.

Тепловой диапазон задан от 20 до 40 градусов. Выход из скрипта по нажатию Ctrl + C. Из-за реализованного протокола платы (температура представлена unsigned integer) тепловизор может измерять только положительные температуры. Похоже, для измерения отрицательных нужно будет адресовать сенсор уже напрямую.

image

Скрипт работает примерно одинаково и на Raspberry Pi Zero W и на Pi 3 B+. Я установил VNC сервер на смартфон. Таким образом, взяв в руки малину, подключенную к powerbank'у и смарфтон с запущенным VNC можно получить переносной тепловизор с возможностью сохранения тепловых снимков. Возможно, это не совсем удобно, но вполне функционально.

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

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

Всем удачной трудовой недели и до новых встреч!

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


  1. Aquahawk
    14.01.2019 09:18

    Офигительная штука


    1. Walker2000
      14.01.2019 09:19

      Спасибо )


  1. tuxi
    14.01.2019 09:23

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


    1. Walker2000
      14.01.2019 09:25

      Пока не пробовал, но в планах есть.


      1. tuxi
        14.01.2019 12:42

        Прям вот очень интересно какой будет результат


        1. Walker2000
          14.01.2019 12:45

          Померю, выложу в апдейт на следующих выходных тогда.


  1. agat000
    14.01.2019 09:28

    В принципе такой маленький девайс спокойно встанет на коптер. Для того же обследования зданий и теплотрасс.
    «Молодцы, китайцы»(с)


    1. Walker2000
      14.01.2019 09:29

      Кстати, да )


    1. Aquahawk
      14.01.2019 09:34

      Ну для этого лучше поюзать девайсы с лучшим разрешением. Интересно что за матрица стоит в Seek Thermal CompactPRO, заявляют 320*240 15Fps.


      1. Walker2000
        14.01.2019 09:46

        Ранее такие матрицы уже считались изделиями спецназначения ) Но, если девайс в открытой продаже, то, наверное и матрицу где-то можно купить. Пока из доступного я натыкался на такую: ru.aliexpress.com/item/FLIR/32872035004.html. Но разрешение там похуже, конечно.


        1. uastalker
          14.01.2019 11:00

          Перед новым годом заказывал себе (в Украину) SeekThermal Сompact с ибэй. Цена чуть выше чем у этого чуда, но разрешение намного веселей. Конкретно в моем случае обошлось 120$ в коробке с кейсом и т.д. С виду почти не юзаный. Пока мониторил, уходили они и по цене <100$. Так что хз зачем заморачиваться. И да, никаких претензий на таможне не было, хотя везде было указано что это тепловизор.


          1. Walker2000
            14.01.2019 11:11

            Ну да, если стоит задача взять не за дорого полнофункциональное устройство, то это оптимальный вариант. Описанная в посте плата хороша тем, что на её можно встраивать в какие-то простые решения по компьютерному зрению. Ну и с тепловизионной съемкой она справилась довольно неплохо.


          1. un1t
            14.01.2019 14:01

            Были истории когда кто-то заказал устройство с али и успешно его получил, а при попытке продать его на авито получил уже срок. Так что если у таможни не было вопросов это еще ничего не значит, не все посылки видимо проверяют.
            Любое устройство можно расценить как спецназначения, если для него нет сертификата. Закон написан очень расплывчато.


            1. Walker2000
              14.01.2019 14:04

              К сожалению, такое тоже имеет место быть (


      1. agat000
        15.01.2019 12:09

        Выше разрешение — дороже девайс. А вешать дорогое на такую ненадежную штуку как коптер — жалко. Ну, до 300 бкс, наверное еще можно.

        Seek Thermal CompactPRO

        Почитал описание:
        Прочный корпус из магния.

        Почему то подумалось про систему самоуничтожения — поцарапал камеру и она сгорела вместе со смартфоном.


        1. Walker2000 Автор
          15.01.2019 12:37

          Коптер должен быть довольно крупный. Вместе с таким тепловизором нужно возить еще и смартфон.


  1. smart_alex
    14.01.2019 09:42

    Насколько я понял, для съёма собственно изображения с матрицы тяжёлая артиллерия в виде Raspberry PI не нужна — можно обойтись и микроконтроллером, пусть с чуть более низкой частотой обновления кадров. (С визуализацией хоть на дисплее, хоть в веб-интерфейсе тоже проблем нет.) Или мощность Raspberry PI это необходимое условие работы с этими матрицами?


    1. Walker2000
      14.01.2019 09:49

      Если не напрямую с датчиком общаться, а использовать посредника в виде STM32F103, то можно и на ESP8266 запустить по идее. С Raspberry просто удобнее отлаживать. Можно за выходные как раз успеть всё запустить и посмотреть — как работает.


      1. smart_alex
        14.01.2019 09:55

        С Raspberry просто удобнее отлаживать.


        Это кому как. :) Кому-то сотворить что-то с микроконтроллером — не проблема и работать очень удобно.


        1. Walker2000
          14.01.2019 17:32

          Да, кто с чем привык, с тем и удобнее.


    1. ElectricFromUfa
      16.01.2019 05:07

      Как раз работаю сейчас с MLX90640 с микроконтроллером. Исходники API от Melexis можно использовать практически без изменений, нужно реализовать только 2 функции — чтения и записи по i2c. Единственное, если не трогать реализацию API, нужно довольно много ОЗУ в микроконтроллере (порядка 3-4 Кб, точно не считал)


      1. Walker2000 Автор
        16.01.2019 10:19

        Да, их драйвер нормально работает.


  1. roboter
    14.01.2019 09:54

    А исходники прошивки stm32 Китай предоставляет?


    1. Walker2000
      14.01.2019 10:00

      Не думаю. Но они и не нужны вроде как. Если делать что-то более серьезное, проще не разбираться с их исходниками, а взять исходники MXL90640.


  1. SH_Alexey
    14.01.2019 10:18

    Понимаю что не так дорого как Flir, но не лучше ли на иностранной барахолке купить Flir Lepton за 15К. При том что у него 80?60 точек и 8 fps против 32x24 и 1 fps у MLX90640?


    1. Walker2000
      14.01.2019 10:21

      Ну смотря для каких задач. MLX удобен тем, что можно писать код и страивать модуль в свои какие-то решения.


      1. SH_Alexey
        14.01.2019 10:23

        Flir Lepton тоже модуль для DIYщиков и так же в интернетах есть примеры использования со всякими малинами и прочими одноплатниками.


        1. Walker2000
          14.01.2019 10:35

          А, нашел. Да, можно и такой датчик запустить в принципе. Разрешение получше будет, но и цена тоже. Не у верен, что для задачи, которая может оказаться разовой, имеет смысл закладываться на более дорогое решение. Стоимость описанного в статье модуля сопоставима со стоимостью услуги по тепловизионному обследованию в Москве. И свою задачу он выполнил в принципе.


          1. da-nie
            14.01.2019 10:38

            Да чего его запускать… :) Вот оно для stm32.
            По цене с обвязкой выйдет раза в 2-2.5 дороже чем

            И стОит на момент приобретения (конец декабря 2018 года) в районе 5 тыс. руб.


    1. da-nie
      14.01.2019 10:36

      Он, если брать сломанный flir one gen 2, выйдет тысяч в 8 с разрешением 160x120 и 9 Гц и ещё три тысячи за плату-переходник (но можно и свою развести — кроватка для лептона у вас будет из тепловизора).


      1. Walker2000
        14.01.2019 10:38

        Спасибо за совет. Если надумаю сделать более продвинутый тепловизор, не примину им воспользоваться )


      1. alexk24
        14.01.2019 10:42

        А его можно приобрести с гарантированно рабочим сенсором?
        Какие поломки для него типичны?


        1. da-nie
          14.01.2019 10:51

          Для него типичны отказы платы с контроллером (плохая пайка, дохлый аккумулятор и т.д.). Дохлый сенсор — это должно очень не повезти (сунули в 220 В вместо +5 для зарядки). Я про такое не слышал пока что. На eeevblog есть тема где-то, там автор восстанавливал практически все дохлые flir one gen 2.


          1. alexk24
            14.01.2019 10:59

            Спасибо. Это действительно перспективно.
            Правда на данный момент я их не нашел. Ну и как я понимаю брать его нужно не в штатах т.к. оттуда не получится вывести — они запрещены к перевозке у всех посредников.


            1. da-nie
              14.01.2019 11:07

              Надо искать дефектный на ebay. Обычно, их из Германии выбрасывают волнами. В прошлом году выбрасывали сразу по несколько штук. Но брать надо только Flir One Gen 2 (!) (ну или Gen 3 Pro). У него датчик 160x120. У обычного только 80x60.

              Из США мне два года назад исправный прислали, но шлют ли сейчас не знаю.


            1. DolinEA
              14.01.2019 15:41

              Там все зависит от разрешения матрицы.
              Простые должны быть доступны для отправки.


              1. da-nie
                14.01.2019 15:53

                Они и доступны. Просто посредники не желают связываться с перевозкой таких тепловизоров. Мне лично отправляли обычной почтой США и всё пришло. А вот всякие «бандерольки» отказываются пересылать.


    1. ToSHiC
      14.01.2019 23:17

      Вообще Melexis крутые ИК сенсоры делает, конкретно у этого Programmable refresh rate 0.5Hz…64Hz. То, что китайцы так мало смогли с помощью stm32 прокачивать — это уже их проблемы, кажется. Шина i2c, питается от 3 вольт — то, что надо, чтобы напрямую к малице цеплять.


      1. Walker2000
        14.01.2019 23:27

        Да, следующим шагом надо будет напрямую подсоединяться. Думаю только, что при 64 Гц из-за шумов мало что удастся различить. Кстати, 64 Гц — это частота получения полукадра. То есть для получения полного кадра будет 32.


      1. SH_Alexey
        15.01.2019 09:24

        Видел в даташите, но странно почему китайцы решили так занизить скорость, при том что stm32 позволяет. В документации нет описания скорости реакции матрицы при разных внешних факторах. Возможно 64 Гц это максимальная скорость опроса матрицы, но не ее скорость работы во всем диапазоне условий эксплуатации.


        1. Walker2000
          15.01.2019 09:34

          На самом деле непонятно, что они зашили в микроконтроллер и какими соображениями руководствовались. В документации на китайскую плату (в которой STM стоИт) сказано, что максимальная скорость обновления изображения 8 Гц при скорости COM порта 460800 bps. Это режим у меня почему-то не пошел. Но на 115200 реально получается 4 Гц вместо 2-ух, которые заявлены в документации. С какой частотой они опрашивают MLX, не могу сказать, осциллографа под рукой нет. Будет время, надо будет попробовать всё таки наваять драйвер, который обращается напрямую к MLX. Так можно будет получить от сенсора максимальный fps.

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


          1. ToSHiC
            15.01.2019 11:23

            У Melexis есть драйвер (правда какой-то кривоватый): github.com/melexis/mlx90640-library


            1. Walker2000 Автор
              15.01.2019 11:41

              Ну да. Он просто на C++


        1. ToSHiC
          15.01.2019 11:21

          Не, там всё хорошо, только погрешность растёт, в даташите есть график. Вроде, при 64 герцах получается чуть больше 1 градуса погрешности. Но в том же даташите есть, что если хочется измерять абсолютные величины — то надо после подачи питания подождать 4 минуты, чтобы корпус и матрица равномерно прогрелись и не вносили искажения.


          1. Walker2000 Автор
            15.01.2019 11:33

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

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

            Да, 4 минуты нужны именно для точности измерения абсолютных величин.


          1. ElectricFromUfa
            16.01.2019 05:14

            Насколько я понял даташит на mlx90640, каждый герц увеличивает шум на 0.1 градус


            1. Walker2000 Автор
              16.01.2019 10:17

              Зависимость не настолько сильная. Она не линейная и разная для версий с разным углом обзора.

              image


  1. CHolfield
    14.01.2019 10:21

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


    1. Walker2000
      14.01.2019 10:22

      Ну да. Потенциально можно несколько сразу повесить на одну шину.


    1. ElectricFromUfa
      16.01.2019 05:15

      сам mlx90640 тоже работает по i2c и у него программно свободно меняется i2c-адрес


      1. Walker2000 Автор
        16.01.2019 10:10

        Точно.


  1. alexk24
    14.01.2019 10:34

    А какой угол обзора по вашему будет удобнее? A или B модель брать?


    1. Walker2000
      14.01.2019 10:36

      Я в посте немного затронул проблему выбора ) А что Вы планируете делать с матрицей?


      1. alexk24
        14.01.2019 10:46

        Общее применение: «играться». Возможно ручной тепловизор.
        Склоняюсь к узкоугольной камере. Но у вас широкоугольная версия и в принципе изображения меня вроде устраивают.


        1. Walker2000
          14.01.2019 10:57

          Ну с широкоугольной версией тепловизионную съемку всё-таки не очень удобно. Для того, чтобы посмотреть на конкретный стык между брёвнами, например, нужно приближать матрицу к стене сантиметров на 30...40. Я не имел дела с узкоугольной матрицей, но мне кажется, что для этой задачи она подошла бы лучше.


  1. Sing1e
    14.01.2019 11:02

    Для повышения детализации можно использовать систему с двумя камерами. Первая камера, в нашем случае, это тепловизионная матрица, которая даёт информацию о цвете, а вторая — ч/б камера с более высоким разрешением, которая даёт детализацию. Подобная схема, например, используется в некоторых флагманах Huawei.


    1. Walker2000
      14.01.2019 11:04

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


      1. CHolfield
        14.01.2019 11:34

        А на каком расстоянии эта штука вообще работает, ее есть смысл ставить например на коптер? нашел только temperature range, расстояния нет, может проглядел(
        Мысль о совмещении изображений с двух камер — записал, надо подумать.


        1. Walker2000
          14.01.2019 11:44

          Ну конкретно этой матрицей нужно смотреть начиная с метра от объекта, лучше ближе. То есть на коптер её, пожалуй не поставишь. Более узкополосная, наверное, уже может и подойти. Единственное, коптер находится в постоянном движении, а матрица шумит. Будет сложно поймать качественное изображение. Так что для коптера лучше посмотреть на более дорогие варианты, пожалуй.


          1. Alexeyslav
            14.01.2019 16:52

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


            1. Walker2000
              14.01.2019 16:58

              Ну, может ближе к лету коптером разживусь, тогда попробую )


        1. Alexeyslav
          14.01.2019 17:03

          Расстояние ограничено только распространением ИК-лучей, т.е. по факту как свет. Но широкий угол камеры… делает все объекты очень маленькими с расстоянием, и можно вспомнив математику посчитать на каком расстоянии милиметровый-сантиметровый-метровый объект станет одним пикселем, с коптера возможно будут различимы отдельные дома, теплотрасса и т.д.
          32 пикселя на 110 градусов, и 32 пикселя на 55 градусов. Разрешение так себе, в первом случае почти по 3.4 градуса на пиксель. Вспомним геометрию… h = sin(3.4 deg)*L где L — расстояние до объекта, h — эквивалентная высота на один пиксель.
          С расстояния 1 метр, имеем… почти 6 сантиметров на пиксель! 100 метров — 6 метров пиксель. Для второго варианта в 2 раза меньше. Вот и прикидывайте.


          1. Walker2000
            14.01.2019 17:04

            Так и есть.


  1. Pro-invader
    14.01.2019 12:33

    У кота теплоизоляция нарушена, утечка тепла.


    1. Walker2000
      14.01.2019 12:35

      По сравнению с людьми у него всё в порядке ). Шесть препятствует теплоотводу.


      1. Walker2000
        14.01.2019 13:14

        *шерсть


    1. Squoworode
      15.01.2019 16:04

      Это же штатный теплоотвод.


      1. Walker2000 Автор
        15.01.2019 16:43

        Теплохранилище )


  1. dmitriyrudnev
    14.01.2019 13:01

    У Sparkfun есть более простая реализация подобного устройства. Соответственно, и китайские клоны имеются.


    1. Walker2000
      14.01.2019 13:13

      Да, видел их. В модулях от Sparkfun распаяны только сами сенсоры, соответственно, доступ только напрямую, насколько я понял. Кстати, на ali они существенно дороже: ru.aliexpress.com/item/qwiic-MLX90640-55-FOV-110-FOV/32920041326.html

      Есть библиотеки на Ардуино для таких модулей, но проблема в том, что я не пишу на Си, и осваивать ради одной задачи не хотелось. Мне проще было написал свой код на питоне.


  1. ser-mk
    14.01.2019 13:48

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


    1. Walker2000
      14.01.2019 13:58

      Посмотрите на разрешение матрицы у этого продукта. 8 на 8 пикселей всего. Сомневаюсь, что с этим можно на практике как-то работать.


      1. ser-mk
        14.01.2019 14:07

        конечно за 3700р, ожидать чего фантастического не стоит за готовое устройство
        Но специально подчеркнул, что для обследования дома этого должно хватить.


        1. Walker2000
          14.01.2019 14:11

          Ну, возможно, и хватит. Кому-то и зажженной свечки хватает )


      1. Alexeyslav
        14.01.2019 17:17

        Достаточно давно на хабре был проект ИК-сканера с одноглазым пирометром на один пиксель — просто механическая развертка на обычных сервоприводах. Ну, сканирует минут пять-шесть(там на пиксель приходилось около 0.1сек)… зато сразу разрешение высокое. Можно наверно даже панорамный скан делать.


        1. Walker2000
          14.01.2019 17:18

          Это вот этот? habr.com/post/172947


          1. Alexeyslav
            14.01.2019 17:30

            Да, похоже она.


            1. Walker2000
              14.01.2019 18:03

              Ну, если верить скриншоту интерфейса, то максимальное разрешение всего 64 на 48 пикселей. Не особо выдающееся разрешение, надо сказать. prntscr.com/m71nsw


              1. Alexeyslav
                14.01.2019 18:12

                Ну, это скорей вопрос применённого датчика, в его быстродействии. быстрее одного измерения на пиксель не получить никак.


                1. Walker2000
                  14.01.2019 18:20

                  Согласен.


              1. Alexeyslav
                15.01.2019 02:04

                Я вот думаю, что если не коболометрический датчик поставить а PIR-сенсор с датчиков движения, они ведь быстрее(где-то видел даташит на них, время реакции соответствует 30...100Гц) и аналоговые. Температуру в 20...30 градусов точно видят, хоть и измерить её не выйдет — только интенсивнось излучения. Проблема только в оптике.


                1. Walker2000
                  15.01.2019 07:51

                  Пусть будет 100 Гц, даже в этом случае картинка 32 на 24 (это 768 пикселей) будет сканироваться минимум 7,68 секунд.


                  1. Alexeyslav
                    16.01.2019 00:49

                    Обычно никто и не спешит.


  1. MKrivosheev
    14.01.2019 13:55

    Экономический эффект есть или просто «потому что могу»? Спрашиваю, потому что сам когда-то посматривал на тепловизоры и сложилось впечатление, что за примерно $100 можно уже купить приличное решение.
    Указанные компоненты, как я понимаю, стоят $80+. Или есть дешевле?


    1. Walker2000
      14.01.2019 14:03
      +1

      Я сравнивал со стоимостью тепловизионного обследования дома. По Москве это от 5 тыс. рублей как раз. Но за эти деньги покупаешь только картинки, которые специалист тебе наделает за часовой визит со своего тепловизора. А в моем случае 5 тыс. рублей + несколько часов кодинга позволили сделать свой любительский тепловизор. Как понять здесь экономический эффект? )

      Дешевле компонентов с подобными характеристиками я не нашёл. Есть матрицы 8 на 8 пикселей, они стоят в районе 2 тыс. руб. Но сомневаюсь, что они дадут удобоваримую картинку.


      1. Javian
        14.01.2019 15:12

        Можно и дешевле по, упомянутому выше, методу сканирования.
        habr.com/post/172947
        image


        1. Walker2000
          14.01.2019 15:20

          Достойный проект. Но, боюсь, что для задачи тепловизионного обследования дома он слабо применим. На скриншоте видно, что получение картинки 32 на 24 пикселя занимает 1,5 минуты. Описанная в моем посте матрица позволяет формировать картинку с таким разрешением в реальном времени (у меня получилось 4 fps).


          1. Javian
            14.01.2019 15:53

            Конечно это имеет ограничения и пригодно больше для случая одноразового применения.


      1. ONIKSfly
        14.01.2019 17:18

        А почему бы для этих целей не взять в аренду тепловизор? Не очень разбираюсь в этом вопросе, поэтому вопрос пракитческий, вот, например Fluke Ti 27 в сутки обходится в 3 000?.


        1. Walker2000
          14.01.2019 17:19

          Ну, это не интересно )


  1. ilusder
    14.01.2019 15:07

    Занимаюсь похожим сенсором AMG88 от панасоник. 8 на 8 пикселей но немного дешевле.


    1. Walker2000
      14.01.2019 15:08

      Да не «немного», а гораздо дешевле )


  1. Gryphon88
    14.01.2019 15:40

    Какой библиотекой пользуетесь для sinc-интерполяции?


    1. Walker2000
      14.01.2019 15:45

      OpenCV. Вот строчки кода, первая формирует цветную тепловую карту из черно-белой, вторая растягивает из 32х24 в 320х240:

      img = cv2.applyColorMap(ta_img, cv2.COLORMAP_JET)
      img = cv2.resize(img, (320,240), interpolation = cv2.INTER_CUBIC)


      1. Gryphon88
        14.01.2019 16:00

        Кубическая интерполяция не лучший выбор для малого числа пикселов: неравномерное разрешение в зависимости от ориентации матрицы, дрожание и занижение значений на краях, так что о честных количественных значениях можно забыть. Кстати, какой эквивалентый размер пиксела получается? Оптическая схема не описана.


        1. Walker2000
          14.01.2019 16:23

          Возможно. А какой тип интерполяции лучше использовать?

          Странно, размер пикселя почему-то в документации не могу найти.


          1. Gryphon88
            14.01.2019 17:08

            Его редко пишут, обычно запрашивать надо, ну или мерить. Чтобы узнать размер пикела и построить аккуратный kernel, нужно знать и pixel size (сщбственно сторона пиксела) и pixel pitch (расстояние между центрами пикселов). Для эквивалентного размера пиксела нужно знать ещё параметры оптической системы: фокусное расстояние и апертура (f/D) плюс длина волны светофильтра. Тогда, после калибровки, можно иметь количественные данные.
            EDIT А на вопрос так и не ответил :) Sinc-интерполяцию, лучше всего по Unser. Я пока не могу найти реализацию, написанную прямыми руками, да и у меня написать не получается.


            1. Walker2000
              14.01.2019 17:15

              Спасибо за подробный ответ. Если честно, я не вижу на сенсоре оптической системы. Есть только отверстие, а под ним плоская матрица. Диаметр отверстия около 2 мм. Т.е. размер пикселя грубо 50...60 мкм получается.


              1. Gryphon88
                14.01.2019 17:44

                Если под пластиковым тубусом плоская линза, то разрешение обсчитывается как камера-обскура с очень большим отверстием. А если пластик снимается, я б таки сунул под микроскоп с измерительным окуляром или сфоткал рядом с объект-микрометром. Хотя и так понятно, что разрешение никакое: угол, откуда дует, найти можно, а вот саму щель уже нет.


                1. Walker2000
                  14.01.2019 17:55

                  К сожалению, не располагаю таким оборудованием (


  1. NumLock
    14.01.2019 16:17

    Интересная статья. Я всё задаюсь вопросом. Можно ли будет получить картинку инфракрасного сравнивая изображения двух камер, предварительно разделив световой поток на два и пропуская один из них через светофильтр?


    1. Gryphon88
      14.01.2019 16:27

      Если я правильно понял, то Вы предлагаете такую схему:
      объектив -> светоделитель ->
      -> светофильтр (750nm longpass) -> матрица1
      -> матрица2

      То скорее всего получится, у почти всех матриц до 1000нм ненулевая чувствительностьность


      1. da-nie
        14.01.2019 18:05

        Только это будет ближний ИК, а тепловизор работает в дальнем.


    1. Walker2000
      14.01.2019 16:30
      +1

      Спасибо )

      Это будет сделать весьма затруднительно. ИК спектр тела при комнатной температуре (ну или близкой к ней) имеет максимум спектральной плоскости в районе 10 мкм. Обычное стекло плохо пропускает такие длины волн. Насколько я помню, на дорогих тепловизорах в оптических системах используется германиевая оптика. Она очень дорогая.

      Ну и сами датчики тоже должны иметь максимум чувствительность на таких длинах волн. Видимый свет (400...560 мкм) и ИК излучение (10 мкм) — это просто разные датчики.


      1. da-nie
        14.01.2019 18:06

        Селенид и сульфид цинка, кремний, германий, арсенид галлия, полиэтилен и соль прозрачны в ИК. Линзы ZnSe достаточно дешёвые на ebay.


        1. Walker2000
          14.01.2019 18:19

          Да, судя по внешнему виду на дешевых тепловизорах стоят линзы из селенида цинка


          1. da-nie
            14.01.2019 20:17

            У Flir точно нет — кремниевое окно в корпусе и германиевая (или арсенид галлиевая? забыл.) линза лептона. У Seek Thermal вроде как халькогенидное стекло (но не точно). Что у китайцев — не знаю. :)


            1. Walker2000
              14.01.2019 20:43

              Слушайте, у Вас просто профессиональные познания в тепловизорах )


              1. da-nie
                14.01.2019 20:57
                +2

                Нет. Просто когда я выбирал, на чём бы сделать прибор ночного видения, я много статей читал. Кстати, у китайцев появился очень неплохой HT-18. У него приличное разрешение и цена, как у Flir One Gen 2. Но есть непонятки с типом матрицы. Дело в том, что тепловизор, обычно, делают на базе микроболометров, а они очень дорогие и сложные в изготовлении. Но есть ещё подарок судьбы — сегнетоэлектрический датчик. Такое часто ставят в системы ночного вождения автомобилей. По цене они гораздо дешевле болометров, но более шумные. Есть большое подозрение, что в HT-18 как раз такой датчик. А у Flir точно микроболометры. Лептон вообще прикольная игрушка. Он настроен на гиперфокалку (так как матрица маленькая) и не требует фокусировки, начиная с сантиметров 10-15 от себя. И легко подключается по SPI хоть к Raspberry Pi, хоть к STM. Только для 160x120 частота SPI нужна около 20 МГц — у него данных много передаётся в кадре.
                А выглядит на Raspberry Pi так:


                1. Walker2000
                  15.01.2019 08:05

                  Реально крутая штука. Качество изображения на порядок выше, чем у моей матрицы. У неё даже на 4 fps шум очень заметен. Буду иметь в виду. Если руки дойдут до более продвинутого тепловизора, стоит ориентироваться на предложенный Вами сенсор.


  1. Paspasuy
    14.01.2019 19:52

    Крутая статья!
    Достаточно коротко и всё по делу.
    Хотелось бы нажать вверх, но есть одно

    но...
    image


    1. Walker2000
      14.01.2019 19:53

      Увы (


  1. Gabiani
    14.01.2019 19:52

    Гм, я там же купил готовый тепловизор с таким же разрешением. 7 тыр стоил. Это явно дешевле даже чем датчик за 5 + Pi + экран + корпус. А за 12 были с комбинированной камерой — теплвая + обычная.


    1. Walker2000
      14.01.2019 19:53

      А ссылочкой не поделитесь?


  1. Nick_Shl
    14.01.2019 20:23

    Если брать только сам сенсор выйдет дешевле чем у китайцев. Голая картинка не интересно — к распберри нужно ещё подключить обычную камеру и складывать картинки.
    Видео как-то на одном эвенте от TI штуку собранную ребятами из DigiKey — сенсор от Flir и DLP проектор от TI — направляешь на объект и он на него же проецирует картинку. Классно использовать для обследования помещений — прямо на стене видишь точное место куда тепло уходит.


    1. Walker2000
      14.01.2019 20:41

      Да, интересно решение — тепловизор + DLP. Насчет складывания картинок подумываю как раз. В Распберри можно сразу обрабатывать их в лёт и выводить как душе угодно.


  1. Gabiani
    14.01.2019 20:26

    Я год назад покупал, протухла ссылка. Но и сейчас нашел за 7806,94, ссылку на дам, ибо модерация, а вот название — «HT-175 Imager Цифровой Инфракрасный Тепловизор инфракрасный термометр-20-300 градусов 32X32». Им нормально исследовать утечки тепла или нагрев проводки изнутри дома, но снаружи целиком дом видно плохо — непонятно, что где, тут лучше брать в двумя камерами — типа HT-02D. Вот, кстати, новые появились — приставки к смартфонам — HT-102, типа FLIR ONE, но похуже, конечно. С двумя камерами и 7225р. «HT-102 мобильный телефон внешний Инфракрасный Тепловизор инфракрасный Камера термометр Android телефон OTG функция с адаптером»


    1. Walker2000
      14.01.2019 20:40

      Прикольный аппарат. Да и приставки к телефону неплохи. Но мне изначально захотелось с модульным решением поэкспериментировать. Его можно потом будет еще куда-нибудь прикрутить, например, на дрон поставить. А сам по себе тепловизор можно использовать только как тепловизор.


  1. Oval
    14.01.2019 21:40

    ужас, у первой ракеты воздух-воздух было всего 5 пикселей
    ru.wikipedia.org/wiki/AIM-9_Sidewinder


    1. Walker2000
      14.01.2019 21:53

      Это просто песня )))

      «В ходе этого конфликта (Тайвань — Китай, 1958 год) произошёл чрезвычайно удачный для СССР случай: AIM-9B «Сайдуайндер» попал в китайский МиГ-17, но не взорвался, застряв в фюзеляже[20].

      »Внутренности" ракеты были залиты специальным клеем и для извлечения начинки были привлечены якутские косторезы, которые смогли вырезать блоки управления не повредив ни одного проводка.

      Советские конструкторы, изучив «трофей» и воспроизведя её методом «обратной инженерии», запустили в производство советский аналог — К-13/Р-3С (по классификации НАТО — Atoll)[21].

      Ракета К-13 состояла на вооружении советских ВВС более тридцати лет. Проведённый в США анализ показывает, что запчасти от ракет К-13 могут использоваться для комплектования оригинальных AIM-9 «Sidewinder»"


    1. Nick_Shl
      14.01.2019 22:22

      И механическая развертка вращающимся зеркалом. Можно и тепловизор сделать проще — один сенсор mlx90614 и развертка на двух сервоприводах. Вот статья на Хабре.


      1. Walker2000
        14.01.2019 22:39

        Да, это устройство упоминалось здесь в комментариях. Проблема в том, что кадр 32 на 24 пикселя он получает за 90 секунд. Ну и требует подключения к стационарному компьютеру ещё.


  1. Jeditobe
    14.01.2019 23:23

    А при ввозе в РФ проблем не будет?


    1. Walker2000
      14.01.2019 23:27

      У меня не возникло. Но, возможно, тут раз на раз не приходится.


    1. LumberJack
      15.01.2019 06:48

      Уже нет.

      Согласно разъяснению Верховного суда Российский Федерации (далее — ВС РФ), гражданин не может быть привлечён к уголовной ответственности за приобретение технических приспособлений для негласного получения информации или, проще говоря, для слежки, если он намерен использовать их для обеспечения личной безопасности, безопасности своих близких, а также для наблюдения за имуществом и животными. При этом предполагается, что лицо не имеет целью применять «шпионское» оборудование в качестве средства посягательства на конституционные права граждан, передаёт информационное агентство «Интерфакс» со ссылкой на принятое во вторник, 25/12/2018, постановление пленума ВС РФ.

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

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

      Отметим, что статья 138.1 УК РФ (незаконный оборот специальных технических средств, предназначенных для негласного получения информации) предполагает минимальное наказание в виде штрафа в размере до 200 000 рублей, максимальное — лишение свободы на срок до четырёх лет.


      1. Walker2000
        15.01.2019 07:39

        Спасибо за подробное разъяснение.


  1. Theblackoverlord
    14.01.2019 23:40

    На китайском Таобао есть готовое устройство на базе того же сенсора за 500 юаней

    item.taobao.com/item.htm?spm=a230r.1.14.127.7cdc3fa7HMLsAT&id=575683214449&ns=1&abbucket=16#detail


    1. Walker2000
      14.01.2019 23:41

      Спасибо за наводку )

      Готовое не нужно было как раз. Более интересной показалась задача подключить модуль, который потом можно было бы использовать в различных проектах.


  1. Vsevo10d
    15.01.2019 00:48

    Лайкнул, даже не заглянув под кат. Офигенный модуль.
    Вопрос. Чем крутить модуль и шить панораму, может, воткнуть несколько штук рядом как матрицу? Я не помню, сколько там адресов одновременно жрет I2C, но чисто теоретически возможно ли получить одну большую картинку?


    1. Walker2000
      15.01.2019 07:58

      Полагаю, что это вряд ли осуществимо, если расстояние до объекта не задано. Я ранее сталкивался с оптическими системами, собранными из нескольких оптических камер. Они собирали изображение с некоторой поверхности, расстояние до которой неизменно (это светящийся от рентгеновского излучения экран в цифровом приемнике рентгеновского изображения). И там под каждую ПЗС матрицу был свой объектив.

      Думаю, что для ИК матрицы теоретически можно повысить разрешение только если сделать программно какой-то подобие панорамной съемки. На подобие той, которая реализована в смартфонах. Но и в этом случае понадобится скорее всего дополнительно обычная камера. У нее изображение более контрастное, проще будет по нему собирать панорамный снимок. И уже на него накладывать тепловую карту.


  1. Wesha
    15.01.2019 03:01

    Корпус устройства имеет только четыре вывода — два для питания, два для общения с управляющим устройством по I2C интерфейсу.

    "У кошки четыре ноги — вход, выход, земля и питание" ©


    1. Walker2000
      15.01.2019 07:48

      Да, есть даже маленький хвост. prntscr.com/m7axn8


  1. Crevice
    15.01.2019 06:14

    Какая чувствительность у этих устройств на расстоянии?
    Можно что-то увидеть за 30-40 метров?


    1. Walker2000
      15.01.2019 07:44

      Смотря что нужно увидеть. Конкретно описанная в посте матрица на таком расстоянии человека вряд ли разглядит. Он будет как раз телесном угле одного пикселя. А вот горящее здание — по идее должно.


  1. keepcalm
    15.01.2019 09:24

    А какая стабильность? Насколько уйдет значение скажем после получаса работы?


    1. Walker2000
      15.01.2019 09:26

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


  1. mgrigorov
    15.01.2019 10:39

    Чуть более простой вариант — www.thingiverse.com/thing:2799023
    Матрица 8x8 (amg8833), цена вопроса около 2300 на алиэкспрессе. Сделал, мне понравилось, работает достаточно быстро, для домашних задач вполне достаточно. В прошивке выключил SD, т.к. нет необходимости.


    1. Walker2000
      15.01.2019 10:40

      Да, есть и такой девайс, рассматривал его тоже. Но выбрал более крупную матрицу, чтобы картинка более информативной была.


  1. v-oz
    15.01.2019 11:46

    Классное направление для поиска задали. Жаль температура датчика лишь 300. Нужно 1500 в максимуме или хотя бы 1200. Наверное, это совсем другие деньги.
    Спасибо за на водку.


    1. Walker2000 Автор
      15.01.2019 11:53

      Спасибо за отзыв. Желаю найти нужное Вам решение )


    1. da-nie
      15.01.2019 12:38

      Нужно 1500 в максимуме или хотя бы 1200. Наверное, это совсем другие деньги.


      Посмотрите закон смещения Вина. :) С такими температурами тело излучает в видимом спектре.


      1. Walker2000 Автор
        15.01.2019 12:46

        Кстати, да ). Насколько помню, температура каления — что-то в районе 550 град. Цельсия.