приборная панель порше для автосимуляторов

Приборная панель Porsche для автосимуляторов. Подключение

от автора

в

Если вы любите поиграть в автосимуляторы, вам наверняка всегда хотелось привнести реализма в игру. Сначала вы покупаете руль с 960 градусами, коробкой передач и тремя педалями, а дальше уж как повезет. Мне захотелось визуализацию скорости и оборотов, но китайские поделки с семисегментными светодиодными индикаторами не особо нравились мне эстетически. В какой-то момент я решил распотрошить настоящую приборную панель и понять как можно двигать стрелки через микроконтроллер, но все оказалось проще – можно подкинуть в CAN шину приборки команды, заставив ее думать, что она сейчас работает не с игрой, а с реальным авто.

приборная панель порше для автосимуляторов

Увидев похожий проект у кого-то в ютубе, я решил попробовать. Правда там был ETS2 с фурами, где такая приборка выглядела нелепо, но подружить с другой игрой панель выглядело уже реальной задачей. Я купил за символические 10т на разборке приборку от Porsche 970 рест (это тоже пугало, в видео была приборка дореста) и решил рискнуть. Также понадобится Arduino Uno и еще плата для подключения к шине CAN – CAN-BUS Shield V2. Можно купить в России, но можно подождать дней 20 и купить в два раза дешевле на Али.

Далее я решил вообще проверить, работает ли приборка. И вот тут началось самое интересное. У того ютубера нигде не было схемы подключения, а найти схему оказалось еще той задачей (не думал, что так тяжело доставать эти схемы, почти все лежат где-то на обменниках, куда еще тяжело зарегистрироваться). Путем длительного перебора даташитов, была найдена необходимая схема.

Подключение Arduino Can BUS Shield к приборной панели.

схема подключения приборной панели порше кайен панамера

Правда, я не автоэлектрик, поэтому понятного тут для меня мало. Благо, для старта надо было определить где питание и контакты кан-шины, с чем я легко справился и нарисовал понятную схему подключения

схема подключения приборной панели порше для ардуино

На всякий случай закину точную модель панели, с которой я проводил эксперименты

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

проверка приборной панели порше

Код Arduino для запуска панели.

Это конечно радостно, но надо научить приборку показывать полезные данные. За основу я пытался взять оригинальный код, предложенный автором

https://github.com/VintageCollector/cluster-dashboard-ets2-ats/tree/Porsche-Panamera-970

Данный репозиторий заточен под PlatformIO, которым я никогда не пользовался, поэтому взял все функции, которые были в файлах и закинул в файл Arduino IDE. Так быстрее и проще зашить код на плату. Чтобы минимально запустить приборную панель, нам нужно передавать фрейм зажигания каждые 10мс

uint8_t ignition_frame_on[8] = {0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00};

Все команды передаются в функции canSend(), с разными временными интервалами. Начав с зажигания, можно добавлять другие команды. Например, можно добавить функцию оборотов.

void canSend(){
  uint32_t courentTime = millis();
  if(courentTime - lastTime > 10){
    // 10 ms интервал
    // Зажигание
    canSendIgnitionFrame();
    canSendRPM();
    canCounter++;
    lastTime = courentTime;
  }
}

Добавив еще несколько полезных показаний, можно увидеть уже красивую картинку.

Используя следующую таблицу, можно дополнить исходный код, как душе угодно. Добавить check-engine, лампу ABS, ESP и даже задействовать стандартные функции экрана. CAN команды для приборной панели PORSCHE

В итоге с разной переодичностью можно отправлять следующие основные команды, которые дадут вам отобразить 90% важной телеметрии игры. (спасибо еще раз автору за структуру)

// Отправка данных 
void canSend(){
  uint32_t courentTime = millis();
  if(courentTime - lastTime > 10){
    //10 ms interval
    // Зажигание
    canSendIgnitionFrame();
    canSendHandbrake();
    canSendSpeed();
    canSendSteeringWheel();
    canSendRPM();
    canSendGear();
    canSendMode();

    if(canCounter % 20 == 0){ //200 ms interval
      canSendLights();
       // internal 600ms timer
      canSendAbs();
      canSendEngineTemp();
      canSendAbsCounter();
      canSendAirbagCounter();
      canSendFuel();
      canSendOilTemp();
    }

    if(canCounter % 15 == 0){ //150 ms interval
     canSendvinnumber();
    }

    if(canCounter % 50 == 0){ //500 ms interval
      canSendIndicator();
    }

    if(canCounter % 100 == 0){ //1000 ms interval
      canSendTime();
    }

    canCounter++;
    lastTime = courentTime;
  }
}

Теперь когда мы научились отображать синтетические данные на приборку, нужно подумать, как получать данные из игры.

Забегая вперед, скажу, что получилось подружить панель с Assetto Corsa, как изначально и хотел. Правда без SimHub, на питон скрипте, который парсит из области памяти телеметрию. Рассмотрим эту интеграцию в следующей статье.

автосимулятор с приборной панелью от настоящего porsche

Весь код сможете найти на моём гитхабе, в одноименном репозитории – lex232/Dashboard-for-autosimulators.git