инфотейнмент своими руками
История началась с желания сделать ultra low-cost камеру заднего вида для сивика. Чтобы, значит, зимой парковаться до упора в сугроб, но без контакта. Парктроника у меня нет, да и, уверен, сугробы он вблизи адекватно не покажет. А камера должна быть в самый раз. По роду своей деятельности занимаюсь ПО для встроенных систем. Раз так, то покупать у китайцев аналоговую камеру с монитором счёл неспортивным. После размышлений и поисков в качестве основы была выбрана связка Raspberry Pi + модуль веб камеры от сдохшего старого макбука + китайский монитор с композитным входом.
- Raspberry Pi, потому что дешевый (model A - 25$, покупал до кризиса), плюс, что даже более важно, VidCore ядро в процессоре Raspberry. Что обеспечивает аппаратное ускорение кодирования/декодирования картинок и видео. Что, по мере пробуждения аппетита, оказалось очень кстати
- модуль веб камеры, потому что бесплатный. Условно бесплатный, потому что пришлось покупать fish eye линзу. Изначальный план был обойтись дверным глазком, но нет: у последнего мало того, что оптика неприемлема даже для небольшого монитора, так ещё и фокусное расстояние не позволяет сделать камеру осмысленных размеров. В итоге был заказан комплект похожий на этот: http://www.ebay.com/itm/3in1-Selfie-...item35c3e7adf7
- китайский 4.3 дюймовый монитор (
) с композитным входом и разрешением 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
Выбор сделан, но сразу появляются несколько проблем:
- камера соединяется с платой довольно коротким плоским шлейфом. Удлинять его настоятельно не рекомендуют, ибо интерфейс на это не рассчитан - картинки не будет. Значит надо ставить плату где-то около лобового стекла
- питать всю систему от аккумулятора не хочется, по причине недостаточного опыта в проектировании электронных схем, а также отсутствия у Rapsbian OS поддержки hibernate режима. Последнее гарантирует севший аккумулятор при более-менее продолжительной стоянке. Значит питаем от линии accessory. Но беда, она прерывается при запуске двигателя или выключении зажигания, а значит запись файла регистратора прервется в самый интересный момент, а последний файл будет битым
Для решения последней проблемы был спроектирован и изготовлен модуль бесперебойного питания состоящий из следующих компонент:
- преобразователь питания 12В-5В с выходом USB
- контроллер power bank. Который как оказалось умеет или заряжать батарею, или выдавать питание с неё наружу. Но не одновременно (конечно, выпросить у китайцев с ebay такие подробности заранее просто нереально)
- а значит ещё и схемы переключения питания между двумя вышеупомянутыми источниками
- схемы управления питанием, позволяющей включать его по появлению заданного сигнала (например питания на accessory линии) и выключать по команде от Raspberry
В первом приближении схема получилась вот такая:
преобразователь 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, платой часов реального времени, шлейфами до камеры и ручки управления.
Справа - собранная система бесперебойного питания
внешний вид УПСа в сборе:
(индикаторы питания на выходе и входе)
следующим этапом приводим камеру заднего вида в приемлемое для установки состояние. Для этого всё заливается эпоксидкой и обрабатывается дремелью
контроллер камеры сильно грелся, даже пришлось сделать медный радиатор (на предыдущем фото). уже позже нашлась причина, оказывается модули USB камер встроенных в ноутбуки типично питаются от 3.3В, а не 5! Да и вообще стандарт USB сделан хитро: линии питания используют напряжение 5В, а сигнальные линии - 3.3В.
Все компоненты перед установкой
Ниже изображен процесс установки: (omanual.ru rules foreva!)
снимаем центральную консоль, верхнюю крышку над магнитолой, выдвигаем магнитолу
провода в дополнительной изоляции (лучше в гофре, как штатные, но её найти в продаже не смог), так что просто толстый кембрик и изолента сверху
снимаем плафон освещения у лобового стекла, под обивкой потолка проводим провода (+доп изоляция + поролон)
разъемы проводов от Raspberry выходят в сторону стекла у зеркала, там будем крепить коробку с платой. проводов там много: композитное видео, обычный аудио провод, USB и провод питания с линиями управления УПСа. под потолком провода идут вправо до стойки и вдоль стойки за уплотнителем вниз. Внизу стойки её обивка имеет внутри острые края, необходимо что-то проложить (стеклотекстолит в моём случае)
далее внизу над ногами пассажира к центральной консоли и под подлокотник (аудио и питание к разъему штатного aux входа и выхода питания аксессуаров). проводим видео провод вверх над магнитолой, подключаем к монитору и крепим его к крышке над магнитолой. туда-же провод питания монитора (12В).
УПС и USB hub установлены над ногами переднего пассажира, крепятся снизу к декоративной панели
микро-USB разъем на USB хабе пришлось усилить, приклеив снаружи направляющие для вилки. иначе провод вываливался
компоненты на месте и подключены, можно собирать
окончательный вид:
Видна единственная ручка управления. Возможно стоило сделать больше органов, но и единственной ручкой получилось довольно удобно сделать следующие функции: play/пауза/стоп/play на каталог/переключение режимов (аудио, видео, фронтальная камера, задняя камера). Коробка крепится в пазы пластины из белого полистирола, вставленной в паз между лобовым стеклом и крышей сивика (не обивкой а настоящей крышей). В показанном месте на крыше штатно имеется приклеенный кусок резины на котором в результате и держится вся конструкция.
за зеркалом - камера регистратора. требует изготовления корпуса и установки fish eye линзы.
ПО самописное, на C++ с использованием OpenMAX IL. Вдохновленное кодом omxplayer-а, который в свою очередь списан с кросс-платформенного мультимедиа проигрывателя XBMC (сейчас называется Kodi). Использование OMX IL позволяет с наименьшими затратами процессорного времени и памяти использовать VidCore ускоритель. В результате система способна проигрывать full HD видео и одновременно с этим кодировать 1280x720 видео с камеры регистратора оставляя больше 50% процессорного времени свободным
Несмотря то, что изначально ставилась цель сделать камеру заднего вида, она ещё не достигнута. Препятствия:
- довольно непросто закрепить модуль на блоке фонарей из-за отсутствия доступа к большей части внутренности этого блока. Он заклеен, расклеивать боюсь
- сделать проводку USB от блока задних фонарей в салон требует пройти через обивку задней двери и резиновые чехлы штатных проводов. Обивка двери снимается только с повреждением креплений, их надо купить. Резиновые чехлы не позволят протащить USB разъем, видимо надо разрезать кабель и спаять его обратно. Требуется около 5м USB кабеля, а это максимум длины без установки повторителя. Соответственно лишняя пайка может привести к неработоспособности.
также требуется реализовать автоматическое включение режима камеры заднего вида при включении задней передачи. найти соответствующий провод в районе центральной консоли не удалось. Впрочем, провести сигнал от фонарей заднего хода не представит сложности. Также хорошо-бы задействовать кнопки на руле и штатный сегментный дисплей. Это возможно, но требуется подключаться к шинам, расположенным в неудобных местах. Для кнопок на руле или автоматической регулировки яркости изображения уже заказаны АЦП и сенсор освещенности.
если кому интересны подробности проекта, готов ответить на любые вопросы