Daftar Isi:
- Perlengkapan
- Langkah 1: CAN Bus Sniffing
- Langkah 2: Mengirim Perintah ke Stereo
- Langkah 3: Membangun Adaptor
- Langkah 4: Perangkat Lunak
- Langkah 5: Lampiran Proyek
- Langkah 6: Pikiran Terakhir
Video: Tombol Roda Kemudi ke Adaptor Stereo Mobil (CAN Bus -> Key1): 6 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:54
Beberapa hari setelah membeli mobil bekas, saya menemukan bahwa saya tidak dapat memutar musik dari ponsel saya melalui stereo mobil. Yang lebih membuat frustrasi adalah mobil itu memiliki bluetooth, tetapi hanya mengizinkan panggilan suara, bukan musik. Itu juga memiliki port USB Windows Phone, tetapi tidak akan berfungsi dengan iPhone tanpa dongle $ 60.
Setelah mengganti stereo pada mobil saya sebelumnya, tanpa banyak berpikir atau meneliti, saya memesan stereo pengganti $40 dari situs web "murah" yang terkenal. Stereo datang dengan kamera mundur, Car Play dan banyak fitur tambahan, yang tampaknya memiliki nilai yang jauh lebih baik daripada dongle yang lebih mahal yang hanya melakukan satu hal.
Setelah membeli dan mengecat pelat muka baru, dudukan pencetakan 3D, dan banyak pekerjaan ekstra (yang bisa menjadi instruksi dengan sendirinya), saya sampai pada penemuan yang tidak menyenangkan. Perintah tombol roda kemudi dikirim melalui bus CAN, tetapi stereo hanya memiliki input Key1. Tidak menjadi orang yang menyerah di tengah jalan, saya memesan adaptor £ 60, yang ternyata tidak berfungsi. Pada titik ini saya memutuskan untuk membuat adaptor sendiri.
Saya bukan seorang insinyur listrik, saya hanya memiliki pengetahuan elektronik dasar dan ini adalah proyek pembelajaran dan eksplorasi bagi saya. Saran saya adalah untuk terlebih dahulu memeriksa spesifikasi kendaraan Anda dan memesan radio yang kompatibel, tetapi jika Anda sudah terjebak (seperti saya) ikuti instruksi dengan risiko Anda sendiri.
Perlengkapan
Adaptor (sekitar $15)
- Arduino Pro Mini 5V (atau papan yang kompatibel)
- Modul bus MCP2515 CAN
- papan perf 60x80mm
- Potensiometer digital X9C104 100K Ohm (tergantung stereo Anda)
- DC-DC Step down regulator LM2596S 3-40V 3A
- Dudukan sekering kabel + sekering (100-200 Ohm)
- Kotak proyek atau printer 3D untuk mencetaknya
- Jack stereo mobil (pria + wanita)
- Perlengkapan solder, kabel, dll.
Pembantu tes (tidak sepenuhnya diperlukan tetapi akan membuat pengujian lebih mudah)
- Arduino (papan 5V apa pun bisa digunakan)
- Modul bus MCP2515 CAN
- Papan tempat memotong roti + jumper
Langkah 1: CAN Bus Sniffing
Alih-alih memiliki banyak kabel di bagian dalam mobil Anda yang menghubungkan banyak sistem, beberapa kendaraan modern memiliki pasang kabel yang berjalan ke setiap komponen. Informasi dikirim sebagai paket data digital melalui kabel ini, dan semua sistem dapat membaca semua pesan. Ini adalah jaringan bus CAN (mungkin ada beberapa jaringan di mobil Anda, jadi semua info mungkin tidak terlihat).
Apa yang ingin kami lakukan, adalah menghubungkan ke jaringan bus CAN dan "mengendus" lalu lintas data. Dengan cara ini kita bisa “melihat” saat kunci setir ditekan. Setiap paket memiliki ID, yang mewakili subsistem kendaraan yang mengirim paket, dan data yang mewakili status sistem. Dalam hal ini kami mencoba untuk menemukan ID dari subsistem yang mengirimkan pesan kunci roda kemudi, dan representasi data dari setiap kunci.
Jika Anda beruntung, Anda mungkin menemukan nilai untuk mobil Anda di suatu tempat secara online, dan dapat melewati langkah ini.
Proses ini sedikit terlibat dan telah dijelaskan di tempat lain, jadi saya akan meringkasnya:
- Temukan nilai yang benar untuk komunikasi bus CAN pada kendaraan Anda. Untuk mobil saya (Ide Fiat 2009) itu adalah baud rate 50KBPS, dan kecepatan clock 8MHz.
- Hubungkan ke jaringan bus CAN menggunakan modul bus CAN dan Arduino dalam konfigurasi "sniffer".
- Baca nilai bus CAN di laptop Anda menggunakan alat seperti https://github.com/alexandreblin/python-can-monito…. Akan sangat sulit untuk melakukannya tanpanya, karena banyak pesan yang dikirim bahkan ketika mobil tidak melakukan apa-apa.
- Tekan tombol roda kemudi dan perhatikan perubahan nilainya. Ini bisa sedikit rumit karena banyak pesan yang dikirim dan mungkin sulit untuk mengetahui yang mana.
Berikut adalah dua artikel bagus yang menjelaskan prosesnya secara mendalam:
- https://medium.com/@alexandreblin/can-bus-reverse-…
- https://www.instructables.com/id/CAN-Bus-Sniffing-…
Pada akhirnya Anda harus memiliki ID subsistem yang akan kita gunakan untuk mendengarkan hanya pesan bus CAN roda kemudi, dan daftar nilai heksadesimal untuk perintah kunci. Dalam kasus saya, datanya terlihat seperti ini:
ID | ID Hex | Byte 0 | Byte 1 | Tombol
--------------------------------------------- 964 | 3C4 | 00 | 00 | Tidak ada tombol 964 | 3C4 | 04 | 00 | SRC 964 | 3C4 | 10 | 00 | >> 964 | 3C4 | 08 | 00 | <<964 | 3C4 | 00 | 80 | Telepon 964 | 3C4 | 00 | 08 | ESC 964 | 3C4 | 80 | 00 | + 964 | 3C4 | 40 | 00 | - 964 | 3C4 | 00 | 40 | Menangkan 964 | 3C4 | 00 | 02 | Naik 964 | 3C4 | 00 | 01 | Turun 964 | 3C4 | 00 | 04 | oke
ID subsistemnya adalah 3C4 (dalam hal ini), yang merupakan bilangan heksadesimal jadi kita harus menulisnya seperti 0x3C4 di sketsa Arduino. Kami juga tertarik dengan byte 0 dan 1 (dalam kasus Anda mungkin ada lebih banyak byte). Ini juga merupakan nilai heksadesimal, jadi mereka juga harus ditulis dengan awalan 0x.
Jika Anda mengonversi nilai ke biner, Anda akan melihat bahwa bit tidak tumpang tindih (misalnya + 0b10000000 dan - 0b01000000) sehingga beberapa tombol dapat ditekan secara bersamaan.
Saya sarankan untuk membuat sniffer dengan bahan yang tercantum di bagian "test helper", sehingga Anda dapat menggunakannya kembali nanti untuk mensimulasikan mobil Anda. Ini akan menyelamatkan Anda dari keharusan duduk di mobil Anda sepanjang waktu saat Anda sedang membangun dan menguji adaptor. Anda dapat menggunakan sketsa yang disediakan untuk bertindak sebagai simulator. Ubah "subsystemId", "data0", dan "data1" dengan nilai yang Anda hirup.
Langkah 2: Mengirim Perintah ke Stereo
Sebelum mulai membuat adaptor, yang terbaik adalah menguji terlebih dahulu apakah stereo dapat menerima perintah.
Saya memiliki baterai mobil cadangan, jadi saya menghubungkan stereo langsung ke sana. Jika Anda memiliki sumber daya atas bangku 12V, lebih baik lagi. Sayangnya saya tidak dapat menemukan banyak info online tentang input Key1 pada unit saya, jadi saya melakukan eksperimen. Saya tidak terlalu khawatir tentang membakar stereo pada saat ini, karena relatif murah, dan ini adalah upaya terakhir saya untuk membuatnya bekerja dengan mobil saya.
Stereo memiliki layar pembelajaran perintah, di mana dimungkinkan untuk memilih salah satu dari dua nilai resistansi (1K dan 3.3K) dan untuk melihat nilai "tegangan" (0-255). "Tegangan" dikutip karena menyesatkan. Saya menghabiskan banyak waktu menerapkan voltase berbeda ke Key1 tanpa hasil. Saya juga mencoba menggunakan resistor yang berbeda untuk menerapkan tegangan tanpa hasil.
Terobosan datang ketika saya mencoba menyentuh kabel Key1 ke ground baterai, yang mengakibatkan "tegangan" turun ke 0. Kombinasi ini dengan resistor yang berbeda akan menghasilkan nilai "tegangan" yang konsisten pada layar pembelajaran.
Sekarang saya tahu cara mengirim input ke stereo, saya membutuhkan cara untuk mengirimnya dari Arduino. Pada titik ini saya belum pernah mendengar tentang multiplexer, yang bersama dengan beberapa resistor, mungkin merupakan solusi yang lebih cepat dan lebih andal (saya masih tidak yakin apakah ini layak), jadi saya menggunakan potensiometer digital. Pada awalnya saya mengalami masalah dalam membuat panci digital berfungsi, sampai saya menemukan bahwa saya perlu memasangnya sebagai rheostat untuk bertindak sebagai resistor variabel alih-alih pembagi tegangan. Pada dasarnya saya harus menghubungkan terminal RH dan RW.
Selain perlawanan, waktu sangat penting. Jika penurunan resistensi terlalu pendek, perintah tidak akan didaftarkan. Jika terlalu lama mungkin akan didaftarkan beberapa kali. Penurunan 240ms, diikuti oleh penundaan 240ms hingga perintah berikutnya bekerja cukup andal untuk stereo saya. Meskipun itu tampak seperti waktu yang sangat sedikit, itu berarti bahwa kami dapat mengirim maksimal 2 perintah per detik, yang terlihat jika Anda mencoba untuk menaikkan atau menurunkan volume dengan cepat. Saya mencoba bermain-main dengan pengaturan waktu dan pola yang berbeda, yang memang meningkatkan kecepatan tetapi tidak terlalu dapat diandalkan. Jika Anda memiliki ide tentang cara meningkatkan ini, silakan tinggalkan di komentar.
Sebelum melanjutkan lebih jauh, saya sarankan untuk membuat prototipe untuk memeriksa apakah stereo Anda menerima jenis input yang sama. Bahkan jika menerima tegangan yang berbeda, adaptor harus bekerja dengan sedikit perubahan pada kabel dan sketsa Arduino.
Langkah 3: Membangun Adaptor
Setelah menguji semua komponen secara terpisah, dan mencobanya bersama di papan tempat memotong roti, inilah saatnya untuk memberi mereka rumah yang lebih permanen. Ini membutuhkan beberapa jam untuk meletakkan komponen dan menyolder.
Di kiri atas adalah regulator step down, yang mengubah 12V dari aki mobil, menjadi 5V yang dapat digunakan oleh komponen lain.
Di kiri bawah adalah modul bus CAN, yang membaca nilai dari jaringan bus CAN mobil dan meneruskannya ke Arduino.
Di kanan atas adalah potensiometer digital (dikabelkan sebagai rheostat) yang bertindak sebagai resistor variabel antara ground dan input Key1 stereo.
Di kanan bawah adalah Arduino, yang bertindak sebagai otak adaptor, mengubah pesan bus CAN menjadi resistansi yang dibaca oleh stereo.
Pada input 12V terdapat sekering 150mA, yang kemungkinan besar tidak akan melindungi sirkuit, tetapi berfungsi untuk mencegah kebakaran jika terjadi korsleting.
Langkah 4: Perangkat Lunak
Setelah mengunduh, letakkan ketiga file.ino dalam satu folder. Dengan cara itu semua akan menjadi bagian dari sketsa yang sama dan dikerahkan ke Arudino bersama-sama.
Anda juga perlu menambahkan perpustakaan yang diperlukan ke Arduino IDE. Untuk melakukannya, unduh file berikut:
github.com/autowp/arduino-mcp2515/archive/…
github.com/philbowles/Arduino-X9C/archive/…
lalu tambahkan keduanya dengan masuk ke Sketch > Include Library > Add. Zip Library…
CanBusStereoAdapter.ino
Pengaturan dasar dilakukan dalam file ini.
Perintah kunci Nilai bus CAN didefinisikan di atas. Kecuali Anda memiliki mobil yang sama dengan saya, kemungkinan besar Anda harus memasukkan nilai Anda sendiri. Anda dapat menggunakan nilai heksadesimal dari sniffer, saya menggunakan biner sehingga lebih mudah untuk melihat bahwa tidak ada tumpang tindih yang tidak disengaja dalam bit.
Semua mobil tidak memiliki perintah roda kemudi yang sama, jadi silakan hapus, tambahkan, atau edit nilai yang ditentukan.
Jangan lupa untuk mengganti id subsistem Anda di "STEERING_ID".
CanBus.ino
File ini mengatur pendengar bus CAN, menafsirkan paket, dan menempatkan nilai resistansi ke dalam buffer melingkar.
Sesuaikan konfigurasi bus CAN di fungsi "setupCanBus" agar sesuai dengan mobil Anda.
Kami menggunakan buffer melingkar karena, seperti yang disebutkan sebelumnya, input perintah roda kemudi jauh lebih cepat daripada input stereo. Dengan cara ini kami tidak melewatkan perintah apa pun saat potensiometer digital melakukan tugasnya. Jika kita memasukkan terlalu banyak perintah, yang tertua akan dibuang terlebih dahulu, karena itu yang paling tidak penting. Ini juga memungkinkan kita untuk menangani kasus ketika beberapa tombol ditekan, karena input stereo hanya menerima satu nilai pada satu waktu.
Jika Anda telah mengubah salah satu definisi perintah di "CanBusStereoAdapter.ino", Anda juga harus memperbaruinya di fungsi "handleMessageData". "handleMessageData" memeriksa apakah frame data bus CAN yang disediakan berisi perintah yang diketahui dengan menggunakan operasi AND bitwise.
Misalnya, jika saya menekan >> dan + secara bersamaan yang akan memberi kita bingkai data dengan nilai 0b10010000. >> (untuk mobil saya) adalah 0b00010000 dalam biner, dan + adalah 0b10000000.
--------------- >> -------------- + ------------- << --- -- data0 | 0b10010000 | 0b10010000 | 0b10010000 perintah | DAN 0b00010000 | DAN 0b10000000 | DAN 0b00001000 hasil | = 0b00010000 | = 0b10000000 | = 0b00000000
Di sini kita dapat melihat bahwa hasil dari operasi AND akan lebih besar dari 0 jika perintah tersebut ada dalam bingkai data. Jadi yang harus kita lakukan adalah memeriksa {data frame} & {nilai perintah} > 0, untuk setiap perintah yang kita definisikan.
Ingatlah bahwa setiap bingkai data berisi perintah yang berbeda, jadi boleh saja jika nilai perintahnya sama, karena kami memeriksanya dengan bingkainya sendiri. Dalam contoh saya << dan ESC keduanya memiliki nilai yang sama 0b00001000 (0x08), tetapi << ada di data0 dan ESC di data1.
Setelah kami menentukan bahwa ada perintah dalam bingkai, kami menambahkan nilai pot digital ke buffer melingkar. Nilainya berkisar dari 0 hingga 99, tetapi saya perhatikan bahwa "tegangan" yang dibaca oleh stereo tidak linier, jadi uji sendiri nilainya.
DigitalPot.ino
File ini mengeluarkan nilai dari buffer melingkar dan mengirimkannya ke pot digital untuk dieksekusi. Dalam kasus saya "pot.setPotMin(false);" akan meningkatkan resistansi hingga maksimum, yang akan dibaca stereo sebagai "tegangan" maksimum. Stereo Anda mungkin mengharuskan Anda mengatur pot digital ke minimum, jadi ujilah.
Langkah 5: Lampiran Proyek
Saya memiliki printer 3D jadi saya memutuskan untuk mencetak dua bagian penutup untuk adaptor saya. Saya telah menyertakan file Fusion 360 yang dapat Anda edit, dan file gcode yang sesuai dengan perfboard 60x80mm.
Jika Anda tidak memiliki akses ke printer 3D, Anda dapat menggunakan enklosur proyek yang sudah jadi atau wadah yang kokoh.
Langkah 6: Pikiran Terakhir
Saya awalnya merencanakan adaptor yang terhubung ke daya konstan dan bangun pada pesan bus CAN tertentu, karena mobil saya tidak memiliki kabel pengapian di kompartemen stereo. Saya kemudian memutuskan untuk tidak melakukannya karena saya tidak ingin mengambil risiko menguras baterai dan mengkhawatirkan adaptor saat saya jauh dari mobil. Saya menggunakan splitter kotak sekering mobil untuk menjalankan kabel pengapian dan tidak perlu memperumit adaptor lebih jauh.
Dari pengujian saya konsumsi daya adalah 20-30 mA. Saya menurunkannya ke 10 mA dalam mode tidur, dan bisa lebih rendah lagi dengan melepas LED dari komponen, tetapi saya memutuskan untuk tidak repot dengan itu karena hanya akan berjalan saat mobil berjalan.
Saya cukup senang dengan hasil akhirnya. Waktu respons masuk akal, dan jarang melewatkan perintah.
Meskipun investasi waktu saya jauh lebih besar daripada biaya adaptor yang tersedia secara komersial (yang tidak berfungsi), pengetahuan yang saya peroleh sangat berharga.
Direkomendasikan:
BBC Micro: bit and Scratch - Roda Kemudi Interaktif & Game Mengemudi: 5 Langkah (dengan Gambar)
BBC Micro:bit and Scratch - Interactive Steering Wheel & Driving Game: Salah satu tugas kelas saya minggu ini adalah menggunakan BBC Micro:bit untuk berinteraksi dengan program Scratch yang telah kami tulis. Saya pikir ini adalah kesempatan sempurna untuk menggunakan ThreadBoard saya untuk membuat sistem tertanam! Inspirasi saya untuk goresan p
Roda Kemudi Kustom (pot Sebagai Sensor Posisi): 10 Langkah
Roda Kemudi Kustom (pot Sebagai Sensor Posisi): penafian: jangan salahkan saya karena tidak menunjukkan langkah demi langkah ini hanya seharusnya menjadi referensi dan saya hanya mengatakan apa yang saya lakukan dan hasilnya, ia memiliki beberapa kekurangan inti seperti kebisingan jadi jangan lakukan persis seperti yang saya lakukan dan mengharapkan hasil yang luar biasa, dan f
RC FPV-Trike Dengan Roda Kemudi Belakang: 9 Langkah (dengan Gambar)
RC FPV-Trike Dengan Roda Kemudi Belakang: Karena saya memiliki beberapa suku cadang dari Rover FPV pertama saya, saya memutuskan untuk membuat mobil RC. Tapi seharusnya tidak hanya mobil RC standar. Oleh karena itu saya merancang sepeda roda tiga dengan roda kemudi belakang. Ikuti saya di Instagram untuk berita terbaruhttps://www.instagram.com
Roda Kemudi USB Karton Termudah: 6 Langkah (dengan Gambar)
Roda Kemudi USB Karton Termudah: Karena karantina dan kami terjebak di rumah, kami cenderung memainkan banyak video game. Game balap adalah salah satu game terbaik yang pernah ada, tetapi menggunakan keyboard menjadi membosankan dan jauh lebih sulit digunakan daripada pengontrol Xbox atau PS Anda. Inilah mengapa saya memutuskan untuk m
Arduino Kustom untuk Menjaga Tombol Roda Kemudi CAN Dengan Stereo Mobil Baru: 9 Langkah (dengan Gambar)
Arduino Kustom untuk Menjaga Tombol Roda Kemudi CAN Dengan Stereo Mobil Baru: Saya memutuskan untuk mengganti stereo mobil asli di Volvo V70 -02 saya dengan stereo baru sehingga saya dapat menikmati hal-hal seperti mp3, bluetooth, dan handsfree. Mobil saya memiliki beberapa kontrol roda kemudi untuk stereo yang saya ingin tetap dapat digunakan