Isi kandungan:

Alat kawalan jauh InfraRed I2C Dengan Arduino: 8 Langkah (dengan Gambar)
Alat kawalan jauh InfraRed I2C Dengan Arduino: 8 Langkah (dengan Gambar)

Video: Alat kawalan jauh InfraRed I2C Dengan Arduino: 8 Langkah (dengan Gambar)

Video: Alat kawalan jauh InfraRed I2C Dengan Arduino: 8 Langkah (dengan Gambar)
Video: Sensor Ultrasonic HCSR04 Pengukur Jarak - Tutorial Arduino Bahasa Indonesia 2024, November
Anonim
Alat Kawalan Jauh InfraRed I2C Dengan Arduino
Alat Kawalan Jauh InfraRed I2C Dengan Arduino
Alat Kawalan Jauh InfraRed I2C Dengan Arduino
Alat Kawalan Jauh InfraRed I2C Dengan Arduino

PendahuluanIni terperinci cara membuat alat kawalan jauh universal menggunakan I2C untuk antara muka.

Betapa ganjilnya anda dengan menggunakan peranti hamba I2C?

Ya, peranti hamba I2C.

Ini kerana masa tepat paket IR cukup menuntut dan satu Arduino khas akan berjuang jika ia sudah menjalankan banyak tugas lain pada masa yang sama. Adalah lebih baik untuk mengagihkan beban pengkomputeran dengan menetapkan aktiviti intensif waktu untuk pemproses khusus apabila mungkin (lebih baik tetap melakukannya dalam perkakasan). Memandangkan I2C adalah kaedah komunikasi yang didokumentasikan dan kuat antara IC, saya memilih ini sebagai antara muka.

Pengenalan

Seperti yang disebutkan di atas, instruksional ini menerangkan cara mengendalikan peralatan domestik seperti TV, pemain DVD dan Satelit dll menggunakan perpustakaan IRremote di Arduino.

Ini diakhiri dengan contoh reka bentuk menjadikan Arduino menjadi modul kawalan jauh hamba I2C (gambar 1 di atas) dengan litar ujian prototaip (gambar 2 di atas) dan seterusnya memperincikan cara mengecilkan reka bentuk anda ke komponen minimum yang diperlukan sehingga boleh tertanam dalam reka bentuk lain. Dalam kes saya, saya menggunakan peranti ini dalam peranti kawalan jauh IoT Universal yang berpusat pada ESP8266-12E.

Bahagian apa yang saya perlukan?

Untuk membina litar yang digambarkan dalam Langkah 1 (Pemancar IR), anda memerlukan bahagian berikut;

  • 2 dari 10K perintang
  • 1 dari perintang 390R
  • 1 dari perintang 33R
  • 1 perintang 3K8 perintang
  • 1 diskaun LED Merah
  • 1 diskaun IR Led TSAL6400
  • 1 diskaun Transistor BC337
  • 1 dari kapasitor 220uF
  • 1 diskaun Arduino Uno

Untuk membina litar yang digambarkan dalam Langkah 4 (Penerima IR), anda memerlukan bahagian berikut;

  • 1 dari perintang 10K
  • 1 diskaun TSOP38328
  • 1 dari kapasitor 220uF
  • 1 diskaun Arduino Uno

Untuk membina litar yang digambarkan dalam Langkah 5 (Litar ujian hamba) anda memerlukan bahagian berikut;

  • 4 dari 10K perintang
  • 2 dari perintang 390R
  • 1 dari perintang 33R
  • 1 perintang 3K8 perintang
  • 2 off LED Merah
  • 1 diskaun IR Led TSAL6400
  • 1 diskaun Transistor BC337
  • 1 dari kapasitor 220uF
  • 2 butang SPST
  • 2 diskaun Arduino Unos

Untuk membina litar yang digambarkan dalam Langkah 6 (Ringkas reka bentuk) anda memerlukan bahagian berikut;

  • 3 dari perintang 10K
  • 1 dari perintang 270R
  • 1 perintang 15R
  • 4 perintang 1K perintang
  • 1 diskaun LED Merah
  • 1 diskaun IR Led TSAL6400 atau TSAL5300
  • 1 diskaun Transistor BC337
  • 1 diskaun elektrolitik kapasitor 220uF @ 6.3v
  • 1 diskaun elektrolitik kapasitor 1000uF @ 6.3v
  • 2 off kapasitor 0.1uF
  • 2 dari kapasitor 22pF
  • 1 diskaun 16MHz Xtal
  • 1 diskaun ATMega328P-PU

Catatan: Anda juga memerlukan peranti FTDI untuk memprogram ATMega328P

Apakah kemahiran yang saya perlukan?

  • Pengetahuan elektronik yang minimum,
  • Pengetahuan mengenai Arduino dan IDE,
  • Kesabaran sedikit,
  • Beberapa pemahaman mengenai I2C akan berguna (lihat di sini untuk beberapa perincian I2C / Wire Library generik).

Topik yang dibincangkan

  • Gambaran keseluruhan litar ringkas,
  • Gambaran keseluruhan perisian secara ringkas,
  • Kandungan Paket I2C,
  • Memperolehi kod kawalan jauh (ui32Data),
  • Cara menguji peranti Slave I2C anda,
  • Mengecilkan reka bentuk anda,
  • Kesimpulannya,
  • Rujukan yang digunakan.

Penafian

Seperti biasa, anda menggunakan arahan ini dengan risiko anda sendiri dan mereka tidak disokong.

Langkah 1: Gambaran Keseluruhan Litar

Gambaran Ringkas Litar
Gambaran Ringkas Litar

Tujuan litar adalah untuk menghantar kod kawalan jauh IR. Reka bentuknya cukup lurus ke hadapan dan cukup ringkas.

Apabila transistor Q1 a BC337 NPN dihidupkan melalui logik dari Arduino PWM O / P D3 ke Resistor R5, arus melewati Leds 1 dan 2. Dibatasi hanya oleh perintang pemberat masing-masing R3 dan R4. Q1 digunakan untuk meningkatkan arus yang melewati Dioda IR (JIKA Maks = 100mA) ke yang melebihi apa yang mampu dimiliki Arduino O / P ~ 40mA @ + 5v bekalan.

Kapasitor C1 a 220uF Electrolytic memberikan beberapa penstabilan yang menghalang penurunan rel bekalan oleh kuasa yang ditarik oleh Leds 1 dan 2.

Resistor R1 dan R2 adalah pull up I2C.

Langkah 2: Gambaran Ringkas Perisian

Tinjauan Ringkas Perisian
Tinjauan Ringkas Perisian
Tinjauan Ringkas Perisian
Tinjauan Ringkas Perisian
Tinjauan Ringkas Perisian
Tinjauan Ringkas Perisian

Mukadimah

Untuk berjaya menyusun kod sumber ini, anda memerlukan perpustakaan tambahan berikut;

IRremote.h

  • Oleh: z3t0
  • Tujuan: Perpustakaan jarak jauh inframerah untuk Arduino: menghantar dan menerima isyarat inframerah dengan pelbagai protokol
  • Dari:

Gambaran Keseluruhan Kod

Seperti yang ditunjukkan dalam gambar 1 di atas, semasa memulakan kod mengkonfigurasi I / O mikro-pengawal kemudian meninjau status bendera perisian dalaman 'bFreshDataFlag'. Apabila bendera ini diatur, pengawal menegaskan ia adalah garis 'Sibuk' (menghantar pin data D4 rendah) dan bergerak ke keadaan 'eBUSY' secara berurutan membaca butang tekan perintah yang terdapat di uDataArray dan menghantar data termodulasi IR ke LED IR dalam urutan penghantaran.

Setelah data yang disimpan di uDataArray telah dihantar sepenuhnya, keadaan 'eIDLE' disambung semula dan garis 'Sibuk' dinyahtegaskan (menghantar pin data tinggi D4). Peranti kini bersedia menerima lebih banyak penekanan butang yang menandakan berakhirnya urutan penghantaran.

Penerimaan data tekan butang IR

Apabila data dihantar ke alat kawalan jauh InfraRed melalui I2C ia memicu gangguan dan panggilan fungsi ReceiveEvent () dipicu secara tidak segerak.

Setelah dicetuskan data I2C yang diterima ditulis secara berurutan ke dalam buffer 'uDataArray '.

Semasa penerimaan data, jika akhir urutan ditandakan oleh induk (bFreshData! = 0x00) 'bFreshDataFlag' ditetapkan, sehingga menandakan permulaan urutan penghantaran.

Gambar 2… 3 memberikan contoh urutan paket khas.

Nota: Kod sumber penuh terdapat di sini

Langkah 3: Kandungan Paket I2C

Kandungan Paket I2C
Kandungan Paket I2C

Format paket kawalan yang dihantar kepada hamba melalui I2C diberikan di atas dalam gambar 1 makna setiap bidang diberikan di bawah

Makna bidang paket kawalan

bait bEncoding;

  • Pengekodan kawalan jauh IR,

    • RC6 (Langit) = 0,
    • SONY = 1,
    • SAMSUNG = 2,
    • NEC = 3,
    • LG = 4

uint32_t ui32Data;

Perwakilan hex aliran data IR binari 4 Bait data (tidak ditandatangani panjang), LSByte… MSByte

bait bNumberOfBitsInTheData;

Bilangan bit dalam data (Maksimum 32). Julat = 1… 32

bait bPulseTrainRepeats;

Berapa banyak pengulangan kereta nadi ini. Julat = 1… 255. Biasanya 2… 4 ulangan. Anda mungkin ingin memanjangkannya untuk perintah Hidup / Mati kerana peranti penerima kadang-kadang memerlukan beberapa ulangan kereta nadi tambahan untuk menerima isyarat menghidupkan

bait bDelayBetweenPulseTrainRepeats;

Kelewatan antara pengulangan kereta nadi ini. Julat = 1… 255mS. Biasanya 22mS… 124mS

bait bButtonRepeats;

Menyimulasikan menekan butang yang sama berulang (tetapi tidak menyokong kod yang diubah seperti alat kawalan jauh Apple, ia hanya mengulangi kod butang). Julat = 1… 256. Lalai = 1

uint16_t ui16DelayBetweenButtonRepeats;

Kelewatan antara pengulangan butang (int tidak ditandatangani). 2 bait keseluruhan LSByte… MSByte. Julat = 1… 65535mS. Lalai = 0mS

bait bFreshData;

  • Data segar. Nilai bukan sifar. Ditulis terakhir, mencetuskan urutan IR TX. Julat 0x00… 0xFF

    • Lebih banyak paket kawalan akan datang = 0
    • Ini adalah paket kawalan akhir = Nilai Bukan Sifar 1, 2,… 255

Perhatikan penggunaan arahan penyusun '_packed_'. Ini untuk memastikan data adalah byte paket untuk byte dalam memori tanpa mengira sistem sasaran yang digunakan (Uno, Due, ESP8266 dll.). Ini bermaksud penyatuan antara registerAllocationType dan dataArrayType hanya memerlukan jam keluar / jam dalam bait secara berurutan dari paket kawalan, menjadikan perisian TX / RX mudah.

Langkah 4: Memperolehi Kod Kawalan Jauh (ui32Data)

Memperolehi Kod Kawalan Jauh (ui32Data)
Memperolehi Kod Kawalan Jauh (ui32Data)
Memperolehi Kod Kawalan Jauh (ui32Data)
Memperolehi Kod Kawalan Jauh (ui32Data)
Memperolehi Kod Kawalan Jauh (ui32Data)
Memperolehi Kod Kawalan Jauh (ui32Data)
Memperolehi Kod Kawalan Jauh (ui32Data)
Memperolehi Kod Kawalan Jauh (ui32Data)

Terdapat tiga cara untuk memperoleh kod kunci kawalan jauh masing-masing;

  1. Melalui pengiraan bit dengan osiloskop,
  2. Cari di laman web,
  3. Menyahkodnya terus dari aliran data dalam perisian.

Melalui pengiraan bit dengan skop

Ini bukan kaedah yang cekap kerana memerlukan beberapa waktu dan berpotensi memerlukan lebih dari satu percubaan, namun dapat sangat tepat. Ini juga berguna dalam mengesahkan secara visual kod yang diperoleh menggunakan kaedah 2 dan 3, juga dalam menentukan setiap keistimewaan alat kawalan jauh. Sebagai contoh ketika menekan butang pada alat kawalan jauh Apple IR. Alat kawalan jauh pada mulanya akan mengeluarkan urutan arahan kemudian mengikutinya dengan turutan mampatan berulang 0xF….

Cari di laman web

Pangkalan data kod kawalan jauh di laman web Kawalan Jauh Inframerah Linux adalah sumber yang baik.

Kelemahannya adalah, anda mungkin perlu mencuba beberapa kod sehingga anda menemui kod yang sesuai untuk anda. Anda mungkin juga harus menafsirkan beberapa perwakilan kod untuk mengubahnya menjadi bentuk heks sama.

Nyahkodnya terus dari aliran data

Dengan menggunakan litar pada gambar 1 di atas bersama dengan contoh perpustakaan IRremote 'IRrecvDumpV2.ino' adalah mungkin untuk menyahkod aliran data secara langsung dari alat kawalan jauh. Gambar 2 menunjukkan alat kawalan jauh TV Samsung yang didekodkan untuk menekan butang hidup / mati di tetingkap terminal Arduino IDE.

Penerima Gabungan / Pemancar

Gambar 3 dan 4 di atas menggambarkan penyelesaian yang memungkinkan penerimaan dan penghantaran arahan IR untuk membuat prototaip yang mudah.

Untuk menyahkod butang kawalan jauh IR menekan anda perlu memancarkan Arduino dengan contoh 'IRrecvDumpV2.ino' yang disertakan dengan perpustakaan IRremote.

Ia juga berfungsi dengan baik untuk penghantaran jika perintah IR. Lampu merah disertakan sebagai petunjuk visual bahawa peranti sedang beraksi.

Langkah 5: Cara Menguji Peranti Slave I2C Anda

Cara Menguji Perisian Slave I2C Anda
Cara Menguji Perisian Slave I2C Anda
Cara Menguji Perisian Slave I2C Anda
Cara Menguji Perisian Slave I2C Anda

Dengan menggunakan kod sumber di sini, dan litar yang dijelaskan di atas dalam gambar 1, atur program 'Master' Arduino dengan 'IR_Remote_Sim_Test.ino' dan 'Slave' Arduino dengan 'IR_Remote_Sim.ino'.

Dengan andaian anda mempunyai TV Sony Bravia, kotak Sky HD dan Sony BT SoundBar, tekan butang 1 dan TV anda akan beralih ke BBC1 (saluran 101). Tekan butang 2 dan bar suara anda akan dibisukan. Tekan sekali lagi dan ia tidak akan disenyapkan.

Semasa pelaksanaan urutan transmisi IR, LED3 akan menyala menunjukkan budak sibuk dan LED1 akan berkelip sejajar dengan proses penghantaran IR.

Sudah tentu jika anda tidak mempunyai sistem hiburan yang sama seperti di atas, anda dapat memprogram ulang hamba dengan 'IRrecvDumpV2.ino', menyahkod perintah jarak jauh yang anda minati, kemudian memprogramnya ke dalam 'IR_Remote_Sim_Test.ino' untuk anda senario yang diberikan.

Gambar 2 menunjukkan gambaran keseluruhan perisian ujian tahap sistem antara Master dan Slave.

Langkah 6: Mengecilkan Reka Bentuk Anda

Mengecilkan Reka Bentuk Anda
Mengecilkan Reka Bentuk Anda

Baiklah, dengan anggapan anda telah mengikuti petunjuk ini, bergantung pada dua Arduino untuk mengawal peranti rumah anda bukanlah penggunaan stok Arduino yang paling berkesan. Oleh itu, jika anda membina litar yang ditunjukkan dalam gambar di atas dan mengikuti arahan di sini untuk memprogram ATMega328P dengan 'IR_Remote_Sim.ino', anda akan dapat mengurangkan keseluruhan sistem kepada komponen minimum. Ini akan membolehkan anda memasukkan reka bentuk anda ke dalam sistem lain.

Langkah 7: Kesimpulannya

Kesimpulannya
Kesimpulannya
Kesimpulannya
Kesimpulannya

Penyelesaiannya stabil dan berfungsi dengan baik, ia sudah tertanam dalam sistem lain selama beberapa minggu sekarang tanpa masalah.

Saya memilih Arduino Uno R3 kerana saya mahukan peranti yang mempunyai RAM yang mencukupi sehingga saya boleh mempunyai penyangga butang dengan kedalaman yang munasabah. Saya berpuas hati dengan saiz penyangga 20 paket (MAX_SEQUENCES).

Perisai Hybrid TX / RX yang saya buat juga sangat berguna semasa menyahkod alat kawalan jauh Sony dan Sky. Walaupun saya harus mengaku menggunakan skop digital saya dari semasa ke semasa untuk memeriksa perisian IR yang disahkod perintah itu sama dengan yang datang dari IR yang diterima (TSOP38328).

Satu-satunya perkara yang saya lakukan dengan cara yang berbeza adalah menggunakan litar pemacu arus tetap untuk lekapan IR seperti yang ditunjukkan di atas dalam gambar 2.

Satu lagi yang perlu diperhatikan adalah, tidak semua pemancar IR dimodulasi dengan 38KHz, TSOP38328 dioptimumkan untuk 38KHz.

Langkah 8: Rujukan Yang Digunakan

IRRemote.h

  • Oleh: z3t0
  • Tujuan: Perpustakaan jarak jauh inframerah untuk Arduino: menghantar dan menerima isyarat inframerah dengan pelbagai protokol
  • Dari:

Perpustakaan 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 mengelakkan struktur data merangkumi 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 perincian jarak jauh IR yang baik

https://www.sbprojects.com/knowledge/ir/index.php

I2C

  • https://playground.arduino.cc/Main/WireLibraryDetailedReference
  • https://www.arduino.cc/en/Reference/WireSend

Pangkalan Data Jauh IR

  • https://www.lirc.org/
  • https://lirc-remotes.sourceforge.net/remotes-table.html

Lembaran Data BC337

https://www.onsemi.com/pub/Collateral/BC337-D. PDF

Lembaran Data 1N4148

https://www.vishay.com/docs/81857/1n4148.pdf

Disyorkan: