Replikator IR dengan Wi-Fi: Kontrol Perangkat dari Jarak Jauh
Komponen dan Perlengkapan
Particle Photon – 1 unit
Adafruit IR Receiver Diode – 1 unit
Adafruit LED - Infrared 950nm – 1 unit
Arduino UNO – 1 unit
Teensy 3.1 – 1 unit
Microchip Technology ATmega328 – 1 unit
Microchip Technology ATtiny85 – 1 unit
Espressif ESP8266 ESP-01 – 1 unit
Bluz DK – 1 unit
RedBear Duo – 1 unit
Aplikasi dan Layanan Online
porter
Tentang Proyek Ini
Beberapa waktu lalu saya terjun ke dalam decoding remote inframerah AC dengan tujuan mengontrol pendingin udara melalui WIFI.
Saya belajar banyak hal dalam proses ini dan saya ingin membagikan pengetahuan itu dengan kalian semua jika bisa membantu Anda dalam proyek masa depan (masa depan saya: saya juga melihat Anda). Saya menggunakan Particle Photon tetapi Anda dapat memilih untuk menggunakan MCU yang berbeda karena IRremote Arduino Library (dari Ken Shirriff) yang digunakan dalam proyek ini mendukung banyak yang lain. Ini juga halaman resminya.
Ada banyak sekali informasi di halaman itu, pastikan untuk membaca beberapa untuk pemahaman mendalam tentang cara kerja sinyal IR, tetapi saya akan mereproduksi beberapa poin penting di bagian selanjutnya.
Beberapa latar belakang tentang kode IR
Berikut adalah transkripsi postingan asli penulis:
Remote IR bekerja dengan menyalakan dan mematikan LED dalam pola tertentu. Namun, untuk mencegah gangguan dari sumber IR seperti sinar matahari atau lampu, LED tidak dihidupkan secara konstan, tetapi dihidupkan dan dimatikan pada frekwensi modulasi (biasanya 36, 38, atau 40KHz). Waktu ketika sinyal ter-modulasi sedang dikirim akan disebut mark, dan ketika LED mati akan disebut space.
Setiap tombol pada remote memiliki kode tertentu (biasanya 12 hingga 32 bit) yang terkait dengannya, dan siaran kode ini saat tombol ditekan. Jika tombol ditekan tahan, remote biasanya secara berulang mengirimkan kode tombol. Untuk remote NEC, kode ulang khusus dikirim saat tombol ditekan tahan, daripada terus menerus mengirimkan kode. Untuk remote Philips RC5 atau RC6, bit dalam kode diubah setiap kali tombol ditekan; penerima menggunakan bit toggle ini untuk menentukan kapan tombol ditekan kalinya kedua.
Di sisi penerima, detektor IR mendemodulasi sinyal ini, dan mengeluarkan sinyal logika yang menunjukkan apakah menerima sinyal atau tidak. Detektor IR akan bekerja paling baik ketika frekvensinya cocok dengan frekwensi pengirim, tetapi dalam praktiknya tidak terlalu penting.
Anda sekarang siap untuk langkah berikutnya...
Bangun sirkuit penerima IR
Untuk mendekode sinyal inframerah, Anda perlu dioda penerima inframerah:
Dan Anda membangun sirkuit penerima seperti yang dinyatakan dalam perpustakaan:
Ini adalah pinout-nya:
Breadboard saya akhirnya terlihat seperti ini:
Untuk saat ini, fokuslah pada menghubungkan dioda penerima (yang hitam) dan lupakan tentang pengirim (yang transparan) - kita akan mengaturnya nanti.
Dekode beberapa sinyal IR
Karena proyek akan membuang kode yang diterima melalui baris serial, kita perlu menghubungkannya ke komputer. Nyalakan Photon dengan kabel USB dan hubungkan ke port USB komputer Anda. Sekarang akan menjadi waktu yang sangat baik untuk flash firmware yang dilampirkan.
Buka konsol atau terminal, dan gunakan Particle CLI untuk memonitor port USB.
CATATAN: Jika Anda belum menginstal Particle CLI, silakan lakukan dengan mengikuti dokumentasi di sini.
Di Ubuntu Linux, ini adalah apa yang harus saya ketik untuk memonitor port serial Photon:
$ sudo chmod 666 /dev/ttyACM0 $ particle serial monitor
Bergantung pada komputer dan sistem operasi Anda, port mungkin memiliki nama yang berbeda dan/atau chmod mungkin tidak perlu dieksekusi.
CATATAN: Anda dapat menggunakan perangkat lunak lain untuk menerima data di port serial USB komputer Anda.
Setelah itu, Anda dapat mengarahkan remote yang ingin Anda dekode ke dioda penerima IR (komponen seperti LED hitam) Mulai menekan tombol pada remote dan periksa apa yang dicetak di konsol.
Jika semuanya berjalan baik Anda akan mendapatkan sesuatu seperti ini:
Kita dapat membuang nilai pertama, 29168950 dalam hal ini, karena perpustakaan IR menyatakan: "the receive buffer starts with the duration of the gap space before the first mark". Kita tidak peduli dengan durasi itu, karena adalah waktu yang berlalu di antara pengujian kita, atau waktu yang Anda butuhkan untuk menekan tombol pada remote.
Oleh karena itu dari output yang diterima ini yang benar-benar menarik dan yang membentuk perintah IR:
Angka-angka ini mewakili durasi pulsa inframerah dalam mikrodetik. Jika kita ingin, kita dapat mengirim perintah ini dengan kode berikut:
function sendIt() { unsigned int ircommand[59]={8550,4000,550,1500,550,450,550,500,500,550,500,1550,500,500,500,500,550,500,500,500,550,500,500,500,550,500,500,1500,550,500,500,500,550,500,500,500,550,450,550,1500,550,1500,550,500,500,1500,550,500,550,1500,500,500,550,500,500,500,550,450,550}; irsend.sendRaw(ircommand,59,38); }
Tetapi untuk itu, kita perlu membangun sirkuit pengirim. Mari kita lakukan selanjutnya.
Bangun sirkuit pengirim IR
Sirkuit paling sederhana terlihat seperti ini:
Namun sirkuit ini hanya akan memberikan jarak kurang dari satu meter.
Jika bisa, rangsir sirkuit seperti di bawah ini untuk jarak yang lebih baik (sekitar 10 meter):
Ini adalah sisi pengirim sirkuit saya:
Uji coba sirkuit pengirim IR
Saya telah menambahkan beberapa fungsi dalam firmware untuk mengontrol volume pada TV Samsung. Ini adalah untuk Anda dapat menguji apakah sirkuit pengirim Anda bekerja dalam kasus Anda memiliki TV Samsung di sekitar.
Arahkan LED pengirim Anda ke TV dan tekan fungsi sendSamsungVolumeUp() dan sendSamsungVolumeDown().
CATATAN: Ingat bahwa Anda dapat menggunakan kamera ponsel Anda untuk memeriksa apakah LED IR sedang menyampaikan, karena IR akan muncul di sana:
Membuat perintah IR lebih mudah dibaca
Jika kita mengidentifikasi nilai sekitar 500 dengan 0 dan 1500 dengan 1, pilihan ini bersifat sembrono, juga memberikan 3 untuk nilai di atas 5000 dan 2 untuk nilai sekitar 4000, kita akhirnya mendapatkan representasi berikut:
Sekarang ingatlah bahwa dalam encoding yang sepenuhnya sembrono ini:
3 berarti pulsa 8500 mikrodetik
2 berarti pulsa 4000 mikrodetik
1 berarti pulsa 1500 mikrodetik
0 berarti pulsa 500 mikrodetik
Mengapa encoding dalam angka, Anda mungkin tanya?
Ini membantu memvisualisasikan dan membandingkan perintah, saya harap. Dengan cara ini, lebih mudah untuk membandingkan pulsa yang berubah atau tetap sama di antara perintah yang berbeda.
Contoh: Anda ingin membandingkan apa yang berubah antara perintah untuk mengatur suhu ke 18 dan 19 derajat dalam kasus remote AC? Lebih mudah ketika Anda memiliki 1 dan 0.
Saya juga menyukai format ini untuk menyimpan perintah IR dalam kode firmware. Cukup ingat untuk mengonversinya ke pulsa segera sebelum menyampaikan (dengan memanggil fungsi convertToPulseDuration() dalam firmware).
Membaca sumber daya
Saya membaca banyak situs untuk dapat memahami topik ini. Berikut adalah daftar beberapa di antaranya:
Reverse engineering an air conditioner IR remote control protocol
Using arbitrary remotes with the arduino IRremote library
this thread in the Particle community
Understanding IR Protocol of Air Conditioner's Remotes
this blog on adafruit
Kesimpulan
Dengan sedikit kerja, sebuah MCU dan beberapa komponen Anda akan dapat mendekode dan mereplikasi banyak remote yang Anda miliki di rumah Anda. Dengan beberapa keterbatasan, ini dapat memungkinkan Anda untuk mengontrol semua perangkat tersebut dari ponsel, tablet, laptop, komputer Anda, dan bahkan membuat beberapa automasi sederhana untuk mereka. Keren, kan?
Sekarang Anda dapat memikirkan untuk menambahkan Blynk, membuat aplikasi di Ionic Framework, berbicara dengannya dengan Google Now atau Alexa, atau mengontrolnya dengan Porter.
Saya berencana untuk menerapkan pengetahuan ini untuk mengontrol beberapa perangkat di sekitar rumah, dan saya berharap untuk membuat lebih banyak tulisan di masa depan. Tetaplah terhubung!
Update pada 5 Februari 2018:
Ini adalah satu implementasi dari proyek ini: sebuah placek inframerah yang dikontrol dari internet.
Butuh bantuan?
Jika Anda membutuhkan bantuan profesional dengan proyek Anda, jangan ragu untuk menulis saya tentang kebutuhan Anda di gusgonnet@gmail.com. Terima kasih!
Kode
infraredReplicator
the source codehttps://github.com/gusgonnet/infraredReplicator