Remote Control Inframerah Dengan Kode Keamanan Yang Berotasi.
REMOTE CONTROL INFRARED
DENGAN KODE KEAMANAN YANG BEROTASI
Disusun Oleh :
Nama : Yoshua Wibawa Chahyadi
Nrp : 0222051
Jurusan Teknik Elektro, Fakultas Teknik, Universitas Kristen Maranatha, Jl. Prof.Drg.Suria Sumantri, MPH no.65, Bandung, Indonesia.
Email : [email protected]
ABSTRAK
Sekarang ini media inframerah banyak digunakan untuk remote control.
Pada umumnya remote control inframerah yang digunakan tidak dilengkapi
dengan keamanan, pada tugas akhir ini dirancang suatu remote control
inframerah yang dilengkapi dengan kode keamanan yang berotasi.
Sinyal inframerah yang dikirim merupakan sinyal kendali yang terdiri dari start bitdan data kendali. Data kendali yang dirancang ada 20, terdiri dari 10 data
kendali OFF dan 10 data kendali ON. Start bityang dirancang ada 3 jenis dengan
lebar yang berbeda - beda. Data kendali danstart bitakan berotasi satu kali setiap
pengendalian yang berhasil. Data kendali yang sama akan bisa digunakan kembali
setelah 9 kali pengendalian yang berhasil. Untuk start bit, start bit yang sama
akan bisa digunakan kembali setelah 3 kali pengendalian yang berhasil.
Dari hasil uji coba diperoleh bahwa remote control inframerah dengan
kode keamanan yang berotasi dapat berfungsi dengan baik. Jarak maksimal yang
masih bisa digunakan dengan baik untuk remote control yang dirancang adalah
7,6 m. Pada jarak 50 cm, sudut maksimal yang masih bisa digunakan dengan baik
adalah 54o, dan pada jarak 5 m sudut maksimal yang masih bisa digunakan
dengan baik adalah 35odengan kondisi tanpa penghalang.
Kata Kunci : IR – 8510, Pengendalian Peralatan Listrik, Mikrokontroler
(2)
INFRARED REMOTE CONTROL WITH ROLLING SECURITY CODE
Composed by :
Name : Yoshua Wibawa Chahyadi
Nrp : 0222051
Department of Electrical Engineering, Faculty of Engineering, Maranatha Christian University,
Jl. Prof.Drg.Suria Sumantri, MPH no.65, Bandung, Indonesia. Email : [email protected]
ABSTRACT
At present infrared media has been widely used for remote control. Generally, infrared remote control that commonly used is not equipped with any security system, in this final project is designed an infrared remote control that provided with a rolling security code.
Infrared signal that has been sent by is a control signal which consists of start bit and control data. There are 20 control data that are designed, which consists of 10 OFF control data and 10 ON control data. Start bit that was designed have 3 different types of width. Control data and the start bit will rotate once every successful controlling. The same control data can be used again after 9 times successful controlling. And the same start bit can be used again after 3 times successful controlling.
The test results showed that the realized infrared remote control with rolling security code can function properly. The maximum distance that can still be used quite well for remote control is 7,6 m. At a distance of 50 cm, the
maximum angle that can still be used well is 54o, and at a distance of 5 m
maximum angle that can still be used well is 35o to the condition without
hindrance.
Keyword : IR – 8510, Control of Electrical Device, Atmega16
(3)
DAFTAR ISI
Halaman
ABSTRAK ... i
ABSTRACT... ii
KATA PENGANTAR... iii
DAFTAR ISI... v
DAFTAR TABEL... vii
DAFTAR GAMBAR... ix
DAFTAR LAMPIRAN... xi
BAB I PENDAHULUAN I.1 Latar Belakang Masalah... 1
I.2 Perumusan Masalah ... 1
I.3 Tujuan ... 2
I.4 Pembatasan Masalah ... 2
I.5 Sistematika Penulisan ... 2
BAB II LANDASAN TEORI II.1 Mikrokontroler AVR ... 4
II.1.1 Pengontrol Mikro ATmega16... 5
II.1.2 Fitur ATmega16 ... 5
II.1.3 Konfigurasi ATmega16... 6
II.1.4 Diagram Blok ATmega16 ... 8
II.1.5 General Purpose Register ATmega16 ... 9
II.1.6 Peta Memori ATmega16 ... 10
II.2 Cahaya Infra-Red... 12
II.2.1 Modul Infra-Red ... 13
II.3 Transceiver IR-8510 ... 14
II.3.1 Deskripsi Penerima IR-8510 ... 14
II.3.2 Kelebihan Tranceiver IR-8510 ... 15
II.3.3 Karakteristik Tranceiver IR-8510 ... 15
(4)
II.4 Format Data ... 20
BAB III PERANCANGAN DAN REALISASI III.1 Perancangan dan Realisasi Pengendali ... 22
III.1.1 Fungsi Port Input/Output Mikrokontroler pada Perancangan Hardware ... 23
III.1.2 Diagram Blok ReceiverIR8510 ... 24
III.2 Perancangan dan Realisasi Perangkat Lunak ... 26
III.2.1 Diagram Alir Pengirim... 29
III.2.2 Diagram Alir Penerima ... 31
BAB IV PENGUJIAN DAN ANALISA DATA IV.1 Pengujian Bentuk Sinyal ... 33
IV.2 Pengujian Jarak Pada Lokasi indoor... 39
IV.3 Pengujian Sudut Kerja Pada Lokasi indoor ... 47
IV.4 Analisis ... 59
BAB V KESIMPULAN DAN SARAN V.1 Kesimpulan ... 60
V.2 Saran ... 60
DAFTAR PUSTAKA... 61 LAMPIRAN
(5)
DAFTAR TABEL
Halaman
Tabel II.1 Fungsi Khusus Port B... 7
Tabel II.2 Fungsi Khusus Port C... 7
Tabel II.3 Fungsi Khusus Port D ... 8
Tabel II.4 Karakteristik Tranceiver IR -8510 ... 15
Tabel III.1 Pengendalian Lampu LED Berdasarkan Tombol yang Ditekan pada Tranmitter Remote Control... 27
Tabel IV.1 Data Kendali yang Digunakan dan Kategori Perintahnya .. 38
Tabel IV.2 Hasil Pengujian Perintah On dan Off dan Rotasi Start Bit dan Data ... 39
Tabel IV.3 Hasil Pengujian pada Jarak 2m ... 41
Tabel IV.4 Hasil Pengujian pada Jarak 3m ... 42
Tabel IV.5 Hasil Pengujian pada Jarak 4m ... 43
Tabel IV.6 Hasil Pengujian pada Jarak 6,2m ... 43
Tabel IV.7 Hasil Pengujian pada Jarak 6,9m ... 44
Tabel IV.8 Hasil Pengujian pada Jarak 7,2m ... 45
Tabel IV.9 Hasil Pengujian pada Jarak 7,6m ... 45
Tabel IV.10 Hasil Pengujian pada Jarak 7,9m ... 46
Tabel IV.11 Hasil Pengujian pada Jarak 8m ... 47
Tabel IV.12 Hasil Percobaan pada x = 50cm dengan Sudut 10° ... 48
Tabel IV.13 Hasil Percobaan pada x = 50cm dengan Sudut 20° ... 49
Tabel IV.14 Hasil Percobaan pada x = 50cm dengan Sudut 30° ... 50
Tabel IV.15 Hasil Percobaan pada x = 50cm dengan Sudut 40° ... 50
Tabel IV.16 Hasil Percobaan pada x = 50cm dengan Sudut 50° ... 51
Tabel IV.17 Hasil Percobaan pada x = 50cm dengan Sudut 54° ... 52
Tabel IV.18 Hasil Percobaan pada x = 50cm dengan Sudut 55° ... 52
Tabel IV.19 Hasil Percobaan pada x = 5 m dengan Sudut 10° ... 53
Tabel IV.20 Hasil Percobaan pada x = 5 m dengan Sudut 20° ... 54
(6)
Tabel IV.22 Hasil Percobaan pada x = 5 m dengan Sudut 35° ... 55
Tabel IV.23 Hasil Percobaan pada x = 5 m dengan Sudut 36° ... 56
Tabel IV.24 Hasil Percobaan pada Jarak 5,3 m ... 57
Tabel IV.25 Hasil Percobaan pada Jarak 5,4 m ... 58
(7)
DAFTAR GAMBAR
Halaman
Gambar 2.1 Konfigurasi Pin ATmega16 ... 7
Gambar 2.2 Diagram Blok ATmega16 ... 9
Gambar 2.3 General Purpose Register ATmega16 ... 10
Gambar 2.4 Peta Memori Program ATmega16 ... 11
Gambar 2.5 Peta Memori Data ... 11
Gambar 2.6 Sistem Penerima... 13
Gambar 2.7 Modul Penerima Infrared... 14
Gambar 2.8 Konfigurasi IR-8510 ... 14
Gambar 2.9 Daerah Sudut Kerja Receiver ... 16
Gambar 2.10 Output Sinyal Transmitter dan Output Pulse of Device.... 16
Gambar 2.11 Blok Diagram Pemancar... 16
Gambar 2.12 Rangkaian Modulator ... 17
Gambar 2.13 Saat Pin 6 IC 74HC132 Logic 1 atau idle ... 17
Gambar 2.14 Saat Pin 6 IC 74HC132Logic 0 ... 18
Gambar 2.15 Bagian Driver LED Infrared ... 20
Gambar 2.16 Timing Diagram Pengirim Inframerah... 20
Gambar 2.17 Space Width Coded Signal ... 21
Gambar 2.18 Bentuk Sinyal yang Dikirim dan Diterima dari Remote ... 21
Gambar 3.1 Blok Diagram Sistem Pengendalian Lampu LED ... 22
Gambar 3.2 Diagram Blok Receiver IR-8510 ... 24
Gambar 3.3 Rangkaian Skematik Pengirim Remote Control Infrared.. 25
Gambar 3.4 Rangkaian Skematik Penerima Remote Control Infrared . 26 Gambar 3.5 Diagram Alir Pengirim ... 27
Gambar 3.6 Diagram Alir Penerima... 28
Gambar 3.7 Space Coded Signal... 31
Gambar 3.8 Hasil Realisasi Remote Control Inframerah Pengirim (Kiri) dan Penerima (Kanan) ... 32 Gambar 4.1 Bentuk Sinyal Data/Kode On Pertama yang Dikirim oleh
(8)
Transmitter ... 33 Gambar 4.2 Bentuk Sinyal yang Dikirim oleh Transmitter... 34 Gambar 4.3 Bentuk sinyal yang diterima olehreceiver... 35 Gambar 4.4 Gambar Bentuk Sinyal pada Oscilloscope dengan startbit
3,6 ms ... 36 Gambar 4.5 Tampilan pada Layar LCD ... 36 Gambar 4.6 Gambar Bentuk Sinyal pada Oscilloscope dengan startbit
4,8 ms ... 37 Gambar 4.7 Bentuk gelombang tegangan LED inframerah pada
IR-8510... 38 Gambar 4.8 Posisi Pengirim dan Penerima untuk Uji Coba Sudut
(9)
DAFTAR LAMPIRAN
Halaman LAMPIRAN A : PROGRAM PADA PENGONTROL MIKRO
ATMEGA16... A-1 LAMPIRAN B : DATA SHEET ATMEGA16... B-1 LAMPIRAN C : DATA SHEET IR-8510 ... C-1
(10)
LAMPIRAN A
(11)
(12)
/***************************************************** This program was produced by the
CodeWizardAVR V1.25.3 Standard Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com
Project : Version :
Date : 9/29/2010
Author : F4CG Company : F4CG Comments:
Chip type : ATmega16 Program type : Application Clock frequency : 8.000000 MHz Memory model : Small
External SRAM size : 0 Data Stack size : 256
*****************************************************/ #include <mega16.h>
#include<delay.h> #include<stdio.h>
// Alphanumeric LCD Module functions #asm
.equ __lcd_port=0x15 ;PORTC #endasm
(13)
unsigned int n,indexON,indexOFF,start,e,awal,nostart; char startbitLCD[13];
char dataLCD[14];
unsigned int dataON[11]={137,136,135,134,133,132,131,130,129,128}; unsigned int dataOFF[11]={138,139,140,141,142,143,144,145,146,147}; unsigned int error,fs,flagON,flagOFF;
// External Interrupt 2 service routine
interrupt [EXT_INT2] void ext_int2_isr(void) {
// Place your code here
if (error==1) { error=0; if (nostart==0)start=24; if (nostart==1)start=36; if (nostart==2)start=48;e=1; if(n==1) { flagON=indexON; sprintf(startbitLCD,"Start=%d",start); sprintf(dataLCD,"DataON=%d",dataON[flagON]); lcd_clear(); lcd_gotoxy(0,0); lcd_puts(startbitLCD); lcd_gotoxy(0,1); lcd_puts(dataLCD); if(indexON==10)indexON=0; } if(n==2)
(14)
{ flagOFF=indexOFF; sprintf(startbitLCD,"Start=%d",start); sprintf(dataLCD,"DataOFF=%d",dataOFF[flagOFF]); lcd_clear(); lcd_gotoxy(0,0); lcd_puts(startbitLCD); lcd_gotoxy(0,1); lcd_puts(dataLCD); if(indexOFF==10)indexOFF=0; } } else { e=1; fs=1;//flag no_start if (nostart==0)start=36; if (nostart==1)start=48; if (nostart==2)start=24; if(n==1) { flagON=indexON; flagON=flagON+1; indexON=indexON+1; sprintf(startbitLCD,"Start=%d",start); sprintf(dataLCD,"DataON=%d",dataON[flagON]); lcd_clear(); lcd_gotoxy(0,0); lcd_puts(startbitLCD); lcd_gotoxy(0,1);
(15)
lcd_puts(dataLCD); if(indexON==10)indexON=0; } if(n==2) { flagOFF=indexOFF; flagOFF=flagOFF+1; indexOFF=indexOFF+1; sprintf(startbitLCD,"Start=%d",start); sprintf(dataLCD,"DataOFF=%d",dataOFF[flagOFF]); lcd_clear(); lcd_gotoxy(0,0); lcd_puts(startbitLCD); lcd_gotoxy(0,1); lcd_puts(dataLCD); if(indexOFF==10)indexOFF=0; } } delay_ms(700); }
// Declare your global variables here unsigned int
data1,data2,data3,data4,data5,data6,data7,data8,data9,data10,data11,data0;
unsigned int
datar1,datar2,datar3,datar4,datar5,datar6,datar7,datar8,datar9,datar10,datar11,data r12;
unsigned int dataEns,flag; unsigned long int a,ss;
(16)
unsigned int index1,count,nostartR; unsigned int
deteksi1,deteksi2,deteksi3,deteksi4,deteksi5,deteksi6,deteksi7,deteksi8,deteksi9,d eteksi10,deteksi11,deteksi12;
unsigned int bit0,bit1,bit2,bit3,bit4,bit5,bit6,bit7,bit8,bit9,bit10,bit11;
void header() { PORTA.1=0; delay_us(2400); PORTA.1=1; delay_us(600); } void header1() { PORTA.1=0; delay_us(3600); PORTA.1=1; delay_us(600); } void header2() { PORTA.1=0; delay_us(4800); PORTA.1=1; delay_us(600); } void logic0() {
(17)
PORTA.1=0; delay_us(600); PORTA.1=1; delay_us(600); } void logic1() { PORTA.1=0; delay_us(1200); PORTA.1=1; delay_us(600); } void konversiON() { dataEns=dataON[flagON]^255; data0=dataEns/2; bit0=dataEns%2; data1=data0/2; bit1=data0%2; data2=data1/2; bit2=data1%2; data3=data2/2; bit3=data2%2; data4=data3/2; bit4=data3%2; data5=data4/2; bit5=data4%2; data6=data5/2; bit6=data5%2; data7=data6/2; bit7=data6%2;
(18)
data8=data7/2; bit8=data7%2; data9=data8/2; bit9=data8%2; data10=data9/2; bit10=data9%2; data11=data10/2; bit11=data10%2; } void konversiOFF() { dataEns=dataOFF[flagOFF]^255; data0=dataEns/2; bit0=dataEns%2; data1=data0/2; bit1=data0%2; data2=data1/2; bit2=data1%2; data3=data2/2; bit3=data2%2; data4=data3/2; bit4=data3%2; data5=data4/2; bit5=data4%2; data6=data5/2; bit6=data5%2; data7=data6/2; bit7=data6%2; data8=data7/2; bit8=data7%2; data9=data8/2; bit9=data8%2;
(19)
data10=data9/2; bit10=data9%2; data11=data10/2; bit11=data10%2; } void main(void) {
// Declare your local variables here
// Input/Output Ports initialization // Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x33;
DDRA=0x02;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x45;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00;
DDRC=0x00;
(20)
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh // OC0 output: Disconnected TCCR0=0x00;
TCNT0=0x00; OCR0=0x00;
// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off
// Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00;
TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00;
(21)
ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00;
// Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00;
TCCR2=0x00; TCNT2=0x00; OCR2=0x00;
// External Interrupt(s) initialization // INT0: Off
// INT1: Off // INT2: Off GICR|=0x20; MCUCR=0x00; MCUCSR=0x00; GIFR=0x20;
// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00;
// Analog Comparator initialization // Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80;
(22)
SFIOR=0x00;
// LCD module initialization lcd_init(16); #asm("sei") indexON=0; indexOFF=0; nostart=0; flag=0; a=0; n=0; e=0; awal=0; error=0; fs=0; ss=0; while (1) {
// Place your code here ulang:
while(error==1){}
if(e==1){e=0;goto ulangdata;} while(PINB.0==1 && PINB.6==1); if(e==1){e=0;goto ulang;}
if(PINB.0==0) {
while(PINB.0==0); flag=1; //tanda ON n=1;
(23)
konversiON(); } if(e==1){e=0;goto ulang;} if(PINB.6==0) { while(PINB.6==0); flag=2; //tanda OFF n=2; konversiOFF(); } if(e==1){e=0;goto ulang;} if(e==1){e=0;goto ulang;} ulangdata: if(fs==1) { fs=0; ss=1; if(nostart==0)header1(); if(nostart==1)header2() ; if(nostart==2)header(); nostart=nostart+1; if(nostart==3)nostart=0; } else { if(nostart==0)header(); if(nostart==1)header1() ; if(nostart==2)header2(); } if(bit0==0) { logic0();
(24)
} else logic1(); if(bit1==0) { logic0(); } else logic1(); if(bit2==0) { logic0(); } else logic1(); if(bit3==0) { logic0(); } else logic1(); if(bit4==0) { logic0(); } else logic1(); if(bit5==0) { logic0(); } else logic1(); if(bit6==0) { logic0();
(25)
} else logic1(); if(bit7==0) { logic0(); } else logic1(); if(bit8==0) { logic0(); } else logic1(); if(bit9==0) { logic0(); } else logic1(); if(bit10==0) { logic0(); } else logic1(); if(bit11==0) { logic0(); } else logic1(); if(e==1){e=0;goto ulang;} if(e==1){e=0;goto ulang;} while(PINA.0==1){if(e==1){e=0;goto ulang;}
(26)
} if(e==1){e=0;goto ulang;} while (PINA.0==0) { delay_us(100); count++; if(e==1){e=0;goto ulang;} }; start=count; count=0; if(e==1){e=0;goto ulang;}
if ((start>=24 && start<=27)||(start>=36 && start<=39)||(start>=48 && start<=51))
{
while (PINA.0==1) {}; while (PINA.0==0) { delay_us(100); count++; }; deteksi1=count; count=0;
while (PINA.0==1) {}; while (PINA.0==0) { delay_us(100); count++; }; deteksi2=count; count=0;
while (PINA.0==1) {}; while (PINA.0==0)
(27)
{ delay_us(100); count++; }; deteksi3=count; count=0;
while (PINA.0==1) {}; while (PINA.0==0) { delay_us(100); count++; }; deteksi4=count; count=0;
while (PINA.0==1) {}; while (PINA.0==0) { delay_us(100); count++; }; deteksi5=count; count=0;
while (PINA.0==1) {}; while (PINA.0==0) { delay_us(100); count++; }; deteksi6=count; count=0; if(e==1){e=0;goto ulang;} while (PINA.0==1) {};
(28)
while (PINA.0==0) { delay_us(100); count++; }; deteksi7=count; count=0;
while (PINA.0==1) {}; while (PINA.0==0) { delay_us(100); count++; }; deteksi8=count; count=0;
while (PINA.0==1) {}; while (PINA.0==0) { delay_us(100); count++; }; deteksi9=count; count=0;
while (PINA.0==1) {}; while (PINA.0==0) { delay_us(100); count++; }; deteksi10=count; count=0;
(29)
while (PINA.0==0) { delay_us(100); count++; }; deteksi11=count; count=0;
while (PINA.0==1) {}; while (PINA.0==0) { delay_us(100); count++; }; deteksi12=count; count=0; if(e==1){e=0;goto ulang;}
//========CEK 12 DATA===========
datar1=((deteksi1/5)-1)*1;//data hasil deteksi pulsa dibagi 5 dikurangi 1 datar2=((deteksi2/5)-1)*2;//jadi jika datanya 6 maka outputnya akan = 0 datar3=((deteksi3/5)-1)*4;//sedangkan jika datanya 12 maka outputnya akan = 1
datar4=((deteksi4/5)-1)*8;//lalu hasil tersebut dikalikan dengan nilai2 bit datar5=((deteksi5/5)-1)*16; datar6=((deteksi6/5)-1)*32; datar7=((deteksi7/5)-1)*64; datar8=((deteksi8/5)-1)*128; datar9=((deteksi9/5)-1)*256; datar10=((deteksi10/5)-1)*512; datar11=((deteksi11/5)-1)*1024; datar12=((deteksi12/5)-1)*2048; if(e==1){e=0;goto ulang;}
(30)
//=========PENJUMLAHAN 12 DATA====
index1=datar12+datar11+datar10+datar9+datar8+datar7+datar6+datar5+datar4+d atar3+datar2+datar1;
index1=index1^255;
if(start>=24 && start<=27){start=24;nostartR=0;} if(start>=36 && start<=39){start=36;nostartR=1;} if(start>=48 && start<=51){start=48;nostartR=2;} if(flag==1)
{ flag=0;
if(index1==dataON[indexON] && nostart==nostartR) { if(e==1){e=0;goto ulang;} sprintf(startbitLCD,"Start=%d",start); sprintf(dataLCD,"DataON=%d",dataON[indexON]); lcd_clear(); lcd_gotoxy(0,0); lcd_puts(startbitLCD); lcd_gotoxy(0,1); lcd_puts(dataLCD); if(e==1){e=0;goto ulang;}else {nostart=nostart+1;indexON=indexON+1;flagON=indexON;} if (indexON==10)indexON=0; } else{delay_ms(65);error=1;} } if(e==1){e=0;goto ulang;} if(flag==2) { flag=0;
(31)
{ sprintf(startbitLCD,"Start=%d",start); sprintf(dataLCD,"DataOFF=%d",dataOFF[indexOFF]); lcd_clear(); lcd_gotoxy(0,0); lcd_puts(startbitLCD); lcd_gotoxy(0,1); lcd_puts(dataLCD); if(e==1){e=0;goto ulang;}else {nostart=nostart+1;indexOFF=indexOFF+1;flagOFF=indexOFF;} if (indexOFF==10)indexOFF=0; } else {delay_ms(65);error=1;} } if (nostart==3)nostart=0; } if(e==1){e=0;goto ulang;} delay_ms(100); }; }
(32)
(33)
/***************************************************** This program was produced by the
CodeWizardAVR V1.25.3 Standard Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com
Project : Version :
Date : 9/29/2010
Author : F4CG Company : F4CG Comments:
Chip type : ATmega16 Program type : Application Clock frequency : 8.000000 MHz Memory model : Small
External SRAM size : 0 Data Stack size : 256
*****************************************************/
#include <mega16.h> #include<delay.h> #include<stdio.h>
// Alphanumeric LCD Module functions #asm
(34)
#endasm
#include <lcd.h>
// Declare your global variables here
unsigned int
data1,data2,data3,data4,data5,data6,data7,data8,data9,data10,data11,data0; unsigned int dataON[11]={137,136,135,134,133,132,131,130,129,128}; unsigned int dataOFF[11]={138,139,140,141,142,143,144,145,146,147}; unsigned int startBit[5]={24,36,48};
unsigned int
count,deteksi1,deteksi2,deteksi3,deteksi4,deteksi5,deteksi6,deteksi7,deteksi8,dete ksi9,deteksi10,deteksi11,deteksi12;
unsigned int
datar1,datar2,datar3,datar4,datar5,datar6,datar7,datar8,datar9,datar10,datar11,data r12;
unsigned int bit0,bit1,bit2,bit3,bit4,bit5,bit6,bit7,bit8,bit9,bit10,bit11; unsigned int start,nomorON,nomorOFF,nomorStart,errorOFF,errorON; unsigned int dataEns;
unsigned int index; char startbitLCD[16]; char dataLCD[16]; void header() { PORTA.1=0; delay_us(2400); PORTA.1=1; delay_us(600); } void header1() {
(35)
PORTA.1=0; delay_us(3600); PORTA.1=1; delay_us(600); } void header2() { PORTA.1=0; delay_us(4800); PORTA.1=1; delay_us(600); } void logic0() { PORTA.1=0; delay_us(600); PORTA.1=1; delay_us(600); } void logic1() { PORTA.1=0; delay_us(1200); PORTA.1=1; delay_us(600); } void konversi()
(36)
{ dataEns=index^255; data0=dataEns/2; bit0=dataEns%2; data1=data0/2; bit1=data0%2; data2=data1/2; bit2=data1%2; data3=data2/2; bit3=data2%2; data4=data3/2; bit4=data3%2; data5=data4/2; bit5=data4%2; data6=data5/2; bit6=data5%2; data7=data6/2; bit7=data6%2; data8=data7/2; bit8=data7%2; data9=data8/2; bit9=data8%2; data10=data9/2; bit10=data9%2; data11=data10/2; bit11=data10%2; } void main(void) {
(37)
// Input/Output Ports initialization // Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x33;
DDRA=0x02;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00;
DDRD=0x88;
// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped
(38)
// Mode: Normal top=FFh // OC0 output: Disconnected TCCR0=0x00;
TCNT0=0x00; OCR0=0x00;
// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off
// Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00;
// Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped
(39)
// Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00;
TCCR2=0x00; TCNT2=0x00; OCR2=0x00;
// External Interrupt(s) initialization // INT0: Off
// INT1: Off // INT2: Off MCUCR=0x00; MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00;
// Analog Comparator initialization // Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80;
SFIOR=0x00;
// LCD module initialization lcd_init(16); nomorON=0; nomorOFF=0; nomorStart=0; errorON=0; errorOFF=0;
(40)
while (1) {
// Place your code here while (PINA.0==1) {}; while (PINA.0==0) { delay_us(100); count++; }; start=count; count=0;
if ((start>=24 && start<=27)||(start>=36 && start<=39)||(start>=48 && start<=51))
{
while (PINA.0==1) {}; while (PINA.0==0) { delay_us(100); count++; }; deteksi1=count; count=0;
while (PINA.0==1) {}; while (PINA.0==0) { delay_us(100); count++; }; deteksi2=count; count=0;
(41)
while (PINA.0==0) { delay_us(100); count++; }; deteksi3=count; count=0;
while (PINA.0==1) {}; while (PINA.0==0) { delay_us(100); count++; }; deteksi4=count; count=0;
while (PINA.0==1) {}; while (PINA.0==0) { delay_us(100); count++; }; deteksi5=count; count=0;
while (PINA.0==1) {}; while (PINA.0==0) { delay_us(100); count++; }; deteksi6=count; count=0;
(42)
while (PINA.0==0) { delay_us(100); count++; }; deteksi7=count; count=0;
while (PINA.0==1) {}; while (PINA.0==0) { delay_us(100); count++; }; deteksi8=count; count=0;
while (PINA.0==1) {}; while (PINA.0==0) { delay_us(100); count++; }; deteksi9=count; count=0;
while (PINA.0==1) {}; while (PINA.0==0) { delay_us(100); count++; }; deteksi10=count; count=0;
(43)
while (PINA.0==0) { delay_us(100); count++; }; deteksi11=count; count=0;
while (PINA.0==1) {}; while (PINA.0==0) { delay_us(100); count++; }; deteksi12=count; count=0;
//========CEK 12 DATA===========
datar1=((deteksi1/5)-1)*1;//data hasil deteksi pulsa dibagi 5 dikurangi 1 datar2=((deteksi2/5)-1)*2;//jadi jika datanya 6 maka outputnya akan = 0 datar3=((deteksi3/5)-1)*4;//sedangkan jika datanya 12 maka outputnya akan = 1
datar4=((deteksi4/5)-1)*8;//lalu hasil tersebut dikalikan dengan nilai2 bit datar5=((deteksi5/5)-1)*16; datar6=((deteksi6/5)-1)*32; datar7=((deteksi7/5)-1)*64; datar8=((deteksi8/5)-1)*128; datar9=((deteksi9/5)-1)*256; datar10=((deteksi10/5)-1)*512; datar11=((deteksi11/5)-1)*1024; datar12=((deteksi12/5)-1)*2048;
(44)
index=datar12+datar11+datar10+datar9+datar8+datar7+datar6+datar5+datar4+dat ar3+datar2+datar1;
index=index^255;
if(start>=24 && start<=27)start=24; if(start>=36 && start<=39)start=36; if(start>=48 && start<=51)start=48; if(index>=128 && index<=137) {
if (index==dataON[nomorON] && start==startBit[nomorStart]) {
if (errorOFF==1){PORTD.3=0;goto lanjut;} PORTD.3=1;
nomorON=nomorON+1; nomorStart=nomorStart+1; if(nomorStart==3)nomorStart=0; if (nomorON==10) nomorON=0; }
else errorON=1; }
else if(index>=138 && index<=147) {
if(index==dataOFF[nomorOFF] && start==startBit[nomorStart]) {
if (errorON==1){PORTD.3=1;goto lanjut;} PORTD.3=0; nomorOFF=nomorOFF+1; nomorStart=nomorStart+1; if(nomorStart==3)nomorStart=0; if(nomorOFF==10)nomorOFF=0; } else errorOFF=1;
(45)
} lanjut: sprintf(startbitLCD,"StartBit=%d",start); sprintf(dataLCD,"Data=%d",index); lcd_gotoxy(0,0); lcd_puts(startbitLCD); lcd_gotoxy(0,1); lcd_puts(dataLCD);
delay_ms(100); //delay 100ms konversi(); if(start==24)header(); if(start==36)header1(); if(start==48)header2(); if(bit0==0) { logic0(); } else logic1(); if(bit1==0) { logic0(); } else logic1(); if(bit2==0) { logic0(); } else logic1(); if(bit3==0) { logic0(); }
(46)
else logic1(); if(bit4==0) { logic0(); } else logic1(); if(bit5==0) { logic0(); } else logic1(); if(bit6==0) { logic0(); } else logic1(); if(bit7==0) { logic0(); } else logic1(); if(bit8==0) { logic0(); } else logic1(); if(bit9==0) { logic0(); } else logic1(); if(bit10==0)
(47)
{ logic0(); }
else logic1();
if(bit11==0) {
logic0(); }
else logic1(); }
}; }
(48)
LAMPIRAN B
(49)
(50)
(51)
(52)
(53)
(54)
(55)
(56)
(57)
(58)
(59)
(60)
(61)
(62)
(63)
(64)
(65)
(66)
(67)
(68)
(69)
(70)
(71)
(72)
(73)
(74)
(75)
(76)
(77)
(78)
(79)
(80)
(81)
(82)
(83)
(84)
(85)
(86)
(87)
(88)
(89)
(90)
(91)
(92)
(93)
(94)
(95)
(96)
(97)
(98)
(99)
LAMPIRAN C
DATA SHEET IR – 8510
(100)
(1)
(2)
Bab I Pendahuluan 1
BAB I
PENDAHULUAN
Pada bab ini akan diuraikan mengenai latar belakang, identifikasi masalah, tujuan, pembatasan masalah, dan sistematika penulisan.
I.1. Latar Belakang Masalah
Dengan semakin berkembangnya teknologi, mendorong manusia untuk menciptakan perangkat yang dapat mendukung kinerja manusia dalam melakukan proses pekerjaan agar lebih praktis dan efisien. Salah satu aplikasi nyata adalah pengendalian perangkat yang membantu pekerjaan manusia. Untuk mengendalikan perangkat dapat digunakan mikrokontroler sebagai pengendali dari sistem tersebut. Pengendalian dapat dilakukan melalui media non-fisik. Penggunaan media non-fisik (tanpa kabel/wireless) dapat menjadi pilihan yang lebih efektif. Untuk mengontrol suatu objek secara jarak jauh dengan media wireless diperlukan suatu modul interface sehingga terjadi komunikasi dua arah.
Pada tugas akhir ini, dibuat sistem yang berguna untuk mengendalikan perangkat dengan menggunakan mikrokontroler dan modul infrared. Karena keamanan pada sistem komunikasi dengan infrared cukup rendah maka digunakanlah kode keamanan yang berotasi untuk meningkatkan keamanannya. Adapun interface yang dibuat menggunakan modul infrared transmitter sebagai pengirim dan modulinfrared receiversebagai penerima.
I.2. Perumusan Masalah
Bagaimana merealisasikan suatu sistem pengendalian dengan kode keamanan yang berotasi yang dapat melakukan fungsi on dan off sesuai instruksi dari remote control infrared yang disimulasikan dengan sebuah lampu LED?
(3)
I.3. Tujuan
Tujuan Tugas Akhir ini adalah membuat infrared remote controlberbasis mikrokontroler untuk mengirim dan menerima sinyal kendali ON/OFF dengan kode keamanan yang berotasi.
I.4. Pembatasan Masalah
Tugas Akhir ini dibatasi oleh beberapa hal di bawah ini :
Alat yang dibuat hanya untuk komunikasi satu pasang transmiter infrared dan receiver infrared.
Alat yang dibuat hanya untuk mengendalikan kondisi on dan off. Perangkat wireless yang digunakan adalah modul infrared transmitter
8510 sebagai pengirim sinyal dan modul Infrared Receiver 8510 sebagai penerima sinyal.
Output dari mikrokontroler ke perangkat disimulasikan dengan menggunakan sebuah lampu LED.
Dalam tugas akhir ini digunakan mikrokontroler AVR ATMEGA16. Jumlah tombol yang dipakai terbatas 2 saja yaitu untuk fungsi on dan
off.
I.5. Sistematika Penulisan
Laporan terdiri dari beberapa bab dengan garis besar sebagai berikut : Bab I Pendahuluan
Bab ini berisi latar belakang penelitian, identifikasi masalah, tujuan penelitian, pembatasan masalah, dan sistematika penulisan.
Bab II Landasan Teori
Bab ini berisi teori-teori yang berkaitan dengan mikrokontroler AVR, remote control infra - red, IR – 8510.
(4)
Bab I Pendahuluan 3
Bab ini berisikan data hasil pengujian dan analisa data. Ada pun jenis pengujian yang dilakukan adalah pengujian bentuk sinyal di tranceiver dan receiver, pengujian rotasi dari kode keamanan yang telah dibuat, pengujian jarak dan pengujian sudut pada lokasi indoor.
Bab V Kesimpulan dan Saran
Berisi kesimpulan dari hasil penelitian serta saran-saran untuk pengembangan selanjutnya.
(5)
BAB V
KESIMPULAN DAN SARAN
V.1. Kesimpulan
Dari analisa dan pengujian yang dilakukan pada alat, dapat diambil kesimpulan sebagai berikut :
Remote control inframerah dengan kode keamanan yang berotasi berhasil direalisasikan.
Jarak maksimal yang masih bisa digunakan dengan cukup baik (persentase keberhasilan >= 70%) untuk remote control yang dirancang adalah 7,6 m dengan kondisi tanpa penghalang.
Pada jarak 50 cm, sudut maksimal yang masih bisa digunakan dengan baik (persentase keberhasilan >= 70%) adalah 54o dengan kondisi tanpa penghalang, dan pada jarak 5 m sudut maksimal yang masih bisa digunakan dengan baik (persentase keberhasilan >= 70%) adalah 35o.
V.2. Saran
Pada Tugas Akhir ini masih terdapat beberapa kekurangan sehingga perlu dilakukan pengembangan. Beberapa saran tentang Tugas Akhir ini adalah :
Untuk pengembangan dapat dipakai data perintah yang tidak berurutan. Untuk pengembangan dapat digunakan kombinasi data dan startbit yang
lebih banyak untuk meningkatkan keamanan.
Untuk pengembangan dapat dikembangkan pengendalian ON/OFF untuk lebih dari satu alat.
(6)