Menggunakan IR Remote dengan Raspberry Pi tanpa LIRC
Saya ingin mendapatkan input jarak jauh IR ke Raspberry Pi. Saya berhasil menginstal dan menguji LIRC. Semuanya baik-baik saja, kecuali langkah terakhir. Ketika saya ingin meneruskan nilai Kunci jarak jauh IR ke program Python, itu tidak meneruskannya dengan benar. Ini melewati nilai nol untuk kunci apa saja. Saya tidak tahu apa yang salah. Saya menyerah dan kemudian saya mencoba menulis kode python untuk menangkap remote IR tanpa menggunakan LIRC.
Setelah beberapa membaca tentang bagaimana IR jarak jauh berkomunikasi, terungkap info yang menggunakan komunikasi serial UART. Saya menggunakan IR remote DIY Kit HX1838. Sensor IR menerjemahkan gelombang IR dan melewatkan data secara serial. Yang saya lakukan adalah membaca nilai data yang keluar dari sensor IR secara serial. Ini adalah cara sederhana tetapi sederhana untuk membaca jarak jauh IR untuk aplikasi sederhana yang dapat digunakan di Raspberry Pi.
Menyiapkan Raspberry Pi untuk komunikasi serial UART.
1. Perlu menghapus entri ttyAMA0 di cmdline.txt .
- Pertama buat cadangan file yang berisi parameter kernel cmdline.txt sebagai cmdline_bp.txt
sudo cp /boot/cmdline.txt /boot/cmdline_bp.txt
- Edit file cmdline.txt dengan menghapus parameter yang mengandung ‘ttyAMA0‘. yaitu. ‘console=ttyAMA0,115200′ dan ‘kgdboc=ttyAMA0,115200′.
sudo nano /boot/cmdline.txt
File yang tersisa terlihat seperti,
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline rootwait
Kemudian simpan dan tutup editor. Simpan file, Ctrl + O. Tutup editor, Ctrl + X
2. Perbarui inittab file untuk menutupi ttyAMA0
sudo nano /etc/inittab
Beri komentar pada baris tersebut
‘X:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100′
#X:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
Kemudian simpan dan tutup editor. Simpan file, Ctrl + O. Tutup editor, Ctrl + X
Langkah 1:Memulai
Menginstal pySerial
- Agar komunikasi serial (UART) berfungsi, perlu menginstal modul Serial.
sudo apt-get install python-serial
Setelah ini terinstal kode Python dapat menggunakannya dengan melakukan impor serial .
- Selanjutnya, perlu menyambungkan GPIO 14 (TX) dan GPIO 15 (RX). Karena tujuan saya adalah menerima sinyal IR, saya hanya menghubungkan GPIO 15 (RX).
- Sensor IR memerlukan koneksi 5V &GND. Kemudian sinyal keluaran sensor IR terhubung ke GPIO 15.
Kode Python untuk membaca sinyal IR ternyata sangat sangat sederhana. Sebagai berikut.
import serialser =serial.Serial ("/dev/ttyAMA0")ser.baudrate =2400for i in range (0,15):# biasanya sinyal IR untuk kunci sekitar 12-16 byte data =ser.read( 1) # membaca 1 byte sekaligus mencetak ord(data) # data yang dibaca dalam karakter, ord akan dikonversi ke nilai ASCII
Sekarang kode ini akan membaca sinyal IR 1 byte pada satu waktu dan mencetak nilainya.
Saya mencoba baud rate dengan trial and error dan menetap di 2400 BPS. Meskipun komunikasi serial mendukung hingga 115KBPS, menarik mengapa IR menggunakan kecepatan yang lebih rendah. Dugaan saya adalah akan lebih dapat diandalkan untuk menggunakan kecepatan yang lebih rendah, karena lebih kecil kemungkinan sinyal IR kehilangan 1 atau 2 bit melalui udara.
Mengurai kode kunci jarak jauh IR
Sekarang langkah selanjutnya adalah memecahkan kode nilai kunci. Saya menggunakan remote IR TV Samsung standar untuk upaya ini.
Poin penting pertama adalah mencari tahu berapa banyak byte data untuk setiap kunci. Ini dapat bervariasi 12-16 byte. (yang saya coba). Biasanya panjang byte sama untuk semua kunci. Byte tersebut memiliki header byte, data byte (untuk mengidentifikasi kunci) dan tail byte. Byte header akan memiliki tanda tangan untuk model remote IR. Saya menggunakan lembar excel untuk mengumpulkan nilai data kunci mengikuti halaman Antzy Carmasaic
http://www.instructables.com/id/How-To-Useemulate-…
Menyelam jauh ke dalam nilai kunci yang ditangkap, ini menunjukkan byte 0-5 terdiri dari header, diulang untuk semua kunci. Byte 6 hingga 11 nilai data mewakili nilai Kunci. Mungkin ada beberapa nilai ekor. Byte 12 adalah ekor untuk remote samsung.
Kunci pemetaan
Cara yang tepat untuk remote ini adalah dengan menyimpan byte 6-11 dalam array dan membandingkannya dengan kunci masuk yang baru. Sebagai gantinya, saya melakukan algoritme sederhana sebagai berikut.
keyidentity =byte[6]+2*byte[7]+3*byte[8]+4*byte[9]+5*byte[10]+6*byte[11]
Ini memberikan nilai yang hampir unik untuk setiap kunci. Anda dapat menemukan algoritme yang lebih baik dari ini.
Saya memperluas kode Python untuk menangkap informasi kunci jarak jauh Samsung. Setelah saya menghitung nilai kunci yang dipetakan kemudian saya menyimpannya di program python itu sendiri.
File terlampir. nama – ir_serial3samsung.py. Remote Samsung mengirimkan 2 set data. Jadi saya menangkap 24 byte untuk menyiram buffer pengambilan data serial Raspberry Pi. Tapi saya hanya menggunakan set pertama untuk memecahkan kode.
Ketika Anda menjalankan kode ini dengan benar mengidentifikasi tombol yang ditekan. Anda dapat memecahkan kode kunci lainnya di remote dengan melihat nilai “identitas kunci” yang dicetak oleh program. Kemudian tambahkan program untuk memasukkannya.
Kesimpulan
Ini adalah cara yang sangat sederhana dan efektif untuk menggunakan remote control dengan Raspberry Pi dengan Python. Anda perlu menghitung berapa total byte untuk sebuah kunci, berapa lama byte header, byte data, dan byte ekor. Karena Anda akan mengetahui dari A hingga Z tentang proses ini, Anda dapat dengan mudah memodifikasinya agar sesuai dengan aplikasi Anda. Karena ini adalah kode python kecil, sangat mudah untuk melakukan debug jika Anda mengalami masalah.
Untuk detail lebih lanjut:Menggunakan IR Remote dengan Raspberry Pi tanpa LIRC