Очень понравился лазерный дальномер, разработанный для проекта Diana
обсуждение на Железном Феликсе было... И все бы хорошо, но там "большой" комп...
Вот и сел я анализировать возможность реализации такой штуки на МК.
Судя по обсуждениям, главных противопоказаний два: веб-камеру хрен подрубишь к
контроллеру и, самое главное, не потянет микропроцессор такую задачу.
Я тут почитал... подумал... Первая задача решаема.
Вероятнее всего, веб-камера (любая) состоит из двух основных частей - матрица
с контролером, который её обслуживает, и интерфейсная микруха, отвечающая за передачу
данных на компьютер по usb, например. Если выдрать матрицу вместе с контроллером,
то получим следующий интерфейс:
- данные 8 пин.
- питание 2 пина
- синхро и команды 2 пина
Дальше нужно искать мануал (где?), брать кривые_руки.sys и МК... и RTFM!
Скорее всего нужно будет подавать синхроимпульсы, и по спаду импульса линии комадн
на линиях данных получим байт яркости пиксела (для ч.б камеры).. На МК это не сложно.
Теперь про обработку.
Для камеры 320х240 имеем 76800 байт.. Для МК мого, но не смертельно. Но мы рассмотрим
смертельный случай: 640х480=307200 МНОГО! НЕРЕАЛЬНО! Или...?
Автор дальномера упоминал где-то, что для упрощения процесса фильтрации помех и
роста быстродействия он жестко устонавливал камеру и лазер в одной плоскости и
анализировал ТОЛЬКО одну среднюю строку. Это 640 байт - копейки!!! Но мы опять же
усложним задачу и для верности проанализируем 3 средние строки пиксклов:
640х3=1920 байт. Это приемлемо, но можно уменьшить. Делаем так: считываем с линий данных
байт пиксела, ксорим черыре нижних бита и кладем его в память. Потом берем второй байт,
сдвигаем вправо на 4 бита и кладем в ячейку памяти к первому... и т.д.
Получаем (в зависимости от протокола управления чипом матрицы) до 10 (макс) тактов на байт
данных и по одному байту хранения на два байта данных. Плюс, уже проведена предворительная
фильтрация помех отрезанием инф. по слабым шумам в нижних четырех битах.
Итого: 960 байт и 19200 тактов.
С алгоритмом дальнейшей фильтрации я не определился (не силен), но в лоб получается не больше
чем по 30 тактов на байт хранения при использовании побитовых операций, т.е. около 28800 тактов
Плюс тактов (макс) 100 на вычисление дальности.
Всего имеем не более 50000 тактов. Для МК 5МГц получается 50 мс...
Честно говоря, мне кажется что обработка реальна... Более того, она не в МК будет упираться,
а в быстродействие матрицы и её контролеера... Там ведь для компьютера около 20-25 fps,
значит матрица один кадр отдает за 40 мс...
В виду всего вышеизложенного, имеет ли смысл попробовать реализовать микропроцессорный
лазерный дальномер, рассчитснный на ~1 измерения в секунду? Какие мысли у кого?