Перейти к содержанию
  • запись
    1
  • комментариев
    0
  • просмотров
    1 157

Модуль интеграции Raspberry PI 3


javaman

1 640 просмотров

Модуль интеграции представляет собой управляемый микроконтроллером Arduino Nano блок питания для одноплатного компьютера Raspberry PI 3 для установки его в автомобиле. 

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

Функционал модуля:

  • Импульсный блок питания +5В 3А с гальванической развязкой (модуль Mornsun VRB1205LD-15WR2)
  • Управление одной тактовой кнопкой со светодиодной индикацией режимов
  • КМОП логика управления, обеспечивающая низкое энергопотребление в ждущем режиме
  • Контроль работы Raspberry через GPIO
  • Адаптер кнопок руля с проводным выходом по схеме Pioneer
  • Bluetooth-модуль для передачи команд с кнопок руля на Android-приложение, для управления медиа-плеером
  • Контроль автомобильного питания по линии ACC и сигнала с фонаря заднего хода

Схема была разработана и смоделирована в симуляторе Proteus, позволяющего смоделировать работу Arduino Nano в реальном времени. 

На схеме присутствуют некоторые элементы, отсутствующие в готовом устройстве, необходимые для корректной симуляции. Блок ИИП Mornsun был заменен на узел Q1-U1. Гальваническая развязка между бортовой сетью и +5В обусловила необходимость развязки всех сигнальных линий посредством оптопар. Реле RL1 используется исключительно под особенности моей инсталляции (коммутация питания ГУ Pioneer P88RS, запитанного тоже через гальваническую развязку 12 - 12В с целью устранения земляной петли и помех в динамиках).

Напряжение бортовой сети поступает через диод Шоттки D1 на буферный аккумулятор B2 (1.2Ач), необходимый для удержания питания во время запуска двигателя, и далее на ИИП Mornsun - фабричный модуль производства China, ценой порядка 15$ с доставкой. Модуль управляется подачей логического 0 на управляющий контакт (выключается по 0), также имеет контакт Trim для регулировки Uвых в небольших пределах, порядка +-10%. Я установил его на уровне 5.2В подтяжкой Trim к земле резистором 35К. На входе и выходе модуля установлены LC - фильтры ( в схеме нет), а также пленочные конденсаторы малой емкости между входными и выходными линиями - в соответствии с даташитом на модуль.

power3_3.thumb.png.b7abbfc9d8ac9bb7ccb8e16b2058f150.png

Кнопка питания заведена на тактовую ножку CLK счетчика U6 (4018, аналог К561ИЕ19), счетчик переключается по фронту, подавая на выход Q0 инверсное значение с ножки D. В выключенном состоянии это лог. 1 через R16.

Нажимаем кнопку и держим 3-4 секунды, при этом стартует ИИП, запускается Arduino, и сразу после запуска подпирает через оптопару U3 сигнал управления ИИП через U8:D, и подает лог. 0 на вход D счетчика, а также включает светодиод индикации через опторару U5. Все, кнопку можно отпускать.

На элементах U2:F, U2:C, U8:A, U8:C реализован переключатель сигнала кнопки. При лог. 1 на входе D счетчика (контроллер выключен) — сигнал идет на U2:D и далее на управление ИИП, при лог. 0 (контроллер работает) — на оптопару U4 и далее на Arduino. Таким образом, пока контроллер работает, все последующие нажания кнопки идут только на Arduino, которая их мониторит.

По одиночному короткому нажатию кнопки Arduino отправляет лог. 1 на вывод 24 GPIO Raspberry, где запущен сервис мониторинга GPIO, который тут же гасит ОС командой shutdown. В свою очередь, этот сервис на Raspberry в фоновом режиме подает меандр частотой 1Гц на выходную ножку 25 GPIO, а Arduino через делитель R27+R30 мониторит этот сигнал, и по пропадению пульсаций через 12 сек выключает питание. Таким образом, питание снимается корректно, когда ОС на Raspberry остановлена, и вероятность испортить флэш-карту и само устройство — минимальна. На схеме введена оптопара U11 с генератором на входе для симуляции данного режима.

По долгому нажатию (более 4 сек) тактовой кнопки — Arduino отключает питание независимо от наличия сигнала с Raspberry, на случай непредвиденных ситуаций — как в блоках питания АТХ.

Сигнал ACC нужен для контроля дежурного режима. Если нужно ненадолго покинуть машину, но не хочется выключать Raspberry, можно оставить ее включенной, вынуть ключ и закрыть машину. По отсутствию ACC включается таймер на полтора часа, после чего система корректно выключается. При этом светодиод кнопки питания начинает помаргивать с частотой 1Гц, короткими затуханиями, со все возрастающей скважностью, и под конец задержки моргает еле заметными вспышками. При подаче АСС таймер останавливается, система переходит в обычный режим, светодиод горит непрерывно.

В схеме адаптера кнопок руля использован электронный потенциометр MCP41050, а также 2 ключа Q2 и Q3 для управления двумя сигнальными линиями для входа проводного управления Pioneer. Резисторы R3 и R21нужны для симуляции, в рельном устройстве они не нужны, так как имеются в схеме Pioneer.

pioneer.jpg.d25b271a9f93ad4a43d361012f11c569.jpg

Помимо проводного управления, сигнал кнопок руля декодируется и отправляется в Bluetooth-модуль HC-05, подключенный к Ардуине по шине SPI, и далее — в Андроид приложение.

Сигнал включения заднего хода транслируется через оптопару U10 на 23-ю ножку GPIO, по его включению на Raspberry запускается сервер потокового видео VLCD, который получает сырой видеопоток с камеры ЗХ, оцифрованный устройством видеозахвата EasyCap USB 2.0 Video Capture Adapter на чипе UTV007. По выключению ЗХ сервер останавливается, таким образом процессор не загружается ненужной работой.

Поток конвертируется в MJPEG частотой 15 кадров/сек. Кроме того, команда заднего хода через Bluetooth отправляется в Андроид-приложение, которое стартует Activity с WebView, отображающее картинку с камеры на весь экран, разворачивая изображение по длинной стороне. Данная конфигурация дает запаздывание картинки с камеры порядка 0.5сек, уменьшить ее в данной конфигурации не удалось. Ездить не глядя в зеркала с такой задержкой конечно не стоит, но для аккуратной парковки в принципе некритично. Кроме того, весь функционал с видео заднего хода задумывался как экспериментальный, без особой надежды на его полную реализацию.

Плата разведена в SprintLayout 6. Arduino Nano установлена китайского производства, на чипе CH340, ее разводка отличается от оригинальной Nano, это следует учитывать при повторе платы. 

copper-bottom2.thumb.jpg.18d87a68eb870ba17ab0101a31fdc72b.jpgcopper-top2.thumb.jpg.39cc8ce84d0f56fb288341d4d63b6878.jpg

Поскольку Raspberry используется с платой DAC Aoide DACII на чипе ESS ES9018K2M - вся линейка GPIO занята разъемом DAC, и пришлось припаяться к ней с обратной стороны.

20190928_160108.thumb.jpg.8b2bd90efa407cc68ce0a73e2e6e4357.jpg

Там же рядом припаян разъем питания +5В (на фото его еще нет).

20190915_093749.thumb.jpg.b02a03963c4b283c5d062a2c2e33c778.jpg20190915_093816.thumb.jpg.6c9b3a5ce9e12a52d7bfcb99eb3fe3f8.jpg

 

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

Корпус устройства был спроектирован в Google Sketchup и распечатан на 3D-принтере.

20191010_171245.thumb.jpg.e1a8a2309422d17d32d1fd38d18a5798.jpg

Архив с проектом Proteus, скетчем Arduino, проектом SL6 и серверным скриптом GPIO.

PowerController.zip

На Raspberry установлена сборка Volumio 2.555, работающая в качестве DLNA-рендерера. Источником служит смартфон Samsung Galaxy A50 с установленным медиа плеером Neutron, хотя этот выбор не принципиален.

На смартфоне поднята точка доступа Wi-Fi, к которой подключается Volumio.

Для управления медиа-плеером было разработано простое Андроид-приложение, представляющее собой фоновый сервис, декодирующий команды от кнопок руля через Bluetooth-модуль HC-05, и транслирующий их в Андроид как события KeyEvent.

Это же приложение отображает видеопоток камеры заднего хода с Raspberry. 

mrc.jpg.aa5d9ddc6f10e135e350d0539287b7a1.jpg

Предусмотрен функционал выбора bluetooth-устройства, поиска Volumio в сети (для отображения видео), есть экранные кнопки для проверки управления медиа-плеером, и некоторые другие функции. Схема декодирования кнопок руля в медиа-события Андороид пока прописана в коде, в плане разработка гибкой настройки.

Медиа-команды реализованы трех видов:

  • короткое одиночное нажание, срабатывает по фронту;
  • длинные очереди (нажал и держишь): по фронту срабатывает первое нажатие, через 750мс — стартует очередь команд с периодом 150мс, пока не отпустишь кнопку;
  • короткое/долгое нажатие (как Source на Pioneer'е) — короткое нажатие срабатывает по отпусканию кнопки ранее чем через 750мс, долгое нажатие — генерируется после 750мс однократно, даже если кнопка все еще нажата.

Cистема в действии. Volumio стартует через 45-50 сек после подачи питания, и сразу начинается воспроизведение.

0 Комментариев


Рекомендуемые комментарии

Комментариев нет

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Добавить комментарий...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...