Собираем тепловизор
Любой, кто когда-либо ремонтировал что-то электронное знает, как трудно иногда бывает диагностировать неисправность на плате по нагреву деталей. Любой, кто утепляет квартиру знает, как трудно иногда найти сквозняки на стыках. Решением мог бы стать тепловизор - устройство для просмотра картинки в ИК-диапазоне. Но более-менее профессиональные модели стоят довольно дорого, а покупать ситуативную вещь за относительно серьезный прайс у меня лично рука пока не поднимается. Решение было найдено в создании дешевого самодельного тепловизора на народном сенсоре MLX90640 с разрешением . А уж если его не хватит, стоит задуматься и о более серьезном устройстве.
Конечно, любой тепловизор упрощает жизнь, но для меня важно наличие дополнительной картинки в обычном спектре от лица тепловизора. В случае низкого разрешения это особенно важно, поскольку разобрать содержание картинки может быть трудно. Так что перерыв промышленные модели, я решил сделать тепловизор в форм-факторе приставки к телефону.
Во-первых, приставка компактна (внешнее питание вместо батареи) и проста схемотехнически, а во-вторых, серьезно удешевляет конструкцию и снижает нагрузку на процессор контроллера (отсутствие дисплея и обработка картинки на телефоне). На ютубе я увидел отличный проект тепловизора, но, к сожалению, как раз с батарейкой.
Поскольку я разбираюсь в программировании микроконтроллеров, я решил не сильно расстраиваться и просто переделать данный проект под себя. В проекте также использовалась довольно дорогая версия платы esp32, которую я сразу решил заменить на WeMos за 200 рублей (а недавно esp32 стоила 150). Зачем платить больше? Я заказал такой же сенсор, как в проекте автора, но с широким углом обзора (110 градусов против 55) и стал ждать заказ, попутно разбирая проект автора.
Несмотря на то, что подход мне в целом понравился, проект пилился под среду Eclipse (а я работаю в PlatformIO VSCodium), в нем был объемный код для отрисовки, а максимальное число кадров в секунду, которое успевал обработать процессор было 16. От таких параметров я приуныл, равно как и от осознания, что многое из интерфейса пользователя придется переделывать. Да и поиски проектов с передачей картинки по USB также потерпели фиаско. В общем, проект был отправлен в «долгий ящик» и «до лучших времен», пока однажды…
Бродя по репозиториям гит я набрел на один занятный проект, который ранее не попадался мне на глаза… Это был тепловизор на моем сенсоре, с моей концепцией минимальной схемотехники, но с гораздо более дорогими модулями от SparkFun. И картинка передавалась по веб интерфейсу, о возможности чего я не задумывался (https://github.com/blackcj/esp32-thermal-camera). «Идеально!», — подумал я, — " С этим НУЖНО работать". Проект был написан под ArduinoIDE, но это вообще не являлось проблемой, поскольку в PlatformIO поддерживается импорт таких проектов.
Я по-быстрому сварганил бутерброд из макетки с камерой и ее обвязкой и WeMos Lolin32. Схема подключения, представленная в даташите на сенсор, достаточно простая.
Другое дело, в ней почему-то используется 2 разных источника питания, что на деле совсем не нужно, а еще заявлена работа при отсутствии подключения ножки питания и получении его от I2C. Завести таким образом сенсор не получилось, так что я вполне стандартно все питание подтянул к встроенному 3.3 вольта стабилизатору, что дало отличный результат.
Все оказалось лучше даже самых смелых ожиданий. Проект завелся с полтычка, а картинка по сокету передавалась и на компьютер, и на телефон, и даже на все сразу! Напечатай корпус — и готово! Казалось, что все, проект благополучно завершен в самые краткие сроки и без вложений. Но радость оказалось немного преждевременная.
Я уже упоминал, что для меня важен был форм-фактор приставки. Но не только из-за простоты. Такой форм-фактор позволяет сравнивать картинку с тепловизора и телефона. Но для этого нужно приложение, а писать под андроид я не умею (и не хочу). Впрочем, выход нашелся. На всех андроидах старше 7 есть Split Screen™. То есть можно открывать 2 приложения друг над другом на одном экране.
А что если на одном экране открыть браузер с картинкой тепловизора и камеру? Правильно, будет то, что требовалось. И учитывая низкое разрешение сенсора, даже потерь по качеству картинки особо нет. Но здесь начались проблемы с кодом тепловизора.
Дело в том, что страничка, которую слал тепловизор пользователю сама не меняла размер от изменения окна. Это еще ничего, ведь картинку можно сжать ручками в браузере, но при этом нижняя часть, где отображаются температурные лимиты картинки, не умещается на экране. Это неудобно, поскольку шкала температуры адаптивная. Остается или смотреть картинку целиком, но без температурных пределов, или сознательно обрезая верхнюю часть наблюдать температурные пределы, или судорожно свайпать вверх-вниз. В общем, я решил, что такие костыли для меня неприемлемы, и поспешил написать свои. Но то, что, я увидел в неткоде проекта, повергло меня в шок…
Вот код странички. Не спешите смеяться!
Да, это код веб-страницы в одну строчку. Зачем? Все просто — компилятор не понимает перенос строки (клавиша Enter) в строке (переменная C++). Работать с этим в данном виде было невозможно, поэтому я перенес данный код в онлайн-инструмент и автоматически добавил в него все отступы. VSCodium смог сделать только так.
Если что, строчка 26 на самом деле представляет из себя это
Собственно, с фронт-эндом я на «вы», поэтому и без того веселое редактирование кода превратилось в сущую пытку. Описывать что за что отвечает я, наверное, не буду (ресурс не о том). Скажу лишь, что добавил отображение маркеров самой низкой и самой высокой температуры, отображение температуры по центру экрана (пирометр) и шкалу с температурными лимитами, которая отображается только на телефоне при вертикальном разделении экрана. Честно говоря, это был один из худших опытов программирования. Постоянно конвертировать код в однострочный формат и обратно для проверки… Впрочем, не будем о грустном.
Также был исправлен занятный баг, из-за которого в консоль сыпались сообщения о неподключенном дисплее, еще и нагружая процессор. Но ведь в проекте нет дисплея! Теоретически нет, а практически он указан даже в зависимостях репозитория. После полного выпиливания кода, управляющего дисплеем… ошибки ушли и ничего не сломалось. Для чего был этот код, история умалчивает.
Итак, после завершения основной части осталось сделать корпус. Подобных тепловизоров на рынке много и идея не нова. Но! Все приставки стандартны и присоединяются к низу телефона, в то время как камера телефона вверху, и смещение картинки достаточно значительное. В угоду универсальности можно и потерпеть, но я-то для себя делаю. Вот я и решил взять модель чехла с Thingiverse и обрезать его аккурат по сканер отпечатков. Также пришлось сделать его плоским с внешней стороны.
Далее я замерил плату тепловизора и камеру, и сделал собственно корпус прибора. Крепится к чехлу он тремя винтами M2.
Невооруженным глазом видна огромная дыра в корпусе. Это заготовка под модуль логического анализатора или осциллографа. Пока не решил, какой апгрейд для меня весомее. Впрочем, память контроллера позволяет реализовать сразу два. Но пока что на ее месте будет простая крышка.
Итак, конечный прибор выглядит примерно вот так.
Из недостатков прибор не умеет питаться от кабелей Type-C -> Type-C, так что имеет место переходник. Кроме того, висящий около телефона шнур это не слишком удобно. Зато смещение картинок тепловизионной и обычной камеры минимально, так что трудно перепутать нагревающуюся деталь при ремонте. Благодаря веб-интерфейсу термокамера по сути мультиплатформенна — никакое приложение для IOS, Android, MacOS, Windows и Linux не требуется — ведь по сути мы наблюдаем картинку с веб-страницы. Причем используя сторонний софт, можно и с камеры телефона вывести картинку, так что функциональность параллельного просмотра сохраняется. Веб-интерфейс, правда, примитивен, а в плату зашиты настройки подключения к wi-fi (это довольно быстро решается, но мне лень). Нужно добавить хотя бы настройку параметра emissivity. А имея лучшие знания в области фронт-энд разработки, я бы мог запрограммировать билинейную интерполяцию (более гладкая картинка) без ущерба для производительности. Впрочем, интерполяция не привносит новой информации в кадр, так что на мой взгляд вкусовщина. В целом же, получившимся прибором я доволен.
Сейчас из-за санкций купить сенсор за такую цену не выйдет, хотя на момент завершения проекта (август 2024) было еще можно. Страничку товара теперь можно увидеть лишь под казахским адресом, в то время как под российским «такой страницы нет». В любом случае, времена меняются, иногда в лучшую сторону. Надежда умирает последней :)
Еще больше интересных статей
Коробочка для набора инструмента
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Все началось с плодотворной дебютной идеи...
Технологии 3D-печати металлами в производстве медицинских имплантатов
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Токарный станок по металлу своими руками при помощи 3d принтера.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Комментарии и вопросы
Таки получилось но на -3
Точную температуру не скажу, н...
Да, 40 мм\с это как раз рекоме...
вобщем всё было норм печатал х...
После 1 или максимум 3го слоя...
Добрый вечера! Есть задачка. К...
Поменял хотенд на ender 3s1 pr...