Вход

Просмотр полной версии : немножко инфотэйнмента своими руками



papalukas
14.09.2015, 01:02
инфотейнмент своими руками

История началась с желания сделать ultra low-cost камеру заднего вида для сивика. Чтобы, значит, зимой парковаться до упора в сугроб, но без контакта. Парктроника у меня нет, да и, уверен, сугробы он вблизи адекватно не покажет. А камера должна быть в самый раз. По роду своей деятельности занимаюсь ПО для встроенных систем. Раз так, то покупать у китайцев аналоговую камеру с монитором счёл неспортивным. После размышлений и поисков в качестве основы была выбрана связка Raspberry Pi + модуль веб камеры от сдохшего старого макбука + китайский монитор с композитным входом.

Raspberry Pi, потому что дешевый (model A - 25$, покупал до кризиса), плюс, что даже более важно, VidCore ядро в процессоре Raspberry. Что обеспечивает аппаратное ускорение кодирования/декодирования картинок и видео. Что, по мере пробуждения аппетита, оказалось очень кстати
модуль веб камеры, потому что бесплатный. Условно бесплатный, потому что пришлось покупать fish eye линзу. Изначальный план был обойтись дверным глазком, но нет: у последнего мало того, что оптика неприемлема даже для небольшого монитора, так ещё и фокусное расстояние не позволяет сделать камеру осмысленных размеров. В итоге был заказан комплект похожий на этот: http://www.ebay.com/itm/3in1-Selfie-Camera-Mobile-Cell-Phone-Lens-Good-For-Galaxy-S3-S4-S5-S6-DC264B-/230920007159?hash=item35c3e7adf7
китайский 4.3 дюймовый монитор (http://i.ebayimg.com/images/i/131077888779-0-0/s-l140.jpg) с композитным входом и разрешением 480х270i. на тот момент для Raspberry не было более приемлемых по цене и исполнению решений, подключаемых как-либо иначе


Ок, ну раз у нас есть Raspberry, грех не поиспользовать его как-нибудь более эффективно. Например решить проблему отсутствия USB/iPod входа. Да и видеорегистратор из него должен получиться, значит докупаем Raspberry NOIR камеру http://www.adafruit.com/products/1567 (NOIR обозначает не столько черноту её платы, сколько отсутствие инфракрасного фильтра, что повышает чувствительность при слабом освещении. И, как оказалось, окрашивает траву в красный цвет). Почему специальную камеру, а не ещё один модуль от ещё одного сдохшего старого макбука? Последние, как оказалось, имеют довольно маленькое разрешение и низкую частоту кадров. А камера от Raspberry снимает видео 1280х720 на 60 кадрах в секунду. Что для регистратора вредным не будет.
Также участвуют:

rotary encoder, для взаимодействия с пользователем
dot matrix LED дисплей от adafruit. Просто для красоты
часы реального времени на батарейке (на базе ds1306. от китайцев)
sd card разъем. сыграть свою роль не смог
WiFi dongle. удобно удалённо отлаживать софт. в том числе и непосредственно в машине :)

Была сделана попытка подключения второй SD карты к Raspberry, так как у Raspberry нет встроенной памяти, и ОС хранится и стартует с SD карты вставленной в плату. Было-бы неудобно её вытаскивать каждый раз, когда нужно было записать музыку. Попытка провалилась, несмотря на наличие всех необходимых драйверов и стабильного электрического подключения, Raspberry упорно глючила при доступе к SD через SPI интерфейс (ибо второго SDIO у ней нет). Поэтому в окончательном решении внешний диск сделан через USB
https://lh3.googleusercontent.com/-I9zQi7FUjXU/VfS26-M_EaI/AAAAAAAAWr0/DUu3hQBYVP4/s912-Ic42/20140812_153459.jpg
Выбор сделан, но сразу появляются несколько проблем:

камера соединяется с платой довольно коротким плоским шлейфом. Удлинять его настоятельно не рекомендуют, ибо интерфейс на это не рассчитан - картинки не будет. Значит надо ставить плату где-то около лобового стекла
питать всю систему от аккумулятора не хочется, по причине недостаточного опыта в проектировании электронных схем, а также отсутствия у Rapsbian OS поддержки hibernate режима. Последнее гарантирует севший аккумулятор при более-менее продолжительной стоянке. Значит питаем от линии accessory. Но беда, она прерывается при запуске двигателя или выключении зажигания, а значит запись файла регистратора прервется в самый интересный момент, а последний файл будет битым

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

преобразователь питания 12В-5В с выходом USB
контроллер power bank. Который как оказалось умеет или заряжать батарею, или выдавать питание с неё наружу. Но не одновременно (конечно, выпросить у китайцев с ebay такие подробности заранее просто нереально)
а значит ещё и схемы переключения питания между двумя вышеупомянутыми источниками
схемы управления питанием, позволяющей включать его по появлению заданного сигнала (например питания на accessory линии) и выключать по команде от Raspberry

В первом приближении схема получилась вот такая:
https://lh3.googleusercontent.com/Jv530P3v2iWNM3DKwKgJXGbQn2OyfJIsz_iiEq1DwOEJbDzSwqDMI2PqgMvo edHyehcgcC_muodQ6XA=w1376-h831-rw
преобразователь 12В-5В не показан, к нему схема подключена входом, изображенным слева. 12V есть вход, используемый для команды включения. RPi GPIO Out - выход Raspberry, которым мы будем выключать питание. Pololu - boost converter питания, позволяющий повысить напряжение LiIon батареи 3.7В до требуемых на выходе 5В. И что полезно, имеющий управляющих вход, позволяющий отключать нагрузку. Батарея от сломанного сотового телефона. Являясь разработчиком ПО, а не электронных схем, признаю, что проблему наверняка можно было решить проще. Но приходится играть, как умею. Готовых дизайнов подобных схем в интернете накопать не удалось
Вход 12V планировалось завести на выключатель салонного света, чтобы система стартовала как можно раньше: старт штатной поставки Raspbian OS составляет 30 секунд, и довести его до менее чем 10 секунд, насколько я знаю, не удавалось никому. Причем в моём случае минимум вряд-ли будет меньше 20, так как я не могу позволить себе удалять драйвера мультимедии. На пути включения от салонного света ждали неприятности, некоторые из которых я не решил до сих пор:

выключатель на самом деле инверсный - он подключает лампочку к земле, а не к 12V. соответственно пришлось собирать элемент НЕ (на даче под рукой был только КМОП транзистор)
необходимо обеспечить задержку сигнала включения, даже после выключения лампочки салонного света, потому что поднять линию GPIO (и тем самым предотвратить выключение платы) можно только после загрузки ОС. Т.е. через 20-секунд. А так как этот вход у меня собран на простом делителе, то никакого (осмысленного размера) конденсатора не хватит удерживать уровень логической 1 столько времени. Диод+КМОП вместо делителя должны в теории помочь, ток утечки там будет мизерный, и конденсатор понадобится совсем небольшой

Так как плата будет стоять у лобового стекла, понадобится красивая коробка. Сделана дома в размер из куска оргстекла. Слева вид изнутри с установленной платой Raspberry, платой часов реального времени, шлейфами до камеры и ручки управления.
Справа - собранная система бесперебойного питания
https://lh3.googleusercontent.com/-5A2EVQAmprg/VfXf8PrcpfI/AAAAAAAAWug/mqFcz4V1PN4/s720-Ic42/20141130_011138.jpg
внешний вид УПСа в сборе:
https://lh3.googleusercontent.com/-xDDxbsCHnnw/VfXf_HuyB_I/AAAAAAAAWuo/ni1chtClTgk/s912-Ic42/20141129_175558.jpg
(индикаторы питания на выходе и входе)

следующим этапом приводим камеру заднего вида в приемлемое для установки состояние. Для этого всё заливается эпоксидкой и обрабатывается дремелью
https://lh3.googleusercontent.com/-9sNwgsz1Grw/VfS3ApPPx5I/AAAAAAAAWsI/p68odGQ1y5k/s912-Ic42/20140814_192059.jpg
https://lh3.googleusercontent.com/-66xaI6QEpAY/VfS3AuW1-0I/AAAAAAAAWsI/t48kdolOp8o/s912-Ic42/20140814_200340.jpg
контроллер камеры сильно грелся, даже пришлось сделать медный радиатор (на предыдущем фото). уже позже нашлась причина, оказывается модули USB камер встроенных в ноутбуки типично питаются от 3.3В, а не 5! Да и вообще стандарт USB сделан хитро: линии питания используют напряжение 5В, а сигнальные линии - 3.3В.
Все компоненты перед установкой
https://lh3.googleusercontent.com/-fa49T4szZdE/VfXghnzK7QI/AAAAAAAAWus/XGpktZwCmu0/s912-Ic42/20150727_145837_HDR.jpg
Ниже изображен процесс установки: (omanual.ru rules foreva!)
снимаем центральную консоль, верхнюю крышку над магнитолой, выдвигаем магнитолу
https://lh3.googleusercontent.com/-yC504VtYmNE/VfS223wqlII/AAAAAAAAWrg/clLKG4Umz0k/s912-Ic42/20150730_134319_HDR.jpg
провода в дополнительной изоляции (лучше в гофре, как штатные, но её найти в продаже не смог), так что просто толстый кембрик и изолента сверху
снимаем плафон освещения у лобового стекла, под обивкой потолка проводим провода (+доп изоляция + поролон)
https://lh3.googleusercontent.com/-jAv0BThSYRA/VfS2t8klEFI/AAAAAAAAWq4/MJw78TOsfwI/s912-Ic42/20150801_120844.jpg
разъемы проводов от Raspberry выходят в сторону стекла у зеркала, там будем крепить коробку с платой. проводов там много: композитное видео, обычный аудио провод, USB и провод питания с линиями управления УПСа. под потолком провода идут вправо до стойки и вдоль стойки за уплотнителем вниз. Внизу стойки её обивка имеет внутри острые края, необходимо что-то проложить (стеклотекстолит в моём случае)
https://lh3.googleusercontent.com/-yDjyGTL-sSY/VfS2t1bx7VI/AAAAAAAAWq4/GpEbeeOXrao/s912-Ic42/20150801_124747_HDR.jpg
далее внизу над ногами пассажира к центральной консоли и под подлокотник (аудио и питание к разъему штатного aux входа и выхода питания аксессуаров). проводим видео провод вверх над магнитолой, подключаем к монитору и крепим его к крышке над магнитолой. туда-же провод питания монитора (12В).
https://lh3.googleusercontent.com/-iWBh5wj0tRM/VfS2x7EvfmI/AAAAAAAAWrI/to3uLIFdlI4/s912-Ic42/20150731_182231.jpg
УПС и USB hub установлены над ногами переднего пассажира, крепятся снизу к декоративной панели
https://lh3.googleusercontent.com/-UpxG4j7QiCU/VfS2NtodH6I/AAAAAAAAWqM/idCrSlrjTQo/s912-Ic42/20150912_104652.jpg
микро-USB разъем на USB хабе пришлось усилить, приклеив снаружи направляющие для вилки. иначе провод вываливался
компоненты на месте и подключены, можно собирать
https://lh3.googleusercontent.com/-uFL-yDKNUPk/VfS2x9CrFAI/AAAAAAAAWrI/kmus9nf-LR8/s912-Ic42/20150731_204323_HDR.jpg
окончательный вид:
https://lh3.googleusercontent.com/-VhSKJVl16Xw/VfS2tzZ1YfI/AAAAAAAAWq4/GnbP8EviSdY/s912-Ic42/20150801_174856.jpg
https://lh3.googleusercontent.com/-Up5eccVmNV4/VfS2t3pQ1sI/AAAAAAAAWq4/3xDFs8LaLTs/s912-Ic42/20150801_174915.jpg
Видна единственная ручка управления. Возможно стоило сделать больше органов, но и единственной ручкой получилось довольно удобно сделать следующие функции: play/пауза/стоп/play на каталог/переключение режимов (аудио, видео, фронтальная камера, задняя камера). Коробка крепится в пазы пластины из белого полистирола, вставленной в паз между лобовым стеклом и крышей сивика (не обивкой а настоящей крышей). В показанном месте на крыше штатно имеется приклеенный кусок резины на котором в результате и держится вся конструкция.
https://lh3.googleusercontent.com/-JS8LAIHbMvA/VfS2NvSsg0I/AAAAAAAAWqM/bEtKOL3e9aw/s912-Ic42/20150912_111752.jpg
за зеркалом - камера регистратора. требует изготовления корпуса и установки fish eye линзы.
https://lh3.googleusercontent.com/-nj79s5vV2M0/VfS2NhSv0PI/AAAAAAAAWqM/1o1H5g9o1UI/s912-Ic42/20150912_111731.jpg
ПО самописное, на C++ с использованием OpenMAX IL. Вдохновленное кодом omxplayer-а, который в свою очередь списан с кросс-платформенного мультимедиа проигрывателя XBMC (сейчас называется Kodi). Использование OMX IL позволяет с наименьшими затратами процессорного времени и памяти использовать VidCore ускоритель. В результате система способна проигрывать full HD видео и одновременно с этим кодировать 1280x720 видео с камеры регистратора оставляя больше 50% процессорного времени свободным
https://lh3.googleusercontent.com/-ONLSFYnSZ-I/VfS2t4fSqYI/AAAAAAAAWq4/agRxqU_njTY/s912-Ic42/20150801_174902.jpg
Несмотря то, что изначально ставилась цель сделать камеру заднего вида, она ещё не достигнута. Препятствия:

довольно непросто закрепить модуль на блоке фонарей из-за отсутствия доступа к большей части внутренности этого блока. Он заклеен, расклеивать боюсь
сделать проводку USB от блока задних фонарей в салон требует пройти через обивку задней двери и резиновые чехлы штатных проводов. Обивка двери снимается только с повреждением креплений, их надо купить. Резиновые чехлы не позволят протащить USB разъем, видимо надо разрезать кабель и спаять его обратно. Требуется около 5м USB кабеля, а это максимум длины без установки повторителя. Соответственно лишняя пайка может привести к неработоспособности.

https://lh6.googleusercontent.com/LIc-_YBy3Z2xXBx1S8i82Y8Rn7h-7cu86ocUMIYmUrPUuPLTXznAJZKfrCmk6NpE9RUph_Iou3131YM=w1376-h831-rw
также требуется реализовать автоматическое включение режима камеры заднего вида при включении задней передачи. найти соответствующий провод в районе центральной консоли не удалось. Впрочем, провести сигнал от фонарей заднего хода не представит сложности. Также хорошо-бы задействовать кнопки на руле и штатный сегментный дисплей. Это возможно, но требуется подключаться к шинам, расположенным в неудобных местах. Для кнопок на руле или автоматической регулировки яркости изображения уже заказаны АЦП и сенсор освещенности.

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

n2icker
14.09.2015, 04:34
каков бюджет и не дешевле с китая андройд башку притащить? кстати, что за up|down на дисплее спидометра?

papalukas
14.09.2015, 11:44
каков бюджет и не дешевле с китая андройд башку притащить? кстати, что за up|down на дисплее спидометра?

бюджет баксов 100 где-то за всё. и даже если голова будет стоить дороже, она всяко более функциональна: навигация там будет, например. на raspberry андроида, насколько я знаю, пока нет. соответственно и навигатор не поставить. я это так, в порядке хобби

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

n2icker
14.09.2015, 17:23
у меня просто андройд башка стоит, и ты прав, там все есть) правда регик я пока к ней не подрубил