Jump to content
Sign in to follow this  
  • entry
    1
  • comments
    0
  • views
    103

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

javaman

221 views

Модуль интеграции представляет собой управляемый микроконтроллером 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 Comments


Recommended Comments

There are no comments to display.

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Add a comment...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...