Obsah:

Kľúče od volantu k stereo adaptéru do auta (zbernica CAN -> kľúč1): 6 krokov
Kľúče od volantu k stereo adaptéru do auta (zbernica CAN -> kľúč1): 6 krokov

Video: Kľúče od volantu k stereo adaptéru do auta (zbernica CAN -> kľúč1): 6 krokov

Video: Kľúče od volantu k stereo adaptéru do auta (zbernica CAN -> kľúč1): 6 krokov
Video: 40 отборных автотоваров с Aliexpress, которые упростят жизнь любому автовладельцу #2 2024, November
Anonim
Čuchanie autobusu CAN
Čuchanie autobusu CAN

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

Odosielanie príkazov na stereo
Odosielanie príkazov na stereo

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

Niekoľko dní po kúpe ojazdeného auta som zistil, že prostredníctvom autorádia nemôžem prehrávať hudbu z telefónu. Ešte frustrujúcejšie bolo, že auto malo bluetooth, ale umožňovalo iba hlasové hovory, nie hudbu. Mal tiež USB port Windows Phone, ale bez iPhone s 60 donglom by nefungoval.

Po výmene stereofónnych zvukov na predchádzajúcich autách som bez dlhého premýšľania a skúmania objednal náhradné stereo za 40 dolárov zo známej „lacnej“webovej stránky. Stereo bolo vybavené cúvacou kamerou, funkciou Car Play a množstvom ďalších funkcií, ktoré sa zdali byť oveľa lepšou hodnotou ako drahší hardvérový kľúč, ktorý robí iba jednu vec.

Po kúpe a namaľovaní novej čelnej dosky, 3D tlači držiaka a množstve ďalších prác (ktoré by sa dali inštruovať samy osebe) som dospel k nepríjemnému zisteniu. Príkazy pre kľúče na volante boli odoslané po zbernici CAN, stereo však malo iba vstup Key1. Keďže som sa nevzdal na polovici cesty, objednal som si 60 GB adaptér, ktorý sa ukázal ako nefunkčný. V tomto mieste som sa rozhodol vyrobiť adaptér sám.

Nie som elektrotechnik, mám iba základné znalosti elektroniky a toto bol pre mňa projekt učenia a skúmania. Moja rada by bola, aby ste si najskôr overili špecifikácie svojho vozidla a objednali si kompatibilné rádio, ale ak ste už uviazli (ako som bol ja), postupujte podľa pokynov na vlastné riziko.

Zásoby

Adaptér (približne 15 $)

  • Arduino Pro Mini 5V (alebo kompatibilná doska)
  • Modul zbernice CAN MCP2515
  • Doska 60x80 mm
  • Digitálny potenciometer X9C104 100K Ohm (závisí od vášho stereo)
  • DC-DC Krokový regulátor LM2596S 3-40V 3A
  • Držiak káblovej poistky + poistka (100-200 Ohm)
  • Projektový box alebo 3D tlačiareň na jeho vytlačenie
  • Stereo konektory do auta (muž + žena)
  • Spájkovacie potreby, drôty atď.

Testovací pomocníci (nie sú striktne potrebné, ale testovanie bude oveľa jednoduchšie)

  • Arduino (postačí akákoľvek 5V doska)
  • Modul zbernice CAN MCP2515
  • Breadboard + prepojky

Krok 1: Čuchanie zbernice CAN

V niektorých moderných vozidlách nie je potrebné, aby vo vnútri vášho auta prechádzal zväzok káblov prepájajúcich zväzok systémov, ale dvojice vodičov vedených ku každému komponentu. Prostredníctvom týchto káblov sú informácie odosielané ako pakety digitálnych dát a všetky systémy môžu čítať všetky správy. Toto je sieť zbernice CAN (vo vašom aute môže byť niekoľko sietí, takže všetky informácie nemusia byť viditeľné).

To, čo chceme urobiť, je pripojiť sa k sieti zbernice CAN a „oňuchať“dátový prenos. Takto môžeme „vidieť“po stlačení klávesu na volante. Každý paket má ID, ktoré predstavuje subsystém vozidla, ktorý paket odoslal, a údaje, ktoré predstavujú stav systému. V tomto prípade sa pokúšame nájsť ID subsystému, ktorý odosiela správy z kľúča na volante, a údajovú reprezentáciu každého kľúča.

Ak máte šťastie, môžete nájsť hodnoty pre svoje auto niekde na internete a tento krok môžete preskočiť.

Tento proces je trochu zapojený a už bol vysvetlený na iných miestach, takže ho len zhrniem:

  • Nájdite správne hodnoty pre komunikáciu zbernice CAN vo vašom vozidle. V prípade môjho auta (Fiat Idea z roku 2009) to bola prenosová rýchlosť 50 kB / s a rýchlosť 8 MHz.
  • Pripojte sa k sieti zbernice CAN pomocou zbernicového modulu CAN a Arduina v konfigurácii „sniffer“.
  • Prečítajte si hodnoty zbernice CAN na prenosnom počítači pomocou nástroja, ako je https://github.com/alexandreblin/python-can-monito…. Bez toho to bude veľmi ťažké, pretože veľa správ sa odosiela, aj keď auto nič nerobí.
  • Stlačte tlačidlo na volante a všimnite si zmeny hodnôt. To môže byť trochu zložité, pretože sa odosiela veľa správ a môže byť ťažké zistiť, ktorá je ktorá.

Tu sú dva skvelé články, ktoré tento proces podrobne vysvetľujú:

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

Nakoniec by ste mali mať ID subsystému, ktoré budeme používať na počúvanie iba správ zbernice CAN na volante, a zoznam hexadecimálnych hodnôt pre kľúčové príkazy. V mojom prípade údaje vyzerali takto:

ID | ID šesťhran | Bajt 0 | Bajt 1 | Tlačidlo

--------------------------------------------- 964 | 3C4 | 00 | 00 | Žiadne tlačidlá 964 | 3C4 | 04 | 00 | SRC 964 | 3C4 | 10 | 00 | >> 964 | 3C4 | 08 | 00 | << 964 | 3C4 | 00 | 80 | Telefón 964 | 3C4 | 00 | 08 | ESC 964 | 3C4 | 80 | 00 | + 964 | 3C4 | 40 | 00 | - 964 | 3C4 | 00 | 40 | Vyhrajte 964 | 3C4 | 00 | 02 | Až 964 | 3C4 | 00 | 01 | Dole 964 | 3C4 | 00 | 04 | OK

ID subsystému je 3C4 (v tomto prípade), čo je hexadecimálne číslo, takže by sme ho do skíc Arduina mali zapísať ako 0x3C4. Máme tiež záujem o bajty 0 a 1 (vo vašom prípade môže byť viac bajtov). Toto sú tiež hexadecimálne hodnoty, preto by mali byť tiež zapísané s počiatočnou 0x.

Ak prevádzate hodnoty na binárne, všimnete si, že sa bity neprekrývajú (napríklad + 0b10000000 a - 0b01000000), je to tak, že je možné stlačiť viac klávesov súčasne.

Navrhujem postaviť sniffer z materiálov uvedených v časti „Testovací pomocník“, aby ste ho mohli neskôr znova použiť na simuláciu auta. To vám ušetrí potrebu sedieť vo svojom aute po celú dobu, kým budete stavať a testovať adaptér. Dodaný náčrt môžete použiť ako simulátor. Upravte „subsystemId“, „data0“a „data1“pomocou hodnôt, ktoré ste vyčuchali.

Krok 2: Odoslanie príkazov na stereo

Odosielanie príkazov na stereo
Odosielanie príkazov na stereo

Pred začatím výroby adaptéra je najlepšie najskôr vyskúšať, či stereo môže prijímať príkazy.

Mal som náhradnú autobatériu, tak som stereo zapojil priamo k nej. Ak máte 12 V stolný zdroj energie, ešte lepšie. Nanešťastie som nemohol nájsť veľa informácií online o vstupe Key1 na mojej jednotke, a tak som sa uchýlil k experimentovaniu. V tomto mieste som sa príliš neobával o vypálenie stereo, pretože je to relatívne lacné a toto bol môj posledný pokus o nápravu, aby to fungovalo s mojím autom.

Stereo má obrazovku učenia príkazov, kde je možné vybrať jednu z dvoch hodnôt odporu (1K a 3,3K) a zobraziť hodnotu „napätia“(0-255). „Napätie“je citované, pretože je zavádzajúce. Strávil som veľa času aplikovaním rôznych napätí na Key1 bez šťastia. Tiež som sa pokúsil použiť rôzne odpory na pripojenie napätia bez šťastia.

Prelom nastal, keď som sa pokúsil dotknúť vodiča Key1 k uzemneniu batérie, čo malo za následok, že „napätie“kleslo na 0. To v kombinácii s rôznymi odpormi produkovalo na obrazovke učenia konzistentné hodnoty „napätia“.

Teraz, keď som vedel, ako odosielať vstupy do stereo, potreboval som spôsob, ako ich odoslať z Arduina. V tomto mieste som nepočul o multiplexoroch, ktoré by spolu s niektorými odpormi mohli byť rýchlejšie a spoľahlivejšie riešenie (stále si nie som istý, či je to možné), a tak som použil digitálny potenciometer. Najprv som mal problémy s uvedením digitálneho hrnca do prevádzky, kým som neprišiel na to, že ho musím zapojiť ako reostat, aby fungoval ako variabilný odpor namiesto deliča napätia. V zásade som musel pripojiť terminály RH a RW.

Okrem odporu bolo rozhodujúce aj načasovanie. Ak je pokles odporu príliš krátky, príkaz nebude zaregistrovaný. Ak je to príliš dlhé, môže sa stať, že sa zaregistrujete viackrát. Pokles 240 ms, po ktorom nasledovalo 240 ms oneskorenie, kým nasledujúci príkaz fungoval pre moje stereo celkom spoľahlivo. Aj keď sa to zdá byť veľmi málo času, znamená to, že môžeme odoslať maximálne 2 príkazy za sekundu, čo je zrejmé, ak sa pokúšate rýchlo zvýšiť alebo znížiť hlasitosť. Skúsil som sa pohrať s rôznym načasovaním a vzormi, čo síce zvýšilo rýchlosť, ale nebolo to veľmi spoľahlivé. Ak máte nápady, ako to zlepšiť, napíšte ich do komentárov.

Predtým, ako budete pokračovať, navrhujem postaviť prototyp a skontrolovať, či vaše stereo prijíma rovnaký druh vstupu. Aj keď prijíma rôzne napätia, adaptér by mal fungovať s malými úpravami zapojenia a náčrtu Arduino.

Krok 3: Zostavenie adaptéra

Zostavenie adaptéra
Zostavenie adaptéra
Zostavenie adaptéra
Zostavenie adaptéra
Zostavenie adaptéra
Zostavenie adaptéra

Po samostatnom testovaní všetkých komponentov a ich spoločnom vyskúšaní na doske, bolo načase dať im trvalejší domov. Rozloženie komponentov a spájkovanie trvalo niekoľko hodín.

Vľavo hore je regulátor znižovania otáčok, ktorý transformuje 12 V z autobatérie na 5 V, ktorý môžu využiť ostatné komponenty.

Vľavo dole je modul zbernice CAN, ktorý načítava hodnoty zo siete zberníc CAN automobilu a odosiela ich do Arduina.

Vpravo hore je digitálny potenciometer (zapojený ako reostat), ktorý funguje ako variabilný odpor medzi uzemnením a vstupom Stereo Key1.

Vpravo dole je Arduino, ktoré funguje ako mozog adaptéra a transformuje správy zbernice CAN na odpory, ktoré sú prečítané stereom.

Na vstupe 12V je poistka 150mA, ktorá s najväčšou pravdepodobnosťou nechráni obvod, ale slúži na zabránenie požiaru v prípade skratu.

Krok 4: Softvér

Softvér
Softvér

Po stiahnutí vložte všetky tri súbory.ino do jedného priečinka. Týmto spôsobom bude všetko súčasťou toho istého náčrtu a spoločne sa nasadia do Arudina.

Do IDE Arduino musíte tiež pridať požadované knižnice. Ak to chcete urobiť, stiahnite si nasledujúce súbory:

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

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

potom ich obidve pridajte tak, že prejdete na položku Skica> Zahrnúť knižnicu> Pridať knižnicu. Zip…

CanBusStereoAdapter.ino

V tomto súbore sa vykonáva základné nastavenie.

Kľúčové hodnoty zbernice CAN sú definované v hornej časti. Pokiaľ nemáte rovnaké auto ako ja, budete si pravdepodobne musieť dať svoje vlastné hodnoty. Môžete použiť hexadecimálne hodnoty zo snímača, ja som použil binárne, takže je jednoduchšie vidieť, že v bitoch nedochádza k náhodnému prekrývaniu.

Všetky autá nemajú rovnaké príkazy na volante, takže definované hodnoty môžete pokojne odstrániť, pridať alebo upraviť.

Nezabudnite nahradiť ID svojho subsystému v „STEERING_ID“.

CanBus.ino

Tento súbor nastaví poslucháč zbernice CAN, interpretuje pakety a vloží hodnoty odporu do kruhovej vyrovnávacej pamäte.

Upravte konfiguráciu zbernice CAN vo funkcii „setupCanBus“tak, aby vyhovovala vášmu automobilu.

Používame kruhový buffer, pretože, ako už bolo spomenuté, vstup príkazov na volante je oveľa rýchlejší ako stereo vstup. Takto nezmeškáme žiadne príkazy, kým digitálny potenciometer robí svoje. Ak zadáme príliš veľa príkazov, najstaršie budú najskôr zahodené, pretože sú najmenej dôležité. To nám tiež umožňuje zvládnuť prípad, keď je stlačených viac tlačidiel, pretože stereo vstup prijíma súčasne iba jednu hodnotu.

Ak ste zmenili niektorú z definícií príkazov v programe „CanBusStereoAdapter.ino“, budete ich musieť aktualizovať aj vo funkcii „handleMessageData“. "handleMessageData" pomocou bitovej operácie AND kontroluje, či poskytnuté dátové rámce zbernice CAN obsahujú niektoré zo známych príkazov.

Ak napríklad súčasne stlačím >> a +, čím získame dátový rámec s hodnotou 0b10010000. >> (pre moje auto) je 0b00010000 v binárnom čísle a + je 0b10000000.

--------------- >> -------------- + ------------- << --- - údaje0 | 0b10010000 | 0b10010000 | 0b10010000 príkaz | A 0b00010000 | A 0b10000000 | A 0b00001000 výsledok | = 0b00010000 | = 0b10000000 | = 0b00000000

Tu vidíme, že výsledok operácie AND bude väčší ako 0, ak je príkaz prítomný v dátovom rámci. Všetko, čo musíme urobiť, je skontrolovať {dátový rámec} a {hodnotu príkazu}> 0 pre každý príkaz, ktorý sme definovali.

Majte na pamäti, že každý dátový rámec obsahuje rôzne príkazy, takže je v poriadku, ak sú hodnoty príkazov rovnaké, pretože ich kontrolujeme v porovnaní s ich vlastnými rámcami. V mojom prípade majú << aj ESC rovnakú hodnotu 0b00001000 (0x08), ale << je v údajoch0 a ESC v dátach1.

Potom, čo sme zistili, že príkaz je prítomný v rámci, pridáme hodnotu digitálneho potu do kruhovej vyrovnávacej pamäte. Hodnoty sa pohybujú od 0 do 99, ale všimol som si, že „napätie“odčítané stereom nie je lineárne, takže si hodnoty vyskúšajte sami.

DigitalPot.ino

Tento súbor vyberie hodnoty z kruhovej vyrovnávacej pamäte a pošle ich na vykonanie do digitálneho hrnca. V mojom prípade "pot.setPotMin (false);" zvýši odpor na maximum, čo stereo bude čítať ako maximálne „napätie“. Vaše stereo môže vyžadovať, aby ste nastavili digitálny pot na minimum, takže to vyskúšajte.

Krok 5: Príloha projektu

Príloha projektu
Príloha projektu

Mám 3D tlačiareň, a tak som sa rozhodol vytlačiť dvojdielny kryt pre svoj adaptér. Zahrnul som súbor Fusion 360, ktorý môžete upravovať, a súbory gcode, ktoré sa zmestia na perfboard s rozmermi 60 x 80 mm.

Ak nemáte prístup k 3D tlačiarni, môžete použiť hotový kryt projektu alebo robustný kontajner.

Krok 6: Záverečné myšlienky

Pôvodne som plánoval, že adaptér bude pripojený k konštantnému napájaniu a prebudí sa na určité správy zbernice CAN, pretože moje auto nemá v stereo priestore zapaľovací vodič. Neskôr som sa rozhodol pre to, pretože som nechcel riskovať vybitie batérie a starosti o adaptér, keď budem ďaleko od auta. Na spustenie zapaľovacieho drôtu som použil rozdeľovač poistkových skriniek v aute a nemusel som adaptér ďalej komplikovať.

Z mojich testov je spotreba energie 20-30 mA. V režime spánku som to znížil na 10 mA a mohol by som ísť ešte nižšie odstránením diód LED z komponentov, ale rozhodol som sa s tým neobťažovať, pretože bude fungovať iba vtedy, keď bude auto v prevádzke.

S konečným výsledkom som veľmi spokojný. Čas odozvy je primeraný a málokedy zmešká príkazy.

Napriek tomu, že moje časové investície boli oveľa vyššie ako náklady na komerčne dostupný adaptér (ktorý nefungoval), znalosti, ktoré som získal, sú neoceniteľné.

Odporúča: