Съдържание:

Ключове на волана към стерео адаптер за кола (CAN шина -> ключ1): 6 стъпки
Ключове на волана към стерео адаптер за кола (CAN шина -> ключ1): 6 стъпки

Видео: Ключове на волана към стерео адаптер за кола (CAN шина -> ключ1): 6 стъпки

Видео: Ключове на волана към стерео адаптер за кола (CAN шина -> ключ1): 6 стъпки
Видео: 40 полезных автотоваров с Aliexpress, которые упростят жизнь любому автовладельцу #5 2024, Ноември
Anonim
МОЖЕ БЪЛГАНЕ НА ШИФ
МОЖЕ БЪЛГАНЕ НА ШИФ

Key1) "src =" https://content.instructables.com/ORIG/F3X/UXCI/KCT3F9KZ/F3XUXCIKCT3F9KZ-p.webp

Изпращане на команди към стерео
Изпращане на команди към стерео

Key1) "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">

Няколко дни след като си купих употребявана кола, открих, че не мога да пускам музика от телефона си през стерео уредбата. Още по -разочароващо беше, че колата имаше Bluetooth, но позволяваше само гласови повиквания, а не музика. Той също така имаше USB порт за Windows Phone, но нямаше да работи с iPhone без 60 $ ключ.

След като смених стереосистемите на предишните си автомобили, без много да се замислям и проучвам, поръчах 40 $ заместващо стерео уредба от добре познат „евтин“уебсайт. Стереото се предлага с камера за заден ход, Car Play и куп допълнителни функции, които изглеждаха много по -добра стойност от по -скъпия ключ, който прави само едно нещо.

След като купих и боядисахме нова лицева плоча, 3D отпечатване на монтаж и много допълнителна работа (която може да бъде сама по себе си инструкция), стигнах до неприятно откритие. Командите на клавишите на волана се изпращат през CAN шина, но стереото има само вход Key1. Тъй като не бях човек, който да се откаже наполовина, поръчах адаптер от 60 паунда, който се оказа, че не работи. В този момент реших сам да си направя адаптер.

Не съм електроинженер, имам само елементарни познания по електроника и това беше проект за учене и проучване за мен. Моят съвет би бил първо да проверите техническите характеристики на вашия автомобил и да поръчате съвместимо радио, но ако вече сте заседнали (както бях аз), следвайте инструкциите на свой собствен риск.

Консумативи

Адаптерът (приблизително 15 $)

  • Arduino Pro Mini 5V (или съвместима платка)
  • Модул CAN шина MCP2515
  • 60x80 мм перфорирана дъска
  • X9C104 цифров потенциометър 100K Ohm (зависи от вашия стерео)
  • DC-DC Спускащ регулатор LM2596S 3-40V 3A
  • Кабелен предпазител + предпазител (100-200 Ohm)
  • Проектна кутия или 3D принтер, за да го отпечатате
  • Стерео жакове за кола (мъжки + женски)
  • Контейнери за запояване, проводници и др.

Тестови помощници (не са строго необходими, но ще направят тестването много по -лесно)

  • Arduino (всяка 5V платка ще е подходяща)
  • Модул CAN шина MCP2515
  • Платформа + джъмпери

Стъпка 1: МОЖЕ да смърка автобус

Вместо да пускате куп кабели около вътрешността на колата си, свързващи куп системи, някои съвременни превозни средства имат двойки проводници, преминаващи към всеки компонент. Информацията се изпраща като пакети с цифрови данни през тези проводници и всички системи могат да четат всички съобщения. Това е мрежата на CAN шината (може да има няколко мрежи в колата ви, така че цялата информация може да не се вижда).

Това, което искаме да направим, е да се свържем с мрежата на CAN шината и да "подушим" трафика на данни. По този начин можем да "видим", когато е натиснат клавиш на волана. Всеки пакет има идентификатор, който представлява подсистемата на превозното средство, изпратила пакета, и данните, които представляват състоянието на системата. В този случай се опитваме да намерим идентификационния номер на подсистемата, която изпраща съобщения за ключовете на волана, и представянето на данните на всеки ключ.

Ако имате късмет, може да намерите стойностите за колата си някъде онлайн и да пропуснете тази стъпка.

Този процес е малко сложен и вече е обяснен на други места, затова ще го обобщя:

  • Намерете правилните стойности за комуникацията по шината CAN на вашия автомобил. За моята кола (Fiat Idea от 2009 г.) това беше 50KBPS скорост на предаване и 8MHz тактова честота.
  • Свържете се към мрежата на CAN шината, като използвате модула CAN шина и Arduino в конфигурация "sniffer".
  • Прочетете стойностите на CAN шината на вашия лаптоп, като използвате инструмент като https://github.com/alexandreblin/python-can-monito…. Без него ще бъде много трудно да се направи това, тъй като много съобщения се изпращат дори когато колата не прави нищо.
  • Натиснете бутона на волана и отбележете промените в стойността. Това може да бъде малко сложно, тъй като се изпращат много съобщения и може да е трудно да се разбере кое е кое.

Ето две страхотни статии, обясняващи задълбочено процеса:

  • https://medium.com/@alexandreblin/can-bus-reverse-…
  • https://www.instructables.com/id/CAN-Bus-Sniffing-…

В крайна сметка трябва да имате идентификатора на подсистемата, който ще използваме, за да слушаме само съобщенията на CAN шината на волана, както и списък с шестнадесетични стойности за ключовите команди. В моя случай данните изглеждаха така:

ИД | ID Hex | Байт 0 | Байт 1 | Бутон

--------------------------------------------- 964 | 3C4 | 00 | 00 | Без бутони 964 | 3C4 | 04 | 00 | SRC 964 | 3C4 | 10 | 00 | >> 964 | 3C4 | 08 | 00 | << 964 | 3C4 | 00 | 80 | Телефон 964 | 3C4 | 00 | 08 | ESC 964 | 3C4 | 80 | 00 | + 964 | 3C4 | 40 | 00 | - 964 | 3C4 | 00 | 40 | Спечелете 964 | 3C4 | 00 | 02 | Нагоре 964 | 3C4 | 00 | 01 | Надолу 964 | 3C4 | 00 | 04 | Добре

Идентификаторът на подсистемата е 3C4 (в този случай), което е шестнадесетично число, така че трябва да го запишем като 0x3C4 в скиците на Arduino. Ние също се интересуваме от байтове 0 и 1 (във вашия случай може да има повече байтове). Това също са шестнадесетични стойности, така че те също трябва да бъдат написани с водещ 0x.

Ако преобразувате стойностите в двоични, ще забележите, че битовете не се припокриват (например + 0b10000000 и - 0b01000000), така че няколко клавиша могат да бъдат натиснати едновременно.

Предлагам да изградите снайпериста с материалите, изброени в раздела "помощник за тестове", за да можете да го използвате повторно по -късно, за да симулирате колата си. Това ще ви спести от необходимостта да седите в колата си през цялото време, докато изграждате и тествате адаптера. Можете да използвате предоставената скица, за да действате като симулатор. Променете „subsystemId“, „data0“и „data1“със стойностите, които сте надушили.

Стъпка 2: Изпращане на команди към стерео

Изпращане на команди към стерео
Изпращане на команди към стерео

Преди да започнете да изграждате адаптера, най -добре е първо да проверите дали стереото може да получава команди.

Имах резервна батерия за кола, затова свързах стереото директно към него. Ако имате 12V настолен източник на захранване, още по -добре. За съжаление не можах да намеря много информация онлайн за въвеждането на Key1 на моето устройство, затова прибягнах до експерименти. В този момент не се притеснявах много за изгарянето на стереото, тъй като е сравнително евтино и това беше последният ми опит да го накарам да работи с колата ми.

Стерео уредбата има екран за обучение на команди, където е възможно да се избере една от двете стойности на съпротивление (1K и 3.3K) и да се види стойността на "напрежението" (0-255). "Напрежение" е цитирано, защото е подвеждащо. Прекарах много време в прилагане на различни напрежения към Key1 без късмет. Опитах също да използвам различни резистори, за да приложа напрежението без късмет.

Пробивът дойде, когато се опитах да докосна проводника Key1 към масата на батерията, което доведе до падане на "напрежението" до 0. Това в комбинация с различни резистори би довело до постоянни стойности на "напрежение" на екрана за обучение.

Сега, когато знаех как да изпращам входове към стереото, имах нужда от начин да ги изпратя от Arduino. Към този момент не съм чувал за мултиплексори, които заедно с някои резистори може да са били по -бързо и надеждно решение (все още не съм сигурен дали това е възможно), затова използвах цифров потенциометър. Първоначално имах проблеми с работата на цифровия пот, докато разбрах, че трябва да го свържа като реостат, за да действа като променлив резистор вместо делител на напрежение. По принцип трябваше да свържа RH и RW терминалите.

Освен съпротивата, моментът беше от решаващо значение. Ако спадът на съпротивлението е твърде кратък, командата няма да бъде регистрирана. Ако е твърде дълго, може да се регистрира няколко пъти. Спад от 240 мс, последван от забавяне от 240 мс, докато следващата команда работи доста надеждно за моя стерео. Въпреки че това изглежда като много малко време, това означава, че можем да изпратим максимум 2 команди в секунда, което е забележимо, ако се опитвате бързо да увеличите или намалите силата на звука. Опитах се да си поиграя с различни срокове и модели, което увеличи скоростта, но не беше много надеждно. Ако имате идеи как да подобрите това, моля, оставете ги в коментарите.

Преди да продължите по -нататък, предлагам изграждане на прототип, за да проверите дали стереото ви приема същия вид вход. Дори ако приема различни напрежения, адаптерът трябва да работи с леки промени в окабеляването и скицата на Arduino.

Стъпка 3: Изграждане на адаптера

Изграждане на адаптера
Изграждане на адаптера
Изграждане на адаптера
Изграждане на адаптера
Изграждане на адаптера
Изграждане на адаптера

След като тествахме всички компоненти поотделно и ги изпробвахме заедно на чертеж, беше време да им дадем по -постоянен дом. Това отне няколко часа на поставяне на компоненти и запояване.

В горния ляв ъгъл е стъпаловидният регулатор, който трансформира 12V от акумулатора на автомобила в 5V, който може да се използва от другите компоненти.

В долния ляв ъгъл е модулът CAN bus, който отчита стойности от CAN шината на автомобила и ги препраща към Arduino.

Горе вдясно е цифровият потенциометър (свързан като реостат), който действа като променлив резистор между земята и входа Key1 на стерео.

В долния десен ъгъл е Arduino, който действа като мозък на адаптера, превръщайки съобщенията на CAN шината в съпротивления, които се четат от стерео.

На 12V входа е 150mA предпазител, който най -вероятно няма да защити веригата, но е налице, за да предотврати пожар в случай на късо съединение.

Стъпка 4: Софтуерът

Софтуерът
Софтуерът

След изтеглянето поставете и трите.ino файла в една папка. По този начин всички те ще бъдат част от една и съща скица и ще бъдат разгърнати заедно в Arudino.

Също така трябва да добавите необходимите библиотеки към IDE на Arduino. За да направите това, изтеглете следните файлове:

github.com/autowp/arduino-mcp2515/archive/…

github.com/philbowles/Arduino-X9C/archive/…

след това добавете и двете, като отидете на Sketch> Include Library> Add. Zip Library …

CanBusStereoAdapter.ino

Основната настройка се извършва в този файл.

Ключовата команда Стойностите на CAN шината са определени в горната част. Освен ако нямате същата кола като мен, най -вероятно ще трябва да въведете собствените си стойности. Можете да използвате шестнадесетичните стойности от снифъра, аз използвах двоичен, така че е по -лесно да се види, че няма случайни припокривания в битовете.

Всички автомобили нямат едни и същи команди на волана, така че не се колебайте да премахнете, добавите или редактирате определените стойности.

Не забравяйте да замените идентификатора на подсистемата си в „STEERING_ID“.

CanBus.ino

Този файл настройва слушателя на CAN шината, интерпретира пакетите и поставя стойностите на съпротивлението в кръгов буфер.

Регулирайте конфигурацията на CAN шината във функцията "setupCanBus", така че да отговаря на вашия автомобил.

Използваме кръгъл буфер, тъй като, както бе споменато по -рано, командният вход на волана е много по -бърз от стерео входа. По този начин ние не пропускаме никакви команди, докато цифровият потенциометър върши своята работа. Ако въведем твърде много команди, най -старите ще бъдат изхвърлени първо, тъй като те са най -малко важни. Това също ни позволява да се справим със случая, когато са натиснати няколко бутона, тъй като стерео входът приема само една стойност наведнъж.

Ако сте променили някое от определенията на командите в „CanBusStereoAdapter.ino“, ще трябва да ги актуализирате и във функцията „handleMessageData“. "handleMessageData" проверява дали предоставените рамки от данни за CAN шина съдържат някоя от известните команди, като използва побитова операция AND.

Например, ако съм натиснал >> и + едновременно, което ще ни даде рамка от данни със стойност 0b10010000. >> (за моята кола) е 0b00010000 в двоичен формат и + е 0b10000000.

--------------- >> -------------- + ------------- << --- - данни0 | 0b10010000 | 0b10010000 | 0b10010000 команда | И 0b00010000 | И 0b10000000 | И 0b00001000 резултат | = 0b00010000 | = 0b10000000 | = 0b00000000

Тук можем да видим, че резултатът от операцията AND ще бъде по -голям от 0, ако командата присъства в рамката с данни. Така че всичко, което трябва да направим, е да проверим за {data frame} & {command value}> 0 за всяка команда, която дефинирахме.

Имайте предвид, че всеки кадър от данни съдържа различни команди, така че е добре, ако стойностите на командите са еднакви, тъй като ги проверяваме спрямо техните собствени рамки. В моя пример и <<, и ESC и двете имат една и съща стойност 0b00001000 (0x08), но << е в data0 и ESC в data1.

След като сме определили, че дадена команда присъства в рамка, добавяме цифрова пот стойност към кръговия буфер. Стойностите варират от 0 до 99, но забелязах, че "напрежението", прочетено от стереото, не е линейно, затова тествайте стойностите за себе си.

DigitalPot.ino

Този файл изскача стойности от кръговия буфер и ги изпраща в цифровия пот за изпълнение. В моя случай "pot.setPotMin (false);" ще увеличи съпротивлението до максимум, което стереото ще прочете като максимално "напрежение". Вашето стерео устройство може да изисква от вас да зададете цифров пот на минимум, така че го тествайте.

Стъпка 5: Приложение на проекта

Приложението на проекта
Приложението на проекта

Имам 3D принтер, затова реших да отпечатам корпус от две части за моя адаптер. Включих файл Fusion 360, който можете да редактирате, и gcode файлове, които отговарят на 60x80 мм перфборд.

Ако нямате достъп до 3D принтер, можете да използвате готов корпус за проект или здрав контейнер.

Стъпка 6: Заключителни мисли

Първоначално планирах адаптерът да бъде свързан към постоянно захранване и да се събужда при определени съобщения на CAN шината, тъй като колата ми няма запален проводник в стерео отделението. По -късно реших да не го направя, тъй като не исках да рискувам да изтостя батерията и да се притеснявам за адаптера, докато съм далеч от колата. Използвах сплитер на кутия с предпазители за кола, за да прокарам кабел за запалване и не трябва да усложнявам допълнително адаптера.

От моите тестове консумацията на енергия е 20-30 mA. Свалих го до 10 mA в режим на заспиване и можех да стигна още по -ниско, като премахна светодиодите от компонентите, но реших да не се занимавам с него, тъй като той ще работи само докато колата работи.

Доволен съм от крайния резултат. Времето за реакция е разумно и рядко пропуска команди.

Въпреки че инвестицията ми във времето беше далеч по -голяма от цената на предлагания в търговската мрежа адаптер (който не работи), знанията, които придобих, са безценни.

Препоръчано: