Tartalomjegyzék:

Kormánykerék gombok autós sztereó adapterhez (CAN busz -> 1. kulcs): 6 lépés
Kormánykerék gombok autós sztereó adapterhez (CAN busz -> 1. kulcs): 6 lépés

Videó: Kormánykerék gombok autós sztereó adapterhez (CAN busz -> 1. kulcs): 6 lépés

Videó: Kormánykerék gombok autós sztereó adapterhez (CAN busz -> 1. kulcs): 6 lépés
Videó: Android fejegység Canbus beállítás 2024, Lehet
Anonim
CAN busz szippantás
CAN busz szippantás

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

Parancsok küldése a sztereóhoz
Parancsok küldése a sztereóhoz

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

Néhány nappal egy használt autó vásárlása után rájöttem, hogy nem tudok zenét lejátszani a telefonomról az autórádión keresztül. Még frusztrálóbb volt, hogy az autóban volt bluetooth, de csak hanghívásokat engedélyezett, zenét nem. Windows Phone USB portja is volt, de 60 dolláros hardverkulcs nélkül nem működne iPhone -nal.

Miután kicseréltem a sztereókat az előző autóimban, mindenféle gondolkodás és kutatás nélkül, egy jól ismert "olcsó" weboldalról rendeltem egy 40 dolláros cseresztereót. A sztereóhoz tolatókamera, Car Play és egy csomó extra funkció érkezett, amelyek sokkal jobb értéknek tűntek, mint a drágább hardverkulcs, amely csak egy dolgot tesz.

Egy új előlap megvásárlása és festése, egy tartó 3D nyomtatása és egy csomó extra munka (ami önmagában is tanulságos lehet) után kellemetlen felfedezésre jutottam. A kormánykerék billentyűparancsai a CAN buszon keresztül érkeztek, de a sztereó csak Key1 bemenettel rendelkezett. Mivel nem adtam fel félúton, rendeltem egy 60 £ -os adaptert, amelyről kiderült, hogy nem működik. Ezen a ponton úgy döntöttem, hogy magam készítek egy adaptert.

Nem vagyok villamosmérnök, csak kezdetleges elektronikai ismeretekkel rendelkezem, és ez tanulási és felfedezési projekt volt számomra. A tanácsom az lenne, hogy először ellenőrizze a jármű műszaki adatait, és rendeljen egy kompatibilis rádiót, de ha már elakadt (mint én), kövesse az utasításokat saját felelősségére.

Kellékek

Az adapter (kb. 15 USD)

  • Arduino Pro Mini 5V (vagy kompatibilis kártya)
  • MCP2515 CAN busz modul
  • 60x80 mm -es perforált lemez
  • X9C104 digitális potenciométer 100K Ohm (a sztereótól függően)
  • DC-DC Léptető szabályozó LM2596S 3-40V 3A
  • Kábel biztosíték tartó + biztosíték (100-200 Ohm)
  • Projektdoboz vagy 3D nyomtató a nyomtatáshoz
  • Autós sztereó aljzatok (férfi + női)
  • Forrasztási kellékek, vezetékek stb.

Tesztsegédek (nem feltétlenül szükségesek, de sokkal könnyebbé teszik a tesztelést)

  • Arduino (bármilyen 5 V -os kártya megteszi)
  • MCP2515 CAN busz modul
  • Kenyeretábla + jumper

1. lépés: CAN busz szippantás

Ahelyett, hogy egy csomó vezeték futna az autó belsejében, összekötve egy csomó rendszert, egyes modern járművek mindegyik alkatrészhez vezetékpárokat vezetnek. Ezeken a vezetékeken keresztül az adatok digitális adatcsomagként érkeznek, és minden rendszer képes olvasni az összes üzenetet. Ez a CAN buszhálózat (több hálózat is lehet az autóban, ezért előfordulhat, hogy nem minden információ látható).

Azt szeretnénk tenni, hogy csatlakozzunk a CAN buszhálózathoz, és "szimatoljuk" az adatforgalmat. Így "láthatjuk" a kormánykerék gombjának megnyomását. Minden csomagnak van egy azonosítója, amely a csomagot küldő jármű alrendszert jelöli, és a rendszer állapotát jelző adatokat. Ebben az esetben megpróbáljuk megtalálni annak az alrendszernek az azonosítóját, amely a kormánykerék kulcsait küldi, és az egyes kulcsok adatábrázolását.

Ha szerencséje van, az interneten megtalálhatja autója értékeit, és kihagyhatja ezt a lépést.

Ez a folyamat kissé érintett, és más helyeken már kifejtésre került, ezért csak összefoglalom:

  • Keresse meg a megfelelő értékeket a CAN busz kommunikációhoz a járművén. Az autómnál (egy 2009 -es Fiat Idea) ez 50KBPS baudrát és 8MHz órajelet jelentett.
  • Csatlakozzon a CAN buszhálózathoz a CAN buszmodul és egy Arduino segítségével, "szippantó" konfigurációban.
  • Olvassa le a CAN busz értékeit laptopján egy olyan eszköz segítségével, mint a https://github.com/alexandreblin/python-can-monito…. Enélkül nagyon nehéz lesz ezt megtenni, mivel sok üzenetet küldenek akkor is, ha az autó nem csinál semmit.
  • Nyomja meg a kormánykerék gombot, és jegyezze fel az értékváltozásokat. Ez kissé bonyolult lehet, mivel sok üzenetet küldünk, és nehéz lehet kitalálni, melyik melyik.

Íme két nagyszerű cikk, amely részletesen elmagyarázza a folyamatot:

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

Végül rendelkeznie kell az alrendszer azonosítójával, amellyel csak a kormánykerék CAN buszüzenetét hallgatjuk meg, valamint a kulcsparancsok hexadecimális értékeinek listáját. Az én esetemben az adatok így néztek ki:

Azonosító | ID Hex | 0 bájt 1. bájt | Gomb

-------------------------------------------- 964 | 3C4 | 00 | 00 | Nincs gomb 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 | Win 964 | 3C4 | 00 | 02 | Fel 964 | 3C4 | 00 | 01 | Le 964 | 3C4 | 00 | 04 | rendben

Az alrendszer azonosítója a 3C4 (ebben az esetben), ami hexadecimális szám, ezért ezt az Arduino vázlatokhoz 0x3C4 -ként kell írnunk. Érdekelnek minket a 0 és 1 bájtok is (az Ön esetében több bájt is lehet). Ezek is hexadecimális értékek, ezért ezeket is 0x kezdőbetűvel kell írni.

Ha az értékeket binárisra konvertálja, észre fogja venni, hogy a bitek nem fedik egymást (például + 0b10000000 és - 0b01000000), ezért több billentyűt lehet egyszerre megnyomni.

Javaslom, hogy a szippantót a "tesztsegéd" részben felsorolt anyagokból építse fel, így később újra felhasználhatja az autó szimulálásához. Ezzel megkímélhetné magát attól, hogy az adapter építése és tesztelése közben végig az autójában kelljen ülnie. A mellékelt vázlat segítségével szimulátorként működhet. Módosítsa az "subsystemId", "data0" és "data1" értékeket a kiszippantott értékekkel.

2. lépés: Parancsok küldése a sztereóhoz

Parancsok küldése a sztereóhoz
Parancsok küldése a sztereóhoz

Az adapter építésének megkezdése előtt a legjobb, ha először teszteli, hogy a sztereó képes -e parancsokat fogadni.

Volt egy tartalék autós akkumulátorom, ezért a sztereót közvetlenül hozzá kötöttem. Ha 12 V -os asztali áramforrása van, még jobb. Sajnos az interneten nem találtam sok információt a Key1 bemenetről a készüléken, ezért kísérletezni kezdtem. Ezen a ponton nem aggódtam túlzottan a sztereó rendszer kiégése miatt, mivel viszonylag olcsó, és ez volt az utolsó árokkísérletem, hogy működjön az autómmal.

A sztereó rendelkezik egy parancsok tanulási képernyőjével, ahol két ellenállási érték közül választhat egyet (1K és 3,3K), és megtekintheti a "feszültség" értékét (0-255). A "feszültséget" azért idézzük, mert félrevezető. Sok időt töltöttem a Key1 -re különböző feszültségek alkalmazásával, szerencsétlenül. Próbáltam különböző ellenállásokat is használni a feszültséghez, szerencsétlenül.

Az áttörés akkor történt, amikor megpróbáltam megérinteni a Key1 vezetéket az akkumulátor testéhez, aminek eredményeként a "feszültség" 0 -ra csökkent. Ez a különböző ellenállásokkal kombinálva következetes "feszültség" értékeket eredményez a tanulási képernyőn.

Most, hogy tudtam, hogyan kell bemeneteket küldeni a sztereóhoz, szükségem volt arra, hogy elküldhessem őket egy Arduino -ból. Ezen a ponton még nem hallottam a multiplexerekről, amelyek néhány ellenállással együtt gyorsabb és megbízhatóbb megoldás lehetett (még mindig nem vagyok biztos benne, hogy ez megvalósítható -e), ezért digitális potenciométert használtam. Eleinte problémáim adódtak a digitális edény működőképességével, amíg rájöttem, hogy be kell kötni reosztátként, hogy feszültségosztó helyett változó ellenállásként működjek. Alapvetően az RH és RW terminálokat kellett csatlakoztatnom.

Az ellenállás mellett az időzítés volt a döntő. Ha az ellenállás csökkenése túl rövid, a parancs nem lesz regisztrálva. Ha túl hosszú, akkor többször is regisztrálható lesz. 240 ms esés, majd 240 ms késés, amíg a következő parancs elég megbízhatóan működött a sztereómon. Bár ez nagyon kevés időnek tűnik, ez azt jelenti, hogy másodpercenként legfeljebb 2 parancsot tudunk küldeni, ami észrevehető, ha gyorsan fel vagy le szeretné állítani a hangerőt. Próbáltam különböző időzítésekkel és mintákkal játszani, ami növelte a sebességet, de nem volt túl megbízható. Ha van ötlete ennek javítására, kérjük, írja meg megjegyzésekben.

Mielőtt továbblépne, javaslom, hogy készítsen prototípust annak ellenőrzésére, hogy a sztereó készülék elfogadja -e ugyanazt a bemenetet. Még akkor is, ha elfogadja a különböző feszültségeket, az adapternek a vezetékekben és az Arduino vázlatban kisebb változtatásokkal kell működnie.

3. lépés: Az adapter építése

Az adapter építése
Az adapter építése
Az adapter építése
Az adapter építése
Az adapter építése
Az adapter építése

Miután az összes alkatrészt külön teszteltük, és közösen kipróbáltuk őket kenyérsütő deszkán, ideje volt tartósabb otthont adni nekik. Ez néhány órát vett igénybe az alkatrészek elhelyezéséhez és a forrasztáshoz.

A bal felső sarokban található a léptető szabályozó, amely 12 V -ot alakít át az autó akkumulátoráról 5 V -ra, amelyet a többi alkatrész használhat.

A bal alsó sarokban található a CAN busz modul, amely kiolvassa az értékeket az autó CAN buszhálózatából, és továbbítja azokat az Arduino -hoz.

A jobb felső sarokban található a digitális potenciométer (reosztátként bekötve), amely változó ellenállásként működik a föld és a sztereó Key1 bemenete között.

A jobb alsó sarokban található az Arduino, amely az adapter agyaként működik, átalakítva a CAN busz üzeneteket a sztereó által olvasott ellenállásokká.

A 12 V -os bemeneten van egy 150 mA -es biztosíték, amely valószínűleg nem védi az áramkört, de rövidzárlat esetén megakadályozza a tüzet.

4. lépés: A szoftver

A szoftver
A szoftver

A letöltés után tegye mindhárom.ino fájlt egyetlen mappába. Így mind ugyanannak a vázlatnak a része lesz, és együtt bevetik őket az Arudino -ba.

A szükséges könyvtárakat is hozzá kell adnia az Arduino IDE -hez. Ehhez töltse le a következő fájlokat:

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

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

majd adja hozzá mindkettőt a Vázlat> Könyvtár bevonása>. Zip könyvtár hozzáadása menüponthoz…

CanBusStereoAdapter.ino

Az alapbeállítás ebben a fájlban történik.

Kulcsparancs A CAN busz értékei felül vannak megadva. Hacsak nem ugyanaz az autója van, mint nekem, akkor nagy valószínűséggel saját értékeit kell megadnia. Használhatja a szagló hexadecimális értékeit, én binárisat használtam, így könnyebb látni, hogy nincsenek véletlen átfedések a bitekben.

Minden autónak nincs ugyanaz a kormánykerék -parancsa, ezért nyugodtan távolítsa el, adja hozzá vagy szerkessze a meghatározott értékeket.

Ne felejtse el kicserélni alrendszer -azonosítóját a „STEERING_ID” mappában.

CanBus.ino

Ez a fájl beállítja a CAN busz figyelőt, értelmezi a csomagokat, és az ellenállási értékeket egy körpufferbe helyezi.

Állítsa be a CAN busz konfigurációját a "setupCanBus" funkcióban, hogy megfeleljen autójának.

Körkörös puffert használunk, mert amint azt korábban említettük, a kormánykerék parancsbevitele sokkal gyorsabb, mint a sztereó bemenet. Így nem hagyunk ki egyetlen parancsot sem, miközben a digitális potenciométer teszi a dolgát. Ha túl sok parancsot adunk meg, akkor a legrégebbi utasítások kerülnek elvetésre, mivel ezek a legkevésbé fontosak. Ez lehetővé teszi számunkra, hogy több gomb megnyomásakor is kezeljük az esetet, mivel a sztereó bemenet egyszerre csak egyetlen értéket fogad el.

Ha megváltoztatta a "CanBusStereoAdapter.ino" parancsmeghatározások bármelyikét, akkor azokat a "handleMessageData" funkcióban is frissítenie kell. A "handleMessageData" bitszerű ÉS művelet használatával ellenőrzi, hogy a mellékelt CAN busz adatkeret tartalmazza -e az ismert parancsokat.

Például, ha egyszerre megnyomtam a >> és a + gombot, ami 0b10010000 értékű adatkeretet ad nekünk. >> (az autómnál) 0b00010000 bináris, és a + 0b10000000.

--------------- >> -------------- + ------------- << --- - adatok0 | 0b10010000 | 0b10010000 | 0b10010000 parancs | ÉS 0b00010000 | ÉS 0b10000000 | ÉS 0b00001000 eredmény | = 0b00010000 | = 0b10000000 | = 0b00000000

Itt láthatjuk, hogy az ÉS művelet eredménye nagyobb lesz, mint 0, ha a parancs jelen van az adatkeretben. Tehát csak annyit kell tennünk, hogy minden általunk definiált parancsnál ellenőrizzük az {adatkeret} és a {parancs értéke}> 0 értéket.

Ne feledje, hogy minden adatkeret különböző parancsokat tartalmaz, így rendben van, ha a parancsértékek megegyeznek, mivel a saját kereteikhez viszonyítjuk őket. Példámban mind a <<, mind az ESC értéke 0b00001000 (0x08), de a << az data0 -ban és az ESC az data1 -ben van.

Miután meghatároztuk, hogy egy parancs jelen van egy keretben, hozzáadunk egy digitális pot értéket a körpufferhez. Az értékek 0 és 99 között mozognak, de észrevettem, hogy a sztereó által leolvasott "feszültség" nem lineáris, ezért próbálja ki az értékeket.

DigitalPot.ino

Ez a fájl kiemeli az értékeket a körpufferből, és elküldi azokat a digitális edénybe végrehajtásra. Esetemben "pot.setPotMin (false);" maximálisra növeli az ellenállást, amit a sztereó maximális "feszültségnek" fog olvasni. A sztereó készülék megkövetelheti, hogy a digitális edényt minimálisra állítsa, ezért próbálja ki.

5. lépés: A projekt melléklete

A projekt melléklete
A projekt melléklete

3D nyomtatóm van, ezért úgy döntöttem, hogy kinyomtatok egy kétrészes házat az adapterhez. Tartalmazok egy Fusion 360 fájlt, amelyet szerkeszthet, és gcode fájlokat, amelyek 60x80 mm -es perforációs táblához illeszkednek.

Ha nincs hozzáférése 3D nyomtatóhoz, használhat egy kész projektházat vagy egy erős tartályt.

6. lépés: Utolsó gondolatok

Kezdetben azt terveztem, hogy az adaptert állandó áramra kell csatlakoztatni, és felébredek bizonyos CAN -busz üzenetekre, mivel az autómban nincs gyújtáshuzal a sztereó rekeszben. Később ellene döntöttem, mivel nem akartam kockáztatni, hogy lemerüljön az akkumulátor és aggódjak az adapter miatt, amíg távol vagyok az autótól. Egy autó biztosítékdoboz -osztóját használtam a gyújtóhuzal vezetéséhez, és nem kellett tovább bonyolítanom az adaptert.

A tesztek alapján az energiafogyasztás 20-30 mA. Alvó üzemmódban 10 mA -re csökkentettem, és még lejjebb is mehetnék, ha eltávolítanám a LED -eket az alkatrészekről, de úgy döntöttem, hogy nem foglalkozom vele, mivel csak akkor működik, ha az autó jár.

Nagyon elégedett vagyok a végeredménnyel. A válaszidő ésszerű, és ritkán hagy ki parancsokat.

Annak ellenére, hogy időbefektetésem sokkal nagyobb volt, mint a kereskedelmi forgalomban kapható adapter költsége (ami nem működött), a megszerzett tudás felbecsülhetetlen értékű.

Ajánlott: