Daftar Isi:
- Langkah 1: Tinjauan Singkat Sirkuit
- Langkah 2: Ikhtisar Singkat Perangkat Lunak
- Langkah 3: Isi Paket I2C
- Langkah 4: Mendapatkan Kode Remote Control (ui32Data)
- Langkah 5: Cara Menguji Perangkat Budak I2C Anda
- Langkah 6: Kecilkan Desain Anda
- Langkah 7: Kesimpulan
- Langkah 8: Referensi Digunakan
Video: I2C InfraRed Remote Control Dengan Arduino: 8 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:58
Pembukaan Instruksi ini merinci cara membuat pengontrol jarak jauh universal menggunakan I2C untuk antarmuka.
Betapa anehnya katamu, menggunakan perangkat budak I2C?
Ya, perangkat budak I2C.
Ini karena waktu yang akurat dari paket IR cukup menuntut dan salah satu Arduino khas akan berjuang dengan jika sudah melakukan banyak tugas lain pada waktu yang sama. Lebih baik mendistribusikan beban komputasi dengan menetapkan aktivitas intensif waktu ke prosesor khusus bila memungkinkan (lebih baik lagi melakukannya di perangkat keras). Mengingat I2C adalah metode komunikasi antar IC yang terdokumentasi dengan baik dan kuat, saya memilih ini sebagai antarmuka.
pengantar
Seperti disebutkan di atas, instruksi ini menjelaskan cara mengontrol peralatan rumah tangga seperti TV, pemutar DVD, dan Satelit, dll., menggunakan perpustakaan IRremote di Arduino.
Ini diakhiri dengan contoh desain yang mengubah Arduino menjadi modul remote control slave I2C (gambar 1 di atas) dengan rangkaian uji prototipe (gambar 2 di atas) dan berlanjut ke detail cara mengecilkan desain Anda hingga komponen minimum yang diperlukan sehingga dapat dimasukkan ke dalam desain lain. Dalam kasus saya, saya menggunakan perangkat tertanam ini di perangkat remote control IoT Universal yang berbasis di sekitar ESP8266-12E.
Bagian apa yang saya butuhkan?
Untuk membangun sirkuit yang digambarkan pada Langkah 1 (Pemancar IR), Anda memerlukan bagian-bagian berikut;
- 2 dari resistor 10K
- 1 dari 390R resistor
- 1 dari 33R resistor
- 1 dari resistor 3K8
- 1 dari LED Merah
- 1 dari IR Led TSAL6400
- 1 dari Transistor BC337
- 1 off 220uF kapasitor
- 1 dari Arduino Uno
Untuk membangun sirkuit yang digambarkan pada Langkah 4 (Penerima IR), Anda memerlukan bagian-bagian berikut;
- 1 dari 10K resistor
- 1 diskon TSOP38328
- 1 off 220uF kapasitor
- 1 dari Arduino Uno
Untuk membangun sirkuit yang digambarkan pada Langkah 5 (sirkuit uji Slave), Anda memerlukan bagian-bagian berikut;
- 4 dari 10K resistor
- 2 dari 390R resistor
- 1 dari 33R resistor
- 1 dari resistor 3K8
- 2 mati LED Merah
- 1 dari IR Led TSAL6400
- 1 dari Transistor BC337
- 1 off 220uF kapasitor
- 2 off Tombol SPST
- 2 dari Arduino Unos
Untuk membangun sirkuit yang digambarkan pada Langkah 6 (Desain menyusut), Anda memerlukan bagian-bagian berikut;
- 3 dari 10K resistor
- 1 dari 270R resistor
- 1 dari resistor 15R
- 4 dari resistor 1K
- 1 dari LED Merah
- 1 dari IR Led TSAL6400 atau TSAL5300
- 1 dari Transistor BC337
- 1 off 220uF kapasitor elektrolit @ 6.3v
- 1 off 1000uF kapasitor elektrolit @ 6.3v
- 2 off 0.1uF kapasitor
- 2 off kapasitor 22pF
- 1 dari 16MHz Xtal
- Diskon 1 ATMega328P-PU
Catatan: Anda juga memerlukan perangkat FTDI untuk memprogram ATMega328P
Keterampilan apa yang saya butuhkan?
- Menguasai elektronik minimal,
- Pengetahuan tentang Arduino dan IDE-nya,
- Sedikit kesabaran,
- Beberapa pemahaman tentang I2C akan berguna (lihat di sini untuk beberapa detail I2C/Wire Library umum).
Topik yang dibahas
- Sekilas tentang sirkuit,
- Ikhtisar singkat dari perangkat lunak,
- Isi Paket I2C,
- Mendapatkan kode kendali jarak jauh (ui32Data),
- Cara menguji perangkat Slave I2C Anda,
- Mengecilkan desain Anda,
- Kesimpulan,
- Referensi yang digunakan.
Penafian
Seperti biasa, Anda menggunakan instruksi ini dengan risiko Anda sendiri dan instruksi tersebut tidak didukung.
Langkah 1: Tinjauan Singkat Sirkuit
Tujuan dari rangkaian ini adalah untuk mengirimkan kode remote control IR. Desainnya cukup lurus ke depan dan cukup sederhana.
Ketika transistor Q1 a BC337 NPN dihidupkan melalui logika satu dari Arduino PWM O/P D3 ke Resistor R5, arus melewati Led 1 dan 2. Hanya dibatasi oleh resistor ballast R3 dan R4 masing-masing. Q1 digunakan untuk meningkatkan arus yang melewati Dioda IR (JIKA Max = 100mA) hingga melebihi apa yang mampu dipasok oleh O/P Arduino ~40mA @ +5v.
Kapasitor C1 a 220uF Electrolytic menyediakan beberapa stabilisasi yang mencegah penurunan rel suplai oleh daya yang ditarik oleh Led 1 dan 2.
Resistor R1 dan R2 adalah pull up I2C.
Langkah 2: Ikhtisar Singkat Perangkat Lunak
Pembukaan
Agar berhasil mengkompilasi kode sumber ini, Anda memerlukan perpustakaan tambahan berikut;
IRremote.h
- Oleh: z3t0
- Tujuan: Perpustakaan jarak jauh inframerah untuk Arduino: mengirim dan menerima sinyal inframerah dengan banyak protokol
- Dari:
Ikhtisar Kode
Seperti yang ditunjukkan pada gambar 1 di atas, saat memulai kode mengonfigurasi I/O mikrokontroler, lalu melakukan polling status flag perangkat lunak internal 'bFreshDataFlag'. Ketika bendera ini disetel, pengontrol menegaskan bahwa itu adalah jalur 'Sibuk' (mengirim data pin D4 rendah) dan berpindah ke status 'eBUSY' secara berurutan membaca tombol tekan perintah yang ditahan di uDataArray dan mengirim data termodulasi IR ke LED IR dalam a urutan transmisi.
Setelah data yang disimpan di uDataArray telah terkirim sepenuhnya, status 'eIDLE' dilanjutkan dan baris 'Sibuk' dihapus (mengirim data pin D4 high). Perangkat sekarang siap untuk menerima lebih banyak penekanan tombol yang menandai akhir dari urutan transmisi.
Penerimaan data tekan tombol IR
Ketika data dikirim ke pengontrol jarak jauh InfraRed melalui I2C, itu memicu interupsi dan panggilan fungsi receiverEvent() dipicu secara asinkron.
Setelah dipicu, data I2C yang diterima ditulis secara berurutan ke dalam buffer 'uDataArray'.
Selama penerimaan data, jika akhir urutan ditandai oleh master (bFreshData!=0x00), 'bFreshDataFlag' diatur, sehingga menandakan awal dari urutan transmisi.
Gambar 2…3 memberikan contoh urutan paket yang khas.
Catatan: Kode sumber lengkap tersedia di sini
Langkah 3: Isi Paket I2C
Format paket kontrol yang dikirim ke slave over I2C diberikan di atas pada gambar 1 arti masing-masing bidang diberikan di bawah ini
Arti dari bidang paket kontrol
byte bEncoding;
-
Pengkodean kendali jarak jauh IR,
- RC6 (Langit) = 0,
- SONY = 1,
- SAMSUNG = 2,
- NEC = 3,
- LG = 4
uint32_t ui32Data;
Representasi hex dari aliran data IR biner 4 Byte data (unsigned long), LSByte … MSByte
byte bNumberOfBitsInTheData;
Jumlah Bit dalam data (Maks 32). Rentang = 1 … 32
byte bPulseTrainRepeats;
Berapa ulangan dari rangkaian pulsa ini. Rentang = 1 … 255. Biasanya 2…4 pengulangan. Anda mungkin ingin memperluas ini untuk perintah Nyala/Mati karena perangkat penerima terkadang memerlukan beberapa pengulangan rangkaian pulsa tambahan untuk menerima sinyal pengaktifan
byte bDelayAntaraPulseTrainRepeats;
Keterlambatan antara pengulangan kereta pulsa ini. Rentang = 1 … 255mS. Biasanya 22mS … 124mS
byte bButtonRepeats;
Mensimulasikan penekanan berulang dari tombol yang sama (tetapi tidak mendukung kode yang dimodifikasi seperti remote Apple, itu hanya mengulangi kode tombol). Rentang = 1 … 256. Default = 1
uint16_t ui16PenundaanAntaraButtonBerulang;
Penundaan antara pengulangan tombol (unsigned int). 2 byte total LSByte … MSByte. Rentang = 1 … 65535mS. Standar = 0mS
byte bFreshData;
-
Data baru. Nilai bukan nol. Ditulis terakhir, memicu urutan IR TX. Rentang 0x00…0xFF
- Lebih banyak paket kontrol yang akan datang = 0
- Ini adalah paket kontrol terakhir = Nilai Non-Nol 1, 2, … 255
Perhatikan penggunaan direktif compiler '_packed_'. Ini untuk memastikan data adalah paket byte demi byte dalam memori terlepas dari sistem target yang digunakan (Uno, Due, ESP8266 dll.). Ini berarti penyatuan antara registerAllocationType dan dataArrayType hanya membutuhkan clock out/clock in byte berurutan dari paket kontrol, membuat perangkat lunak TX/RX menjadi sederhana.
Langkah 4: Mendapatkan Kode Remote Control (ui32Data)
Ada tiga cara Anda dapat memperoleh kode kunci kendali jarak jauh masing-masing;
- Melalui penghitungan bit dengan osiloskop,
- Cari di situs web,
- Decode langsung dari aliran data dalam perangkat lunak.
Melalui penghitungan bit dengan cakupan
Ini bukan metode yang efisien karena membutuhkan waktu yang cukup lama dan berpotensi membutuhkan lebih dari satu upaya, namun bisa sangat akurat. Hal ini juga berguna dalam memvalidasi kode visual yang diperoleh dengan menggunakan metode 2 dan 3, juga dalam menentukan keanehan dari remote. Misalnya saat menahan tombol pada remote Apple IR. Remote awalnya akan mengeluarkan urutan perintah kemudian mengikutinya dengan urutan terkompresi berulang 0xF….
Cari di situs web
Basis data kode kendali jarak jauh di situs web Kontrol Jarak Jauh Inframerah Linux adalah sumber yang bagus.
Namun kelemahannya, Anda mungkin harus mencoba beberapa kode sampai Anda menemukan yang cocok untuk Anda. Anda mungkin juga harus menafsirkan beberapa representasi kode untuk mengubahnya menjadi bentuk heksadesimal yang setara.
Decode langsung dari aliran data
Menggunakan rangkaian pada gambar 1 di atas dalam hubungannya dengan contoh perpustakaan IRremote 'IRrecvDumpV2.ino' dimungkinkan untuk memecahkan kode aliran data langsung dari jarak jauh. Gambar 2 menunjukkan remote TV Samsung yang telah di-decode untuk menekan tombol on/off di jendela terminal Arduino IDE.
Penerima/Pemancar Gabungan
Gambar 3 dan 4 di atas menggambarkan solusi yang memungkinkan penerimaan dan transmisi perintah IR untuk memudahkan pembuatan prototipe.
Untuk memecahkan kode penekanan tombol remote control IR, Anda perlu mem-flash Arduino dengan contoh 'IRrecvDumpV2.ino' yang disertakan dengan perpustakaan IRremote.
Ia juga bekerja sama baiknya untuk transmisi jika IR memerintahkan. LED merah disertakan sebagai indikasi visual bahwa perangkat sedang beraksi.
Langkah 5: Cara Menguji Perangkat Budak I2C Anda
Dengan menggunakan kode sumber di sini, dan rangkaian yang diuraikan di atas pada gambar 1, program Arduino 'Master' dengan 'IR_Remote_Sim_Test.ino' dan Arduino 'Slave' dengan 'IR_Remote_Sim.ino'.
Dengan asumsi Anda memiliki TV Sony Bravia, kotak Sky HD dan Sony BT SoundBar, tekan tombol 1 dan TV Anda akan beralih ke BBC1 (saluran 101). Tekan tombol 2 dan bilah suara Anda akan dimatikan. Tekan lagi dan itu akan berbunyi.
Selama pelaksanaan urutan transmisi IR, LED3 akan menyala yang menunjukkan bahwa slave sedang sibuk dan LED1 akan berkedip sejalan dengan proses transmisi IR.
Tentu saja jika Anda tidak memiliki sistem hiburan yang sama seperti di atas, Anda dapat memprogram ulang slave dengan 'IRrecvDumpV2.ino', mendekode perintah jarak jauh yang Anda minati, lalu memprogramnya ke dalam 'IR_Remote_Sim_Test.ino' untuk Anda skenario yang diberikan.
Gambar 2 menunjukkan gambaran umum perangkat lunak pengujian tingkat sistem antara Master dan Slave.
Langkah 6: Kecilkan Desain Anda
Oke, jadi dengan asumsi Anda telah mengikuti instruksi ini dengan mengandalkan dua Arduino untuk mengontrol perangkat rumah Anda bukanlah penggunaan stok Arduino Anda yang paling efisien. Akibatnya jika Anda membuat sirkuit yang ditunjukkan pada gambar di atas dan mengikuti instruksi di sini untuk memprogram ATMega328P dengan 'IR_Remote_Sim.ino', Anda akan dapat mengurangi seluruh sistem menjadi komponen minimal. Ini akan memungkinkan Anda untuk menanamkan desain Anda ke dalam beberapa sistem lain.
Langkah 7: Kesimpulan
Solusinya stabil dan berfungsi dengan baik, sudah tertanam di sistem lain selama beberapa minggu sekarang tanpa masalah.
Saya memilih Arduino Uno R3 karena saya menginginkan perangkat yang memiliki RAM yang cukup sehingga saya dapat memiliki buffer tombol dengan kedalaman yang wajar. Saya memilih ukuran buffer 20 paket (MAX_SEQUENCES).
Pelindung Hybrid TX/RX yang saya buat juga sangat berguna saat mendekode remote control Sony dan Sky. Meskipun saya harus mengaku menggunakan ruang lingkup digital saya dari waktu ke waktu untuk memeriksa perintah IR yang didekodekan perangkat lunak sama dengan yang datang dari IR yang diterima (TSOP38328).
Satu-satunya hal yang akan saya lakukan secara berbeda adalah menggunakan rangkaian penggerak arus konstan untuk led IR seperti yang ditunjukkan di atas pada gambar 2.
Satu hal lagi yang perlu diperhatikan adalah, tidak semua pemancar IR dimodulasi dengan 38KHz, TSOP38328 dioptimalkan untuk 38KHz.
Langkah 8: Referensi Digunakan
IRRemote.h
- Oleh: z3t0
- Tujuan: Perpustakaan jarak jauh inframerah untuk Arduino: mengirim dan menerima sinyal inframerah dengan banyak protokol
- Dari:
Perpustakaan jarak jauh IR
- z3t0.github.io/Arduino-IRremote/
- https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
Sensor Penerima IR (Inframerah) - TSOP38238 (setara)
https://cdn-shop.adafruit.com/datasheets/tsop382.pdf
Untuk menghindari padding struktur data ke batas kata
- https://github.com/esp8266/Arduino/issues/1825
- https://github.com/tuanpmt/esp_bridge/blob/master/modules/include/cmd.h#L15
- https://stackoverflow.com/questions/11770451/what-is-the-meaning-of-attribute-packed-aligned4
Sumber detail IR jarak jauh yang bagus
https://www.sbprojects.com/knowledge/ir/index.php
I2C
- https://playground.arduino.cc/Main/WireLibraryDetailedReference
- https://www.arduino.cc/en/Reference/WireSend
Basis Data Jarak Jauh IR
- https://www.lirc.org/
- https://lirc-remotes.sourceforge.net/remotes-table.html
Lembar Data BC337
https://www.onsemi.com/pub/Collateral/BC337-D. PDF
Lembar Data 1N4148
https://www.vishay.com/docs/81857/1n4148.pdf
Direkomendasikan:
ESP8266 - Irigasi Kebun Dengan Timer dan Remote Control Melalui Internet / ESP8266: 7 Langkah (dengan Gambar)
ESP8266 - Irigasi Kebun Dengan Timer dan Remote Control Melalui Internet / ESP8266: ESP8266 - Irigasi dikendalikan dari jarak jauh dan dengan pengaturan waktu untuk kebun sayur, kebun bunga, dan halaman rumput. Ini menggunakan sirkuit ESP-8266 dan katup hidrolik / listrik untuk umpan irigasi.Keuntungan: Biaya rendah (~US$ 30,00) Akses cepat Perintah o
DIY RGB-LED Glow Poi Dengan Remote Control: 14 Langkah (dengan Gambar)
RGB-LED Glow Poi DIY Dengan Remote Control: PendahuluanHalo Semuanya! Ini adalah panduan pertama saya dan (semoga) yang pertama dari serangkaian panduan dalam pencarian saya untuk membuat poi visual RGB-LED open-source. Untuk membuatnya tetap sederhana terlebih dahulu, ini akan menghasilkan led-poi sederhana yang menampilkan kont
IRduino: Remote Control Arduino - Meniru Remote yang Hilang: 6 Langkah
IRduino: Remote Control Arduino - Tiru Remote yang Hilang: Jika Anda pernah kehilangan remote control untuk TV atau pemutar DVD Anda, Anda tahu betapa frustasinya harus berjalan ke, menemukan, dan menggunakan tombol-tombol pada perangkat itu sendiri. Terkadang, tombol ini bahkan tidak menawarkan fungsi yang sama dengan remote. Resi
Kit Remote Control Biasa Diubah Menjadi Remote Control Mainan RC Empat Saluran: 4 Langkah
Kit Remote Control Biasa Diubah Menjadi Remote Control Mainan RC Empat Saluran: 2262和2272芯片和433个模块构建。 kan
Robot Remote Control Menggunakan Arduino dan T.V. Remote: 11 Langkah
Robot Remote Control Menggunakan Arduino dan Remote TV: Mobil remote control ini dapat dipindahkan menggunakan hampir semua jenis remote seperti TV, AC, dll. Ini memanfaatkan fakta bahwa remote memancarkan IR (inframerah). Properti ini digunakan dengan menggunakan penerima IR, yang merupakan sensor yang sangat murah. Di