Світломузика з BMW

Продовжуючи тематику мережі комунікацій блоків управління BMW, у цій статті буде під прицілом уваги блок контролю світлових приладів (LCM), і ті кумедні штуки які мені вдалося на ньому реалізувати. Але про все по порядку і розпочнемо з пояснювальної частини.
LCM (англ. Light Control Module) пристрій, що виконує наступний функціонал:
  • комутація зовнішніх і внутрішніх освітлювальних приладів;
  • контроль справності ламп розжарювання;
  • відстежує положення вимикачів світлових приладів;
  • взаємодія з іншими блоками управління.
Таким чином LCM є виконавцем при включенні необхідного освітлювального приладу. Керуючу інформацію він отримує від вмикачів в зоні управління водія або по шині I-bus. В якості зворотного зв'язку надається в шину інформація про включених приладах та їх несправності. Тому водій буде оперативно поінформовано повідомленням на приладовій панелі, якщо наприклад згоріла ліва лампа ближнього світла. Інформація про несправності визначається незалежно від того, включений прилад чи ні.
Комутація освітлювальних приладів виконується за допомогою підсилювачів постійного струму на напівпровідникових пристроях. Цим найбільш виключаються проблеми підгоряння контактів реле і необхідність використання запобіжників. Однак ускладнює схему та підвищує ціну ремонту. Не рідкісні випадки, коли виходять з ладу вихідні каскади підсилювачів постійного струму. У цьому випадку доводиться ремонтувати LCM або міняти на справний з подальшим кодуванням.
При установці нештатної сигналізації майстру необхідно отримати контакт до проводів повторювачів або габаритних вогнів. Вони як правило на скручування приєднуються до джгуту проводів в районі блоку LCM. Я таке бачив. Хоча задачу можна було б вирішити більш гуманно, підключившись до I-bus через мікроконтролер. У такому разі нештатна сигналізація зможе отримати доступ до всіх освітлювальних приладів, не тільки поворотників. До того ж доступним стане центральний замок, доводчик скла, люків та складані дзеркала. Але застосування мікроконтролера і відповідний софт завдання непросте, і майстер такий варіант краще проігнорує.
З допомогою дилерських засобів діагностики та кодування можна взаємодіяти з LCM. Зчитувати, очищати коди несправностей, запитувати діагностичні команди, кодувати режим роботи і параметри. Діагностичне обладнання підключається до шини D-bus, на якій немає фізичного підключення до LCM. LCM є абонентом шини I-bus і взаємодія з діагностичним обладнанням відбувається через шлюз в приладовій панелі. Шлюз пересилає повідомлення з D-bus в I-bus і назад. Таким чином, якщо подавати діагностичні запити на включення того або іншого світлового приладу і «снифить» I-bus, то можна обчислити логіку впливу на регістри LCM для включення потрібного приладу. Я так і зробив. На BMW DIS, запущеної на віртуальній машині, ставив команди: включити поворотник лівий передній, ближнє світло правий, лівий стоп сигнал і т. д. При цьому фіксував кадри на I-bus. Діагностичний запит на індивідуальне включення світлового приладу виглядає наступним чином:

Відправником повідомлення є діагностика (ідентифікатор 3F), одержувач LCM (D0) тип повідомлення . В байтах DAT0 — DAT3 розміщується маска, де визначено відповідність біта зовнішнього світлового приладу. Одиничне значення в цій масці змушує подавати струм на відповідний прилад протягом 30 секунд, нульове — негайно знеструмити. У разі успішного прийняття повідомлення від діагностики, LCM підтверджує позитивним квитированием: D0 03 3F A0 4C.Таким чином за допомогою діагностичного обладнання включається індивідуально за запитом освітлювальний прилад, щоб можна було оцінити його працездатність. У таблиці нижче представлено положення біта з набота DAT0-DAT3, яке включить світловий прилад на 30 секунд.
Показати таблицю



































Світловий прилад DAT0, bin DAT1, bin DAT2, bin DAT3, bin Невідомо 00000000 00000000 00000000 00000001 Покажчик повороту задній правий 00000000 00000000 00000000 00000010 Задній протитуманний ліхтар лівий 00000000 00000000 00000000 00000100 Гальмо вогонь задній внутрішній правий 00000000 00000000 00000000 00001000 Гальмо вогонь задній правий 00000000 00000000 00000000 00010000 Невідомо 00000000 00000000 00000000 00100000 Покажчик повороту передній лівий 00000000 00000000 00000000 01000000 Невідомо 00000000 00000000 00000000 10000000 Невідомо 00000000 00000000 00000001 00000000 Невідомо 00000000 00000000 00000010 00000000 Ліхтар підсвічування номерного знака правий 00000000 00000000 00000100 00000000 Гальмо вогонь задній лівий 00000000 00000000 00001000 00000000 Стоп-сигнал середній 00000000 00000000 00010000 00000000 Гальмо вогонь передній правий 00000000 00000000 00100000 00000000 Покажчик повороту передній правий 00000000 00000000 01000000 00000000 Покажчик повороту задній лівий 00000000 00000000 10000000 00000000 Гальмо вогонь передній лівий 00000000 00000001 00000000 00000000 Гальмо вогонь задній внутрішній лівий 00000000 00000010 00000000 00000000 Протитуманна фара ліва 00000000 00000100 00000000 00000000 Невідомо 00000000 00001000 00000000 00000000 Фара дальнього світла ліва 00000000 00010000 00000000 00000000 Фара дальнього світла права 00000000 00100000 00000000 00000000 Протитуманна фара права 00000000 01000000 00000000 00000000 Задній протитуманний ліхтар правий 00000000 10000000 00000000 00000000 Невідомо 00000001 00000000 00000000 00000000 Невідомо 00000010 00000000 00000000 00000000 Ліхтар підсвічування номерного знака лівий 00000100 00000000 00000000 00000000 Стоп-сигнал лівий 00001000 00000000 00000000 00000000 Стоп-сигнал правий 00010000 00000000 00000000 00000000 Фара ближнього світла права 00100000 00000000 00000000 00000000 Фара ближнього світла ліва 01000000 00000000 00000000 00000000 Невідомо 10000000 00000000 00000000 00000000

Якщо необхідно включити не один а кілька світлових приладів, то досить об'єднати значення в області DAT0-DAT3 логічним додаванням. Таким чином можна змусити світитися будь-яку доступну комбінацію ліхтарів перерахованих в таблиці. Наприклад передавши повідомлення 3F 0F D0 0C 00 00 00 00 40 00 00 40 00 00 00 00 EC I-bus, будуть включені ліва фара ближнього світла і передній лівий покажчик повороту. Потім повідомленням 3F 0F D0 0C 00 00 00 00 00 00 00 00 00 00 00 00 EC погасити всі.
Завдяки описаним можливостям LCM, можна створити додаток, який зможе включати будь-яке поєднання світлових приладів в різній послідовності, необмеженої тільки інертністю ламп розжарювання. Очевидно таким чином працює eLight модуль. Колеги з німеччини взяли до уваги можливості LCM і створили свій проект, який включає в себе як апаратної, так і програмної частини. Сам модуль підключається до авто просто, достатньо 3 контактів: корпус, живлення бортової мережі, I-bus. Потім за допомогою ПК, програмується режим роботи модуля. Наприклад закриваючи автомобіль, фари включаться в такій послідовності, що створять ефект біжать вогнів. Забавна штука виходить. А що якщо зробити з зовнішніх освітлювальних приладів світломузику, яка буде супроводжуватися звучання акустичної системи автомобіля. Буде ще цікавіше! Тим більше всі технічні можливості для цього є.
У попередньої статті я вже описав можливість підключення до штатної акустичній системі в якості CD-чейнджера. Тобто з виведенням звуку усі вже ясно. Але як можна синхронізувати світлове супроводу з музикою? Очевидним рішенням для мене стало використання MIDI протоколу. Тим більше є готове програмне забезпечення, яке дозволить створити світловий ряд синхронно з музичним супроводом. Я маю на увазі секвенсор.
MIDI — це протокол взаємодії музичних інструментів. Протокол заснований на послідовній передачі даних від головного пристрою до підлеглого. В якості майстра може бути MIDI клавіатура або секвенсор, а в якості підлеглих різні синтезатори. Повідомлення MIDI протоколу діляться на 2 типу: повідомлення каналу і системні повідомлення. Нас цікавлять повідомлення каналу, так як за ним передається команди управління звучанням. А саме ті, в яких міститься інформація про подію з нотою: нота включена, нота вимкнена. У цьому повідомленні також передається інформація про силу впливу на ноту, але вона не представляє інтересу.
Якщо інтерпретувати систему зовнішніх світлових приладів автомобіля як підлегле MIDI пристрій, де кожному ліхтаря відповідає своя нота, то вийде «світловий синтезатор». До нього хоч секвенсор залучай, хоч клавіатуру, і грай лампочками як душі завгодно. Але для такої реалізації необхідний процес, який буде перетворювати вхідний MIDI потік в I-bus повідомлення для LCM. На малюнку нижче цей процес позначений midi4lcm.

midi4lcm це сервер, який приймає дані у своєму сегменті мережі з групового мовлення. З усього потоку прийнятих даних, midi4lcm фільтрує голосові MIDI повідомлення 1-го каналу. В залежності від того на яку ноту вплив, формує повідомлення для LCM. MIDI повідомлення інтегруються з урахуванням невеликої затримки, так як кожній UDP датаграмме, що несе в собі інформацію про подію ноти, формувати окрему I-bus повідомлення буде занадто накладно. Для цього сервер об'єднує прийшли MIDI повідомлення в одне повідомлення I-bus, якщо інтервал прийому не перевищує 1 мс.
Щоб у зручний для нас час виконати світловий ряд на автомобілі, необхідно мати збережену послідовність MIDI повідомлень, тобто MIDI файл. Створити його можна за допомогою секвенсоров. Сьогодні в розпорядженні є великий вибір програм для створення музики і збереження її в різні формати. Від найпростішого секвенсора до сучасних музичних станцій. В даному варіанті головна користь від таких додатків, це можливість програвання MIDI доріжки та експортування її у файл. Особливо якщо є можливість паралельної роботи аудіо доріжки, то з'являється можливість створювати світловий ряд у синхронному звуковому супроводі. Для прикладу як це виглядає на ділі
.
Таким чином підсумок творчості для автомобільної світломузики зводиться до двох файлів: MIDI і аудіо.
Отже, припустимо, у нас в розпорядженні вже є необхідні файли світлового ряду MIDI і музичного супроводу, наприклад в WAV форматі. Синхронно відтворити їх можна з допомогою Gstreamer-а при наявності необхідних плагінів. А саме виконавши в командному рядку:
gst-launch-1.0 -v filesrc location=lighting.mid ! midiparse ! udpsink host=127.0.0.1 port=21928 sync=true filesrc location=music.wav ! wavparse ! pulsesink

У даній команді Gstreamer транслює MIDI повідомлення з файлу lighting.mid синхронно у відповідності з тимчасовими мітками. Повідомлення передаються на ip адресу 127.0.0.1 і UDP порт 21928. Саме на цей порт налаштований midi4lcm сервер для прийому групового мовлення. Так зазвичай налаштовуються MIDI пристрої, що працюють по локальній мережі. Крім MIDI мовлення, конвеєр gst-launch виконує передачу звукового потоку з music.wav файлу на звуковий срвер PulseAudio. Якщо лінійний вихід комп'ютера, на якому виконується ця команда, підключений до акустичної системи автомобіля, то буде досягнутий бажаний ефект — світломузика освітлювальних приладів під звуковий супровід. Правда щоб зовні цей ефект був «ефектніше», треба залишити двері відкритими, інакше занадто тихо.

Цей малюнок демонструє робочу схему більш детально. В якості додаткового обладнання автомобіля виступає міні-комп'ютер Raspberry Pi, який інтегрований в штатну шину взаємодії блоків управління I-bus і акустичну систему. З іншого боку у Raspberry є інтерфейси для підключення до локальної мережі, щоб можна було взаємодіяти з іншими комп'ютерами і приймати аудіо і MIDI потоки. У цьому випадку з'являється можливість підключити секвенсор до автомобіля і перевіряти роботу MIDI доріжки так сказати «в живу».
На останок покажу як це вийшло на практиці
.

Додаткова інформація по темі:
MIDI Wavy: робимо керовану світломузику з допомогою Arduino і MIDI
Цикл статей про MIDI з журналу «Музичне обладнання»
Дилерська документація по електриці автомобілів марки BMW «BMW WDS»
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.