Тема: Убираем синий экран при запуске магнитолы через AV CAN
Предлагаю бюджетный вариант (~500р) решения проблемы с синим экраном, который каждый раз надо тыкать при запуске магнитолы. Потребуется изготовить устройство для OBD2 разъема, которое после запуска авто имитирует нажатие одной из кнопок (навигация, радио, статус, TV-AUX и т.д.) через отправку команд в AV CAN шину (да, на лифе есть отдельная CAN шина системы мультимедиа).
Итак нам потребуется:
разъем OBD II https://a.aliexpress.com/_9GD30S
Плата Arduino Nano на ATMEGA 328P без гребенки https://a.aliexpress.com/_Abc958
CAN модуль MCP2515 https://a.aliexpress.com/_AWAdvU
Корпус для РЭА в местном радиомагазине
Собираем по схеме:
Можно добавить внешний стабилизатор питания типа LM7805, движковый переключатель на питание, светодиод для индикации работы...
после сборки прозвоните все контакты на разъеме OBD2! 4 и 5 контакты соединены, 3 и 11 должны иметь сопротивление 120 Ом.
Должно получиться что-то вроде этого:
Заливаем в ардуинку скетч, который нажимает кнопку TV-AUX:
#include <SPI.h> //connect libraries
#include <mcp2515.h>
#include <GyverPower.h>
struct can_frame canMsg1;
struct can_frame canMsg2;
struct can_frame canMsg3;
MCP2515 mcp2515(10);
void setup() {
canMsg1.can_id = 0x681; //write commands to send here...
canMsg1.can_dlc = 8;
canMsg1.data[0] = 0x04;
canMsg1.data[1] = 0x10;
canMsg1.data[2] = 0x40;
canMsg1.data[3] = 0x0D;
canMsg1.data[4] = 0xAB;
canMsg1.data[5] = 0xFF;
canMsg1.data[6] = 0xFF;
canMsg1.data[7] = 0xFF;
canMsg2.can_id = 0x681;
canMsg2.can_dlc = 8;
canMsg2.data[0] = 0x04;
canMsg2.data[1] = 0x20;
canMsg2.data[2] = 0x40;
canMsg2.data[3] = 0x0D;
canMsg2.data[4] = 0xAB;
canMsg2.data[5] = 0xFF;
canMsg2.data[6] = 0xFF;
canMsg2.data[7] = 0xFF;
canMsg3.can_id = 0x681;
canMsg3.can_dlc = 8;
canMsg3.data[0] = 0x04;
canMsg3.data[1] = 0x30;
canMsg3.data[2] = 0x40;
canMsg3.data[3] = 0x0D;
canMsg3.data[4] = 0xAB;
canMsg3.data[5] = 0xFF;
canMsg3.data[6] = 0xFF;
canMsg3.data[7] = 0xFF;
while (!Serial);
Serial.begin(115200);
SPI.begin();
mcp2515.reset();
mcp2515.setBitrate (CAN_500KBPS, MCP_8MHZ); //check your quartz on mcp2515
mcp2515.setNormalMode();
Serial.println("Killing blue screen...");
}
void loop() {
delay(8000); //delay for starting vehicle 8s
mcp2515.sendMessage(&canMsg1);
Serial.println("Message 1 sent");
delay(100);
mcp2515.sendMessage(&canMsg2);
Serial.println("Message 2 sent");
delay(100);
mcp2515.sendMessage(&canMsg3);
Serial.println("Message 3 sent");
delay(100);
Serial.println("Blue screen was killed!");
mcp2515.reset();
power.sleep(SLEEP_FOREVER); //deep sleep
}
Пример работы готового устройства:
Это же устройство, но с другой прошивкой можно использовать и для отслеживания CAN шины и поиска нужных пакетов.
База данных известных CAN пакетов Nissan Leaf тут https://github.com/dalathegreat/leaf_can_bus_messages Для открытия фалов *.dbc необходимо установить программу Kvaser Database Editor. Так же по этой ссылке есть файл xls, но не уверен, что там актуальная инфа.
UPD1 Немного подправил схему. Джампер J1 на MCP2515 должен стоять. Добавляю архив с прошивкой, схемой и командами других кнопок ГУ. https://yadi.sk/d/o8aNpRvHWk3lpw