Isi kandungan:

Kekunci Roda Kemudi ke Penyesuai Stereo Kereta (CAN CAN -> Key1): 6 Langkah
Kekunci Roda Kemudi ke Penyesuai Stereo Kereta (CAN CAN -> Key1): 6 Langkah

Video: Kekunci Roda Kemudi ke Penyesuai Stereo Kereta (CAN CAN -> Key1): 6 Langkah

Video: Kekunci Roda Kemudi ke Penyesuai Stereo Kereta (CAN CAN -> Key1): 6 Langkah
Video: Hati2 bossku jika hendak cuci mobil. Pastikan pilih cuci steam yg model H agar lebih safety 🙏👍 2024, November
Anonim
DAPAT Bas Menghidu
DAPAT Bas Menghidu

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

Menghantar Perintah ke Stereo
Menghantar Perintah ke Stereo

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

Beberapa hari selepas membeli kereta terpakai, saya mendapati bahawa saya tidak dapat memainkan muzik dari telefon saya melalui stereo kereta. Yang lebih mengecewakan ialah kereta mempunyai bluetooth, tetapi hanya membenarkan panggilan suara, bukan muzik. Ia juga mempunyai port USB Windows Phone, tetapi tidak akan berfungsi dengan iPhone tanpa dongle 60 $.

Setelah menggantikan stereo pada kereta saya sebelumnya, tanpa banyak pemikiran atau penyelidikan, saya memesan stereo pengganti $ 40 dari laman web "murah" yang terkenal. Stereo dilengkapi dengan kamera terbalik, Car Play dan sekumpulan ciri tambahan, yang nampaknya bernilai jauh lebih baik daripada dongle yang lebih mahal yang hanya melakukan satu perkara.

Setelah membeli dan mengecat pelat muka baru, mencetak dudukan 3D, dan banyak pekerjaan tambahan (yang dapat menjadi petunjuk dengan sendirinya), saya menemui penemuan yang tidak menyenangkan. Perintah kunci stereng dihantar melalui bas CAN, tetapi stereo hanya mempunyai input Key1. Tidak berputus asa, saya memesan penyesuai £ 60, yang ternyata tidak berfungsi. Pada ketika ini saya memutuskan untuk membuat penyesuai sendiri.

Saya bukan jurutera elektrik, saya hanya mempunyai pengetahuan elektronik asas dan ini adalah projek pembelajaran dan penerokaan bagi saya. Nasihat saya adalah untuk memeriksa terlebih dahulu spesifikasi kenderaan anda dan memesan radio yang serasi, tetapi jika anda sudah tersekat (seperti saya) ikuti arahan yang boleh anda tanggung dengan risiko anda sendiri.

Bekalan

Penyesuai (lebih kurang 15 $)

  • Arduino Pro Mini 5V (atau papan serasi)
  • Modul bas MCP2515 CAN
  • Papan pahat 60x80mm
  • Potensiometer digital X9C104 100K Ohm (bergantung pada stereo anda)
  • DC-DC Step down regulator LM2596S 3-40V 3A
  • Pemegang fius kabel + sekering (100-200 Ohm)
  • Kotak projek atau pencetak 3D untuk mencetaknya
  • Bicu stereo kereta (lelaki + perempuan)
  • Bekalan pematerian, wayar, dll.

Pembantu ujian (tidak sangat diperlukan tetapi akan menjadikan ujian lebih mudah)

  • Arduino (mana-mana papan 5V akan dilakukan)
  • Modul bas MCP2515 CAN
  • Papan roti + jumper

Langkah 1: DAPAT Bas Menghidu

Daripada sekumpulan wayar berjalan di sekitar bahagian dalam kereta anda yang menghubungkan banyak sistem, beberapa kenderaan moden mempunyai sepasang wayar yang berjalan ke setiap komponen. Maklumat dihantar sebagai paket data digital melalui kabel ini, dan semua sistem dapat membaca semua mesej. Ini adalah rangkaian bas CAN (mungkin terdapat banyak rangkaian di dalam kereta anda, jadi semua maklumat mungkin tidak dapat dilihat).

Apa yang ingin kami lakukan, adalah menyambung ke rangkaian bas CAN dan "menghidu" lalu lintas data. Dengan cara ini kita dapat "melihat" ketika tombol stereng ditekan. Setiap paket mempunyai ID, yang mewakili subsistem kenderaan yang mengirim paket, dan data yang mewakili keadaan sistem. Dalam kes ini, kami berusaha mencari ID subsistem yang menghantar mesej kunci stereng, dan perwakilan data setiap kunci.

Sekiranya anda bernasib baik, anda mungkin menemui nilai untuk kereta anda di tempat dalam talian, dan boleh melangkau langkah ini.

Proses ini agak terlibat dan telah dijelaskan di tempat lain, jadi saya akan meringkaskannya:

  • Cari nilai yang betul untuk komunikasi bas CAN pada kenderaan anda. Untuk kereta saya (Idea Fiat 2009) ia adalah kadar baud 50KBPS, dan kelajuan jam 8MHz.
  • Sambungkan ke rangkaian bas CAN menggunakan modul bas CAN dan Arduino dalam konfigurasi "sniffer".
  • Baca nilai bas CAN pada komputer riba anda menggunakan alat seperti https://github.com/alexandreblin/python-can-monito…. Akan sangat sukar untuk melakukannya tanpanya, kerana banyak mesej dihantar walaupun kereta tidak melakukan apa-apa.
  • Tekan butang stereng dan perhatikan nilainya berubah. Ini boleh menjadi agak rumit kerana banyak mesej dihantar dan mungkin sukar untuk mengetahui yang mana.

Berikut adalah dua artikel hebat yang menerangkan prosesnya secara mendalam:

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

Pada akhirnya anda harus mempunyai ID subsistem yang akan kita gunakan untuk mendengarkan hanya pesan bas roda kemudi CAN, dan senarai nilai heksadesimal untuk perintah utama. Dalam kes saya, data kelihatan seperti ini:

ID | ID Hex | Byte 0 | Byte 1 | Butang

--------------------------------------------- 964 | 3C4 | 00 | 00 | Tiada butang 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 | Menang 964 | 3C4 | 00 | 02 | Naik 964 | 3C4 | 00 | 01 | Turun 964 | 3C4 | 00 | 04 | okey

ID subsistem adalah 3C4 (dalam kes ini), yang merupakan nombor heksadesimal jadi kita harus menulisnya seperti 0x3C4 dalam lakaran Arduino. Kami juga berminat dengan bait 0 dan 1 (sekiranya anda mungkin lebih banyak bait). Ini juga merupakan nilai heksadesimal, jadi ia juga harus ditulis dengan 0x terdahulu.

Sekiranya anda menukar nilai menjadi binari, anda akan melihat bahawa bit tidak bertindih (contohnya + 0b10000000 dan - 0b01000000) sehingga banyak kekunci dapat ditekan pada masa yang sama.

Saya cadangkan membina sniffer dengan bahan yang disenaraikan di bahagian "test helper", supaya anda dapat menggunakannya semula nanti untuk mensimulasikan kereta anda. Ini akan menjimatkan anda daripada duduk di dalam kereta anda sepanjang masa semasa anda membina dan menguji penyesuai. Anda boleh menggunakan lakaran yang disediakan untuk bertindak sebagai simulator. Ubah suai "subsistemId", "data0", dan "data1" dengan nilai yang anda perolehi.

Langkah 2: Menghantar Perintah ke Stereo

Menghantar Perintah ke Stereo
Menghantar Perintah ke Stereo

Sebelum mula membina penyesuai, lebih baik anda menguji terlebih dahulu jika stereo dapat menerima arahan.

Saya mempunyai bateri kereta ganti, jadi saya menyambungkan stereo terus ke dalamnya. Sekiranya anda mempunyai sumber kuasa tertinggi 12V, lebih baik lagi. Sayangnya saya tidak dapat mencari banyak maklumat dalam talian mengenai input Key1 pada unit saya, jadi saya menggunakan percubaan. Saya tidak terlalu risau membakar stereo pada ketika ini, kerana ia agak murah, dan ini merupakan usaha terakhir saya untuk membuatnya berfungsi dengan kereta saya.

Stereo mempunyai skrin pembelajaran arahan, di mana mungkin untuk memilih salah satu dari dua nilai rintangan (1K dan 3.3K) dan untuk melihat nilai "voltan" (0-255). "Voltage" dipetik kerana menyesatkan. Saya menghabiskan banyak masa menggunakan voltan yang berbeza pada Key1 tanpa keberuntungan. Saya juga mencuba menggunakan perintang yang berbeza untuk menerapkan voltan tanpa keberuntungan.

Terobosan itu berlaku ketika saya cuba menyentuh wayar Key1 ke dasar bateri, yang mengakibatkan "voltan" jatuh ke 0. Ini dalam kombinasi dengan perintang yang berbeza akan menghasilkan nilai "voltan" yang konsisten pada skrin pembelajaran.

Sekarang saya tahu cara menghantar input ke stereo, saya memerlukan cara untuk menghantarnya dari Arduino. Pada ketika ini saya belum pernah mendengar mengenai multiplexer, yang bersama dengan beberapa perintang, mungkin merupakan penyelesaian yang lebih pantas dan lebih dipercayai (saya masih tidak pasti apakah ini dapat dilaksanakan), jadi saya menggunakan potensiometer digital. Pada mulanya saya menghadapi masalah agar periuk digital berfungsi, sehingga saya tahu bahawa saya perlu memasangnya sebagai rheostat untuk bertindak sebagai perintang berubah dan bukannya pembahagi voltan. Pada asasnya saya terpaksa menyambungkan terminal RH dan RW.

Selain perlawanan, masa sangat penting. Sekiranya penurunan rintangan terlalu pendek, perintah tidak akan didaftarkan. Sekiranya terlalu lama ia mungkin didaftarkan berkali-kali. Penurunan 240ms, diikuti dengan kelewatan 240ms sehingga arahan seterusnya berfungsi dengan baik untuk stereo saya. Walaupun sepertinya sangat sedikit waktu, ini berarti kita dapat mengirim maksimum 2 perintah per detik, yang dapat dilihat jika anda berusaha menaikkan atau menurunkan volume dengan cepat. Saya cuba bermain-main dengan masa dan corak yang berbeza, yang meningkatkan kelajuan tetapi tidak begitu dipercayai. Sekiranya anda mempunyai idea mengenai cara memperbaikinya, sila tinggalkan di komen.

Sebelum meneruskan lebih jauh, saya cadangkan membina prototaip untuk memeriksa apakah stereo anda menerima input yang sama. Walaupun menerima voltan berbeza, penyesuai harus berfungsi dengan sedikit perubahan pada pendawaian dan lakaran Arduino.

Langkah 3: Membangun Penyesuai

Membangun Penyesuai
Membangun Penyesuai
Membina Penyesuai
Membina Penyesuai
Membangun Penyesuai
Membangun Penyesuai

Setelah menguji semua komponen secara berasingan, dan mencubanya bersama di papan roti, inilah masanya untuk memberi mereka rumah yang lebih kekal. Ini memerlukan beberapa jam untuk meletakkan komponen dan pematerian.

Di kiri atas adalah pengatur langkah ke bawah, yang mengubah 12V dari bateri kereta, menjadi 5V yang dapat digunakan oleh komponen lain.

Di kiri bawah adalah modul bas CAN, yang membaca nilai dari rangkaian bas CAN kereta dan meneruskannya ke Arduino.

Di kanan atas terdapat potensiometer digital (berwayar sebagai rheostat) yang bertindak sebagai perintang berubah antara tanah dan input Key1 stereo.

Di kanan bawah adalah Arduino, yang bertindak sebagai otak penyesuai, mengubah pesanan bas CAN menjadi resistensi yang dibaca oleh stereo.

Pada input 12V terdapat sekering 150mA, yang kemungkinan besar tidak akan melindungi litar, tetapi ada untuk mengelakkan kebakaran sekiranya berlaku sesak.

Langkah 4: Perisian

Perisian
Perisian

Selepas memuat turun, masukkan ketiga-tiga fail.ino dalam satu folder. Dengan cara itu semua akan menjadi bahagian lakaran yang sama dan dikerahkan ke Arudino bersama.

Anda juga perlu menambahkan perpustakaan yang diperlukan ke Arduino IDE. Untuk melakukan ini, muat turun fail berikut:

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

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

kemudian tambahkan keduanya dengan pergi ke Sketch> Include Library> Add. Zip Library…

CanBusStereoAdapter.ino

Penyediaan asas dilakukan dalam fail ini.

Nilai-nilai bas perintah CAN boleh ditentukan di bahagian atas. Kecuali anda mempunyai kereta yang sama dengan saya, kemungkinan besar anda harus memasukkan nilai anda sendiri. Anda boleh menggunakan nilai heksadesimal dari sniffer, saya menggunakan binari sehingga lebih mudah untuk melihat bahawa tidak ada pertindihan yang tidak sengaja pada bit.

Semua kereta tidak memiliki perintah roda kemudi yang sama, jadi jangan ragu untuk menghapus, menambah, atau mengedit nilai yang ditentukan.

Jangan lupa untuk mengganti id subsistem anda di "STEERING_ID".

BolehBus.ino

Fail ini menyediakan pendengar bas CAN, menafsirkan paket, dan memasukkan nilai rintangan ke dalam buffer bulat.

Laraskan konfigurasi bas CAN dalam fungsi "setupCanBus" agar sesuai dengan kereta anda.

Kami menggunakan buffer bulat kerana, seperti yang disebutkan sebelumnya, input perintah roda kemudi jauh lebih cepat daripada input stereo. Dengan cara ini, kita tidak akan terlepas sebarang arahan semasa potensiometer digital melakukan tugasnya. Sekiranya kita memasukkan terlalu banyak perintah, yang tertua akan dibuang terlebih dahulu, kerana yang paling penting. Ini juga memungkinkan kita menangani casing ketika banyak butang ditekan, kerana input stereo hanya menerima satu nilai sekaligus.

Sekiranya anda telah mengubah definisi perintah dalam "CanBusStereoAdapter.ino", anda juga perlu memperbaruinya dalam fungsi "handleMessageData". "handleMessageData" memeriksa apakah bingkai data bas CAN yang disediakan mengandungi perintah yang diketahui dengan menggunakan operasi DAN.

Sebagai contoh, jika saya telah menekan >> dan + pada masa yang sama yang akan memberi kita kerangka data dengan nilai 0b10010000. >> (untuk kereta saya) adalah 0b00010000 dalam binari, dan + adalah 0b10000000.

--------------- >> -------------- + ------------- << --- - data0 | 0b10010000 | 0b10010000 | Perintah 0b10010000 | DAN 0b00010000 | DAN 0b10000000 | DAN 0b00001000 hasil | = 0b00010000 | = 0b10000000 | = 0b00000000

Di sini kita dapat melihat bahawa hasil operasi AND akan lebih besar daripada 0 jika perintah itu ada dalam kerangka data. Jadi yang harus kita lakukan ialah memeriksa {data frame} & {command value}> 0, untuk setiap perintah yang kita tentukan.

Perlu diingat bahawa setiap bingkai data mengandungi perintah yang berbeza, jadi tidak apa-apa jika nilai perintahnya sama, kerana kami memeriksanya terhadap bingkai mereka sendiri. Dalam contoh saya kedua << dan ESC kedua-duanya mempunyai nilai yang sama 0b00001000 (0x08), tetapi << ada dalam data0 dan ESC dalam data1.

Setelah kami menentukan bahawa perintah ada dalam bingkai kami menambahkan nilai pot digital ke buffer bulat. Nilainya berkisar antara 0 hingga 99, tetapi saya perhatikan bahawa "voltan" yang dibaca oleh stereo tidak linear sehingga menguji nilai untuk diri sendiri.

DigitalPot.ino

Fail ini mengeluarkan nilai dari buffer bulat dan mengirimkannya ke periuk digital untuk dilaksanakan. Dalam kes saya "pot.setPotMin (false);" akan meningkatkan rintangan ke maksimum, yang akan dibaca oleh stereo sebagai "voltan" maksimum. Stereo anda mungkin memerlukan anda menetapkan pot digital ke minimum, jadi cobalah.

Langkah 5: Penutup Projek

Kandang Projek
Kandang Projek

Saya mempunyai pencetak 3D jadi saya memutuskan untuk mencetak penutup dua bahagian untuk penyesuai saya. Saya telah memasukkan fail Fusion 360 yang boleh anda edit, dan fail gcode yang akan sesuai dengan papan wangi 60x80mm.

Sekiranya anda tidak mempunyai akses ke pencetak 3D, anda boleh menggunakan kandang projek siap pakai atau bekas yang kukuh.

Langkah 6: Pemikiran Akhir

Pada mulanya saya merancang agar penyesuai dihubungkan dengan kuasa berterusan dan bangun pada mesej bas CAN tertentu, kerana kereta saya tidak mempunyai wayar pencucuhan di ruang stereo. Saya kemudian memutuskan untuk menolaknya kerana saya tidak mahu mengambil risiko menghabiskan bateri dan bimbang tentang penyesuai semasa saya jauh dari kereta. Saya menggunakan pemisah kotak fius kereta untuk menjalankan wayar pencucuhan dan tidak perlu menyusahkan penyesuai lebih jauh.

Dari ujian saya, penggunaan kuasa adalah 20-30 mA. Saya mendapatkannya hingga 10 mA dalam mod tidur, dan boleh turun lebih rendah dengan mengeluarkan LED dari komponen, tetapi saya memutuskan untuk tidak mengganggu dengannya kerana ia hanya akan berjalan semasa kereta sedang berjalan.

Saya cukup gembira dengan hasil akhirnya. Masa tindak balas adalah wajar, dan jarang melewatkan arahan.

Walaupun pelaburan masa saya jauh lebih besar daripada kos penyesuai yang tersedia secara komersial (yang tidak berfungsi), pengetahuan yang saya perolehi sangat berharga.

Disyorkan: