2012
WORKSHOP ROBOTIKA DASAR I
Mada Sanjaya WS, Ph.D 1
PENGENALAN ROBOT
Rekan-rekan pasti telah mengenal istilah robot?? Robot sering sekali di jadikan tema utama dalam film-film Hollywood, Semua mungkin tahu robot transformer, RoboCOP, wall-E, DoraEMON, ataupun astroBOY. Robot menjadi trend, kemungkinan karena robot adalah perwujudan dari teknologi futuristic yang paling canggih. Gambar 1. Wall-E robot yang bisa jatuh cinta
Robot menurut kamus bahasa, berasal dari kata robota yang artinya pekerja. Sehingga robot dapat didefinisikan sebagai sebuah alat mekanik yang dapat bekerja secara terus menerus untuk membantu pekerjaan manusia, yang dalam menjalankan tugasnya dapat dikontrol langsung oleh manusia ataupun bekerja secara otomatis sesuai program yang telah ditanamkan pada chip kontroler robot.
Perkembangan Dunia Robot Trend perkembangan dunia robot, tidak hanya ada pada angan-angan pembuat film Hollywood, Tetapi merupakan hasil nyata dari kerja panjang para peneliti dan teknokrat yang bergelut di bidang otomasi dan kecerdasan buatan. Perkembangan dunia robot salah satunya dapat 2
PENGENALAN ROBOT
Rekan-rekan pasti telah mengenal istilah robot?? Robot sering sekali di jadikan tema utama dalam film-film Hollywood, Semua mungkin tahu robot transformer, RoboCOP, wall-E, DoraEMON, ataupun astroBOY. Robot menjadi trend, kemungkinan karena robot adalah perwujudan dari teknologi futuristic yang paling canggih. Gambar 1. Wall-E robot yang bisa jatuh cinta
Robot menurut kamus bahasa, berasal dari kata robota yang artinya pekerja. Sehingga robot dapat didefinisikan sebagai sebuah alat mekanik yang dapat bekerja secara terus menerus untuk membantu pekerjaan manusia, yang dalam menjalankan tugasnya dapat dikontrol langsung oleh manusia ataupun bekerja secara otomatis sesuai program yang telah ditanamkan pada chip kontroler robot.
Perkembangan Dunia Robot Trend perkembangan dunia robot, tidak hanya ada pada angan-angan pembuat film Hollywood, Tetapi merupakan hasil nyata dari kerja panjang para peneliti dan teknokrat yang bergelut di bidang otomasi dan kecerdasan buatan. Perkembangan dunia robot salah satunya dapat 2
terlihat dari perkembangan robot ASIMO milik Honda yang telah menghabiskan waktu riset selama 20 tahun.
Gambar 2. Perkembangan ASIMO
Kecerdasan Buatan Mungkinkah robot akan dapat berfikir dan dapat berinteraksi dengan manusia. Wahhh,,,itu sudah terjadi, meski masih sangat sederhana. KISMET adalah robot social pertama yang dapat berinteraksi dengan manusia. KISMET adalah robot buatan Dr. Cynthia Breazeal yang merupakan salah satu ilmuwan robot wanita di Dunia. Beliau bekerja di lab kecerdasan buatan MIT (ITB-nya Amrik).
3
Gambar 3. Interaksi KISMET dan Dr. Cynthia Breazeal
Saat ini, dunia robotika terus berkembang, bukan hanya robot humanoid, robot berkembang dalam berbagai kondisi dan kebutuhan manusia, seperti terlihat pada ilustrasi berikut.
Gambar 4. Bidang-bidang robotika
Secara umum robot terdiri dari tiga bagian utama yaitu mekanik, elektronik, dan pemrograman/kontrol.
4
ROBOT MOBIL KONTROL ANALOG (Remote Control Analog Mobile Robot) Tentu rekan-rekan sudah tidak asing lagi dengan mobil atau pesawat remot kontrol, mobil remot kontrol merupakan salah satu jenis robot teleoperated. Yang dapat di kendalikan arah geraknya. Mobil tersebut dapat dikendalikan maju, mundur, belok kiri, ataupun belok kanan.
Gambar 1. Satu set mobil remot kontrol
Pada pembahasan kali ini, kita akan membuat sebuah robot remot kontrol sederhana yang sangat mudah untuk dibuat.
Simulasi Proteus Berikut adalah sebuah desain sederhana dari robot kontrol analog. (Untuk simulasinya dapat di lihat pada CD lampiran)
5
Gambar 2. Desain dan simulasi robot kontrol analog sederhana
Desain Aktual Untuk membuat desain actual robot, dalam buku ini dibuat menggunakan software Fritzing.
6
Gambar 3. Desain aktual robot kontrol analog sederhana
Robot kontrol analog ini dapat dibuat modifikasi dengan berbagai bentuk dan fungsi, misalnya robot soccer, walking robot kontrol dan lainnya. Berikut adalah robot beetlebot yang siap untuk di uji coba.
(a)
(b)
7
(c) Gambar 4. Robot mobil kontrol analog
Walking Robot Kontrol Analog 4 Kaki Dengan sedikit memodifikasi roda menjadi bentuk kaki, maka akan diperoleh walking robot kontrol analog berikut:
Gambar 5. Robot berkaki empat dengan kontrol analog
Ayo tunjukkan kreativitasmu !!!
8
PENGENALAN ELEKTRONIKA DIGITAL: BERMAIN DENGAN LED
Gambar 1. Ilustrasi aplikasi teknologi digital
Berbagai jenis aplikasi teknologi yang ada saat ini, sebagian besar merupakan produk teknologi digital. Begitupula dengan bidang robotika, sebagian besar merupakan pengembangan teknologi digital yang dikombinasikan dengan kecerdasan buatan ( soft computing).
PENGENALAN PROGRAM CODE VISION AVR CodeVisionAVR merupakan salah satu software untuk menmprogram mikrokontroler yang berfungsi sebagai text editor dalam menulis baris perintah sekaligus sebagai compiler yang dapat mengubah file sumber 9
menjadi file hexa. Software CodeVision AVR versi demo dapat di unduh dari http://www.hpinfotech.ro/html/cvavr.htm. CodeVisionAVR menyediakan berbagai fasilitas yang memudahkan pengguna. Salah satunya adalah CodeWizardAVR yang memberikan kemudahan dalam melakukan konfigurasi fungsi-fungsi pin dan fitur yang yang ingin digunakan. Selain itu juga CodeVisionAVR menyediakan toolbar yang memudahkan pengguna untuk melakukan berbagai interaksi yang diinginkan. Berikut adalah metode penulisan program pada CV AVR: #include
//deklarasi variabel global dapat dituliskan disini. ……
void main(void) { //deklarasi variabel local dapat dituliskan disini. …… // kode-kode yang dihasilkan CodeWizard ……..
while (1) { //program utama dapat dituliskan disini. ……
} }
PROYEK DIGITAL 1. MEMBUAT BLINKING LED Memulai Program 1. Double klik CodeVisionAVR Evaluation V2.05.0 untuk memulai program
10
2. Membuat new file
3. Kemudian akan muncul dialog, pilih project, klik OK.
4. Kemudian muncul pula dialog confirm, klik Yes.
5. Setelah itu akan muncul dialog CodeWizardAVR, pilih AT90, ATtiny, ATmega, FPSLIC, klik OK.
6. Maka akan muncul file CodeWizard-untitled.cwp , setelah itu buka chip, kemudian isikan dengan jenis mikrokontroler yang digunakan, 11
dalam eksperimen ini kita gunakan ATmega16 dengan Clock dari crystal sebesar 12 MHz.
7. Untuk menyimpan file, pilih program, pilih Generate, Save and Exit seperti berikut
8. Setelah itu, isikan nama file yang ingin digunakan dengan mengisi kotak dialog berikut
12
9. File yang tersimpan terdiri dari tiga file, dengan masing-masing nama ditulis sama, dan klik save. Setelah itu akan tampil running_led.prj yang merupakan file program project yang siap untuk diisi logika program. Kemudian isikan Keterangan Project, Version, Author, Company, Comment sesuai kebutuhan.
10. Kemudian lengkapi program sesuai project yang dibuat, dalam eksperimen membuat rangkaian blinking LED kita dapat menambahkan kode program pada Preprocessor (#), inisialisasi pada bagian void main(void), serta program utama dalam while(1). Berikut adalah contoh tambahan kode program untuk membuat rangkaian blinking LED. /***************************************************** This program was produced by the CodeWizardAVR V2.05.0 Professional Automatic Program Generator
13
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Blinking LED Version : I Date : 11/17/2012 Author : Mada Sanjaya WS, Ph.D Company : Bolabot Techno Robotic School Comments: "SEMANGAT!!!" Chip type : ATmega16 Program type : Application AVR Core Clock frequency: 12.000000 MHz Memory model : Small External RAM size :0 Data Stack size : 256 *****************************************************/ #include #include void main(void) { //mendefinisikan output berupa LED DDRD=0xFF; while (1) { PORTD=0x00; // LED menyala delay_ms(1000); // LED menyala selama satu detik PORTD=0xFF; // LED mati delay_ms(1000); // LED mati selama satu detik } }
11. Setelah semua kode program ditulis dengan benar. Tekan tombol F9 untuk compile, maka akan muncul kotak informasi ada tidaknya error. Jika sudah tidak ada error klik OK.
14
12. Program siap di upload pada hardware mikrokontroler untuk menghidupkan sistem yang telah dibuat.
Simulasi Proteus Program Blinking LED
Gambar 2. Simulasi proteus rangkaian blinking led
15
Cara mengcompile program CV AVR ke Proteus 1. Klik kanan, pada bagian mikrokontroler, kemudian pilih edit properties
2. Cari program file, berupa file Exe, dari program yang telah dibuat, dalam proyek ini, file bernama running_led.hex. Kemudian klik OK.
3. Kemudian klik Play untuk memulai simulasi, dan Stop untuk menghentikan simulasi Proteus.
16
PROYEK DIGITAL 2. MENYALAKAN LED DENGAN TOMBOL Simulasi Proteus Menghidupkan LED dengan Tombol
Gambar 3. Simulasi Proteus menghidupkan LED dengan tombol
Membuat Program Untuk langkah 1-8, prosedurnya sama dengan proyek digital 1. 9. Isikan nama tiga file: tombol_led.c, tombol_led.cwp, tombol_led.prj. 10. Isikan program berikut: /***************************************************** This program was produced by the CodeWizardAVR V2.05.0 Professional Automatic Program Generator © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Menghidupkan LED dengan tombol Version : I
17
Date : 11/17/2012 Author : Mada Sanjaya WS, Ph.D Company : Bolabot Techno Robotic School Comments: "SEMANGAT!!!" Chip type : ATmega16 Program type : Application AVR Core Clock frequency: 12.000000 MHz Memory model : Small External RAM size :0 Data Stack size : 256 *****************************************************/ #include void main(void) { // Mendefinisikan input tombol DDRB.0=0; DDRB.1=0; //Mendefinisikan output LED DDRD.1=1; DDRD.2=1; DDRD.3=1; DDRD.4=1; //kondisi awal PORT PORTD.1=1; //semua led mati PORTD.2=1; PORTD.3=1; PORTD.4=1; while (1) { if (PINB.0==0) { PORTD.1=0; //led biru nyala PORTD.2=0; //led biru nyala PORTD.3=1; //led kuning mati PORTD.4=1; //led kuning mati } else if (PINB.1==0) { PORTD.1=1; //led biru mati PORTD.2=1; //led biru mati PORTD.3=0; //led kuning nyala PORTD.4=0; //led kuning nyala } else {
18
PORTD.1=1; //semua led mati PORTD.2=1; PORTD.3=1; PORTD.4=1; } } }
SELAMAT MENCOBA !!! (^v^)
19
ROBOT KONTROL DIGITAL REMOTE KABEL
Film Real steel !!?, Gambar disamping menampilkan impian robot masa depan yang dapat dikontrol langsung mengikuti gerak manusia yang menjadi pengontrolnya. Gambar 1. Ilustrasi robot kontrol
Secara umum robot tergolong menjadi dua bagian yaitu robot otomatis dan robot teleoperated. Robot otomatis dapat bekerja tanpa kontrol langsung oleh manusia, robot tersebut bekerja berdasarkan program yang ditanamkan seperti robot line follower, robot avoider obstacle, robot humanoid, lampu lalu lintas, pintu otomatis, dan sebagainya. Sedangkan robot teleoperated harus dikontrol langsung oleh manusia, seperti robot kontrol, televisi, komputer dan lainnya.
20
Pada eksperimen dalam bab ini, kita akan membuat robot digital teleoperated sederhana yang dapat dikontrol untuk bergerak maju, mundur, belok kiri, belok kanan, serta berputar. Untuk robot kontrol dalam eksperimen didalam bab ini masih menggunakan kontrol berbasis kabel.
Tombol Push Button
Push button merupakan sebuah device untuk menghubungkan dan memutuskan rangkaian listrik antara 2 titik. Penggunaan push button dikehidupan sehari-hari hampir menyentuh semua bidang. Di bidang komputer dengan keyboard dan mouse, dibidang otomotif dengan panel-panel kontrolnya, bahkan diperalatan rumah tangga sekalipun seperti kontrol peralatan listrik juga menggunakan push button. Aktif high pushbutton Aktif high pushbutton merupakan push button yang memiliki karakteristik saat tidak ada penekanan maka dalam keadaan terputus (off) sedangkan saat ditekan akan tersambung (on).
Gambar 2. Bentuk Fisik Push Button 4 pin
21
Aktif low pushbutton Aktif low push button merupakan push button yang memiliki karakteristik saat tidak ada penekanan maka dalam keadaan tersambung (on) sedangkan saat ditekan akan terputus (off).
Desain Lengkap Robot Kontrol Digital
Gambar 3. Skema proteus robot kontrol digital
Sesuai desain pada tombol gerak kiri dihubungkan dengan PIN D.0, tombol gerak kanan dihubungkan dengan PIN D.1, tombol gerak maju dihubungkan dengan PIN D.2, serta gerak mundur dihubungkan dengan PIN D.3. Motor kiri diatur oleh PORTD.5 dan PORTD.6, sedangkan motor kanan diatur oleh PORTD.7 dan PORTB.0. Logika yang dibuat 22
untuk membuat sebuah robot kontrol dapat diringkas dalam tabel berikut Tabel 1. Kondisi Gerak Motor dan Kondisi Logika Tiap Pin Motor Kondisi
Tombol
D.5
D.6
D.7
B.0
Push-Button Maju
D.2 = 0
1
0
1
0
Belok Kiri
D.0 = 0
1
0
0
0
Belok Kanan
D.1 = 0
0
0
1
0
Mundur
D.3 = 0
0
1
0
1
Ingat motor hanya akan bergerak jika diberi beda polaritas antara dua pin
Membuat Program Robot Kontrol Digital dengan CV AVR /***************************************************** This program was produced by the CodeWizardAVR V2.05.0 Professional Automatic Program Generator © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Robot Kontrol Digital Version : I Date
: 11/20/2012
Author : Mada Sanjaya WS, Ph.D Company : Bolabot Techno Robotic School
23
Comments: Bekerja untuk Kebangkitan Teknologi Indonesia Chip type
: ATmega8
Program type
: Application
AVR Core Clock frequency: 12.000000 MHz Memory model
: Small
External RAM size
:0
Data Stack size
: 256
*****************************************************/ #include #include // Declare your global variables here void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=In // State7=T State6=T State5=T State4=T State3=T State2=0 State1=0 State0=T PORTB=0x00; DDRB=0x06; // Port C initialization // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // 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;
24
DDRD=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x00; TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 11.719 kHz // Mode: Fast PWM top=0x00FF // OC1A output: Non-Inv. // OC1B output: Non-Inv. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0xA1; TCCR1B=0x0D; 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: Timer2 Stopped
25
// Mode: Normal top=0xFF // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off MCUCR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; // USART initialization // USART disabled UCSRB=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // ADC initialization // ADC disabled ADCSRA=0x00; // SPI initialization // SPI disabled SPCR=0x00; // TWI initialization
26
// TWI disabled TWCR=0x00; DDRD.0=0; // mendefinisikan sebagai input dari tombol gerak ke kiri DDRD.1=0; // mendefinisikan sebagai input dari tombol gerak ke kanan DDRD.2=0; // mendefinisikan sebagai input dari tombol gerak maju DDRD.3=0; // mendefinisikan sebagai input dari tombol gerak mundur DDRD.5=1; // mendefinisikan sebagai ouput motor kiri DDRD.6=1; // mendefinisikan sebagai ouput motor kiri DDRD.7=1; // mendefinisikan sebagai ouput motor kanan DDRB.0=1; // mendefinisikan sebagai ouput motor kanan PORTD.0=1; // kondisi awal PORTD.1=1; PORTD.2=1; PORTD.3=1; PORTD.5=1; PORTD.6=1; PORTD.7=1; PORTB.0=1; OCR1A=200; // pengatur kecepatan motor menggunakan PWM untuk motor kiri OCR1B=200; // pengatur kecepatan motor menggunakan PWM untuk motor kanan while (1) { if (PIND.0==0)
//robot gerak ke kiri
{ PORTD.5=1; PORTD.6=0; PORTD.7=0; PORTB.0=0; } else if (PIND.1==0)
//robot gerak ke kanan
{ PORTD.5=0; PORTD.6=0;
27
PORTD.7=1; PORTB.0=0; } else if (PIND.2==0)
//robot gerak maju
{ PORTD.5=1; PORTD.6=0; PORTD.7=1; PORTB.0=0; } else if (PIND.3==0)
//robot gerak mundur
{ PORTD.5=0; PORTD.6=1; PORTD.7=0; PORTB.0=1; } else
//robot diam
{ PORTD.5=0; PORTD.6=0; PORTD.7=0; PORTB.0=0; } } }
28
ROBOT LINE FOLLOWER DIGITAL DENGAN IC KOMPARATOR Line follower Robot (Robot Pengikut Garis) adalah robot yang dapat
berjalan mengikuti sebuah lintasan, ada yang menyebutnya dengan Line Tracker, Line Tracer Robot dan sebagainya. Garis yang dimaksud adalah
garis berwarna hitam diatas permukaan berwarna putih atau sebaliknya, ada juga lintasan dengan warna lain dengan permukaan yang kontras dengan warna garisnya. Ada juga garis yang tak terlihat yang digunakan sebagai lintasan robot, misalnya medan magnet.
Gambar 1. Ilustrasi robot line follower dengan posisi sensor di atas permukaan putih
Seperti layaknya manusia, bagaimana manusia dapat berjalan mengikuti jalan yang ada tanpa menabrak dan sebagainya, tentunya karena manusia memiliki “mata” sebagai penginderanya. Begitu juga robot line follower 29
ini, dia memiliki sensor garis yang berfungsi seperti “mata” pada manusia. Sensor garis ini mendeteksi adanya garis atau tidak pada permukaan lintasan robot tersebut, dan informasi yang diterima sensor garis kemudian diteruskan ke prosesor untuk diolah sedemikian rupa dan akhirnya hasil informasi hasil olahannya akan diteruskan ke penggerak atau motor agar motor dapat menyesuaikan gerak tubuh robot sesuai garis yang dideteksinya.
Untuk merangkai rangkaian elektroniknya tahu
dulu
kita
diagram
blok
sistem
yang
bangun,
dengan
demikian
menjadi
mudah
mengerjakannya.
Blok
akan
akan
perlu
kita
sistem yang akan kita bagun
Gambar 2. Diagram blok robot line follower
paling tidak tampak seperti gambar berikut. Sistemnya terdiri dari sensor garis, rangkaian komparator, sistem minimum AT Mega 16 dan motor driver.
30
Skema Lengkap
Line follower Digital
IC Komparator
Pada skema lengkap robot line follower didesain dengan posisi sensor di atas permukaan putih. Dua buah sistem sensor di pasang pada pin B.0 dan B.1, sedangkan sistem actuator motor DC dipasang pada Port D.0 dan D.1 untuk motor kiri, D.2 dan D.3 untuk motor kanan. Prinsip kerja robot line follower berikut adalah saat sistem sensor berada di atas permukaan putih, akan ada pantulan cahaya dari LED yang akan mengenai sensor cahaya LDR sehingga resistansi sensor LDR berkurang sehingga arus bergerak melalui LDR. Kondisi tersebut menyebabkan arus output sensor menuju IC komparator LM 393 menjadi minimum, oleh IC LM 393, arus di non-inverting sehingga output menuju pin mikrokontroler menjadi LOW (0). Sebaliknya, saat sistem sensor berada di atas garis hitam, tidak akan ada pantulan cahaya dari LED yang akan mengenai sensor cahaya LDR sehingga resistansi sensor LDR sangat besar sehingga arus tidak akan melalui LDR. Kondisi tersebut menyebabkan arus output sensor menuju IC komparator LM 393 menjadi maksimum, oleh IC LM 393, arus di non-inverting sehingga output
menuju
pin
mikrokontroler
menjadi
HIGH
(1).
Oleh
mikrokontroler data logika pin tersebut kemudian diolah untuk mengerakan motor, motor akan bergerak jika kedua pin motor tersebut
31
memiliki beda polaritas. Selengkapnya mengenai logika gerak robot dapat dilihat pada Tabel 1 dan 2.
Tabel 1. Kondisi Gerak Motor dan pengaruh Sensor Kondisi
B.0 = 0
B.0 =1
B.1 = 0
Maju
Belok Kiri
B.1 = 1
Belok Kanan
Mati
Tabel 2. Kondisi Gerak Motor dan Kondisi Logika Tiap Pin Motor Kondisi
D.0
D.1
D.2
D.3
Maju
0
1
0
1
Belok Kiri
0
0
0
1
Belok Kanan
0
1
0
0
Mati
1
1
1
1
32
Gambar 3. Skema lengkap robot line follower menggunakan AT Mega 16
Bentuk Robot Line Follower
Gambar 4. Bentuk jadi robot line follower menggunakan AT Mega 16
33
Membuat Program Robot Line Follower dengan CV AVR
/***************************************************** This program was produced by the CodeWizardAVR V2.05.0 Professional Automatic Program Generator © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Robot Line follower Version : I Date
: 11/8/2012
Author : Mada Sanjaya WS, Ph.D Company : Bolabot Techno Robotic School Comments: www. bolabot. com Chip type
: ATmega16
Program type
: Application
AVR Core Clock frequency: 12.000000 MHz Memory model
: Small
External RAM size
:0
Data Stack size
: 256
*****************************************************/ #include # include //tambahan program untuk membuat waktu tunda // Alphanumeric LCD Module functions #include // Declare your global variables here void main(void)
34
{ // 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=0x00; DDRA=0x00; // 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=Out Func4=Out Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x30; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=0xFF // OC0 output: Disconnected TCCR0=0x00;
35
TCNT0=0x00; OCR0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 11.719 kHz // Mode: Fast PWM top=0x00FF // OC1A output: Non-Inv. // OC1B output: Non-Inv. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0xA1; TCCR1B=0x0D; 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: Timer2 Stopped // Mode: Normal top=0xFF // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00;
36
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; // USART initialization // USART disabled UCSRB=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // ADC initialization // ADC disabled ADCSRA=0x00; // SPI initialization // SPI disabled SPCR=0x00; // TWI initialization // TWI disabled TWCR=0x00;
37
// Alphanumeric LCD initialization // Connections specified in the // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTC Bit 0 // RD - PORTC Bit 1 // EN - PORTC Bit 2 // D4 - PORTC Bit 4 // D5 - PORTC Bit 5 // D6 - PORTC Bit 6 // D7 - PORTC Bit 7 // Characters/line: 16 lcd_init(16); // Tambahan kode mendefinisikan input output DDRB.0=0; DDRB.1=0; DDRD.0=1; DDRD.1=1; DDRD.2=1; DDRD.3=1; // Tambahan kode mendefinisikan kecepatan motor PWM OCR1A=200; OCR1B=200; // Tambahan kode mendefinisikan kondisi awal PORTB.0=1; //sensor kiri PORTB.1=1; //sensor kanan PORTD.0=0; PORTD.1=0; PORTD.2=0; PORTD.3=0; while (1) { if (PINB.0==1 & PINB.1==0) // Tambahan kode sensor kiri hitam, kanan putih, maka belok kiri {
38
PORTD.0=0; PORTD.1=0; PORTD.2=0; PORTD.3=1; lcd_clear (); lcd_gotoxy(0,0); lcd_putsf("B0=1 B1=0"); lcd_gotoxy(0,1); lcd_putsf("BELOK KIRI"); delay_ms(100); } else if (PINB.0==0 & PINB.1==1)
//
Tambahan kode sensor kiri putih, kanan hitam, maka belok
kanan { PORTD.0=0; PORTD.1=1; PORTD.2=0; PORTD.3=0; lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("B0=0 B1=1"); lcd_gotoxy(0,1); lcd_putsf("BELOK KANAN"); delay_ms(100); } else if (PINB.0==1 & PINB.1==1) // Tambahan kode sensor kiri hitam, kanan hitam, maka mati { PORTD.0=0; PORTD.1=0; PORTD.2=0; PORTD.3=0; lcd_clear (); lcd_gotoxy(0,0); lcd_putsf("B0=1 B1=1");
39