
Radiasi infra merah/Infrared (IR) adalah bentuk cahaya yang mirip dengan cahaya yang kita lihat di sekitar kita. Satu-satunya perbedaan antara cahaya IR dan cahaya tampak adalah frekuensi dan panjang gelombang. Radiasi infra merah berada di luar jangkauan cahaya tampak, sehingga manusia tidak dapat melihatnya:

Karena IR adalah jenis cahaya, komunikasi IR membutuhkan garis pandang langsung (berhadapan/LoS) dari penerima ke pemancar. IR tidak dapat mengirimkan sinyal melalui / menembus dinding atau bahan lain seperti WiFi atau Bluetooth.
Dalam modulasi sinyal IR, encoder pada remote IR mengubah sinyal biner menjadi sinyal tegangan termodulasi. Sinyal tegangan ini dikirim ke IR LED transmisi. Transmisi LED mengubah sinyal tegangan termodulasi menjadi sinyal cahaya IR termodulasi. Penerima IR kemudian men-demodulasi sinyal cahaya IR dan mengubahnya kembali menjadi biner sebelum meneruskan informasi ke mikrokontroler:

Sinyal IR termodulasi adalah serangkaian pulsa cahaya IR yang dinyalakan (HIGH) dan dimatikan (LOW) pada frekuensi tinggi yang dikenal sebagai frekuensi pembawa. Frekuensi pembawa yang digunakan oleh sebagian besar pemancar adalah 38 kHz, karena sifatnya yang langka sehingga frekuensi ini dapat dibedakan dengan noise sekitar. Dengan cara ini penerima IR akan mengetahui bahwa sinyal 38 kHz dikirim dari pemancar dan tidak diambil dari lingkungan sekitar.
Dioda penerima IR mendeteksi semua frekuensi cahaya IR tetapi memiliki filter band-pass yang hanya melewatkan frekuensi sinyal IR 38 kHz. Kemudian dioda IR memperkuat sinyal termodulasi dengan pra-penguat (Preamp) dan mengubahnya menjadi sinyal biner sebelum mengirimkannya ke mikrokontroler.
Protokol Transmisi Inframerah
Pola dimana sinyal IR termodulasi diubah menjadi biner ditentukan oleh protokol transmisi. Ada banyak protokol transmisi IR diantaranya yang umum digunakan adalah Sony, Matsushita, NEC, dan RC5.
Protokol NEC juga merupakan tipe yang paling umum dalam proyek mikrokontroler, jadi akan digunakan sebagai contoh untuk menunjukkan bagaimana penerima mengubah sinyal IR termodulasi menjadi biner.

Logika '1' dimulai dengan pulsa HIGH 562,5 us dengan frekuensi 38 kHz IR diikuti oleh pulsa LOW 1.687,5 us. Logika '0' ditransmisikan dengan pulsa HIGH 562,5 us diikuti oleh pulsa LOW 562,5 us. Ini adalah bagaimana protokol NEC mengkodekan dan menerjemahkan data biner menjadi sinyal termodulasi. Protokol lain hanya berbeda dalam durasi pulsa TINGGI dan RENDAH.

Contoh Rangkaian dan Library IR Arduino

Contoh Tabel Kode Tombol Pada Remot IR

Percobaan 50: Akses Decoder Remote Infrared


- Hubungkan O dengan pin D9 ATMEGA 2560
- Hubungkan board ATMEGA 2560 dengan Komputer menggunakan kabel USB.
- Bukalah IDE Arduino, kemudian ketikkan kode program/sketch atau buka file REMOTE_IR, REMOTE_IR_2, selanjutnya buka file REMOTE_IR_3
- Compile menggunakan verify button (tanda ceklist pada IDE arduino) untuk mengecek ada atau tidaknya error/kesalahan dalam pengetikan.
- Upload program ke arduino dengan cara, pilih File > Upload to I/O board, atau tekan tombol tanda panah pada jendela IDE arduino.
Code REMOTE_IR:
#include <IRremote.h>
const int RECV_PIN = 9;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);
}
void loop(){
if (irrecv.decode(&results)){
Serial.println (results.value, HEX);
irrecv.resume();
}
}
Video Demo:
.
Code REMOTE_IR_2:
///https://www.circuitbasics.com/arduino-ir-remote-receiver-tutorial
#include <IRremote.h>
const int RECV_PIN = 9;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);
}
void loop(){
if (irrecv.decode(&results)){
Serial.println(results.value, HEX);
switch (results.decode_type){
case NEC: Serial.println("NEC"); break ;
case SONY: Serial.println("SONY"); break ;
case RC5: Serial.println("RC5"); break ;
case RC6: Serial.println("RC6"); break ;
case DISH: Serial.println("DISH"); break ;
case SHARP: Serial.println("SHARP"); break ;
case JVC: Serial.println("JVC"); break ;
case SAMSUNG: Serial.println("SAMSUNG"); break ;
case LG: Serial.println("LG"); break ;
case WHYNTER: Serial.println("WHYNTER"); break ;
case PANASONIC: Serial.println("PANASONIC"); break ;
case DENON: Serial.println("DENON"); break ;
default:
case UNKNOWN: Serial.println("UNKNOWN"); break ;
}
irrecv.resume();
}
}
.
Hasil:

Code REMOTE_IR_3:
///https://www.circuitbasics.com/arduino-ir-remote-receiver-tutorial
//
//PRINT KEYS TO THE SERIAL MONITOR
//I extended the code above to print the key value instead of the hexadecimal code:
//PERLU DIBENARKN NILAI CASE NYA
#include <IRremote.h>
const int RECV_PIN = 9;
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long key_value = 0;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);
}
void loop(){
if (irrecv.decode(&results)){
if (results.value == 0XFFFFFFFF)
results.value = key_value;
switch(results.value){
case 0xFFA25D:
Serial.println("ON/OFF");
break;
case 0xFF629D:
Serial.println("STOP");
break;
case 0xFFE21D:
Serial.println("MUTE");
break;
case 0xFF22DD:
Serial.println("MODE");
break;
case 0xFF02FD:
Serial.println("BACK");
break ;
case 0xFFC23D:
Serial.println("EQ");
break ;
case 0xFFE01F:
Serial.println("|<<");
break ;
case 0xFFA857:
Serial.println(">>|");
break ;
case 0xFF906F:
Serial.println(">||");
break ;
case 0xFF6897:
Serial.println("VOL--");
break ;
case 0xFF9867:
Serial.println("VOL++");
break ;
case 0xFFB04F:
Serial.println("0");
break ;
case 0xFF30CF:
Serial.println("1");
break ;
case 0xFF18E7:
Serial.println("2");
break ;
case 0xFF7A85:
Serial.println("3");
break ;
case 0xFF10EF:
Serial.println("4");
break ;
case 0xFF38C7:
Serial.println("5");
break ;
case 0xFF5AA5:
Serial.println("6");
break ;
case 0xFF42BD:
Serial.println("7");
break ;
case 0xFF4AB5:
Serial.println("8");
break ;
case 0xFF52AD:
Serial.println("9");
break ;
}
key_value = results.value;
irrecv.resume();
}
}
Video Demo: