Category Archives: DIY

Ambilight своими руками: Часть 4 – всё вместе

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

Для этого можно модифицировать скрипт, который мы написали для тестирования.

cp test.py run.py
vim run.py

теперь помимо тех библиотек, которые мы уже подключили нам понадобится ещё time и neopixel.

import numpy as np
import time
import cv2
import sys
from neopixel import *

Далее нужно инициализировать библиотеку для работы со светодиодами, предварительно объявив несколько переменных, которые будут описывать нашу ленту и способ доступа к ней:

LED_PIN = 18
LED_HEIGHT = 15
LED_WIDTH = 25
LED_FREQ = 800000 
LED_DMA = 5
LED_BRIGHTNESS = 255
LED_INVERT = False

strip = Adafruit_NeoPixel(LED_HEIGHT*2+LED_WIDTH*2,LED_PIN,LED_FREQ,\
                                LED_DMA,LED_INVERT,LED_BRIGHTNESS)
strip.begin()

теперь инициализируем видеозахват используя OpenCV, этот код уже был написан в прошлый раз:

cap = cv2.VideoCapture(0)

if (not cap.isOpened()):
    print "unable to initialize!"
    exit(0)

создаем переменные с которыми будем работать и читаем кадр из устройства

ret,frame1 = cap.read()

теперь нам нужен цикл который будет все время вычитывать кадры и управлять лентой:

while(cap.isOpened()):
    ret,frame1 = cap.read(frame1)

EasyCap выдает картинку 720×480 пикселей на основе, которой нам надо выставлять цвет для светодиодов. Самый простой способ, который я вижу это просто сжать эту самую картинку до размера количества светодиодов, то есть из 720×480 должно получиться 25×15. К счастью в OpenCV это делается одной строчкой:

 rsz1 = cv2.resize(frame1, (LED_HEIGHT, LED_WIDTH))

а дальше всё просто, каждый светодиод – это просто пиксель на краю полученной картинки. Прочитав цвет каждого пикселя мы и выставим их для светодиодов.

    for i in range(LED_WIDTH):
        BGR = rsz1[LED_WIDTH-i-1,0]
        color = Color(int(BGR[2]),int(BGR[1]),int(BGR[0]))
        strip.setPixelColor(i, color)

Тут следует сказать о двух особенностях.

  1. У меня лента начинается в нижнем левом углу телевизора и идёт по часовой стрелки если смотреть на экран. Соответственно мне нужны пиксели с левой стороны картинки то есть X=0, а Y=высота картинки – индекс, так как начало картинки находится в верхнем левом углу
  2. В Картинках, представленных как массивы numpy, сначала идут Y координаты, а потом X

Дальше нужно повторить всё тоже самое только для верха, правого бока и низа:

    for i in range(LED_HEIGHT):
        BGR = rsz1[0,i]
        color = Color(int(BGR[2]),int(BGR[1]),int(BGR[0]))
        strip.setPixelColor(i+LED_WIDTH, color)
    for i in range(LED_WIDTH):
        BGR = rsz1[i,LED_HEIGHT-1]
        color = Color(int(BGR[2]),int(BGR[1]),int(BGR[0]))
        strip.setPixelColor(i+LED_HEIGHT+LED_WIDTH, color)
    for i in range(LED_HEIGHT):
        BGR = rsz1[LED_WIDTH-1,LED_HEIGHT-i-1]
        color = Color(int(BGR[2]),int(BGR[1]),int(BGR[0]))
        strip.setPixelColor(i+LED_HEIGHT*2+LED_WIDTH, color)

Единственное, на что нужно обратить внимание – это то, что каждый раз вызывая setPixelColor вы должны сдвигать index светодиода для которого вы выставляете цвет. В первом цикле у нас 15 светодиодов, соответственно во втором цикле мы уже выставляем цвет для 15+i-го светодиода, а в 3ем цикле для 15+25+i-го и т.д..

Теперь, когда цвет для всех светодиодов задан осталось только отправить эти данные на ленту:

    strip.show()

Вот и всё – скрипт готов, пришло время запускать.

sudo python run.py

светодиоды зажгутся и если вы запустите кино или просто свернёте все окна то увидите, что некоторые (или все) светодиоды начнут неприятно моргать:

Первое, что можно сделать, чтобы избавиться от этого – это разогнать Raspberry Pi 2 используя стандартную утилиту raspi-config.

sudo raspi-config

выберите overclocking

raspiconfigзатем выберите preset pi2 – 1000MHz

raspiconfig-pi2presetПерезагрузитесь и попробуйте ещё раз. Должно стать лучше, но не идеально. Причина тому, видимо в том, что мы читаем только один кадр, в то время, как EasyCap предосталвяет buffer из двух. Чтобы проверить это можно воспользоваться всё тем же v4l2-ctl и опцией –all:

v4l2allв голову приходит только один фикс – читать два раза. Для этого сделаем небольшое изменение для нашего скрипта vim run.py на строчке 30:

ret,frame1 = cap.read()
ret,frame2 = cap.read()

и на строчках 34-37

    ret,frame1 = cap.read(frame1)
    ret,frame2 = cap.read(frame2)

    rsz1 = cv2.resize(frame2, (LED_WIDTH, LED_HEIGHT))

и попробуем ещё раз

sudo python ryn.py

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

Ambilight своими руками: Часть 3 – софтверная

Если вы прочитали мой предыдущий пост, все подключили и у вас тоже железо, что и у меня – не спешите радоваться, всё только начинается. Теперь нужно всё настроить.

Обновите ваш Raspbian

sudo apt-get update
sudo apt-get upgrade

Для начала убедитесь, что ваш EasyCap девайс работает. В этом вам помогут команды lsusb и dmesg | tail:

lsusb
dmesg | tail

вывод должен выглядеть примерно так:

lsusbdmesgТут видно, что появился новый USB девайс 1b71:3002, что это USBTV007 от fushicai. Дальше нам понадобятся утилиты Video4linux. С помощью v4l2-ctl –list-devices найдите свой EasyCap. В моем случае это просто /dev/video0.

v4l2ctllistОтлично, запомните (или запишите) результат v4l2-ctl – тот что выглядит как /dev/video0. Теперь используя, например, mplayer можно посмотреть картинку предварительно запустив Иксы:

startx
sudo apt-get -y install mplayer
mplayer tv:// -tv device=/dev/video0 -hardframedrop

вместо /dev/video0 может быть что-то другое – смотри вывод v4l2-ctl –list-devices.

Тут вас ждёт первая засада: чёрный или зелёный экран.

20151119_205807Проверьте кабели и побалуйтесь с переключателем PAL-NTSC:

20151103_220807Или же вы можете указать PAL или NTSC в командной строчке для mplayer

mplayer tv:// -tv device=/dev/video0:norm=NTSC -hardframedrop

20151119_210935Python+OpenCV

Cледующий шаг – это поставить и настроить Python+OpenCV. Python – это скриптовый язык программирования, подробнее о нём можете прочитать например в Wikipedia. Скорее всего Python уже установлен на Raspberry Pi, тем не менее имеет смысл проверить версию, так как я тестировал только с версией 2.7.3.

Далее вам нужно поставить две python библиотеки. Это numpy и OpenCV. Они так же доступны через apt-get.

sudo apt-get install python-numpy
sudo apt-get install python-opencv

Numpy – это библиотека для научных вычислений, а OpenCV – это библиотека машинного зрения. Для того, чтобы проверить, что всё установлено и работает как надо, можно написать простенький скрипт на Python-е. Я люблю vim, но вы можете использовать любой другой текстовый редактор, например nano test.py.

Импортируем библиотеки numpy, OpenCV и sys для последующего расширения и работы с системными функциями.

import numpy as np
import cv2
import sys

Эта часть инициализирует видеозахват для устройства /dev/video0. Если ваш EasyCap имеет другой номер – используйте его вместо 0. И проверяем, что инициализация прошла успешно.

cap = cv2.VideoCapture(0)

if (not cap.isOpened()):
  exit(0)

Читаем кадр из устройства и проверяем, что чтение прошло успешно.

ret,frame = cap.read()

if (not ret):
  exit(0)

И сохраняем в файл.

cv2.imwrite('/run/test.jpeg',frame)

Запускаем наш Python скрипт, чтобы посмотреть как оно работает:

sudo python test.py

Для того, чтобы посмотреть картинки в консоли, я использую fbi.

sudo apt-get install fbi
sudo fbi /run/test.jpeg

20151119_211614

_rpi_ws281x

Следующий шаг – это начать работу со светодиодной лентой. На просторах интернета есть разные реализации. Наиболее часто попадающаяся это rpi_ws281x, в частности инструкия на сайте Adafruit ссылается на неё, однако мне так и не удалось её поставить и заставить работать отдельно на Raspberry Pi 2, в то время как на Raspberry Pi B+ всё работает. Спасибо ребятам из pimoroni, за их волшебный unicorn_hat, который решил все проблемы  и простому shell скрипту, который устанавливает все необходимое. Просто качаете и запускаете.

Сначала ставим саму библиотеку, как описано здесь:

sudo apt-get install build-essential python-dev git scons swig
git clone https://github.com/jgarff/rpi_ws281x.git
cd rpi_ws281x/
scons

После того как библиотека скомпилирована и установлена, нужно её немножко подправить и для этого то и понадобится скрипт от ребят из pimoroni.

wget get.pimoroni.com/unicornhat
chmod +x unicornhat
./unicornhat
sudo pip install unicornhat

Чтобы проверить работоспособность можно запустить один из exmaple-ов.

20151119_222410А в следующей серии вы узнаете как скрестить OpenCV и Adafruit_NeoPixel чтобы управлять светодиодами в зависимости от изображения на экране

 

Ambilight своими руками. Часть 2 – Железо

Итак, вы прочитали первую часть и понимаете какую боль вам придётся испытать и всё равно хотите попробовать? Очень хорошо, я попробую это облегчить.

Хочу сразу подчеркнуть, что если вы хотите и фильмы смотреть и управлять лентой с Raspberry Pi, то вы пришли не по адресу. Мой вариант годиться только для одного – фоновая подсветка для внешнего HDMI сигнала.

Итак вам понадобятся:

  • Raspberry Pi 2
  • Светодиодная лента на базе ws2812b
  • HDMI Splitter
  • HDMI2AV converter
  • EasyCap USB AV Grabber
  • блок питания для Raspberry Pi
  • блок питания для HDMI Splitter-а (Должен быть в комплекте)
  • 3x HDMI кабель
  • RCA-RCA кабель
  • Источник HDMI сигнала, например Nvidia Shield
  • паяльник, припой,

Блок питания для Raspberry Pi

Я не могу передать словами, насколько важен хороший источник питания для Raspberry Pi. Если вы видите вот такой значок в верхнем правом углу, значит вашему Raspberry Pi не хватает питалова.

20151103_221700

я взял SmartBuy с двумя USB на 2 и 1 ампера, проблемы с питанием пропали.

20151103_220456

Ещё хорошо себя показала внешняя батарея от Xiaomi 

20151103_220509

Video Grabber

Easy Cap USB Video Grabber – эта та самая вещь, которая доставит вам много боли, так как их существует великое множество (говорят всего 4), и невозможно определить какой именно девайс вы купите до покупки, так как они выглядят одинаково.

20151103_220604

Мне не повезло – я купил 4 штуки и все они оказались на базе чипа UTV007. К счастью, Raspbian от 2015-05-05 (последний доступный Debian Wheezy на официальном сайте Raspberrypi.org на момент написания) уже включает в себя поддержку драйвера для этого устройства.

20151103_221052

Светодиодная лента

Если вы с паяльником на ты, то вам повезло, и эта часть не вызовет у вас трудностей, но я паять не умею, поэтому мне понадобилась помощь интернета. Вот видео, которое я использовал как видео инструкцию:

На то, чтобы все припаять правильно и ничего не развалилось, пока я нёс это до телевизора ушло вечеров 5. В результате я добился чего хотел – надёжного соединения и без соплей. Правда из-за того, что я сначала отодрал защитный слой со светодиодной ленты, а потом паял, то на него налипла всякая хрень, которая мешает надёжному креплению ленты к телевизору. Появилось даже идея воспользоваться могучим клеем момент, но пока это выглядит вот так:

20151103_220826

Остальные компоненты

HDMI Splitter или разветлитель по нашему. Нужен чтобы сделать из одного выходного сигнала два. Первый всё так же идёт на телевизор, а второй, копия первого, идет на устройство видеозахвата и используется в качестве входных данных для задания цвета светодиодов

20151103_220749

Поскольку EasyCap работает с аналоговым видеосигналом, а на выходе у современных устройств как правило HDMI, то нужен конвертор HDMI2AV.

20151103_220756Его и EasyCap соединяем RCA-RCA кабелем соблюдая маркировку – желтый CVBS/Video в Желтый и т.п.

Подключение светодиодной ленты

Это малость запутанный момент. Можете нарыть разные варианты в интернете. Тот же Adafruit дает неплохое описание. Важно помнить две вещи:

  • У светодиодной ленты и Raspberry Pi должна быть общая земля
  • Для питания светодиодной ленты нужен мощный источник питания, около 60*количество светодиодов мА

У меня 80 светодиодов, то есть мне нужно 4.8 Ампера для светодиодной ленты. Я купил блок питания от какого-то ноутбука на 6 Ампер.

20151116_203458И о чудо – штекер от блока питания идеально подошёл к одному из разъёмов с клеммой, что у меня завалялся.

20151116_203544Соответственно берем минус и подключаем к земле ленты (чёрный провод) и к земле на Raspberry Pi 2 (например к pin 6), а плюс с разъёма подключаем на 5 вольт ленты (красный провод). Последнее, что остаётся сделать – это подключить data (зелёный провод) светодиодной ленты к pin 12.

20151116_212526Распиновку Raspberry Pi 2 можно посмотреть здесь.

pinout6-1220151116_211654

Результат

В результате получилось довольно миленько:

20151103_221509Что скажите? То как выглядит подсветка – норм?

Ambilight своими руками. Часть 1 – Боль

Полгода назад я открыл для себя мир боли и унижения волшебный мир микроконтроллеров и одноплатных компьютеров. Теперь у меня аж целых 6(7) Raspberry Pi, 3 Arduino и 2 девайса от ODROID. И, хотя большинство из них пойдёт в мой автомобильный проект или на подарки друзьям, один из них решено было пустить в какой-нить домашний проект.

20151103_220658 20151107_110215

Одним из первых таких проектов, который попался мне на глаза в интернете был проект по добавлению фоновой подсветки к телевизору наподобие той, что делает Philips.

Естественно, как и всё, что связано со “сделай сам” , оно не могло просто взять и заработать.

Сначала я купил “неправильную” RGB ленту. Которая работает шикарно, но на ней нельзя задать цвет для отдельного светодиода, а только для всей ленты целиком. Правда эта лента пригодилась в другом проекте, о котором обязательно напишу позже.
RGB лента 20151107_115237  20151107_115336

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

ws2812

ws2812

Как оказалось, это тоже “неправильная” лента и проекты, которые существуют в интернете либо не поддерживают её, либо требуется дополнительно Arduino… или я просто не умею пользоваться google-ом.

  • Всемирно любимый Hyperion, например, при настройке не имеет поддержки ws2812 лент, но может управлять ей через Arduino (нафига?). С наскока разобраться не получилось, да и сама идея использовать связку RaspberryPi с Arduino мне как-то не нравится
  • ambi-tv вообще поддерживает только один тип лент: LPD8806, хотя имеет возможность расширения
  • “мертвый” boblight тоже может работать с такой лентой только через Arduino.

В дополнение ко всему этому, рабочие примеры в интернете были для Raspberry Pi A или B, а для Raspberry Pi 2 часто можно было встретить оговорку, что “не поддерживается” или “не работает”, что вселяло дополнительный оптимизм.

Ну да ладно, подумал я, говно вопрос – запилю всё сам. Тогда я ещё не знал, что помимо Software проблем меня ждут ещё и Hardware.

Не подходит для Raspberry Pi - недостаточно питалова

Зарядка от телефона Samsung 5v/2a

Как оказалось большинство (или все?) производителей телефонов кладут в комплекте с их устройством говённую зарядку, напряжение которой не хватает для Raspberry Pi, к тому же сам Raspberry Pi имеет ограничение на выходной ток на USB портах. О том что это может вызывать какие-то проблемы с подключенными устройствами я тоже узнал гораздо позже.

Кроме того это кажется очевидным, когда читаешь, но не очевидным, когда делаешь. Светодиодную ленту нужно СНАЧАЛА примерить к телевизору, ЗАТЕМ нарезать. ПОСЛЕ припаять, и ТОЛЬКО ПОТОМ приклеивать к телевизору.

В дополнение ко всему этому мой вариант расположения ленты за телевизором, отличается от классического – светить в стену. Вместо этого мои светодиоды светят в бок. Когда я это делал – мне казалось, что, поскольку край рамку у моего телевизора прозрачный, то возможность видеть подсвеченный светодиод придаст некую изюминку. На деле это отвлекает от картинки и не дает нужного эффекта. Короче НЕ НАДО ТАК ДЕЛАТЬ.
20151103_221509

О том можно ли сделать из Raspberry Pi фоновую подсветку для телевизора и как всё это работает – читайте в следующих частях.

Вместо NBT: Часть 6 – пробую OBD2

Как я уже писал, все машины старше какого-то там года оснащены OBD2 разъемом и поддерживают один из стандартов передачи данных. В основном он используется для диагностики и работает по принципу запрос – ответ.

Наткнувшись в интернете на статью о том как работать с OBD2 под Windows, я решил посмотреть могу ли я без написания собственного приложения прочитать хоть какие-нибудь данные, а заодно посмотреть, можно ли определить момент включения задней передачи.

С помощью Bluetooth terminal, приложение из Android Market-а, я подключился к своему ELM327, воткнутому в OBD2 разъем. Затем прочитал версию устрйоства, выставил автоматическое определения настроек, проверил это и прочитал скорость и обороты двигателя в разных положениях АКПП.

comb Происходило следующее

  • ATI – печатает весрию устройства вставленного в OBD2
  • at sp 0 – вытсавить автоопределение протокола передачи данных
  • at dp – проверка, что выставлено автоматическое определение протокола

Дальше шли команды для получения скорости и оборотов двигателя:

Зажигание выключено, АКПП в Parking

  • 010C – обороты: 410С0000, нас интересуют последние два байта 0000, что соответсвует 0, поскольку машина незаведена
  • 010D – скорость: 410D00. Посдений байт 00 и показвывает, что я стою

Завел двигатель, АКПП в Parking

  • 010C – обороты: 410С0С12. Последние 2 байта переводим в десятичное число (например используя стандартный Windows Calculator в версии Programmer) и делем на 4 = 772
  • 010D – Скорость 410D00 – без изменений.

Двигатель заведён, АКПП в Drive, стою на месте

  • 010C – Обороты: 410С0С56 – используя тот же метод, получаем 789
  • 010D – скорость 410D00 – без изменений

Двигатель заведён, АКПП в Reverse, стою на месте

  • 010С – Обороты: 410С0С36 – тот же метод даёт нам 781
  • 010D – скорость 410D00 – без изменений

Screenshot_2015-08-27-20-10-45Тест на скорость вперёд и назад провалился так как в обоих случаях 010D (2 последних запроса) показывает 410D03, что при движении задним ходом (предпоследний запрос), что при движении вперед.

То есть, зная передаточные числа, посчитать передачу можно, но только при движении вперёд. Для получения же данных о включении задней передачи OBD2 недостаточно. Возможно удастся прочитать данные с CAN-Шины, к которой ELM327 также имеет доступ. Однако похоже мой ELM327 девайс, мягко говоря, говно, так как выдает мне BUFFER ERROR при попытке просто показывать все сообщения, которые ходят по CAN-шине (команда ATMA):

Почитав доку я решил попробывать с фильтрами (команда AT CRA hhh). Самый простой тест, те сообщения, которые я и так вижу, имеют CAN ID 130, так что поставив фильтр atcra 130 и запустив мониторинг всех сообщений с помошью команды ATMA я попрежнему вижу эти сообщения и получаю BUFFER ERROR. То есть команда работает.

Вооруживщись командами описаными здесь, я попробывал настроить фильтры на статус водительской двери (CAN ID 0EA), скорости (CAN ID 1A1), обороты (CAN ID 0A5), и парочка других, результат один и тот же – тишина.

Есть идеи?

 

 

Вместо NBT: Часть 5 – Android и камера заднего вида

Поскольку проект сложный, то я решил разбить его на несоклько маленьких шажков, выполняя которые станет понятно – на-сколько это реализуемо.

Первое, что я решил сделать – это подружить Nexus 7 c нештатной камерой заднего вида. Купил какую-то дешевую, но чтобы вставала в ручку багажника:20150811_092410

Очевидно, что на Nexus 7 нет ни аналогового ни цифрового видеовхода (да и вообще Android устройство с видеовходом хрен найдёшь), но зато есть USB-Host. На помощь пришёл Google, который подсказал, что есть некий EasyCap, который может передавать аналоговое видео по USB:20150811_092429

Там есть какие-то заморочки с тем на основе кого чипа они построены. Мне повезло, и достался UTV007:20150811_092530

В маркекте есть прога, которая прекарсно работает на Nexus 7 с EasyCap на основе UTV007 – EasyCap Viewer. У неё даже есть возможность автоматического включения при подачи сигнала на камеру заднего вида. Собственно для тех, кто хочет ограничиться простой инсталяцией – идеальный вариант. Подключил камеру к фонарую заднего хода, видеовыход к EasyCap-у, а его воткнул в планшет и всё. По яндекс пробкам приехал куда нужно, влючил заднюю и сразу видишь картинку с камеры заднего вида. Примерно будет выглядеть вот так:

Мне же такой вариант не интересен. Хочу, чтобы камера включалась тогда, когда мне это нужно. Безусловно, при движении задним ходом она должна включаться автоматически, но не должна питаться от фонаря заднего вида, так как это сделает невозможным её использование во время простоя или движения вперёд. Варианты тут есть разные, например есть возможность превратить любую анаглоговую камеру в беспроводную с помощью универсального Wifi адаптера. Работает это примерно так:

Вариант тоже хреновенький, поскольку для работы требуется приложение на Android и стоит в 5 раз дороже EasyCap-а… Хотя наверно можно вскрыть и посмотреть как оно устроено, попробовать поснифать трафик и обойтись без стороннего приложения, а несколько таких штук пустить через WiFi роутер.

Одноако вариант, который мне видется более жизнесопособным, это воткнуть EasyCap в Raspberry Pi а его через Ethernet в обычный роутер. Поднять там стриминг сервер, и подключаться с Android-а к стриму когда это необходимо. Пока правда нужно разобраться какая информация доступна через OBD2 разъем, чтобы получить сигнал о том, что включена задня/первая передача.

Собственно, в интернете полно инфы о том, как работать с OBD2, буду рюхать. Начну пожалуй отсюда.

Что скажите? EasyCap + Аналоговая камера годный вариант?

 

Вместо NBT: Часть 3 – OBD2 и CAN-Bus

Так как у меня завалялся старый Nexus 7 решено было начать с него в качестве головного устройства. Почесав репу и прошерстив интеренет на предмет того, как же мне подружить планшет с автомобильной электроникой решил приобрести OBD2 – Bluetooth адапетр. Это мультимарочная приблуда подходит для всех машин старше какого-то там лохматого года. Выглядит вот так:20150807_101940 Пока не понятно, что удастся получить из нее. Приобрел так же прогу для Android – Torque Pro, которая может с этой штуковиной работать и много чего  показывать. Заодно нашёл команды, котоорая эта штука поидее поддерживает и как с ней работать.

Второй вариант “вторжения” в автомобильную электронику – это CAN-шина. Для работы с ней набрел на девайс на основе Arduino 20150807_101857 – проект на Kickstarter, который уже успешно завершился и перешёл в стадию продажи всем желающим. Его тоже купил с доставкой из США.

Заодно нашёл очень интересный проект одного BMW Энтузиаста, который уже “влез” в CAN-Шину и даже что-то разшифровал из того, что по ней “гоняется”.

По идее CAN-Шина позволит получить гораздо больше инфы чем доступно через OBD2, правда пока не понятно – как с ней работать… К тому же не известно, как отнесётся дилер к тому, что я “врежусь” в штатную автомобильную проводку.

Если у кого-то есть опыт работы с CAN шиной – поделитесь знаниями.

 

Вместо NBT: Часть 2 – Требования

После написания первого поста, я стал копать клубже и оказалось не все так просто. По-этому решено было сформировать список требований к тому, что я хочу получить в итоге. В абстрактном виде можно сформулировать, как “полный фарш за меньшие деньги”.

Необходимая функциональность:

  1. Мультимедия система аналогичная по функциональности NBT
  2. Камеры кругового обзора
  3. Парктроники передние и задние
  4. Мониторинг слепых зон
  5. HUD – проекция на лобовое стекло аналогичная BMWшной
  6. GPS трекинг
  7. Сигнализация о проникновении/угоне
  8. Открытие/закрытие багажника с ключа
  9. SOS/Сигнал об аварии
  10. Распознование знаков
  11. Ночное виденье
  12. Распознование разметки
  13. Автопарковка
  14. Беспилотник
  15. Предупрежение о ДТП

Требования к мультимедия системе:

  1. Навигация с пробками
  2. Музыка с воспроизведением через штатную аудио систему (в том числе онлайн типа Yandex/Google music)
  3. Bluetooth с поддержкой A2DP и интеграция в штатную аудио систему
  4. Управление с руля, IDrive-а
  5. Распознование речи
  6. Легкая смена в случае поломки или Upgrade-а.

Требования к камерам

  1. Камеры с разметкой/парковочными линиями изменяющимися в зависимости от положения руля
  2. Картинка с камер дополнена информацией с парктроников
  3. Камеры пылевлагозащищенные.
  4. Поддержка как аналоговых, так и цифровых
  5. Модульность – система должна работать без ошибок и не требовать дополнительной настройки не зависимо от того, сколько камер установленно.
  6. Поддержка до 10 камер.
  7. Возможность использовать любую камеру как видеорегистратор
  8. Возможность использования во время движения
  9. Возможность выбора камер(ы) отображения из заранее заданого набора (быстрое переключение между круговым и боковым обзором)
  10. Автоматическое включение разного набора камер в зависимости от условий движения

Требования к парктроникам и мониторингу слепых зон

  1. Определения расстояния от 20 см до 2х метров
  2. Отсутствие ложных срабатываний на дождь/снег/грязь/лёд
  3. Задержка на обнаружение не более 1 секунды
  4. Возможность включать во время движения
  5. Автоматическое включение в зависимости от условий движения.
  6. светозвуковая индикация
  7. Данные выводяться поверх изображений с камер (при наличии)

Требования к проеции на лобовое стекло

  1. Читаемость днём и ночью
  2. Отсутсвие двойного изображения
  3. Возможность регулировки положения
  4. Отображение подсказок с навигации
  5. Отображение дорожных знаков
  6. Отображение скорости
  7. Отображение тахометра

Требования к трекингу

  1. Точность не выше 50м
  2. Автономное питание до 2х недель
  3. Возможность “вести” автомобиль – логирование координат каждые 5-10с на удалённый сервер

Требование к сигнализации

  1. Датчик объема
  2. Датчик наклона
  3. Оповещение на мобилный телефон
  4. Датчик удара
  5. Включение записи с камер в случае срабатывания
  6. Светозвуковая индикация

Требование к открытию/закрытию багажника с ключа

1. Должен открываться и закрываться без рук при нажатии на кноку на ключе.

Требования к системе SOS

При ручном нажатии:

  1. Отсылает заданому списку абонентов тревожное сообщение и координаты
  2. Включает автоматический дозвон по очереди на заданный набор номеров.
  3. Включает запись с камер

При автоматическом срабатывании в случае ДТП

  1. Отсылает сообщение списку абонетов с координатами и просьбой вызвать ГИБДД/скорую
  2. Включает автоматический дозвон по очереди на заданый списко номеров
  3. Включает запись с камер
  4. Архивирует запись до ДТП

Требования к распознованию знаков

  1.  Распозновать знаки ограничения скорости
  2. Распозновать знаки пешеходного перехода
  3. Дальность действия 300м в условиях прямой видимости

Требование к ночному виденью

  1. Распознование пешеходов
  2. Распознование велосепедистов, колясок, самокатов
  3. Распознование мотоциклистов
  4. До 300м в  условиях прямой видимости

Остальные вроде очевидны

Стоимость проекта не больше 100 т.р.

Если у кого есть какие идеи – готов выслушать, дополнить

Вместо NBT: Часть 1 – Идея

BMW славится запредельной стоимостью дополнительных опций, и это подтолкнуло меня к идеи запилить собственный вариант мультимедиа системы для моей BMW f30.

Основные требования:

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

Идея, понятно, не новая, но что-то поиск во всмерной паутине не дал ожидаемого результата за исключением пары форумов (pccar.ru, mp3car.com), на которых люди занимаются чем-то похожими, но в тоже время другим.

На место штатного 6.5″ монитора, вполне можно поставить планшет (например на Андроид) и получить сразу хорошую функциональность, что называется из коробки:

  • Навигация
  • Пробки
  • Музыка и Видео
  • Bluetooth (A2DP)

К нему так же можно будет подключить камеру заднего вида и/или бокового обзора, свзяаться с машиной через OBD2 порт, а информацию от других устройств (если такие будут) по локальной сети.

Что скажите? взлетит?