MODUL WORKSHOP ROBOT CERDAS BERBASIS MIKROKONTROLLER Surabaya, 08 – 09 Oktober 2016
HOZAIRI– AKHMAD ARIF KURDIANTO - FATKAN
KERJASAMA ITS & MA/SMA PROGRAM PENDIDIKAN TERAPAN BIDANG TIK (PRODISTIK) 2016
INSTITUT TEKNOLOGI SEPULUH NOPEMBER BADAN INOVASI & BISNIS VENTURA KERJASAMA ITS DENGAN MA/SMA PROGRAM PENDIDIKAN TERAPAN BIDANG TIK (PRODISTIK) Sekretariat : Gedung KPA Lt.2 - ITS, Kampus ITS Sukolilo - Surabaya 60111 Telp/Fax : 0821 1515 4449; E-mail :
[email protected]
Rundown Acara Workshop Robotika ‘Robot Cerdas Berbasis Mikrokontroler’ 08 – 09 Oktober 2016 NO
HARI / TANGGAL
JAM
MATERI
KOMPETENSI
0
07.00-07.30
1
07.30-08.00
Penyerahan komponen robot
2
08.00-08.30
Pembukaan
3
08.00-12.00
Pengenalan Hardware & Proses Perakitan robot
4 5
SABTU 08 OKTOBER 2016
REGISTRASI TIM Prof. Dr. Ketut Buda Artana, ST, MSc 1
12.00-13.00 13.00-15.00
Finishing Perakitan robot
1
15.00-15.30
7
15.30-17.00
Bedah Rangkaian Permasalahan Hardware
8
17.00-17.30
1. Penyerahan robot ke panitia 2. Kembali ke penginapan
9
08.00-10.00
1. Program C 2. Prosedur pemrograman
6,7,8
10
10.00-11.00
Permasalahan & Konversi Algoritma
9,10
11.00-12.00
Running Test I (Kualifikasi Robot)
8,9
MINGGU 09 OKTOBER 2016
12
12.00-13.00
13
13.00-15.00
14
15.00-15.30
Dr. Hozairi, MT. & Fatkan, S.ST., MT.
ISHOMA
6
11
PIC
Akhmad Arif Kurdianto, S.ST, MT. & Fatkan, S.ST., MT.
ISHO 3,4,5
Akhmad Arif Kurdianto, S.ST, MT. , Fatkan, S.ST., MT. & Dr. Hozairi, MT. TIM Akhmad Arif Kurdianto, S.ST, MT. , Fatkan, S.ST., MT. & Dr. Hozairi, MT. Akhmad Arif Kurdianto, S.ST, MT. , Fatkan, S.ST., MT. & Dr. Hozairi, MT. TIM
ISHOMA TIPS & TRIK, Running Test II (Penentuan Tim Terbaik)
8,9 PENUTUPAN
KOMPETENSI: 1. Mampu merakit dan memasang komponen robot 2. Mampu mengukur tegangan 3. Mampu memahami cara mengidentifikasi kerusakan komponen 4. Mampu mendeteksi bagian dari sistem yang bermasalah 5. Mampu membaca rangkaian 6. Mampu membaca program 7. Mampu menulis Program 8. Mampu menuangkan ide/algoritma kedalam bentuk program 9. Mampu menyelesaikan kesalahan program 10. Mampu mengidentifikasi antara kesalahan program dan hardware
TIM
Chapter 1 : Pengenalan Hardware & Proses Perakitan robot Tujuan 1. Mampu merakit dan memasang komponen robot 2. Mampu mengukur tegangan Peralatan 1. 2. 3. 4. 5.
Soder 30-40W Penyedot timah Pinset Tang potong/potongan kuku AVO meter
Teori dasar 1. RESISTOR Resistor adalah komponen elektronika yang berfungsi untuk menghambat arus listrik dan dirancang denga nilai resistansi tertentu. Resistor memiliki beragam jenis dan bentuk. Diantaranya resistor yang berbentuk silinder, smd (Surface Mount Devices), dan wirewound. Jenis jenis resistor antara lain komposisi karbon, metal film, wirewound, smd, dan resistor dengan teknologi film tebal.Resistor yang paling banyak beredar di pasaran umum adalah resistor dengan bahan komposisi karbon, dan metal film. Resistor ini biasanya berbentuk silinder dengan pita pita warna yang melingkar di badan resistor. Pita pita warna ini dikenal sebagai kode resistor. Dengan mengetahui kode resistor kita dapat mengetahui nilai resistansi resistor, toleransi, koefisien temperatur dan reliabilitas resistor tersebut.
Simbol resistor RESISTOR DENGAN KODE WARNA Resistor yang menggunakan kode warna ada 3 macam, yaitu: 1. Resistor dengan 4 pita warna dengan 1 pita warna untuk toleransi. 2. Resistor dengan 5 pita warna dengan 1 pita warna untuk toleransi. 3. Resistor dengan 5 pita warna dengan 1 pita warna untuk toleransi dan 1 pita warna untuk reliabilitas Sedangkan ukuran resistor bermacam macam sesuai dengan ukuran daya resistor itu.Dipasaran terdapat beberapa ukuran daya seperti ditunjukkan pada Gambar 1, untuk komposisi karbon dan Gambar 2 untuk metal film.
Gambar 1. Resistor komposisi karbon dengan ukuran daya 1/8, 1/4 dan 1/2 watt Page | 1
[email protected]==> 2016
Gambar 2. Resistor metal film dengan ukuran daya (dari atas ke bawah) 1/8W (toleransi±1%), 1/4W (toleransi±1%), 1W (toleransi±5%), 2W (toleransi±5%) KODE WARNA RESISTOR Kode warna resistor dapat disederhanakan seperti pada Gambar 3.
Gambar 3. Tabel sederhana kode warna resistor.
Page | 2
[email protected]==> 2016
Cara menggunakan tabel pada Gambar 3 adalah sebagai berikut: 1. Kolom colour menunjukkan warna pita pita pada resistor. Supaya mudah dihafal maka dapat diringkas menjadi hi-co-me-ji-ku-hi-bi-u-a-p-em-per-no, yaitu kempanjangan dari hitam-coklat-merah-jingga(oranye)-kuning-hijau-biru-ungu-abu abu-putih-emas-perakno warna. 2. Kolom band a, band b, band c, adalah pita resistor yang menunjukkan angka resistansi. 3. Kolom band d adalah pita resistor yang menunjukkan nilai resistansi namun dikalikan dengan nilai pada band a, band b, band c. 4. Kolom band d adalah pita resistor yang menunjukkan nilai toleransi. 5. Kolom band e adalah pita resistor yang menunjukkan nilai reliabilitas. 6. Untuk membedakan resistor dengan 5 pita dengan pita terakhir adalah toleransi dan 5 pita dengan pita terakhir adalah reliabilitas adalah dengan melihat jarak pita terakhir. Jika jaraknya lebar maka pita kelima adalah reliabilitas dan jika jaraknya sama dengan pita pita yang lain maka pita kelima adalah toleransi. 7. Pita pertama suatu resistor adalah yang paling dekat dengan ujung resistor. Contoh pembacaan kode warna resistor yang digunakan pada modul ini : 1. Resistor 1KΏ ± 1%
Coklat
hitam
hitam
coklat
coklat
1
0
0
X 101
1%
Resistor 1KΏ ± 5%
Coklat
hitam
merah
emas
1
0
X 102
5%
2. Resistor 33 KΏ ± 1%
Orange 3
orange 3
hitam 0
merah
coklat
X102
1% Page | 3
[email protected]==> 2016
Resistor 33 KΏ ± 5%
Orange 3
orange 3
orange
emas
X 103
5%
3. Resistor 47 KΏ ± 1%
Kuning
ungu
4
7
hitam 0
merah
coklat
X102
1%
Resistor 47 KΏ ± 5%
Kuning
ungu
orange
emas
4
7
X103
5%
2. VARIABLE RESISTOR Resistor Berubah (variable), ialah sebuah resistor yang nilainya dapat berubah-ubah dengan jalan menggeser atau memutar toggle pada alat tersebut. Sehingga nilai resistor dapat kita tetapkan sesuai dengan kebutuhan. Berdasarkan jenis ini kita bagi menjadi dua, Potensiometer, rheostat dan Trimpot (Trimmer Potensiometer) yang biasanya menempel pada papan rangkaian (Printed Circuit Board, PCB). Variable resistor yang digunakan pada modul ini adalah trimpot.
Gambar 4. Simbol dan fisik trimpot Page | 4
[email protected]==> 2016
Nilai dari trimpot dituliskan di badan dengan jumlah 3 angka seperti yang terlihat pada gambar atas. Perhitungan untuk nilai resistansi sama dengan perhitungan dengan memakai gelang. Hanya saja faktor 10n terletak pada karakter tiga . Contoh misalnya tertulis nilai 473K. Karena bilangan ketiganya tertulis 3 maka faktor 10n = 103 = 1000. jadi nilai resistansinya adalah 47.000 Ω. = 47 K Ω. 3. Light Emiting Diode (LED) Light Emiting Diode (LED) dapat mengeluarkan cahaya bila diberikan forward bias. Dioda jenis ini banyak digunakan sebagai indikator dan display. Misalnya dapat digunakan untuk seven segmen (display angka).
Gambar 5. Simbol dan fisik LED LED yang digunakan untuk penerima sensor adalah dari jenis superbright 5mm. Kelebihannya adalah memiliki intensitas dan focus yang lebih baik daripada LED biasa. Sedangkan untuk keperluan indicator digunakan LED kecil biasa 3mm. 4. PHOTODIODE Untuk photodiode, dapat disebut sebagai salah satu dari komponen sensor, yang dimaksud dengan sensor yaitu suatu komponen yang digunakan untuk mengubah suatu besaran fisika kedalam bentuk sinyal listrik, di mana sensor itu merupakan bagian dari tranducers, tranducers itu terbagi atas sensor dan actuator, actuator yaitu suatu komponen untuk mengubah besaran fisika dari sinyal listrik menjadi besaran fisika yang lainnya misalnya motor listrik, dan lain-lain sebagainya. jadi cara kerja dari photodiode itu dia menerima cahaya, kalau dari simbolnya, pada LED, anak panah menunjuk ke luar, sementara pada photodiode, anak panah menunjuk ke dalam, itu artinya photodiode menerima cahaya, dan resistansinya berubah-ubah sesuai dengan intensitas cahaya yang diterima olehnya, karena sebenarnya suatu photon dapat mendorong elektron bebas untuk menyebrangi persambungan pn junction, dan menyebabkan arus untuk mengalir.
Gambar 6. Simbol dan fisik photodiode
5. TRANSISTOR Pada modul ini penggunaan transistor ditekankan sebagai switch. Dimana akan berlaku kondisi on dan off. Dari berbagai bentuk transistor yang ada di pasaran, pada umumnya pada transistor terdapat tanda-tanda khusus baik berupa titik atau tojolan yang menunjukkan Page | 5
[email protected]==> 2016
posisi emitor. Sedangkan transistor yang berbentuk topi, kolektor terdapat pada badan transistor. Jenis transistor adalah NPN dan PNP. Transistor dapat dianalogikan sebagai dua buah diode
(i)
Gambar 7. Simbol dan fisik transistor
Gambar 7 adalah lambang trasistor NPN dan PNP beserta analoginya dengan menggunakan rangkaian dioda berdasarkan susunan semikonduktornya untuk menentukan kaki-kaki transistor secara analog. Cara kerja transistor : seperti yang ditunjukan oleh gambar di atas, tentang arah arusnya. Untuk NPN, jika ada arus yang mengalir dari basis menuju emitor maka akan ada arus yang mengalir dari kolektor menuju emitor. Untuk PNP, jika ada arus yang mengalir dari emitor menuju basis maka akan ada arus yang mengalir dari emitor menuju kolektor.
B = Ic / Ib, dimana Ic >> Ib Dimana: B : besar penguatan Ic : arus kolektor Ib : arus basis
Page | 6
[email protected]==> 2016
Catatan : Transistor tidak dapat digantikan oleh rangkaian dioda. Untuk transistor type NPN bias basis diberikan bias positf dan untuk type pnp sebaliknya yaitu bias negatif. Contoh:
+(Vcc)
Misal: Vcc = 3 Volt
Rb
Rb = 2 kohm Ib
Maka: Ib = Vcc-Vbe/Rb
-(gnd)
= 3 V-0.6/ 2000 = 1,2 mA
Langkah-langkah 1. Pemasangan jumper Pasang jumper di setiap titik yang telah dilingkari sesuai gambar berikut, lakukan penyoderan di kedua sisinya (atas dan bawah), kemudian dipotong
Page | 7
[email protected]==> 2016
2. Pemasangan Resistor 8x 10K dan 8x 1K Masing-masing resistor ini dipasang dari bawah PCB disoder dibagian atas
3. Pemasangan capasitor 2x 20pf
4. Pemasangan X’Tall 11.059200 MHz
Page | 8
[email protected]==> 2016
5. Pemasangan Resistor 10K dan 1K
6. Pemasangan socket IC 40 PIN
Page | 9
[email protected]==> 2016
7. Pemasangan 5x push button
` 8. Pemasangan 8x dioda 1A (IN4002)
9. Pemasangan dioda IN4148
Page | 10
[email protected]==> 2016
10. Pemasangan led indikator diameter 3mm
11. Pemasangan socket 7 pin
12. Pemasangan 4x kapasitor milar 100nF (104)
Page | 11
[email protected]==> 2016
13. Pemasangan IC regulator 7805
14. Pemasangan soket battery LiPo
15. Pemasangan soket ASP Downloader
16. Pemasangan VR 20K (203)
Page | 12
[email protected]==> 2016
17. Pemasangan IC L298
18. Pemasangan Saklar ON/OFF
19. Pemasangan LCD dan tiang LCD
Page | 13
[email protected]==> 2016
20. Pemasangan 8x led diameter 5mm warna merah
21. Pemasangan sensor Photo Diode diameter 3mm
22. Pemasangan tiang sensor dan tiang kipas
23. Pemasangan limit switch
24. -----------------------pemasangan komponen PCB kecil-----------------------
Page | 14
[email protected]==> 2016
25. Pemasangan resistor
26. Pemasangan transistor
27. Pemasangan dioda 1A (IN4002)
Page | 15
[email protected]==> 2016
Page | 17
[email protected]==> 2016
31. Pemasangan L pin head 7pin dan 2 pin
32. Cek dan finishing
Page | 18
[email protected]==> 2016
Chapter 2 : Pengenalan tentang AVR dan Code Vision AVR (CVAVR) Tujuan -
Mampu mengetahui fitur-fitur yang dimiliki oleh IC mikro dari keluarga AVR Mampu memprogram menggunakan bahasa C dengan bantuan CVAVR Mampu mengetahui cara menuangkan algoritma kedalah bentuk bahasa pemrograman
Peralatan -
PC atau Laptop dengan program CodeVisionAVR IC ATMega16 (1 unit robot yang telah dirakit)
Teori dasar Pada sesi ini, akan dikenalkan tentang pemrograman mikrokontroler keluarga AVR menggunakan bahasa C, dengan Code Wizard dari CVAVR agar dapat mempermudah programmer dalam mengisi register-register yang diperlukan tanpa perlu menghafal dengan rinci. IC ATMega16 merupakan Keluarga AVR yang memiliki fitur sebagai berikut
CVAVR memiliki fitur Code Wizard yand dapat digunakan untuk mengenerate secara otomatis dari konfigurasi yang kita pilih pada windows yang userfriendly.
Page | 19
[email protected]==> 2016
Dengan Code Wizard ini, akan membantu dalam melakukan setting : -
Chip : Konfigurasi jenis chip(IC) dan clock(kristal) yang digunakan Ports : Konfigurasi pin I/O sebagai input(kondisi pull-up atau tri-state) dan output (kondisi ‘1’ atau ‘0’) Timers : Setting Timer / Counter, Interrupt routine overflow, PWM LCD, USART, ADC internal, dan lainnya
Page | 20
[email protected]==> 2016
Chapter 3 : Pengenalan program Khazama Tujuan -
Mampu mengoperasikan program khazama
Peralatan -
PC atau Laptop dengan program khazama downloader
Prosedur 1. buka program aplikasi khazama, kemudian lakukan pemilihan jenis IC atmega16
2. klik file dan pilih load FLASH file to Buffer atau tekan Ctrl+L
Arahkan kealamat tempat file FLASH disimpan, pilih file folder exe dan pilih file berextensi Bin kemudian klik Open
Page | 21
[email protected]==> 2016
3. klik tombol Auto Program untuk memasukkan program ke IC
Page | 22
[email protected]==> 2016
Chapter 4 : Pengenalan blok dan fungsi program Tujuan -
Mampu membaca program Mampu menulis Program Mampu memahami masing-masing fungsi program Mampu menuangkan ide/algoritma kedalam bentuk program Mampu menyelesaikan kesalahan program Mampu mengidentifikasi antara kesalahan program dan hardware
Peralatan -
PC atau Laptop dengan program CAVR dan Khazama downloader
Prosedur 1. Dari window hasil generate CodeWizardAVR, modifikasi sesuai kebutuhan struktur program bahasa C :
Prototype •
Berisi dekarasi/ pernyataan dari fungsi-fungsi yang akan digunakan dalam program, contoh:
•
stdio.h, singkatan dari standard IO, yang berisi nama-nama fungsi-2 untuk mencetak dimonitor, file dan printer serta fungsi-fungsi untuk mengambil data dari keyboard dan file.
•
Ada 762 files yang ada pada folder/ direktori:
•
C:\Program Files\Microsoft Visual Studio\VC98\Include • • • • •
stdio.h (printf,scanf,getc,putc,gets,puts,sprintf,...) stdlib.h (abs,atof,atoi,free,malloc,itoa,tolower,toupper,...) conio.h (cprintf,getch,kbhit,...) math.h (abs,fabs,cos,log,pow,sin,tan,sqrt,ceil,floor...) string.h (memcpy,strcpy,strcmp,strlen,strcat,memmove...) Page | 23
[email protected]==> 2016
• process.h (execl,execle,execv,execve,...) • mega16.h • delay.h • dan lainnya... syarat penulisan •
Kata-kata cadangan (reserved word) dan fungsi harus ditulis menggunakan huruf kecil,
•
Nama Variabel ditulis dengan huruf besar dan kecil, dapat digabung dengan angka tetapi harus didahului huruf, tidak boleh menggunakan karakter khusus kecuali garis bawah ”_” (underscore), dan tidak boleh menggunakan kata-kata cadangan (printf,scanf, getch, dkk)
•
Nama Konstanta sebaiknya ditulis dengan huruf besar,
2. Inisialisasi port I/O, variabel dan kondisi yang diperlukan : PROTOTYPE #include <mega16.h> #include <delay.h> #include <stdio.h>
#define #define #define #define #define #define #define #define #define #define #define #define
lampu t1 t2 t3 t4 s_depan sensor_api led kipas buzzer pwmki pwmka
PORTB.3 PINC.0 PINC.1 PINC.2 PINC.3 PIND.0 PINC.4 PORTC.5 PORTC.6 PORTC.7 OCR1A OCR1B
// READ THE 8 MOST SIGNIFICANT BITS // OF THE AD CONVERSION RESULT unsigned char read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCH; } // DECLARE YOUR GLOBAL VARIABLES HERE Page | 24
[email protected]==> 2016
int hitung=0,mulai=0; char buff[33]; int i,j,k,rka=0,rki=0; bit x,kondisi; unsigned char kecepatanki,kecepatanka; eeprom int garis[10],back[10],tengah[10]; unsigned char sen[10],sensor; FUNGSI KONVERSI LOGIC void konvert_logic() { for(i=0;i<8;i++) { if(read_adc(i)>tengah[i]) { sen[i]=1; } else if(read_adc(i)
2016
FUNGSI MENGEDIPKAN LED INDIKATOR PADA PCB KECIL void ledX(int ulangi) { for(i=0;i
");
");
");
");
Page | 26 [email protected]==> 2016
} FUNGSI MEMERINTAHKAN ROBOT UNTUK MAJU void maju(unsigned char ki,unsigned char ka) { pwmka=ka; pwmki=ki; //dir kiri PORTD.2=1; PORTD.3=0; //dir kanan PORTD.6=0; PORTD.7=1; } FUNGSI MEMERINTAHKAN ROBOT UNTUK MUNDUR void mundur(unsigned char ki,unsigned char ka) { pwmka=ka; pwmki=ki; //dir kiri PORTD.2=0; PORTD.3=1; //dir kanan PORTD.6=1; PORTD.7=0; } FUNGSI MEMERINTAHKAN ROBOT UNTUK BELOK KANAN void kanan(unsigned char ki,unsigned char ka) { pwmka=ka; pwmki=ki; //dir kiri PORTD.2=0; PORTD.3=1; //dir kanan PORTD.6=0; PORTD.7=1; } FUNGSI MEMERINTAHKAN ROBOT UNTUK KIRI void kiri(unsigned char ki,unsigned char ka) { pwmka=ka; pwmki=ki; //dir kiri PORTD.2=1; Page | 27 [email protected]==> 2016
PORTD.3=0; //dir kanan PORTD.6=1; PORTD.7=0; } FUNGSI UNTUK MENGETAHUI PERBANDINGAN KECEPATAN MOTOR KANAN DAN KIRI void tes_speed() { if(t1==0){kecepatanka--; delay_ms(10);} if(t2==0){kecepatanka++; delay_ms(10);} if(t3==0){kecepatanki--; delay_ms(10);} if(t4==0){kecepatanki++; delay_ms(10);} lcd_gotoxy(0,0); lcd_putsf("Kiri Kanan"); lcd_gotoxy(0,1); sprintf(buff,"%d ",kecepatanki); lcd_puts(buff); lcd_gotoxy(11,1); sprintf(buff,"%d ",kecepatanka); lcd_puts(buff); maju(kecepatanki,kecepatanka); } FUNGSI MENGETAHUI STATUS MASING-MASING SENSOR void tes_sensor() { if(t1==0) { for(i=0;i<8;i++) { lcd_gotoxy(0,0); sprintf(buff,"sensor:%d = %d ",i,read_adc(i)); lcd_puts(buff); delay_ms(100); } } } FUNGSI UNTUK MENGENALKAN WARNA GARIS void scan_garis() { for(i=0;i<8;i++) { garis[i]=read_adc(i); lcd_gotoxy(0,0); lcd_putsf("Baca Line"); lcd_gotoxy(0,1); sprintf(buff,"sensor:%d = %d ",i,garis[i]); Page | 28 [email protected]==> 2016
lcd_puts(buff); lampu=0; delay_ms(200); lampu=1; } } FUNGSI UNTUK MENGENALKAN WARNA BACKGROUND void scan_back() { for(i=0;i<8;i++) { back[i]=read_adc(i); lcd_gotoxy(0,0); lcd_putsf("Baca Background"); lcd_gotoxy(0,1); sprintf(buff,"sensor:%d = %d ",i,back[i]); lcd_puts(buff); lampu=0; delay_ms(200); lampu=1; } } FUNGSI UNTUK MENGHASILKAN NILAI TENGAH PADA MASING-MASING SENSOR void hit_tengah() { for(i=0;i<8;i++) { tengah[i]=(back[i]+garis[i])/2; lcd_gotoxy(0,0); lcd_putsf("Center Point "); lcd_gotoxy(0,1); sprintf(buff,"sensor:%d --> %d ",i,tengah[i]); lcd_puts(buff); lampu=0; delay_ms(200); lampu=1; } } FUNGSI BELOK KIRI SAMPAI SENSOR PALING KIRI MENDAPATKAN GARIS void belki(int ki, int ka) { cek_sensor(); while ((sensor & 0b00000001)!=0b00000001) {cek_sensor(); kiri(ki,ka); } } FUNGSI BELOK KIRI SAMPAI SENSOR PALING KIRI MENDAPATKAN GARIS void belki2() { cek_sensor(); Page | 29 [email protected]==> 2016
while ((sensor & 0b00000001)!=0b00000000) {cek_sensor(); kiri(180,180); // if ((sensor & 0b00000001)==0b00000001) //lcd_kedip(1); } } FUNGSI BELOK KANAN SAMPAI SENSOR PALING KANAN MENDAPATKAN GARIS void belka(int ki ,int ka) { cek_sensor(); //ka......ki while ((sensor & 0b10000000)!=0b10000000) {cek_sensor(); kanan(ki,ka); // if ((sensor & 0b10000000)==0b10000000) //lcd_kedip(1); } } FUNGSI BELOK KANAN SAMPAI SENSOR TENGAH MENDAPATKAN GARIS void belkacenter() { cek_sensor(); while ((sensor & 0b00011000)!=0b00011000) {cek_sensor(); kanan(120,130); // if ((sensor & 0b10000000)==0b10000000) //lcd_kedip(1); } } FUNGSI MENGIKUTI GARIS void scan(int kec) { switch(sensor) // 1=kiri 8=kanan { //8 7......1 case 0b00000001: maju(kec-100,kec); x=1; break; //DOMINAN KANAN case 0b00000011: maju(kec-70,kec); x=1; break; case 0b00000010: maju(kec-70,kec); x=1; break; case 0b00000110: maju(kec-40,kec); x=1; break; case 0b00000100: maju(kec-40,kec); x=1; break; case 0b00001100: maju(kec-20,kec); x=1; break; case 0b00001000: maju(kec-10,kec); x=1; break; case 0b00011000: maju(kec,kec); break; case 0b00010000: maju(kec,kec-10); x=0; break; case 0b00110000: maju(kec,kec-20); x=0; break; case 0b00100000: maju(kec,kec-40); x=0; break; case 0b01100000: maju(kec,kec-40); x=0; break; case 0b01000000: maju(kec,kec-70); x=0; break; case 0b11000000: maju(kec,kec-70); x=0; break; case 0b10000000: maju(kec,kec-100); x=0; break; // DOMINAN KIRI case 0b00000000: Page | 30 [email protected]==> 2016
if(x==1) { kiri(kec-20,kec); //delay_ms(10); rki++; if(rki>=80){ belka(); rki=0;} break;} else {kanan(kec,kec-20); //delay_ms(10); rka++; //if(rka>=80)//{ belki(); rka=0;} break;}
//
} } FUNGSI MENGETAHUI PERTIGAAN KIRI void scan7ki() { cek_sensor(); while ((sensor & 0b11000000)!=0b11000000) { cek_sensor(); scan(170); } } FUNGSI MENGETAUI PERTIGAAN KANAN void scan7ka() { cek_sensor(); while ((sensor & 0b11000000)!=0b00000000) { cek_sensor(); scan(170); } } FUNGSI CEK MASING-MASING SENSOR void cekdatasensor() { for(i=0;i<8;i++) { lcd_gotoxy(0,0); sprintf(buff,"data ke = %d ",i); lcd_puts(buff); lcd_gotoxy(0,1); sprintf(buff,"sensing = %d ",read_adc(i)); lcd_puts(buff); delay_ms(1000); } } FUNGSI BERHENTI void rem(int nilai_rem) { PORTD.4=1; PORTD.5=1; PORTD.2=0; PORTD.3=0; PORTD.6=0; PORTD.7=0; Page | 31 [email protected]==> 2016
delay_ms(nilai_rem); } FUNGSI MENGETAHUI ADA API ATAU TIDAK void scan_api() { rem(500); if(sensor_api==0) //jika menemukan api { kipas=1; delay_ms(5000); beepX(3); } // while(sensor_api==1) // {kipas=1; // delay_ms(100);} // beepX(3); kipas=0; } FUNGSI BERHENTI SELAMANYA (LEPAS DENGAN RESET) void parkir() { lampu=0; while(1){rem(100);} } FUNGSI MENGETAHUI PEREMPATAN void scanX(int brpkali,int kec1) { while (hitung
Page | 32 [email protected]==> 2016
FUNGSI DORONG BARANG void dorong(int brpkali,int kec1) { hitung=0; while (hitung 2016
void scanTka(int brpkali) { while (hitung 2016
PORTC=0x0F; DDRC=0xE0; PORTD=0x03; DDRD=0xFC; TCCR0=0x00; TCNT0=0x00; OCR0=0x00; TCCR1A=0xA1; TCCR1B=0x09; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; MCUCR=0x00; MCUCSR=0x00; TIMSK=0x00; ACSR=0x80; SFIOR=0x00; ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x84; lcd_init(16); lcd_clear(); lampu=0; lcd_gotoxy(0,0); lcd_putsf("TES ROBOT "); lcd_gotoxy(0,1); lcd_putsf("PROCOMMIT V.06"); delay_ms(1000); lcd_clear(); // PROGRAM UTAMA while (1) { Page | 35 [email protected]==> 2016
if(t1==0) {scan_garis();maju(165,165); delay_ms(500); rem(500);scan_back(); hit_tengah(); lcd_clear(); } if(t2==0) { mulai=mulai+1; delay_ms(200); lampu=0; lcd_gotoxy(0,0);lcd_putsf("mulai cek point:"); lcd_gotoxy(0,1); sprintf(buff,"%d ",mulai); lcd_puts(buff); if (mulai>=8)mulai=0;} if(t3==0) //start right ///tim biru { lcd_clear(); lampu=1; while(1) { switch(mulai) { case 1: goto satu3; cek_sensor(); break; case 2: goto dua3; cek_sensor(); break; case 3: goto tiga3; cek_sensor(); break; case 4: goto empat3; cek_sensor(); break; case 5: goto lima3; cek_sensor(); break; case 6: goto enam3; cek_sensor(); break; case 7: goto tujuh3; cek_sensor(); break; } dua3: tiga3: empat3: lima3: enam3: tujuh3: while(1){beepX(1);} //awal scanX(3,180); rem(500); belka(180,180); rem(500); scanX(4,180); rem(500); //robot hadap ke atas belka(170,170); rem(500); scanX(1,170); rem(500); belki(170,170); rem(500); scanX(1,170); rem(500); satu3: //robot sedang hadap barang 1 cek_barang(); if(kondisi==1) //ada brng { Page | 36 [email protected]==> 2016
dorong(2,200); rem(300); mundur(170,170); delay_ms(400); rem(200); belka(170,170); ////////lanjutkan //robot telah berhasil mendorong //posisi hadap kiri } else {/// jika tidak ada barang } parkir(); }; } if(t4==0) //start left { lcd_clear(); lampu=1; while(1) { switch(mulai) { // case 1: cek_sensor(); goto satu4; break; // case 2: cek_sensor(); goto dua4; break; // case 3: cek_sensor(); goto tiga4; break; // case 4: cek_sensor(); goto empat4; break; // case 5: cek_sensor(); goto lima4; break; // case 6: cek_sensor(); goto enam4; break; // case 7: cek_sensor(); goto tujuh4; break; }
}; } } }
Page | 37 [email protected]==> 2016
Page | 38 [email protected]==> 2016
Berikut adalah blok diagram sistem secara keseluruhan dari smart robot pendorong barang dan pemadam api
Sensor Barang
Sensor API
Mikrokontroler
Sensor Garis
Driver motor
Motor kanan
Buzzer
Motor Kiri LCD
Led Indikator
Motor Kipas
Push Button
Relay
Power supply
Regulator
5V
Li-Polymer Battery 12V Blok diagram robot
Page | 39 [email protected]==> 2016
SENSOR Sensor Garis
Sensor Barang
Sensor Api
Push Button
Page | 40 [email protected]==> 2016
MIKROKONTROLLER
LCD
Page | 41 [email protected]==> 2016
MOTOR DRIVER
LED INDIKATOR
RELAY
BUZZER Page | 42 [email protected]==> 2016
POWER SUPPLY
Page | 43 [email protected]==> 2016
CATATAN :
Page | 44 [email protected]==> 2016
In4148
K A
Fan
K A + -
K A