Skoda Superb 2012 + Nexus 7 2012 = 4024!
Что реализовано:
- Управление кнопками с руля через CAN-BUS Shield и Arduino Leonardo
Планы по проекту:
- Переделка управления с руля на вариант с переназначением кнопок с помощью ПО на планшете с помощью Arduino Uno.
- Прикручивание SDR-радио.
- Попытка реализации отображения информации из CAN-шины на экране планшета и/или Maxidot-е.
Что не будет реализовано:
- Переезд на Android 4.4.2. - потому что
вот почему.
Для реализации проекта требуется:
1.
Nexus 7 2012
2.
Arduino Leonardo (или его клон)
3.
Seeedstudio CAN-BUS Shield (можно самостоятельно спаять по схеме от
lti1 из
этого поста)
4. Преобразователи питания
PSD-15A-05 и
Мастеркит PW24-1-2
5.
Переходная рамка 2DIN.
6.
HiFimeDIY Sabre Tiny USB DAC. Возможны варианты, но совместимость надо проверять.
7. Какой-нибудь хаб. Можно активный, можно пассивный. Если планируется большое количество периферии, то лучше активный. У меня кроме DAC, флешки и Arduino ничего не предполагается, поэтому мне достаточно пассивного D-Link на 4 порта.
ЭТАП 1. Доработка планшета.
Делаем чтобы планшет включался при подаче внешнего питания. Как это сделать написано
здесь.
Затем нужно:
1. Разблокировать загрузчик.
2. Установить CWM рекавери.
2. Установить прошивку
USB ROM "от Тимура". Планшет с 3G называется tilapia, а без 3G - grouper. Важно прошивки не перепутать.
Инструкция по разблокировке загрузчика, установке рекавери и кастомной прошивки есть
здесь. Всё потнятно и расписано по пунктам.
Всё что написано дальше делаем при выключенном планшете.
Вскрываем планшет пластиковой лопаткой или карточкой (можно и ногтями, если они есть). Начинаем вскрывать с угла рядом с
pogo-pin.
На снятой крышке имеется сеточка, закрывающая динамики. Она держится на двух пластиковых "соплях" и клее. Сопли срезаем и аккуратно отклеиваем сеточку, а потом убираем её в коробку от планшета - приклеим в случае если будем продавать планшет.
Аккумулятор и его контроллер будем из планшета убирать. На плату от контроллера идет разъем с 6 проводами - отключаем его от платы. Аккумулятор с контроллером приклеен к корпусу - отклеиваем. Прикладываем умеренное усилие - всё должно отклеиться.
После этого отрезаем коннектор от аккумулятора примерно посередине.
Провода лучше резать по-одному, иначе есть шанс что-нибудь замкнуть на контроллере и вывести его из строя, например.
Два черных и два красных провода - это минус и плюс соответственно. Их соединяем вместе и припаиваем к ним провода подлиннее. Два провода посередине можно оставить висящими просто так, можно заизолировать.
Два припаянных провода продеваем в отверстие динамиков (с которого сняли сеточку) с внутренней стороны, а крышку закрываем.
Крепление к переходной рамке заключается в следующем:
1. Срезаем ножом все неровности на внутренней стороне внутренней рамки и обезжириваем её.
2. По всему периметру рамки наклеиваем тонкие полоски двустороннего скотча 3M.
3. Прикладываем планшет к скотчу с умеренным усилием. Следим за тем, чтобы с внешней стороны было ровно и красиво. Важно не закрыть датчик освещенности.
4. Я еще сделал из эпоксилина "кучки", а в них вставил стоечки от материнской платы, в которые винтиками прикрутил прижимающие пластинки металлические, чтобы планшету ну вообще некуда было деться.
Доработки планшета завершены.
ЭТАП 2. Питание.
Схема питания находится на доработке!
В теме про Nexus 7 есть over9000 вариантов питания через одну PSD, 2 PSD, 1 PSD с диодом, с помощью святой воды, с помощью катушек Тесла и электромагнитного поля Земли.
Я описываю так как заработало у меня. Если вы знаете, что "можно сделать иначе" - это отлично. Я пробовал 3 варианта питания, заработал только тот который я использую.
При работе с питанием в автомобиле желательно отключать аккумулятор, т.к. если еще замыкание проводов в колодке просто жжет предохранитель, то замыкание в блоке предохранителей приведет к неизвестным последствиям.
Питание строим следующим образом.
На плату планшета (через высунутые провода) подаем питание с преобразователя PW24-1-2, предварительно отрегулировав его на выходе до 4.5-4.6 вольт. На вход преобразователя подаем постоянные 12 вольт, которые имеются в наличии в колодке автомобиля, в которую подключается ГУ. Там черный провод - минус, желтый - плюс.
В USB-разъем подаем питание с PSD-15A-05 через
OTG-кабель с питанием (y-кабель). Если кабеля с питанием нет, то можно купить обычный OTG-кабель и припаять к нему питание. Плюс на красный провод, минус - на черный соответственно. Если и обычный OTG-кабель недоступен, то можно спаять самостоятельно по
этой схеме и припаять питание.
PSD в автомобиле запитываем от ACC. Т.к. в колодке Skoda такого кабеля нет, берем его из свободного места в блоке предохранителей, который находится с левого торца торпеды автомобиля в салоне (позже укажу какой контакт конкретно и приложу картинку). Минус общий с PW24-1-2, или можно взять из любого места где он есть.
Получается, что на плату у нас подается 4.5-4.6 вольт, а на USB-разъем 4.97. Судя по всему, благодаря разнице в вольтаже всё и работает так как надо.
При включении зажигания питание подается на USB-разъем, планшет включается. Когда питание пропадает - планшет выключается.
Энергопотребление:
PSD-15A-05 без нагрузки - 40 мА
PW24-1-2 без нагрузки - 4 мА
Nexus + PW24-1-2 в режиме глубокого сна - 10-12 мА. С PSD, соответственно, будет около 50 мА, что в 4 раза больше чем с PW24-1-2. Можно легко подсчитать, что планшет с PW24-1-2 будет высаживать вполне обычный аккумулятор на 63Ач в течение примерно полугода. С PSD - примерно 1.5 месяца, что тоже немало.
Отсюда можно сделать вывод о том, что режима сна вполне достаточно, и городить огород с контроллером питания - лишнее. Тем более учитывая тот факт, что из режима сна планшет выходит мгновенно.
ЭТАП 3. Адаптер мультируля.
Android понимает нажатие мультимедиа-кнопок обычной USB-клавиатуры, поэтому наша задача - преобразовать нажатия кнопок руля в USB-клавиатурные нажатия посредством CAN-адаптера.
ЖЕЛЕЗО:
1. Arduino Leonardo или его клон:
2. Seeedstudio
CAN-BUS Shield:
Шилд поставляется с неприпаяными ногами, что оправдано, т.к. если их припаять, то с Leonardo шилд не заработает.
Причина кроется в том, что шилд рассчитан на работу с Leonardo Uno, который не умеет притворяться USB HID устройством, а у Uno и Leonardo SPI-интерфейс использует разные контакты. У UNO это контакты с D11 по D13, а у Leonardo - пины 4, 1 и 3 разъема ICSP соответственно.
Получается, что варианта 2:
а) припаять ноги к шилду, откусить ноги, идущие на пины 11-13 и подключить их с помощью проводов к контактам разъема ICSP.
б) изначально подключаться проводами, как я и сделал. Получается менее компактно и красиво, но в конце концов, это всё не на стену же вешать.
Есть еще третий вариант. Купить шилд с распиновкой под леонардо:
http://pccar.ru/showpost.php?p=311376&postcount=135
После того как всё подключили, нужно отпаять терминирующий резистор R3 (его хорошо видно на
этой картинке), иначе ничего не заработает. Если кто хочет подробностей, можно почитать про устройство кан-шины и терминаторы в ней.
СОФТ:
В первую очередь ставим
Arduino IDE версии 1.0.5. Есть более новая бета, но она нам ни к чему.
Для использования с Arduino CAN-BUS адаптера нужна библиотека. Берем её из этого поста (CANBUS.ZIP), распаковываем и копируем сюда: "C:\Program Files (x86)\Arduino\libraries".
Потом берем USBLIB.ZIP из этого поста (они взяты
отсюда) и файлы из него копируем в папку "C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino" с заменой существующих файлов.
Скетч, который работает у меня приложен к этому посту (test_keys-140206a.zip). Его нужно открыть в Arduino IDE и загрузить в Arduino.
Он будет работать только с Leonardo!
Если хотите просто поснифить CAN-шину, то функцию loop надо заменить на следующую:
Код:
void loop()
{
if(!digitalRead(2))
{
CAN0.readMsgBuf(&len, rxBuf);
rxId = CAN0.getCanId();
Serial.print("ID: ");
Serial.print(rxId, HEX);
Serial.print(" Data: ");
for(int i = 0; i<len; i++) // Print each byte of the data
{
if(rxBuf[i] < 0x10) // If data byte is less than 0x10, add a leading zero
{
Serial.print("0");
}
Serial.print(rxBuf[i], HEX);
Serial.print(" ");
}
Serial.println();
}
}
Тогда в мониторе COM-порта будут видны все сообщения кан-шины.
По идее всё то же самое должно работать в любом автомобиле концерна VAG - Skoda, Volkswagen, Audi, Seat. Разница может быть в идентификаторах источника CAN-сообщений и в самих сообщениях. Всё что здесь написано 100% работает в Skoda.