О тепловизоре на ардуине

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

Всех приветствую. 

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

 

Так вот, и везде предлагается третий способ - это ардуину заставить считывать с датчиком mlx90614esf-dci или bci. Кто-то из вас полюбому это делал или пытался. Или может будет. И для тех, кто будет я бы хотел подкинуть идею.

 

Идея в том, чтобы вместо XY использовать другой алгоритм движения, да и формирования картины. Вы наверное замечали, что глядя в точку вы даже ближние к ней объекты видите не так четко, как эту точку. Чем дальше от точки, тем больше объект похож на пятно, даже находясь на таком же расстоянии от глаза. Это наталкивает на мысль, что и в тепловизионной картинке от первого лица более подробно интересует именно точка, а потом уже все вокруг. Как же можно получить наибольшую плотность у точки, на которую смотрим? Элементарно! Датчик должен вращаться основным двигателем вокруг своей оси на постоянной основе с определенной частотой оборотов. От этого двигателя нужна обратная связь, чтобы понимать угол относительно горизонта. Если хотим удвоить производительность - устанавливаем два датчика рядом (продолжение оси ровно между ними). 

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

 

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

 

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

 

 

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

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

картинку бы...

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

Gippopotam пишет:

картинку бы...

Да я просто художник от бога! 

Зеленый - основной движок. Красное - змейка типа комповского сидирума, которая отталкивает и притягивает сенсоры относительно оси вращения. Движок который эту змейку крутит я не стал рисовать, потому что художник от бога. Синее - это сенсоры.

vvadim
Offline
Зарегистрирован: 23.05.2012
Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Все упирается в инертность датчика. Вращать его, или сканировать - один фиг. Все будет очень медленно.

А если медленно, то отсканируется картинка за 2 минуты, или за три разницы нет. Да и проблем с вращением не оберешся.

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

да да, вот про это я и говорил. Он по вертикали картинку делает, причем еще зачем-то после сканирования линии возвращается вниз, хотя мог бы сканировать линии без отрыва. а я предлагаю начинать с точки и идти по спирали. 

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

Okmor пишет:

Все упирается в инертность датчика. Вращать его, или сканировать - один фиг. Все будет очень медленно.

А если медленно, то отсканируется картинка за 2 минуты, или за три разницы нет. Да и проблем с вращением не оберешся.

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

Задачка у меня другая, нежели у автора того девайса, что по ссылке. Он получает картинку а ля фото. А я предлагаю это как приложение к основному изображению для его более удачного анализа. Тем же глазом человека. 

Как можно применить? При плохом изображении с камеры где угодно. Речь идет о камере или хосте, который может менять направление. В этом случае замечая что-то нечеткое теплое на краю изображения, следует на него направить и тогда картинка по тепловизору становится четкой. Можно запросто использовать для поиска живности как обычный тепловизор. Да, это хлопотно, неказисто, визжать будет чуток и тряски боится. Но зато чертовски дешево по отношению к обычному тепловизору =) Плюс мне почему-то кажется, что при должном упорстве можно довести конструкцию до ума. А еще мысли были, что если бы взять один датчик, закрепить стационарно. А вращать трубку из его объектива также по спирали, как бы давая ему смотреть только на что-то определенное. И чтобы это работало просто взять датчик с огроменным углом. Тогда с проводами возни меньше, а с механизмами вроде столько же. Мало ли кому еще идеи в голову придут...

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

LastHopeMan пишет:
да да, вот про это я и говорил. Он по вертикали картинку делает, причем еще зачем-то после сканирования линии возвращается вниз, хотя мог бы сканировать линии без отрыва. а я предлагаю начинать с точки и идти по спирали.

Да какая разница. Дополнительные движения на фоне медленного сканирования никак не меняют общую картину тормознутости. 

Ваше решение вращать датчик вместо сканирования кроме менингитов ничего не даст. Человеческий глаз работает совсем по другому. Глаз построен таким образом, что он не видит недвижущихся объектов. Потому наш глаз делает постоянные микродвижения даже если мы смотрим в одну точку. Периферия зрения тоже очень важна. На периферии картинка размытее, но на периферии угла зрения намного больше ДД, тоесть динамический диапазон картинки.

Таким образом глаз четче  видит то, что мы хотим рассмотреть и при том вовремя замечает опасность на периферии, даже если там темно и при прямом рассмотрении ничего не видно.

 

Также у глаза есть одна особенность. Он видит контурами, и эти контуры усиливаются в самом глазе еще не доходя до мозга. Каждая колбочка при засвете угнетает чувствтельность соседней колбочки и наоборот. Тоесть контрастные края предметов слегка инвертированы. Мы не замечаем етого, но поверьте это так.

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

 

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

LastHopeMan пишет:

Все упирается в инертность датчика. Вращать его, или сканировать - один фиг. Все будет очень медленно.

Поверьте. Он очень мееееееедленный и тоооооормознутый.

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

Теперь я еще и проверил. Да, MLX90614ESF-DCI довольно инерционный на заводских настройках, пролетевшую птицу может проигнорировать запросто. Но это в базовом режиме, где у него "медицинская точность". А вот если поменять настройки в пользу быстродействия, то птица пролететь не успевает, за что мы платим небольшими скачками показаний, ну и незначительным снижением их точности. Режим с PWM не тестировал, но он вроде при грамотной настройке может придать реакции. По крайней мере это следует из даташита.

В общем-то данная модель рассчитана для медицинских целей, поэтому заводские настройки и калибровку вполне можно оправдать. 

AmateurFF
Offline
Зарегистрирован: 02.02.2015