Daftar Isi:

I2C InfraRed Remote Control Dengan Arduino: 8 Langkah (dengan Gambar)
I2C InfraRed Remote Control Dengan Arduino: 8 Langkah (dengan Gambar)

Video: I2C InfraRed Remote Control Dengan Arduino: 8 Langkah (dengan Gambar)

Video: I2C InfraRed Remote Control Dengan Arduino: 8 Langkah (dengan Gambar)
Video: BELAJAR 29 PEMROGRAMAN ARDUINO - Infrared remote control (IR remote) 2024, November
Anonim
Remote Control Inframerah I2C Dengan Arduino
Remote Control Inframerah I2C Dengan Arduino
Remote Control Inframerah I2C Dengan Arduino
Remote Control Inframerah I2C Dengan Arduino

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

Tinjauan Singkat Sirkuit
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

Ikhtisar Singkat Perangkat Lunak
Ikhtisar Singkat Perangkat Lunak
Ikhtisar Singkat Perangkat Lunak
Ikhtisar Singkat Perangkat Lunak
Ikhtisar Singkat Perangkat Lunak
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

Isi Paket I2C
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)

Memperoleh Kode Remote Control (ui32Data)
Memperoleh Kode Remote Control (ui32Data)
Memperoleh Kode Remote Control (ui32Data)
Memperoleh Kode Remote Control (ui32Data)
Memperoleh Kode Remote Control (ui32Data)
Memperoleh Kode Remote Control (ui32Data)
Memperoleh Kode Remote Control (ui32Data)
Memperoleh Kode Remote Control (ui32Data)

Ada tiga cara Anda dapat memperoleh kode kunci kendali jarak jauh masing-masing;

  1. Melalui penghitungan bit dengan osiloskop,
  2. Cari di situs web,
  3. 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

Cara Menguji Perangkat Budak I2C Anda
Cara Menguji Perangkat Budak I2C Anda
Cara Menguji Perangkat Budak I2C Anda
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

Kecilkan Desain Anda
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

Kesimpulan
Kesimpulan
Kesimpulan
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: