Obsah:

Klíče od volantu ke stereofonnímu adaptéru do auta (sběrnice CAN -> klíč1): 6 kroků
Klíče od volantu ke stereofonnímu adaptéru do auta (sběrnice CAN -> klíč1): 6 kroků

Video: Klíče od volantu ke stereofonnímu adaptéru do auta (sběrnice CAN -> klíč1): 6 kroků

Video: Klíče od volantu ke stereofonnímu adaptéru do auta (sběrnice CAN -> klíč1): 6 kroků
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Červenec
Anonim
Čichání sběrnice CAN
Čichání sběrnice CAN

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

Odesílání příkazů na stereo
Odesílání příkazů na stereo

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

Několik dní po koupi ojetého auta jsem zjistil, že nemohu přehrávat hudbu z telefonu prostřednictvím autorádia. Ještě frustrující bylo, že auto mělo bluetooth, ale umožňovalo pouze hlasové hovory, nikoli hudbu. Měl také USB port Windows Phone, ale bez iPhone 60 dongle by nefungoval.

Poté, co jsem u svých předchozích aut vyměnil stereofonní zařízení, bez velkého přemýšlení a zkoumání jsem si objednal náhradní stereo za 40 $ ze známého „levného“webu. Stereo přišlo s couvací kamerou, Car Play a spoustou dalších funkcí, které se zdály být mnohem lepší hodnotou než dražší dongle, který dělá jen jednu věc.

Poté, co jsem si koupil a namaloval novou čelní desku, 3D tisk držáku a spoustu dalších prací (které by samy o sobě mohly být poučitelné), jsem dospěl k nepříjemnému zjištění. Příkazy klíčů na volantu byly odesílány přes sběrnici CAN, ale stereo mělo pouze vstup Key1. Protože jsem se nevzdal v polovině cesty, objednal jsem si adaptér 60 liber, který se ukázal jako nefunkční. V tomto okamžiku jsem se rozhodl vyrobit adaptér sám.

Nejsem elektrotechnik, mám pouze základní znalosti elektroniky a toto byl pro mě projekt učení a průzkumu. Moje rada by byla, abyste si nejprve zkontrolovali specifikace svého vozidla a objednali si kompatibilní rádio, ale pokud jste se již zasekli (jako já), postupujte podle pokynů na vlastní nebezpečí.

Zásoby

Adaptér (přibližně 15 $)

  • Arduino Pro Mini 5V (nebo kompatibilní deska)
  • Sběrnicový modul MCP2515 CAN
  • Perfboard 60x80 mm
  • Digitální potenciometr X9C104 100K Ohm (závisí na vašem stereu)
  • DC-DC Krokový regulátor LM2596S 3-40V 3A
  • Držák kabelové pojistky + pojistka (100-200 Ohm)
  • Krabice projektu nebo 3D tiskárna k tisku
  • Stereo konektory do auta (samec + samice)
  • Pájecí potřeby, vodiče atd.

Testovací pomocníci (není to nezbytně nutné, ale testování bude mnohem snazší)

  • Arduino (postačí jakákoli deska 5V)
  • Sběrnicový modul MCP2515 CAN
  • Breadboard + propojky

Krok 1: CAN Bus Sniffing

Některá moderní vozidla místo toho, aby uvnitř vašeho vozu procházela spousta drátů propojujících spoustu systémů, mají páry vodičů vedené ke každé součásti. Prostřednictvím těchto vodičů jsou informace odesílány jako digitální datové pakety a všechny systémy mohou číst všechny zprávy. Toto je síť sběrnice CAN (ve vašem voze může být více sítí, takže nemusí být viditelné všechny informace).

To, co chceme udělat, je připojit se k síti sběrnice CAN a „očichat“datový provoz. Tímto způsobem můžeme „vidět“při stisknutí klávesy na volantu. Každý paket má ID, které představuje subsystém vozidla, který odeslal paket, a data, která představují stav systému. V tomto případě se pokoušíme najít ID subsystému, který odesílá zprávy z klíčů na volantu, a datovou reprezentaci každého klíče.

Pokud máte štěstí, můžete hodnoty svého auta najít někde online a tento krok můžete přeskočit.

Tento proces je trochu zapojený a již byl vysvětlen na jiných místech, takže to jen shrnu:

  • Najděte správné hodnoty pro komunikaci sběrnice CAN ve vašem vozidle. Pro mé auto (Fiat Idea 2009) to byla přenosová rychlost 50 kBPS a taktovací frekvence 8 MHz.
  • Připojte se k síti sběrnice CAN pomocí modulu sběrnice CAN a Arduina v konfiguraci „sniffer“.
  • Přečtěte si hodnoty sběrnice CAN na svém notebooku pomocí nástroje, jako je https://github.com/alexandreblin/python-can-monito…. Bez toho to bude velmi obtížné, protože mnoho zpráv se odesílá, i když auto nic nedělá.
  • Stiskněte tlačítko na volantu a zaznamenejte změny hodnot. To může být trochu složité, protože se odesílá mnoho zpráv, a může být těžké zjistit, která je která.

Zde jsou dva skvělé články, které proces podrobně vysvětlují:

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

Nakonec byste měli mít ID subsystému, které použijeme k naslouchání pouze zpráv sběrnice CAN na volantu, a seznam hexadecimálních hodnot pro klíčové příkazy. V mém případě vypadala data takto:

ID | ID hex | Byte 0 | Byte 1 | Knoflík

--------------------------------------------- 964 | 3C4 | 00 | 00 | Žádná tlačítka 964 | 3C4 | 04 | 00 | SRC 964 | 3C4 | 10 | 00 | >> 964 | 3C4 | 08 | 00 | << 964 | 3C4 | 00 | 80 | Telefon 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 | Dolů 964 | 3C4 | 00 | 04 | OK

ID subsystému je 3C4 (v tomto případě), což je hexadecimální číslo, takže bychom ho měli ve skicách Arduina zapsat jako 0x3C4. Máme také zájem o bajty 0 a 1 (ve vašem případě může být více bajtů). Toto jsou také hexadecimální hodnoty, takže by měly být také zapsány s úvodní 0x.

Pokud převedete hodnoty na binární, všimnete si, že se bity nepřekrývají (například + 0b10000000 a - 0b01000000), takže je možné stisknout více kláves současně.

Navrhuji postavit sniffer z materiálů uvedených v části „testovací pomocník“, abyste jej mohli později znovu použít k simulaci vašeho auta. To vám ušetří nutnost sedět v autě po celou dobu stavby a testování adaptéru. Dodaný náčrt můžete použít jako simulátor. Upravte „subsystemId“, „data0“a „data1“pomocí hodnot, které jste vyčmuchali.

Krok 2: Odesílání příkazů na stereo

Odesílání příkazů na stereo
Odesílání příkazů na stereo

Před zahájením stavby adaptéru je nejlepší nejprve vyzkoušet, zda stereo může přijímat příkazy.

Měl jsem náhradní autobaterii, tak jsem připojil stereo přímo k němu. Pokud máte stolní napájecí zdroj 12V, ještě lepší. Bohužel jsem nemohl najít mnoho informací online o vstupu Key1 na mé jednotce, a tak jsem se uchýlil k experimentování. V tuto chvíli jsem se příliš nebál vypálit stereo, protože je relativně levné, a toto byl můj poslední pokus o uvedení do provozu s mým autem.

Stereo má obrazovku pro učení příkazů, kde je možné vybrat jednu ze dvou hodnot odporu (1K a 3,3K) a zobrazit hodnotu „napětí“(0-255). „Napětí“je citováno, protože je zavádějící. Strávil jsem spoustu času aplikací různých napětí na Key1 bez štěstí. Také jsem se pokusil použít různé odpory k přivedení napětí bez štěstí.

Průlom nastal, když jsem se pokusil dotknout vodiče Key1 k zemi baterie, což mělo za následek pokles „napětí“na 0. To v kombinaci s různými odpory by na obrazovce učení produkovalo konzistentní hodnoty „napětí“.

Nyní, když jsem věděl, jak posílat vstupy do stereo, potřeboval jsem způsob, jak je odeslat z Arduina. V tuto chvíli jsem neslyšel o multiplexorech, které spolu s některými odpory mohly být rychlejším a spolehlivějším řešením (stále si nejsem jistý, zda je to proveditelné), proto jsem použil digitální potenciometr. Zpočátku jsem měl problémy s fungováním digitálního hrnce, dokud jsem nepřišel na to, že ho musím zapojit jako reostat, aby fungoval jako proměnný odpor místo děliče napětí. V zásadě jsem musel připojit terminály RH a RW.

Kromě odporu bylo rozhodující i načasování. Pokud je pokles odporu příliš krátký, příkaz nebude zaregistrován. Pokud je příliš dlouhý, může být registrován vícekrát. Pokles 240 ms, následované 240 ms zpožděním, dokud další příkaz nefungoval pro mé stereo docela spolehlivě. I když to vypadá jako velmi málo času, znamená to, že můžeme odeslat maximálně 2 příkazy za sekundu, což je patrné, pokud se pokoušíte rychle zvýšit nebo snížit hlasitost. Zkoušel jsem si hrát s různými časováními a vzory, což sice zvýšilo rychlost, ale nebylo to příliš spolehlivé. Pokud máte nějaké nápady, jak to zlepšit, zanechte je v komentářích.

Než budete pokračovat, doporučuji postavit prototyp, který zkontroluje, zda vaše stereo přijímá stejný druh vstupu. I když přijímá různá napětí, adaptér by měl fungovat s mírnými změnami v zapojení a skici Arduina.

Krok 3: Sestavení adaptéru

Sestavení adaptéru
Sestavení adaptéru
Sestavení adaptéru
Sestavení adaptéru
Sestavení adaptéru
Sestavení adaptéru

Poté, co jsme otestovali všechny součásti samostatně a vyzkoušeli je společně na prkénku, bylo na čase dát jim trvalejší domov. Trvalo to několik hodin rozložení komponent a pájení.

Vlevo nahoře je regulátor sestupného proudu, který transformuje 12 V z autobaterie na 5 V, který mohou použít ostatní komponenty.

Vlevo dole je modul sběrnice CAN, který načítá hodnoty ze sítě sběrnic CAN automobilu a předává je do Arduina.

Vpravo nahoře je digitální potenciometr (zapojený jako reostat), který funguje jako variabilní odpor mezi zemí a stereo vstupem Key1.

Vpravo dole je Arduino, které funguje jako mozek adaptéru a transformuje zprávy sběrnice CAN na odpory, které jsou čteny stereem.

Na vstupu 12V je pojistka 150mA, která s největší pravděpodobností nechrání obvod, ale je tam, aby se zabránilo požáru v případě zkratu.

Krok 4: Software

Software
Software

Po stažení vložte všechny tři soubory.ino do jedné složky. Tímto způsobem budou všichni součástí stejného náčrtu a budou společně nasazeni do Arudina.

Do IDE Arduino musíte také přidat požadované knihovny. Chcete -li to provést, stáhněte si následující soubory:

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

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

pak oba přidejte v části Sketch> Include Library> Add. Zip Library…

CanBusStereoAdapter.ino

V tomto souboru se provádí základní nastavení.

Klíčové hodnoty sběrnice CAN jsou definovány nahoře. Pokud nemáte stejné auto jako já, budete s největší pravděpodobností muset vložit své vlastní hodnoty. Můžete použít hexadecimální hodnoty ze sniffer, já jsem použil binární, takže je snazší vidět, že v bitech nedochází k náhodnému překrývání.

Všechna auta nemají stejné příkazy na volantu, takže můžete definované hodnoty odebrat, přidat nebo upravit.

Nezapomeňte nahradit ID vašeho subsystému v „STEERING_ID“.

CanBus.ino

Tento soubor nastaví posluchače sběrnice CAN, interpretuje pakety a vloží hodnoty odporu do kruhové vyrovnávací paměti.

Upravte konfiguraci sběrnice CAN ve funkci „setupCanBus“tak, aby vyhovovala vašemu vozu.

Používáme kruhovou vyrovnávací paměť, protože, jak již bylo zmíněno, vstup příkazu na volantu je mnohem rychlejší než stereo vstup. Tímto způsobem nezmeškáme žádné příkazy, zatímco digitální potenciometr dělá své. Pokud zadáme příliš mnoho příkazů, nejstarší budou nejprve vyřazeny, protože jsou nejméně důležité. To nám také umožňuje zvládnout případ, kdy je stisknuto více tlačítek, protože stereo vstup přijímá pouze jednu hodnotu najednou.

Pokud jste změnili některou z definic příkazů v „CanBusStereoAdapter.ino“, budete je také muset aktualizovat ve funkci „handleMessageData“. "handleMessageData" pomocí bitové operace AND kontroluje, zda poskytnuté datové rámce sběrnice CAN obsahují některý ze známých příkazů.

Pokud například stisknu současně >> a +, čímž získáme datový rámec s hodnotou 0b10010000. >> (pro mé auto) je 0b00010000 v binárním čísle a + je 0b10000000.

--------------- >> -------------- + ------------- << --- - data0 | 0b10010000 | 0b10010000 | 0b10010000 příkaz | A 0b00010000 | A 0b10000000 | A výsledek 0b00001000 | = 0b00010000 | = 0b10000000 | = 0b00000000

Zde vidíme, že výsledek operace AND bude větší než 0, pokud je příkaz v datovém rámci přítomen. Jediné, co musíme udělat, je zkontrolovat {data frame} & {value příkazu}> 0 pro každý příkaz, který jsme definovali.

Mějte na paměti, že každý datový rámec obsahuje různé příkazy, takže je v pořádku, pokud jsou hodnoty příkazů stejné, protože je kontrolujeme podle jejich vlastních rámců. V mém příkladu mají << i ESC stejnou hodnotu 0b00001000 (0x08), ale << je v date0 a ESC v data1.

Poté, co jsme zjistili, že v rámečku je příkaz, přidáme do kruhové vyrovnávací paměti hodnotu digitálního potu. Hodnoty se pohybují od 0 do 99, ale všiml jsem si, že „napětí“načtené stereem není lineární, takže si hodnoty sami vyzkoušejte.

DigitalPot.ino

Tento soubor vysune hodnoty z kruhové vyrovnávací paměti a odešle je do digitálního banku ke spuštění. V mém případě "pot.setPotMin (false);" zvýší odpor na maximum, které stereo bude číst jako maximální „napětí“. Vaše stereo může vyžadovat, abyste nastavili digitální pot na minimum, takže to vyzkoušejte.

Krok 5: Příloha projektu

Příloha projektu
Příloha projektu

Mám 3D tiskárnu, a tak jsem se rozhodl vytisknout dvoudílný kryt pro svůj adaptér. Zahrnul jsem soubor Fusion 360, který můžete upravovat, a soubory gcode, které se vejdou na desku 60x80 mm.

Pokud nemáte přístup k 3D tiskárně, můžete použít hotovou skříň projektu nebo robustní kontejner.

Krok 6: Závěrečné myšlenky

Původně jsem plánoval, že adaptér bude připojen ke konstantnímu napájení a probudí se na určitých zprávách sběrnice CAN, protože moje auto nemá zapalovací vodič ve stereo přihrádce. Později jsem se rozhodl pro to, protože jsem nechtěl riskovat vybití baterie a starosti s adaptérem, když jsem mimo auto. Použil jsem rozdělovač pojistkových skříní automobilu k vedení zapalovacího drátu a nemusel jsem adaptér dále komplikovat.

Z mých testů je spotřeba energie 20-30 mA. V režimu spánku jsem to dostal na 10 mA a mohl jsem jít ještě níže odstraněním LED z komponent, ale rozhodl jsem se s tím neobtěžovat, protože to poběží pouze za chodu auta.

S konečným výsledkem jsem docela spokojený. Doba odezvy je přiměřená a zřídka zmešká příkazy.

I když moje časová investice byla mnohem větší než náklady na komerčně dostupný adaptér (který nefungoval), znalosti, které jsem získal, jsou neocenitelné.

Doporučuje: