Orodha ya maudhui:

Funguo za Usukani kwa adapta ya Stereo ya Gari (CAN Bus -> Key1): Hatua 6
Funguo za Usukani kwa adapta ya Stereo ya Gari (CAN Bus -> Key1): Hatua 6

Video: Funguo za Usukani kwa adapta ya Stereo ya Gari (CAN Bus -> Key1): Hatua 6

Video: Funguo za Usukani kwa adapta ya Stereo ya Gari (CAN Bus -> Key1): Hatua 6
Video: ЛУЧШИЕ внедорожники в США стоимостью менее 30 тысяч долларов по данным Consumer Reports 2024, Julai
Anonim
UNAWEZA Kunusa Basi
UNAWEZA Kunusa Basi

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

Kutuma Amri kwa Stereo
Kutuma Amri kwa Stereo

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

Siku chache baada ya kununua gari iliyotumiwa, niligundua kuwa siwezi kucheza muziki kutoka kwa simu yangu kupitia stereo ya gari. Jambo la kufadhaisha zaidi ni kwamba gari ilikuwa na bluetooth, lakini iliruhusiwa tu kupiga simu kwa sauti, sio muziki. Pia ilikuwa na bandari ya USB ya Simu ya Windows, lakini haiwezi kufanya kazi na iPhone bila dongle ya $ 60.

Baada ya kuchukua nafasi ya redio kwenye magari yangu ya zamani, bila kufikiria sana au utafiti, niliamuru redio mbadala ya $ 40 kutoka kwa wavuti inayojulikana "rahisi". Stereo ilikuja na kamera ya kurudisha nyuma, Uchezaji wa Gari na rundo la huduma za ziada, ambazo zilionekana kuwa bora zaidi kuliko dongle ghali zaidi ambayo hufanya jambo moja tu.

Baada ya kununua na kupaka rangi ya uso mpya, uchapishaji wa 3D mlima, na kazi nyingi za ziada (ambazo zinaweza kufundisha zenyewe), niligundua ugunduzi mbaya. Amri za ufunguo wa usukani zilitumwa kupitia basi la CAN, lakini stereo ilikuwa na tu pembejeo ya Key1. Sikuwa mtu wa kutoa nusu ya njia, niliamuru adapta ya pauni 60, ambayo haikufanya kazi. Kwa wakati huu niliamua kutengeneza adapta mwenyewe.

Mimi sio mhandisi wa umeme, nina ujuzi wa elektroniki tu na hii ilikuwa mradi wa kujifunza na utafutaji kwangu. Ushauri wangu utakuwa kuangalia kwanza vielelezo vya gari lako na kuagiza redio inayoendana, lakini ikiwa tayari umekwama (kama nilivyokuwa) fuata inayofundishwa kwa hatari yako mwenyewe.

Vifaa

Adapta (takriban 15 $)

  • Arduino Pro Mini 5V (au bodi inayoendana)
  • Moduli ya basi ya MCP2515
  • 60x80mm pembeni
  • X9C104 potentiometer ya dijiti 100K Ohm (inategemea stereo yako)
  • DC-DC Ondoa mdhibiti LM2596S 3-40V 3A
  • Cable fuse mmiliki + fuse (100-200 Ohm)
  • Sanduku la mradi au printa ya 3D kuichapisha
  • Vifurushi vya stereo za gari (kiume + kike)
  • Vifaa vya kutengeneza waya, waya, n.k.

Wasaidizi wa mtihani (hauhitajiki kabisa lakini itafanya upimaji kuwa rahisi zaidi)

  • Arduino (bodi yoyote ya 5V itafanya)
  • Moduli ya basi ya MCP2515
  • Bodi ya mkate + wanaruka

Hatua ya 1: KUNUNUA Basi

Badala ya kuwa na rundo la waya zinazozunguka ndani ya gari yako ikiunganisha rundo la mifumo, gari zingine za kisasa zina jozi za waya zinazoenda kwa kila sehemu. Habari hutumwa kama pakiti za data za dijiti kupitia waya hizi, na mifumo yote inaweza kusoma ujumbe wote. Huu ndio mtandao wa basi wa CAN (kunaweza kuwa na mitandao mingi kwenye gari lako, kwa hivyo habari zote zinaweza zisionekane).

Tunachotaka kufanya, ni kuungana na mtandao wa basi wa CAN na "kunusa" trafiki ya data. Kwa njia hii tunaweza "kuona" wakati kitufe cha usukani kinabanwa. Kila pakiti ina kitambulisho, ambacho kinawakilisha mfumo mdogo wa gari uliotuma pakiti hiyo, na data ambayo inawakilisha hali ya mfumo. Katika kesi hii tunajaribu kupata kitambulisho cha mfumo mdogo ambao hutuma ujumbe muhimu wa usukani, na uwakilishi wa data wa kila ufunguo.

Ikiwa una bahati unaweza kupata maadili ya gari lako mahali pengine mkondoni, na unaweza kuruka hatua hii.

Utaratibu huu unahusika kidogo na tayari umeelezewa katika maeneo mengine, kwa hivyo nitaufupisha tu:

  • Pata maadili sahihi ya mawasiliano ya basi la CAN kwenye gari lako. Kwa gari langu (Wazo la Fiat 2009) ilikuwa kiwango cha baud 50KBPS, na kasi ya saa 8MHz.
  • Unganisha kwenye mtandao wa basi wa CAN ukitumia moduli ya basi ya CAN na Arduino katika usanidi wa "sniffer".
  • Soma maadili ya basi ya CAN kwenye kompyuta yako ndogo ukitumia zana kama vile https://github.com/alexandreblin/python-can-monito…. Itakuwa ngumu sana kufanya hivyo bila hiyo, kwani ujumbe mwingi hutumwa hata wakati gari haifanyi chochote.
  • Bonyeza kitufe cha usukani na uone mabadiliko ya thamani. Hii inaweza kuwa ngumu sana kwani ujumbe mwingi unatumwa na inaweza kuwa ngumu kugundua ni ipi.

Hapa kuna nakala mbili nzuri zinazoelezea mchakato kwa kina:

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

Mwishowe unapaswa kuwa na kitambulisho cha mfumo ambao tutatumia kusikiliza kwa tu usukani ujumbe wa basi, na orodha ya maadili ya hexadecimal kwa amri kuu. Kwa upande wangu data ilionekana kama hii:

Kitambulisho | Kitambulisho Hex | Byte 0 | Byte 1 | Kitufe

------------------------------------------- 964 | 3C4 | 00 | 00 | Hakuna vifungo 964 | 3C4 | 04 | 00 | SRC 964 | 3C4 | 10 | 00 | >> 964 | 3C4 | 08 | 00 | << 964 | 3C4 | 00 | 80 | Simu 964 | 3C4 | 00 | 08 | ESC 964 | 3C4 | 80 | 00 | + 964 | 3C4 | 40 | 00 | - 964 | 3C4 | 00 | 40 | Shinda 964 | 3C4 | 00 | 02 | Juu 964 | 3C4 | 00 | 01 | Chini 964 | 3C4 | 00 | 04 | sawa

Kitambulisho cha mfumo ni 3C4 (katika kesi hii), ambayo ni nambari hexadecimal kwa hivyo tunapaswa kuiandika kama 0x3C4 kwenye michoro ya Arduino. Tunavutiwa na ka 0 na 1 (kwa kesi yako kunaweza kuwa na ka zaidi). Hizi pia ni maadili ya hexadecimal, kwa hivyo zinapaswa pia kuandikwa na 0x inayoongoza.

Ikiwa utabadilisha maadili kuwa ya binary, utaona kuwa bits hazipishana (kwa mfano + 0b10000000 na - 0b01000000) hii ndio funguo nyingi zinaweza kushinikizwa kwa wakati mmoja.

Ninashauri kujenga sniffer na vifaa vilivyoorodheshwa katika sehemu ya "msaidizi wa mtihani", kwa hivyo unaweza kuitumia baadaye kuiga gari lako. Hii itakuokoa kutokana na kukaa kwenye gari lako wakati wote wakati unaunda na kujaribu adapta. Unaweza kutumia mchoro uliopewa kutenda kama simulator. Rekebisha "subsystemId", "data0", na "data1" na maadili uliyoinusa.

Hatua ya 2: Kupeleka Amri kwa Stereo

Kutuma Amri kwa Stereo
Kutuma Amri kwa Stereo

Kabla ya kuanza kujenga adapta, ni bora kujaribu kwanza ikiwa stereo inaweza kupokea amri.

Nilikuwa na betri ya gari ya ziada, kwa hivyo niliunganisha stereo moja kwa moja nayo. Ikiwa una chanzo cha nguvu cha benchi la 12V, bora zaidi. Kwa bahati mbaya sikuweza kupata maelezo mengi mkondoni juu ya uingizaji wa Key1 kwenye kitengo changu, kwa hivyo niliamua kujaribu. Sikuwa na wasiwasi kupita kiasi juu ya kuchoma stereo wakati huu, kwa kuwa ni ya bei rahisi, na hii ilikuwa jaribio langu la mwisho la kufanya kazi na gari langu.

Stereo ina skrini ya kujifunza ya amri, ambapo inawezekana kuchagua moja ya maadili mawili ya upinzani (1K na 3.3K) na kuona thamani ya "voltage" (0-255). "Voltage" imenukuliwa kwa sababu inapotosha. Nilitumia muda mwingi kutumia voltages tofauti kwa Key1 bila bahati. Nilijaribu pia kutumia vipinga tofauti kutumia voltage bila bahati.

Ufanisi ulikuja wakati nilijaribu kugusa waya ya Key1 kwenye uwanja wa betri, ambayo ilisababisha "voltage" kushuka hadi 0. Hii ikijumuishwa na vipinga tofauti itatoa maadili thabiti ya "voltage" kwenye skrini ya kujifunza.

Sasa kwa kuwa nilijua kutuma pembejeo kwa stereo, nilihitaji njia ya kuzituma kutoka Arduino. Kwa wakati huu sijasikia juu ya multiplexers, ambayo pamoja na vipingaji, inaweza kuwa suluhisho la haraka na la kuaminika (bado sina hakika ikiwa hii inawezekana), kwa hivyo nilitumia potentiometer ya dijiti. Mwanzoni nilikuwa na shida ya kufanya sufuria ya dijiti ifanye kazi, hadi nikagundua kuwa ninahitaji kuiweka waya kama rheostat ili kutenda kama kinzani tofauti badala ya mgawanyiko wa voltage. Kimsingi ilibidi niunganishe vituo vya RH na RW.

Mbali na upinzani, muda ulikuwa muhimu. Ikiwa kushuka kwa upinzani ni mfupi sana, amri haitasajiliwa. Ikiwa ni ndefu sana inaweza kusajiliwa mara nyingi. Kushuka kwa 240ms, ikifuatiwa na kuchelewa kwa 240ms mpaka amri inayofuata ilifanya kazi kwa kuaminika kwa stereo yangu. Ingawa hiyo inaonekana kama wakati mdogo sana, inamaanisha kuwa tunaweza kutuma maagizo 2 kwa sekunde, ambayo inaonekana ikiwa unajaribu kugeuza sauti haraka au chini. Nilijaribu kucheza karibu na nyakati tofauti na mifumo, ambayo iliongeza kasi lakini haikuaminika sana. Ikiwa una maoni yoyote juu ya jinsi ya kuboresha hii tafadhali waache kwenye maoni.

Kabla ya kuendelea zaidi, ninashauri kujenga mfano ili kuangalia ikiwa stereo yako inakubali uingizaji wa aina hiyo hiyo. Hata ikiwa inakubali voltages tofauti adapta inapaswa kufanya kazi na mabadiliko kidogo kwa wiring na mchoro wa Arduino.

Hatua ya 3: Kuunda adapta

Kuunda adapta
Kuunda adapta
Kuunda adapta
Kuunda adapta
Kuunda adapta
Kuunda adapta

Baada ya kujaribu vifaa vyote kando, na kujaribu pamoja kwenye ubao wa mkate, ilikuwa wakati wa kuwapa nyumba ya kudumu zaidi. Hii ilichukua masaa machache ya kuweka vifaa na kutengenezea.

Juu kushoto ni mdhibiti wa kushuka chini, ambaye hubadilisha 12V kutoka kwa betri ya gari, hadi 5V ambayo inaweza kutumiwa na vifaa vingine.

Chini kushoto ni moduli ya basi ya CAN, ambayo inasoma maadili kutoka kwa mtandao wa basi wa gari na kuipeleka Arduino.

Juu kulia ni potentiometer ya dijiti (iliyo na waya kama rheostat) ambayo hufanya kama kinzani tofauti kati ya ardhi na pembejeo ya Key1 ya stereo.

Chini kulia ni Arduino, ambayo hufanya kama akili za adapta, ikibadilisha ujumbe wa basi wa CAN kuwa vipinga ambavyo husomwa na stereo.

Kwenye pembejeo ya 12V kuna fyuzi ya 150mA, ambayo haitaweza kulinda mzunguko, lakini ipo kuzuia moto ikiwa mfupi.

Hatua ya 4: Programu

Programu
Programu

Baada ya kupakua, weka faili zote tatu za.ino kwenye folda moja. Kwa njia hiyo wote watakuwa sehemu ya mchoro huo huo na kupelekwa kwa Arudino pamoja.

Unahitaji pia kuongeza maktaba zinazohitajika kwa IDE ya Arduino. Ili kufanya hivyo, pakua faili zifuatazo:

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

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

kisha ongeza zote mbili kwa kwenda kwenye Mchoro> Jumuisha Maktaba> Ongeza Maktaba ya Zip …

CanBusStereoAdapter.ino

Usanidi wa kimsingi unafanywa katika faili hii.

Amri muhimu ya maadili ya basi ya CAN yanafafanuliwa hapo juu. Isipokuwa una gari sawa na mimi, itabidi uweke maadili yako mwenyewe. Unaweza kutumia maadili ya hexadecimal kutoka kwa sniffer, nilitumia binary kwa hivyo ni rahisi kuona kuwa hakuna mwingiliano wa bahati mbaya kwenye bits.

Magari yote hayana amri sawa za usukani, kwa hivyo jisikie huru kuondoa, kuongeza, au kuhariri maadili yaliyofafanuliwa.

Usisahau kuchukua nafasi ya kitambulisho chako cha mfumo katika "STEERING_ID".

CanBus.ino

Faili hii inaweka msikilizaji wa basi la CAN, inatafsiri pakiti, na inaweka maadili ya upinzani kwenye bafa ya duara.

Rekebisha usanidi wa basi la CAN katika kazi ya "setupCanBus" ili kukidhi gari lako.

Tunatumia bafa ya duara kwa sababu, kama ilivyoelezwa hapo awali, pembejeo ya amri ya usukani ni haraka sana kuliko uingizaji wa stereo. Kwa njia hii hatukosi amri yoyote wakati potentiometer ya dijiti inafanya kazi yake. Tukiingiza amri nyingi sana zile za zamani zitatupwa kwanza, kwani ndio muhimu sana. Hii pia inatuwezesha kushughulikia kesi hiyo wakati vifungo vingi vinabanwa, kwani uingizaji wa stereo unakubali tu thamani moja kwa wakati.

Ikiwa umebadilisha ufafanuzi wowote wa amri katika "CanBusStereoAdapter.ino" utahitaji pia kuzisasisha katika kazi ya "handleMessageData". "handleMessageData" huangalia ikiwa muafaka wa data za basi za CAN zinaweza kuwa na amri zozote zinazojulikana kwa kutumia busara NA operesheni.

Kwa mfano, ikiwa nimebonyeza >> na + kwa wakati mmoja ambayo itatupa fremu ya data yenye thamani ya 0b10010000. >> (kwa gari langu) ni 0b00010000 kwa binary, na + ni 0b10000000.

--------------- >> -------------- + ------------- <<-- - data0 | 0b10010000 | 0b10010000 | Amri ya 0b10010000 | NA 0b00010000 | NA 0b10000000 | NA 0b00001000 matokeo | = 0b00010000 | = 0b10000000 | = 0b00000000

Hapa tunaweza kuona kwamba matokeo ya operesheni ya AND yatakuwa kubwa kuliko 0 ikiwa amri iko kwenye fremu ya data. Kwa hivyo tunachohitaji kufanya ni kuangalia {fremu ya data} & {amri ya thamani}> 0, kwa kila amri tuliyoifafanua.

Kumbuka kuwa kila fremu ya data ina amri tofauti, kwa hivyo ni sawa ikiwa maadili ya amri ni sawa, kwani tunaziangalia dhidi ya fremu zao. Katika mfano wangu << na ESC zote zina thamani sawa 0b00001000 (0x08), lakini << iko katika data0 na ESC katika data1.

Baada ya kuamua kuwa amri iko kwenye fremu tunaongeza thamani ya sufuria ya dijiti kwa bafa ya duara. Maadili yanatoka 0 hadi 99, lakini nimeona kuwa "voltage" iliyosomwa na stereo sio laini kwa hivyo jaribu maadili mwenyewe.

DigitalPot.ino

Faili hii hutoka kwa bafa ya duara na kuipeleka kwenye sufuria ya dijiti kutekeleza. Katika kesi yangu "pot.setPotMin (uwongo);" itaongeza upinzani kwa kiwango cha juu, ambayo stereo itasoma kama "voltage" ya juu. Stereo yako inaweza kukuhitaji uweke sufuria ya dijiti kwa kiwango cha chini, kwa hivyo jaribu.

Hatua ya 5: Ufungaji wa Mradi

Ufungaji wa Mradi
Ufungaji wa Mradi

Nina printa ya 3D kwa hivyo nimeamua kuchapisha sehemu mbili ya kiambatisho cha adapta yangu. Nimejumuisha faili ya Fusion 360 ambayo unaweza kuhariri, na faili za gcode ambazo zitatoshea perfboard ya 60x80mm.

Ikiwa huna ufikiaji wa printa ya 3D, unaweza kutumia kiambatisho cha mradi kilichotengenezwa tayari au kontena dhabiti.

Hatua ya 6: Mawazo ya Mwisho

Hapo awali nilipanga juu ya adapta iliyounganishwa na nguvu ya kila wakati na kuamka kwenye ujumbe fulani wa basi la CAN, kwani gari langu halina waya wa kuwasha katika sehemu ya stereo. Baadaye niliamua dhidi yake kwani sikutaka kuhatarisha kukimbia betri na kuwa na wasiwasi juu ya adapta wakati niko mbali na gari. Nilitumia mgawanyiko wa sanduku la fuse ya gari kuendesha waya wa kuwasha na sio lazima nizidishe adapta zaidi.

Kutoka kwa vipimo vyangu matumizi ya nguvu ni 20-30 mA. Niliipata hadi 10 mA katika hali ya kulala, na ningeweza kwenda chini zaidi kwa kuondoa LED kutoka kwa vifaa, lakini niliamua kutosumbuka nayo kwani itaendesha tu wakati gari inaendesha.

Nimefurahishwa sana na matokeo ya mwisho. Wakati wa kujibu ni sawa, na mara chache hukosa amri.

Ingawa uwekezaji wangu wa wakati ulikuwa mkubwa zaidi kuliko gharama ya adapta inayopatikana kibiashara (ambayo haikufanya kazi), maarifa niliyoyapata ni muhimu sana.

Ilipendekeza: