• Tidak ada hasil yang ditemukan

Realisasi Robot Merangkak Enam Kaki Holonomik.

N/A
N/A
Protected

Academic year: 2017

Membagikan "Realisasi Robot Merangkak Enam Kaki Holonomik."

Copied!
60
0
0

Teks penuh

(1)

REALISASI ROBOT MERANGKAK

ENAM KAKI HOLONOMIK

Disusun Oleh:

Nama : Nico Hanafi

NRP : 0422013

Jurusan Teknik Elektro, Fakultas Teknik, Universitas Kristen Maranatha,

Jl. Prof.Drg.Suria Sumantri, MPH no.65, Bandung, Indonesia,

email : i_mr2@yahoo.com

ABSTRAK

Robotika sudah berkembang dengan pesat. Banyak sekali jenis robot yang

dibuat sekarang ini. Pada dasarnya gerak dari robot yang dibuat terdapat dua yaitu

kaki dan roda. Masing-masing memiliki keunggulan dan kelemahan. Robot berkaki

memiliki kesulitan dalam penerapannya. Kesulitan yang dihadapi robot berkaki yaitu

kesetimbangan dan kelincahan bermanuver.

Tugas Akhir ini merealisasikan sebuah robot berkaki enam yang setiap

kakinya memiliki dua derajat kebebasan. Robot menggunakan 12 motor servo sebagai

penggerak. Robot ini dikontrol menggunakan pengontrol mikro ATMEGA16 dan

ATtiny2313. Selain itu, robot juga dilengkapi dengan sensor jarak GP2D12 dan

sensor kompas CMPS03.

Robot berkaki enam diujicoba dengan dua cara yaitu bergerak berdasarkan

arah dan langkah serta bergerak menuju ruangan yang terdapat dalam maze. Pada cara

pertama, robot diuji dengan bergerak menuju arah kelipatan 45

0

posisi bumi

sedangkan pada cara kedua robot bergerak menuju empat ruangan yang ada dalam

maze. Hasil pengujian menunjukkan robot mampu bergerak menuju arah kelipatan

45

0

posisi bumi tetapi masih terdapat penyimpangan sudut ketika mencapai arah

tersebut. Untuk pengujian kedua, robot hanya dapat bergerak menuju dua dari empat

ruangan dalam maze. Berdasarkan pengujian robot merangkak enam kaki berhasil

direalisasikan dan mampu bergerak holonomik.

(2)

REALIZATION OF HOLONOMIC CRAWLER

HEXAPOD ROBOT

Composed by:

Name : Nico Hanafi

Nrp

: 0422013

Electrical Engineering, Maranatha Christian University,

Jl. Prof.Drg.Suria Sumantri, MPH no.65, Bandung, Indonesia,

email : i_mr2@yahoo.com

ABSTRACT

Robotics has been expanded rapidly. Nowadays there are many types of robots

that have been made. Basically robots use two ways to walk. They are leg and wheel.

Each has its advantages and disadvantages. Legged robots have difficulties in their

application. The difficulties are balance and agility in maneuver.

This Final Project realizes a hexapod robot which each leg have two degrees

of freedom. It uses 12 servo motors as actuator. This hexapod robot is controlled by

microcontroller ATMEGA16 and ATtiny2313. Besides, hexapod robot is equipped

with distance sensor GP2D12 and compass sensor CMPS03.

This hexapod robot is tested in two ways. They are walking based on direction

and steps and walking to rooms in a maze. In the first test, hexapod robot is tested on

walking to the direction of 45

0

multiple of earth’s position and the other hexapod

robot walks through four rooms in a maze. The result shows that hexapod robot is

able to walk to the direction of 45

0

multiple of earth’s position although there is angle

deviation when it reaches the direction. For the second test, robot is only able to walk

to two of four rooms in the maze. Based on tests crawler hexapod robot is

successfully realized and it can walk holonomic.

(3)

DAFTAR ISI

KATA PENGANTAR...i

ABSTRAK

...iii

ABSTRACT

...iv

DAFTAR ISI...v

DAFTAR TABEL

...ix

DAFTAR GAMBAR...x

BAB I

PENDAHULUAN

I.1

Latar Belakang ...1

I.2

Identifikasi Masalah...1

I.3

Perumusan Masalah ...1

I.4

Tujuan ...1

I.5

Pembatasan Masalah ...2

I.6

Spesifikasi Alat ...2

I.7

Sistematika Pembahasan ...3

BAB II

LANDASAN TEORI

II.1

Robot...4

II.1.1 Definisi Robot ...4

II..1.2 Klasifikasi Robot Berdasarkan Mobilitas ...5

II..1.3 Klasifikasi Robot Berdasarkan Konstruksi Robot ...6

II.1.4 Sejarah Robot Berkaki ...8

II.1.5 Cara Berjalan Robot Berkaki Enam ...10

II.1.6 Gerak Robot Holonomik ...12

II.1.7 Bentuk Robot Berkaki Enam...13

II.1.8 Degree Of Freedom (DOF) ...13

II.2

Motor Servo ...14

II.3

Sensor...17

II.3.1 Sensor Jarak (Sharp GP2D12)...18

(4)

II.4

Pengontrol Mikro ...24

II.4.1 Pengenalan ATMEL AVR RISC ...24

II.4.2 Pengontrol Mikro ATMEGA16 ...25

II.4.2.1 Fitur ATMEGA16 ...25

II.4.2.2 Konfigurasi Pin ATMEGA16 ...26

II.4.2.3 Diagram Blok ATMEGA16 ...28

II.4.2.4

General Purpose Register

ATMEGA16 ...30

II.4.2.5 Peta Memori ATMEGA16 ...30

II.4.2.6 PWM (

Pulse Width Modulation

) ATMEGA16 ...32

II.4.2.7 Pin

Input

/

Output

ATMEGA16...33

II.4.2.8

I2C (Inter-Integrated Circuit )

ATMEGA16 ...34

II.4.2.9

USART

ATMEGA16...35

II.4.3 Pengontrol Mikro ATtiny2313...36

II.4.3.1 Fitur ATtiny2313...37

II.4.3.2 Konfigurasi Pin ATtiny2313 ...37

II.4.3.3 Register dan Memori ATtiny2313 ...40

II.4.3.4

Port

Input

/

Output

ATtiny2313...40

II.4.3.5

PULSE WIDTH MODULATION

ATtiny2313 ...41

BAB III PERANCANGAN DAN REALISASI

III.1

Perancangan Sistem Robot Berkaki Enam ...42

III.1.1

Diagram Blok Sistem Pengontrol Robot Berkaki Enam...42

III.2.1

Diagram Blok Sistem Pengontrol Robot Berkaki Enam

dalam

Maze

...43

III.2

Perancangan dan Realisasi Robot Berkaki Enam ...43

III.3

Perancangan dan Realisasi Rangkaian Sensor dan Pengontrol Mikro...45

III.3.1

Sensor...45

III.3.1.1 Sensor Jarak ...46

III.3.1.2 Sensor Kompas ...46

III.3.2

Pengontrol Mikro ...47

(5)

III.3.2.2 Skematik Pengontrol Berbasis Pengontrol Mikro

ATtiny2313 ...48

III.3.2.2.1 Pulse Width Modulation ATtiny2313...49

III.4

Algoritma Pergerakan Kaki ...51

III.4.1

Arah 0 derajat...52

III.4.2

Arah 45 derajat...53

III.4.3

Arah 90 derajat...54

III.4.4

Arah 135 derajat...55

III.4.5

Arah 180 derajat...56

III.4.6

Arah 225 derajat...57

III.4.7

Arah 270 derajat...58

III.4.8

Arah 315 derajat...59

III.5

Algoritma Pemrograman Robot Berkaki Enam ...60

III.5.1

Robot Berjalan Sesuai dengan Langkah dan Arah

yang Dimasukkan...60

III.5.2

Robot Berjalan Menuju Ruangan - Ruangan yang

Terdapat pada

Maze

...62

III.6

Robot Bergerak Holonomik...73

BAB IV DATA PENGAMATAN DAN ANALISA

IV.1

Pengujian Sudut Servo ...74

IV.2

Pengujian Sensor Jarak GP2D12 ...75

IV.2.1

Pengukuran Jarak pada Objek Kayu ...75

IV.3

Pengujian Sensor Kompas (CMPS03) ...76

IV.4

Pengujian Robot Berkaki Enam...77

IV.4.1

Langkah dan Arah yang Dimasukkan Melalui

Keypad ...

78

IV.4.1.1 Penyimpangan Sudut ...78

IV.4.1.2 Jarak ...81

IV.4.2 Percobaan dalam Maze ...84

IV.4.2.1 Ruangan 1 ...84

IV.4.2.2 Ruangan 2 ...85

IV.4.2.3 Ruangan 3 ...86

(6)

BAB V

KESIMPULAN DAN SARAN

V.1

Kesimpulan ...88

V.2

Saran ...88

DAFTAR PUSTAKA

LAMPIRAN – A Foto Robot Berkaki Enam

(7)

DAFTAR TABEL

Tabel 2.1 Register-register yang Disediakan Sensor CMPS03 ...22

Tabel 2.2 Fungsi Khusus Port B ...27

Tabel 2.3 Fungsi Khusus Port C ...27

Tabel 2.4 Fungsi Khusus Port D ...28

Tabel 2.5 Konfigurasi

Port

ATMEGA16 ...33

Tabel 2.6

Baud Rate...

36

Tabel 3.1 Rentang Nilai OCR1x...50

Tabel 4.1 Pengujian Sudut Servo HS-475 HB...74

Tabel 4.2 Pengujian Jarak pada Objek Kayu ...75

Tabel 4.3 Pengukuran Sudut Arah Mata Angin...76

Tabel 4.4 Sudut Awal Robot 0

0

Berjalan dengan 1 Langkah ...78

Tabel 4.5 Sudut Awal Robot 90

0

Berjalan dengan 1 Langkah ...78

Tabel 4.6 Sudut Awal Robot 0

0

Berjalan dengan 5 Langkah ...79

Tabel 4.7 Sudut Awal Robot 90

0

Berjalan dengan 5 Langkah ...79

Tabel 4.8 Sudut Awal Robot 0

0

Berjalan dengan 10 Langkah ...79

Tabel 4.9 Sudut Awal Robot 90

0

Berjalan dengan 10 Langkah ...80

Tabel 4.10 Sudut Awal Robot 0

0

Berjalan dengan 15 Langkah ...80

Tabel 4.11 Sudut Awal Robot 90

0

Berjalan dengan 15 Langkah ...80

Tabel 4.12 Sudut Awal Robot 0

0

Berjalan dengan 1 Langkah ...81

Tabel 4.13 Sudut Awal Robot 90

0

Berjalan dengan 1 Langkah ...81

Tabel 4.14 Sudut Awal Robot 0

0

Berjalan dengan 5 Langkah ...82

Tabel 4.15 Sudut Awal Robot 90

0

Berjalan dengan 5 Langkah ...82

Tabel 4.16 Sudut Awal Robot 0

0

Berjalan dengan 10 Langkah ...82

Tabel 4.17 Sudut Awal Robot 90

0

Berjalan dengan 10 Langkah ...83

Tabel 4.18 Sudut Awal Robot 0

0

Berjalan dengan 15 Langkah ...83

Tabel 4.19 Sudut Awal Robot 90

0

Berjalan dengan 15 Langkah ...83

Tabel 4.20 Pengujian Robot pada Ruangan 1 ...84

Tabel 4.21 Pengujian Robot pada Ruangan 2 ...85

Tabel 4.22 Pengujian Robot pada Ruangan 3 ...86

(8)

DAFTAR GAMBAR

Gambar 1.1 Konfigurasi Lapangan Percobaan ...2

Gambar 2.1 Sebuah Roda yang Dibagi-bagi Menjadi Beberapa Bagian...8

Gambar 2.2 Cara Berjalan Tripod...11

Gambar 2.3 Cara Berjalan Wave ...12

Gambar 2.4 Hexapod CH3-R...13

Gambar 2.5 Hexapod Szabad(ka) ...13

Gambar 2.6 Contoh Robot dengan 6 Derajat Kebebasan ...14

Gambar 2.7 Struktur dalam Motor Servo ...15

Gambar 2.8 Koneksi Kabel Motor Servo ...15

Gambar 2.9 Potensiometer Motor Servo ...16

Gambar 2.10 Contoh Posisi dan Lebar Pulsa yang Diberikan...17

Gambar 2.11 Bentuk Sensor Inframerah Sharp GP2D12 ...18

Gambar 2.12 Pengaruh Jarak Terhadap Besarnya Sudut...18

Gambar2.13 Alokasi Pin CMPS03 ...20

Gambar 2.14 Sketsa Sinyal PWM ...20

Gambar 2.15

Bit Sequence

I2C pada Sensor CMPS03...21

Gambar 2.16 Rangkaian

Tactile Switch

untuk Proses Kalibrasi...23

Gambar 2.17 Orientasi sensor CMPS03 ...24

Gambar 2.18 Konfigurasi Pin ATMEGA16 ...26

Gambar 2.19 Diagram Blok ATMEGA16...29

Gambar 2.20

General Purpose Register

ATMEGA16...30

Gambar 2.21 Pemetaan Memori ATMEGA16 ...31

Gambar 2.22 Pemetaan Memori Data ATMEGA16...31

Gambar 2.23

Phase & Frequency Correct

PWM...32

Gambar 2.24 Gambaran Modul TWI keseluruhan ...34

Gambar 2.25 Blok USART...35

Gambar 2.26 Konfigurasi Pin ATtiny2313...38

Gambar 2.27 Diagram Blok ATtiny2313 ...39

Gambar 2.28 Register ATtiny2313...40

Gambar 3.1 Diagram Blok Sistem Pengontrol Robot Berkaki Enam...42

(9)

Gambar 3.3 Koneksi Pin Pada Motor Servo ...44

Gambar 3.4 Dimensi Gambar Kaki Robot Dilihat dari Samping ...44

Gambar 3.5 Sketsa Robot Berkaki Enam ...45

Gambar 3.6 Alokasi Pin CMPS03 ...46

Gambar 3.7 Diagram Alir Penggunaan Sensor CMPS03 ...47

Gambar 3.8 Skematik Rangkaian Pengontrol Mikro ATMEGA16...48

Gambar 3.9 Skematik Rangkaian Pengontrol Mikro ATtiny2313 ...49

Gambar 3.10 Bentuk Robot Dilihat dari Atas...51

Gambar 3.11 Penempatan Motor Servo Pertama dan Kedua pada Kaki ...52

Gambar 3.12 Diagram Alir Gerakan Kaki Arah 0 Derajat ...53

Gambar 3.13 Diagram Alir Gerakan Kaki Arah 45 Derajat ...54

Gambar 3.14 Diagram Alir Gerakan Kaki Arah 90 Derajat ...55

Gambar 3.15 Diagram Alir Gerakan Kaki Arah 135 Derajat ...56

Gambar 3.16 Diagram Alir Gerakan Kaki Arah 180 Derajat ...57

Gambar 3.17 Diagram Alir Gerakan Kaki Arah 225 Derajat ...58

Gambar 3.18 Diagram Alir Gerakan Kaki Arah 270 Derajat ...59

Gambar 3.19 Diagram Alir Gerakan Kaki Arah 315 Derajat ...60

Gambar 3.20 Diagram Alir Pada Pengontrol Mikro ATMEGA16...61

Gambar 3.21 Diagram Alir Pada Pengontrol Mikro ATtiny2313 ...62

Gambar 3.22 Diagram Alir Program Secara Umum...63

Gambar 3.23 Diagram Alir Koreksi...64

Gambar 3.24 Diagram Alir Ruangan 1 ...65

Gambar 3.25 Lanjutan Diagram Alir Ruangan 1...66

Gambar 3.26 Diagram Alir Ruangan 2 ...67

Gambar 3.27 Lanjutan Diagram Alir Ruangan 2...68

Gambar 3.28 Diagram Alir Ruangan 3 ...69

Gambar 3.29 Lanjutan Diagram Alir Ruangan 3...70

Gambar 3.30 Diagram Alir Ruangan 4 ...71

Gambar 3.31 Lanjutan Diagram Alir Ruangan 4...72

Gambar 3.32 Lanjutan Kedua Diagram Alir Ruangan 4 ...73

Gambar 4.1 Pola Gerak Robot pada Ruangan 1 ...84

Gambar 4.2 Pola Gerak Robot pada Ruangan 2 ...85

Gambar 4.3 Pola Gerak Robot pada Ruangan 3 ...86

(10)

LAMPIRAN A

(11)
(12)
(13)

LAMPIRAN B

PROGRAM PADA PENGONTROL

(14)

1.

Robot mampu berjalan sesuai dengan langkah dan arah yang dimasukkan

melalui keypad.

ATMEGA16

/***************************************************** 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 : 2/6/2007

Author : Laboratorium Company : Fisika dan Instrumentasi Comments:

Chip type : ATmega16 Program type : Application Clock frequency : 11.059200 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256

*****************************************************/ #include <mega16.h>

#include <stdio.h> #include <delay.h> #include <math.h> #include <scankeypadB.h> int sudut,i;

unsigned char text1[32],text2[32],text3[32]; int data1,data2;

unsigned int kps; char lngkh; // I2C Bus functions #asm

.equ __i2c_port=0x1B ;PORTA .equ __sda_bit=1

.equ __scl_bit=0 #endasm #include <i2c.h>

// Alphanumeric LCD Module functions #asm

.equ __lcd_port=0x15 ;PORTC #endasm

#include <lcd.h>

// Standard Input/Output functions #include <stdio.h>

#define ADC_VREF_TYPE 0x60 // 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 int keytonum(void)

{ long val; char datal[33]; char keypadchar; val = 0x00;

(15)

{

keypadchar = scan_keypadB(); switch (keypadchar) {

case 1: val = val +1; break;

case 2: val = val +2; break;

case 3: val = val +3; break;

case 4: val = val +4; break;

case 5: val = val +5; break;

case 6: val = val +6; break;

case 7: val = val +7; break;

case 8: val = val +8; break;

case 9: val = val +9; break;

case '0': val = val; break;

case '*': val = 0; break; }

if (keypadchar != '*' & keypadchar != '#' & keypadchar != 0 & keypadchar != 'A' & keypadchar != 'B' & keypadchar != 'C' & keypadchar != 'D')

{

val = val * 10; }

keypadchar = 0; lcd_clear();

sprintf (datal,"ANGKA=%u \n*=clear #=OK ", val/10); lcd_puts (datal);

delay_ms(300);

keypadchar = scan_keypadB(); }

return val/10; }

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=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=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;

(16)

// 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 // 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;

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: Off

// USART Transmitter: On // USART Mode: Asynchronous // USART Baud rate: 9600 UCSRA=0x00;

UCSRB=0x08; UCSRC=0x86; UBRRH=0x00; UBRRL=0x47;

// Analog Comparator initialization // Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80;

SFIOR=0x00; // ADC initialization

// ADC Clock frequency: 691.200 kHz // ADC Voltage Reference: AVCC pin // ADC Auto Trigger Source: None // Only the 8 most significant bits of // the AD conversion result are used ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x84;

(17)

i2c_init();

// LCD module initialization lcd_init(16);

while (1) {

// Place your code here lcd_clear(); lngkh=keytonum(); lcd_putsf("langkah="); delay_ms(2000); lcd_clear(); sprintf(text3,"langkah=%d",lngkh); lcd_puts(text3); putchar (lngkh); delay_ms(3000); i2c_start(); i2c_write(0xC0); i2c_write(0x02); i2c_start(); i2c_write(0xC1); data1=i2c_read(1); data2=i2c_read(0); i2c_stop(); lcd_clear(); kps=((float)data1*256+data2)/10; sprintf(text1,"kps=%d",kps); lcd_puts(text1); delay_ms(2000); lcd_clear(); sudut=keytonum(); lcd_putsf("Sudut="); delay_ms(2000); lcd_clear(); sprintf(text2,"sudut=%d",sudut); lcd_puts(text2);

if ( (kps>337.5) && (kps<=359.9) || (kps>=0) && (kps<=22.5) ) {

switch (sudut) {

case 0: {putchar('A');} break; case 45: {putchar ('B');} break; case 90: {putchar ('C');} break; case 135: {putchar ('D');} break; case 180: {putchar ('E');} break; case 225: {putchar ('F');} break; case 270: {putchar ('G');} break; case 315: {putchar ('H');} break;};}

if ( (kps>22.5) && (kps<=67.5) ) {

switch (sudut) {

case 0: {putchar ('H');}break; case 45: {putchar ('A');}break; case 90: {putchar ('B');}break; case 135: {putchar ('C');}break; case 180: {putchar ('D');}break; case 225: {putchar ('E');}break; case 270: {putchar ('F');}break; case 315: {putchar ('G');}break;};}

if ( (kps>67.5) && (kps<=112.5) ) {

switch (sudut) {

(18)

case 270: {putchar ('E');}break; case 315: {putchar ('F');} break;};}

if ( (kps>112.5) && (kps<=157.5) ) {

switch (sudut) {

case 0: {putchar ('F');}break; case 45: {putchar ('G');}break; case 90: {putchar ('H');}break; case 135: {putchar ('A');}break; case 180: {putchar ('B');}break; case 225: {putchar ('C');}break; case 270: {putchar ('D');}break;

case 315: {putchar ('E');}break;};}

if ( (kps>157.5) && (kps<=202.5) ) {

switch (sudut) {

case 0: {putchar ('E');}break; case 45: {putchar ('F');}break; case 90: {putchar ('G');}break; case 135: {putchar ('H');}break; case 180: {putchar ('A');}break; case 225: {putchar ('B');}break; case 270: {putchar ('C');}break; case 315: {putchar ('D');}break;};}

if ( (kps>202.5) && (kps<=247.5) ) {

switch (sudut) {

case 0: {putchar ('D');}break; case 45: {putchar ('E');}break; case 90: {putchar ('F');}break; case 135: {putchar ('G');}break; case 180: {putchar ('H');}break; case 225: {putchar ('A');}break; case 270: {putchar ('B');}break; case 315: {putchar ('C');}break;};}

if ( (kps>247.5) && (kps<=292.5) ) {

switch (sudut) {

case 0: {putchar ('C');}break; case 45: {putchar ('D');}break; case 90: {putchar ('E');}break; case 135: {putchar ('F');}break; case 180: {putchar ('G');}break; case 225: {putchar ('H');}break; case 270: {putchar ('A');}break; case 315: {putchar ('B');}break;};}

if ( (kps>292.5) && (kps<=337.5) ) {

switch (sudut) {

case 0: {putchar ('B');}break; case 45: {putchar ('C');}break; case 90: {putchar ('D');}break; case 135: {putchar ('E');}break; case 180: {putchar ('F');}break; case 225: {putchar ('G');}break; case 270: {putchar ('H');}break; case 315: {putchar ('A');}break;};}

(19)

ATTINY2313

/***************************************************** This program was produced by the

CodeWizardAVR V1.25.3 Professional Automatic Program Generator

© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com

Project : Version : Date : 3/11/2009

Author : Lab Instrumentasi Company : UKM Comments:

Chip type : ATtiny2313 Clock frequency : 8.000000 MHz Memory model : Tiny External SRAM size : 0 Data Stack size : 32

*****************************************************/ #include <tiny2313.h>

#include <delay.h> #include <stdio.h> char langkah; char servo,a; int i; int posisi45; int posisi90; int posisi110; int posisi135; int posisid45; int posisid90; int posisid110; int posisid135; #define RXB8 1 #define TXB8 0 #define UPE 2 #define OVR 3 #define FE 4 #define UDRE 5 #define RXC 7

#define FRAMING_ERROR (1<<FE) #define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<OVR)

#define DATA_REGISTER_EMPTY (1<<UDRE) #define RX_COMPLETE (1<<RXC)

// USART Receiver buffer #define RX_BUFFER_SIZE 8 char rx_buffer[RX_BUFFER_SIZE]; #if RX_BUFFER_SIZE<256

unsigned char rx_wr_index,rx_rd_index,rx_counter; #else

unsigned int rx_wr_index,rx_rd_index,rx_counter; #endif

// This flag is set on USART Receiver buffer overflow bit rx_buffer_overflow;

// USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isr(void) {

char status,data; status=UCSRA; data=UDR;

if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) {

rx_buffer[rx_wr_index]=data;

(20)

if (++rx_counter == RX_BUFFER_SIZE) {

rx_counter=0; rx_buffer_overflow=1; };

};

//servo=getchar();

}

#ifndef _DEBUG_TERMINAL_IO_

// Get a character from the USART Receiver buffer #define _ALTERNATE_GETCHAR_

#pragma used+ char getchar(void) {

char data;

while (rx_counter==0); data=rx_buffer[rx_rd_index];

if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0; #asm("cli")

--rx_counter; #asm("sei") return data; }

#pragma used- #endif

char naik(char servo_no) {

posisi45 = posisi45|servo_no; posisi90 = posisi90|servo_no; posisi110 = posisi110|servo_no; posisi135 = posisi135|servo_no; }

char turun(char servo_no) {

posisi135 = posisi135&(~servo_no); posisi110 = posisi110&(~servo_no); posisi90 = posisi90&(~servo_no); posisi45 = posisi45&(~servo_no); }

char tengah(char servo_no) {

posisi135 = posisi135&(~servo_no); posisi110 = posisi110&(~servo_no); posisi45 = posisi45|servo_no; posisi90 = posisi90|servo_no; }

char naikd(char servo_no) {

posisid45 = posisid45|servo_no; posisid90 = posisid90|servo_no; posisid110 = posisid110|servo_no; posisid135 = posisid135|servo_no; }

char turund(char servo_no) {

posisid135 = posisid135&(~servo_no); posisid110 = posisid110&(~servo_no); posisid90 = posisid90&(~servo_no); posisid45 = posisid45&(~servo_no); }

char tengahd(char servo_no) {

(21)

// Timer 1 output compare A interrupt service routine interrupt [TIM1_COMPA] void timer1_compa_isr(void) {

// Place your code here PORTB=0xFF;

PORTD=0xFF; delay_us(1250); PORTB=posisi45; PORTD=posisid45; delay_us(50); PORTB=posisi90; PORTD=posisid90; delay_us(200); PORTB=posisi110; PORTD=posisid110; delay_us(200); PORTB=posisi135; PORTD=posisid135; delay_us(150); PORTB=0x00; PORTD=0x00; }

// Standard Input/Output functions #include <stdio.h>

// Declare your global variables here void sudut0(void)

{

tengah(0xFF); tengahd(0xFF); delay_ms(500); naikd(0x20); delay_ms(500); naikd(0x04); delay_ms(500); turun(0x04); delay_ms(500); naik(0x20); delay_ms(500); turund(0x20); delay_ms(500); turund(0x04); delay_ms(500); naik(0x40); delay_ms(500); naikd(0x10); delay_ms(500); naik(0x04); delay_ms(500); turun(0x20); delay_ms(500); turun(0x40); delay_ms(500); turund(0x10); delay_ms(500); tengah(0x20); delay_ms(500); tengah(0x04); delay_ms(500); tengahd(0x20); delay_ms(500); tengahd(0x04); delay_ms(500); tengah(0xFF); tengahd(0xFF); delay_ms(500);

(22)
(23)
(24)
(25)

tengahd(0xFF); delay_ms(500); naikd(0x20); delay_ms(500); naikd(0x04); delay_ms(500); naik(0x04); delay_ms(500); turun(0x20); delay_ms(500); turund(0x20); delay_ms(500); turund(0x04); delay_ms(500); naikd(0x40); delay_ms(500); naikd(0x08); delay_ms(500); turun(0x04); delay_ms(500); naik(0x20); delay_ms(500); turund(0x40); delay_ms(500); turund(0x08); delay_ms(500); tengah(0x04); delay_ms(500); tengah(0x20); delay_ms(500); tengahd(0x04); delay_ms(500); tengahd(0x20); delay_ms(500); }

void sudut270(void) {

tengah(0xFF); tengahd(0xFF); delay_ms(500); naik(0x40); delay_ms(500); naik(0x02); delay_ms(500); turun(0x40); delay_ms(500); turun(0x02); delay_ms(500); tengah(0x02); delay_ms(500); tengah(0x40); delay_ms(500); naikd(0x10); delay_ms(500); turun(0x10); delay_ms(500); turund(0x10); delay_ms(500); naik(0x10); delay_ms(500); tengah(0x10); delay_ms(500); tengahd(0x10); delay_ms(500); }

void sudut315(void) {

(26)

naikd(0x08); delay_ms(500); naik(0x01); delay_ms(500); turun(0x08); delay_ms(500); turund(0x40); delay_ms(500); turund(0x08); delay_ms(500); naikd(0x04); delay_ms(500); naikd(0x20); delay_ms(500); turun(0x01); delay_ms(500); naik(0x08); delay_ms(500); turund(0x04); delay_ms(500); turund(0x20); delay_ms(500); tengah(0x01); delay_ms(500); tengah(0x08); delay_ms(500); tengahd(0x40); delay_ms(500); tengahd(0x08); delay_ms(500); }

void main(void) {

// Declare your local variables here // Crystal Oscillator division factor: 1 #pragma optsize-

CLKPR=0x80; CLKPR=0x00;

#ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif

// Input/Output Ports initialization // Port A initialization

// Func2=In Func1=In Func0=In // State2=T State1=T State0=T PORTA=0x00;

DDRA=0x00; // Port B initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTB=0x00; DDRB=0xFF; // Port D initialization

// Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTD=0x00; DDRD=0x7F;

// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh // OC0A output: Disconnected // OC0B output: Disconnected TCCR0A=0x00;

(27)

// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 125.000 kHz // Mode: CTC top=OCR1A // 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: On // Compare B Match Interrupt: Off TCCR1A=0x00;

TCCR1B=0x0B; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0xD8; OCR1AH=0x09; OCR1AL=0xC4; OCR1BH=0x00; OCR1BL=0x00;

// External Interrupt(s) initialization // INT0: Off

// INT1: Off

// Interrupt on any change on pins PCINT0-7: Off GIMSK=0x00;

MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x40;

// Universal Serial Interface initialization // Mode: Disabled

// Clock source: Register & Counter=no clk. // USI Counter Overflow Interrupt: Off USICR=0x00;

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On

// USART Transmitter: Off // USART Mode: Asynchronous // USART Baud rate: 9600 UCSRA=0x00;

UCSRB=0x90; UCSRC=0x06; UBRRH=0x00; UBRRL=0x33;

// Analog Comparator initialization // Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80;

// Global enable interrupts #asm("sei")

while (1) {

// Place your code here a=getchar();

if(a>64) { servo=a; delay_ms(100); langkah=getchar(); }

(28)

if(servo=='A') {

for(i=0;i<langkah;i++) {

sudut0(); } } if(servo=='B') {

for(i=0;i<langkah;i++) {

sudut45(); } }

if(servo=='C') {

for(i=0;i<langkah;i++) {

sudut90(); } }

if(servo=='D') {

for(i=0;i<langkah;i++) {

sudut135(); } }

if(servo=='E') {

for(i=0;i<langkah;i++) {

sudut180(); } }

if(servo=='F') {

for(i=0;i<langkah;i++) {

sudut225(); } }

if(servo=='G') {

for(i=0;i<langkah;i++) {

sudut270(); } }

if(servo=='H') {

for(i=0;i<langkah;i++) {

(29)

2.

Robot berjalan menuju ruangan-ruangan yang terdapat pada maze.

ATMEGA16

/***************************************************** 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 : 2/6/2007

Author : Laboratorium Company : Fisika dan Instrumentasi Comments:

Chip type : ATmega16 Program type : Application Clock frequency : 11.059200 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256

*****************************************************/ #include <mega16.h>

#include <stdio.h> #include <delay.h> #include <math.h> #include <scankeypadB.h> int data1,data2;

unsigned int kps,kompas; void sensorjarak(void); int a,b,c,d,e,f;

unsigned char text[32],text1[32]; // I2C Bus functions

#asm

.equ __i2c_port=0x1B ;PORTA .equ __sda_bit=1

.equ __scl_bit=0 #endasm #include <i2c.h>

// Alphanumeric LCD Module functions #asm

.equ __lcd_port=0x15 ;PORTC #endasm

#include <lcd.h>

// Standard Input/Output functions #include <stdio.h>

#define ADC_VREF_TYPE 0x60 // 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

(30)

{

a=read_adc(7);

a=2141.72055 * (pow(a,-1.078867)); b=read_adc(6);

b=2141.72055 * (pow(b,-1.078867)); c=read_adc(5);

c=2141.72055 * (pow(c,-1.078867)); d=read_adc(4); d=2141.72055 * (pow(d,-1.078867)); e=read_adc(3); e=2141.72055 * (pow(e,-1.078867)); f=read_adc(2); f=2141.72055 * (pow(f,-1.078867)); lcd_clear();

sprintf(text,"a=%d b=%d c=%d d=%d e=%d f=%d ",a,b,c,d,e,f); lcd_puts(text);

delay_ms(200); }

void koreksi(void) {

i2c_start(); i2c_write(0xC0); i2c_write(0x02); i2c_start(); i2c_write(0xC1); data1=i2c_read(1); data2=i2c_read(0); i2c_stop(); lcd_clear();

kps=((float)data1*256+data2)/10; sprintf(text1,"kps=%d",kps); lcd_puts(text1);

delay_ms(200);

kompas=220;

if (kps<(kompas-5)) putchar ('R'); if (kps>(kompas+5)) putchar ('L');

i2c_start(); i2c_write(0xC0); i2c_write(0x02); i2c_start(); i2c_write(0xC1); data1=i2c_read(1); data2=i2c_read(0); i2c_stop(); lcd_clear();

kps=((float)data1*256+data2)/10; sprintf(text1,"kps=%d",kps); lcd_puts(text1);

delay_ms(200); }

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=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

(31)

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=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; 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 MCUCR=0x00; MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00;

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: Off

// USART Transmitter: On // USART Mode: Asynchronous

// USART Baud rate: 9600 (Double Speed Mode) UCSRA=0x02;

UCSRB=0x08; UCSRC=0x86; UBRRH=0x00; UBRRL=0x8F;

// Analog Comparator initialization // Analog Comparator: Off

(32)

ACSR=0x80; SFIOR=0x00; // ADC initialization

// ADC Clock frequency: 691.200 kHz // ADC Voltage Reference: AVCC pin

// ADC Auto Trigger Source: None // Only the 8 most significant bits of

// the AD conversion result are used ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x84;

// I2C Bus initialization i2c_init();

// LCD module initialization lcd_init(16);

while (1) {

// Place your code here

lcd_putsf(“ruangan=”); switch(scan_keypadB()) {

case 1: // ruangan 1

{

sensorjarak(); while ( b<35 && e>80 ) {

koreksi();

if (f<10) putchar ('E'); if (d<10) putchar ('A'); else putchar('G'); sensorjarak(); }

sensorjarak();

while ( a > 18 && f > 18 ) {

koreksi();

if ( b < 10 ) putchar ('G'); if ( e < 10 ) putchar ('C'); else putchar ('A'); sensorjarak(); }

sensorjarak();

while ( ( a < 18 || f < 18 ) && b >15 ) {

koreksi();

if(f<10 || a<10) putchar ('E'); if(c<10 || d<10) putchar ('A'); else putchar ('C'); sensorjarak(); }}

break; case 2: // Ruangan 2 {

sensorjarak();

while ( a > 18 && f > 18 ) {

koreksi();

if ( b < 10 ) putchar ('G'); if ( e < 10 ) putchar ('C'); else putchar ('A'); sensorjarak(); }

sensorjarak();

(33)

{ koreksi();

if(f<10 || a<10) putchar ('E'); if(c<10 || d<10) putchar ('A'); else putchar ('C'); sensorjarak(); }

sensorjarak();

while(a<20 && f<20 && b<20 && c>35 && d>35) { koreksi(); putchar ('E'); sensorjarak(); }} break; case 3: // ruangan 3 {

sensorjarak();

while (b<150 && a>15 && f>15 && c>15 && d>5) {

koreksi();

if(c<15) putchar ('A'); else putchar ('C'); sensorjarak(); }

sensorjarak();

while ( a > 18 && f > 18 ) {

koreksi();

if ( b < 10 ) putchar ('G'); if ( e < 10 ) putchar ('C'); else putchar ('A'); sensorjarak(); }

sensorjarak();

while ( ( a < 18 || f < 18 ) && b >15 ) {

koreksi();

if(f<10 || a<10) putchar ('E'); if(c<10 || d<10) putchar ('A'); else putchar ('C'); sensorjarak(); }

sensorjarak();

while (a>18 && f >18 && c>20 && d>20) { koreksi(); putchar ('E'); sensorjarak(); } sensorjarak();

while(b<20 && c>20 && d>20) { koreksi(); putchar ('E'); sensorjarak(); }} break; case 4: // ruangan 4 {

sensorjarak();

while ( a>18 && f>18 && c>15 && d>15) {

koreksi();

(34)

else putchar ('E'); sensorjarak(); }

sensorjarak();

while ( a > 18 && f > 18 ) {

koreksi();

if ( b < 10 ) putchar ('G'); if ( e < 10 ) putchar ('C'); else putchar ('A'); sensorjarak(); }

sensorjarak();

while ( ( a < 18 || f < 18 ) && b >15 ) {

koreksi();

if(f<10 || a<10) putchar ('E'); if(c<10 || d<10) putchar ('A'); else putchar ('C'); sensorjarak(); }}

(35)

ATtiny2313

/***************************************************** This program was produced by the

CodeWizardAVR V1.25.3 Professional Automatic Program Generator

© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com

Project : Version : Date : 3/11/2009

Author : Lab Instrumentasi Company : UKM Comments:

Chip type : ATtiny2313 Clock frequency : 8.000000 MHz Memory model : Tiny External SRAM size : 0 Data Stack size : 32

*****************************************************/ #include <tiny2313.h>

#include <delay.h> #include <stdio.h> char langkah; char servo,a; int i; int posisi45; int posisi90; int posisi110; int posisi135; int posisid45; int posisid90; int posisid110; int posisid135; #define RXB8 1 #define TXB8 0 #define UPE 2 #define OVR 3 #define FE 4 #define UDRE 5 #define RXC 7

#define FRAMING_ERROR (1<<FE) #define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<OVR)

#define DATA_REGISTER_EMPTY (1<<UDRE) #define RX_COMPLETE (1<<RXC)

// USART Receiver buffer #define RX_BUFFER_SIZE 8 char rx_buffer[RX_BUFFER_SIZE]; #if RX_BUFFER_SIZE<256

unsigned char rx_wr_index,rx_rd_index,rx_counter; #else

unsigned int rx_wr_index,rx_rd_index,rx_counter; #endif

// This flag is set on USART Receiver buffer overflow bit rx_buffer_overflow;

// USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isr(void) {

char status,data; status=UCSRA; data=UDR;

if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) {

rx_buffer[rx_wr_index]=data;

(36)

{

rx_counter=0; rx_buffer_overflow=1; };

}; }

#ifndef _DEBUG_TERMINAL_IO_

// Get a character from the USART Receiver buffer #define _ALTERNATE_GETCHAR_

#pragma used+ char getchar(void) {

char data;

while (rx_counter==0); data=rx_buffer[rx_rd_index];

if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0; #asm("cli")

--rx_counter; #asm("sei") return data; }

#pragma used- #endif

char naik(char servo_no) {

posisi45 = posisi45|servo_no; posisi90 = posisi90|servo_no; posisi110 = posisi110|servo_no; posisi135 = posisi135|servo_no; }

char turun(char servo_no) {

posisi135 = posisi135&(~servo_no); posisi110 = posisi110&(~servo_no); posisi90 = posisi90&(~servo_no); posisi45 = posisi45&(~servo_no); }

char tengah(char servo_no) {

posisi135 = posisi135&(~servo_no); posisi110 = posisi110&(~servo_no); posisi45 = posisi45|servo_no; posisi90 = posisi90|servo_no;} char naikd(char servo_no) {

posisid45 = posisid45|servo_no; posisid90 = posisid90|servo_no; posisid110 = posisid110|servo_no; posisid135 = posisid135|servo_no; }

char turund(char servo_no) {

posisid135 = posisid135&(~servo_no); posisid110 = posisid110&(~servo_no); posisid90 = posisid90&(~servo_no); posisid45 = posisid45&(~servo_no); }

char tengahd(char servo_no) {

posisid135 = posisid135&(~servo_no); posisid110 = posisid110&(~servo_no); posisid45 = posisid45|servo_no; posisid90 = posisid90|servo_no; }

// Timer 1 output compare A interrupt service routine interrupt [TIM1_COMPA] void timer1_compa_isr(void) {

// Place your code here PORTB=0xFF;

(37)

PORTB=posisi45; PORTD=posisid45; delay_us(100); PORTB=posisi90; PORTD=posisid90; delay_us(200); PORTB=posisi110; PORTD=posisid110; delay_us(200); PORTB=posisi135; PORTD=posisid135; delay_us(50); PORTB=0x00; PORTD=0x00; }

// Standard Input/Output functions #include <stdio.h>

(38)
(39)
(40)
(41)
(42)

turun(0x10); delay_ms(100); tengah(0x02); delay_ms(100); tengah(0x10); delay_ms(100); tengah(0x40); delay_ms(100); tengahd(0x10); delay_ms(100); }

void koreksi2(void) {

tengah(0xFF); tengahd(0xFF); delay_ms(100); naik(0x40); delay_ms(100); naikd(0x10); delay_ms(100); turun(0x02); delay_ms(100); turun(0x10); delay_ms(100); turun(0x40); delay_ms(100); turund(0x10); delay_ms(100); naikd(0x04); delay_ms(100); naikd(0x20); delay_ms(100); naik(0x02); delay_ms(100); naik(0x10); delay_ms(100); tengah(0x02); delay_ms(100); tengah(0x10); delay_ms(100); tengah(0x40); delay_ms(100); tengahd(0x10); delay_ms(100); }

void main(void) {

// Declare your local variables here // Crystal Oscillator division factor: 1 #pragma optsize-

CLKPR=0x80; CLKPR=0x00;

#ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif

// Input/Output Ports initialization // Port A initialization

// Func2=In Func1=In Func0=In // State2=T State1=T State0=T PORTA=0x00;

DDRA=0x00; // Port B initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTB=0x00; DDRB=0xFF; // Port D initialization

(43)

// State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTD=0x00;

DDRD=0x7F;

// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh // OC0A output: Disconnected // OC0B output: Disconnected TCCR0A=0x00;

TCCR0B=0x00; TCNT0=0x00; OCR0A=0x00; OCR0B=0x00;

// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 125.000 kHz // Mode: CTC top=OCR1A // 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: On // Compare B Match Interrupt: Off TCCR1A=0x00;

TCCR1B=0x0B; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0xD8; OCR1AH=0x09; OCR1AL=0xC4; OCR1BH=0x00; OCR1BL=0x00;

// External Interrupt(s) initialization // INT0: Off

// INT1: Off

// Interrupt on any change on pins PCINT0-7: Off GIMSK=0x00;

MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x40;

// Universal Serial Interface initialization // Mode: Disabled

// Clock source: Register & Counter=no clk. // USI Counter Overflow Interrupt: Off USICR=0x00;

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On

// USART Transmitter: Off // USART Mode: Asynchronous // USART Baud rate: 9600 UCSRA=0x00;

UCSRB=0x90; UCSRC=0x06; UBRRH=0x00; UBRRL=0x33;

// Analog Comparator initialization // Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80;

(44)

while (1) {

// Place your code here servo=getchar(); if(servo=='A') {

sudut0(); } if(servo=='C') {

sudut90(); }

if(servo=='E') { sudut180(); }

if(servo=='G') {

sudut270(); }

if(servo=='L') {

koreksi1(); }

if(servo=='R') {

(45)

LAMPIRAN C

DATASHEET

Sensor Inframerah (GP2D12

) ... C-1

(46)

GP2D12

Optoelectronic Device

FEATURES

• Analog output

• Effective Range: 10 to 80 cm • LED pulse cycle duration: 32 ms • Typical response time: 39 ms • Typical start up delay: 44 ms • Average current consumption: 33 mA

• Detection area diameter @ 80 cm: 6 cm PIN SIGNAL NAME 1 VO

GND VCC

GP2D12-8

123

DESCRIPTION

The GP2D12 is a distance measuring sensor with integrated signal processing and analog voltage output.

[image:46.612.316.551.82.268.2]

2 3

Figure 1. Pinout

GND VCC

PSD

SIGNAL PROCESSING CIRCUIT

VOLTAGE REGULATOR

OSCILLATOR CIRCUIT

LED DRIVE CIRCUIT LED

OUTPUT CIRCUIT

VO

DISTANCE MEASURING IC

GP2D12-4

Figure 2. Block Diagram

[image:46.612.60.552.214.540.2]
(47)

GP2D12

ELECTRICAL SPECIFICATIONS

Absolute Maximum Ratings

Ta = 25°C, VCC = 5 VDC

PARAMETER

Supply Voltage Output Terminal Voltage Operating Temperature Storage Temperature SYMBOL VCC VO Topr Tstg RATING

-0.3 to +7.0 -0.3 to (VCC + 0.3) -10 to +60 -40 to +70

UNIT

V V °C °C

Operating Supply Voltage

PARAMETER

Operating Supply Voltage

SYMBOL

VCC

RATING

4.5 to 5.5

UNIT

V

Electro-optical Characteristics

Ta = 25°C, VCC = 5 VDC

PARAMETER

Measuring Distance Range Output Voltage

Output Voltage Difference Average Supply Current

SYMBOL

L

VO

VO

ICC

L = 80 cm

CONDITIONS MIN. TYP. MAX. UNIT NOTES

10 0.25 Output change at L change

1.75 (80 cm - 10 cm)

L = 80 cm

-0.4 2.0 33 80 0.55 2.25 50 cm V V mA 1, 2 1, 2 1, 2 1, 2 NOTES:

1. Measurements made with Kodak R-27 Gray Card, using the white side, (90% reflectivity). 2. L = Distance to reflective object.

VCC

(POWER SUPPLY)

38.3 ms ±9.6 ms

DISTANCE MEASURMENT OPERATING 1st MEASUREMENT 2nd MEASUREMENT nth MEASUREMENT VO (OUTPUT) UNSTABLE OUTPUT 1st OUTPUT 2nd OUTPUT nth OUTPUT 5.0 ms MAX.

[image:47.612.67.552.455.656.2]

GP2D12-5

Figure 3. Timing Diagram

(48)

GP2D12

RELIABILITY

[image:48.612.60.553.127.336.2]

The reliability of requirements of this device are listed in Table 1.

Table 1. Reliability

TEST ITEMS TEST CONDITIONS

One cycle -40°C (30 min.) to +70°C in 30 minutes, repeated 25 times

+40°C, 90% RH, 500h +70°C, 500h -40°C, 500h

+60°C, VCC = 5 V, 500h 100 m / s2, 6.0 ms

3 times / ±X, ±Y, ±Z direction 10-to-55-to-10 Hz i n 1 minute Amplitude: 1.5 mm

2 h i n e a c h X, Y, Z direction

Initial × 0.8 > VO VO > Initial × 1.2

FAILURE JUDGEMENT CRITERIA

SAMPLES (n), DEFECTIVE (C)

n = 11, C = 0

n = 11, C = 0 n = 11, C = 0 n = 11, C = 0 n = 11, C = 0

n = 6, C = 0 Temperature Cycling

High Temperature and High Humidity Storage High Temperature Storage Low Temperature Storage Operational Life (High Temperature) Mechanical Shock

Variable Frequency Vibration n = 6, C = 0

NOTES:

1. Test conditions are according to Electro-optical Characteristics, shown on page 2.

2. At completion of the test, allow device to remain at nominal room temperature and humidity (non-condensing) for two hours. 3. Confidence level: 90%, Lot Tolerance Percent Defect (LTPD): 20% / 40%.

MANUFACTURER’S INSPECTION

Inspection Lot

Inspection shall be carried out per each delivery lot.

Inspection Method

A single sampling plan, normal inspection level II based on ISO 2859 shall be adopted.

Table 2. Quality Level

DEFECT

Major Defect Minor Defect

INSPECTION ITEM and TEST METHOD

Electro-optical characteristics defect

Defect to appearance or dimensions (crack, split, chip, scratch, stain)*

AQL (%)

0.4 1.0

NOTE: *Any one of these that affects the Electro-optical Characteristics shall be considered a defect.

[image:48.612.56.527.522.573.2]
(49)

GP2D12

3.0

2.8

2.6

2.4

2.2

2.0

ANALOG VOLTAGE OUTPUT (V)

1.8

1.6

1.4

1.2

1.0

0.8

0.6

0.4

0.2

0 10 20 30 40 50 60 70 80

DISTANCE TO REFLECTIVE OBJECT (cm)

NOTES:

White paper (Reflectance ratio 90%) Gray paper (Reflectance ratio 18%)

[image:49.612.64.551.52.638.2]

GP2D12-6

Figure 4. GP2D12 Example of Output/Distance Characteristics

(50)

GP2D12

3.0

2.8

9 cm 2.6

7 cm

2.4 10 cm

8 cm

2.2

12 cm 2.0

14 cm 1.8

16 cm 1.6

18 cm

1.4

20 cm ANALOG

VOLTAGE OUTPUT (V)

1.2

28 cm

1.0

30 cm

40 cm 0.8

50 cm 0.6

0.4

0.2

0.00 0.02 0.04 0.06 0.08 0.10 0.12 0.14

INVERSE NUMBER OF DISTANCE 1/(L + 0.42) (1/cm)

NOTES:

White paper (Reflectance ratio 90%) Gray paper (Reflectance ratio 18%)

[image:50.612.64.550.53.647.2]

GP2D12-7

Figure 5. GP2D12 Example of Output Characteristics with Inverse Number of Distance

(51)

GP2D12

PACKAGE SPECIFICATIONS

STAMP

STAMP EXAMPLE

GP2D12 5 3

LIGHT EMITTER SIDE

3.2 HOLE

4.5 (Note 1)

13.0

1.2 PCB 3.3 R3.75

3.75

3.2 HOLE

10.1

14.75

CONNECTOR

7.5 4.15 16.3

123

CONNECTOR SIGNAL

PIN SIGNAL NAME

1

NOTES:

1. Dimensions shall reference lens center. 2. Unspecified tolerance shall be ±0.3 mm. 3. Scale: 2/1, dimensions are in mm.

2 3

VO

GND VCC

GP2D12-3

Connector: J.S.T. Trading Company, LTD S3B-PH

C-6

2-1.5 13.5

18.9 -0.3 8.4 7.2

+0.3

GP2D12 83

37.0 29.5 20 ±0.1 (Note 1)

LIGHT DETECTOR SIDE

R3.75

6.3 2.0

Month (1 to 9, X, Y, Z) Year (2005:5) Model Name

(52)

GP2D12

PACKING SPECIFICATION

2

PAD (CORRUGATED CARDBOARD)

(2 SHEETS/CASE: TOP AND BOTTOM) 3

PRODUCT TRAYS (10-TRAY/CASE)

PRODUCT 4

PAD (CORRUGATED CARDBOARD) (9 SHEETS/CASE BETWEEN TRAYS)

TRAY (B)

1 PACKING CASE

5 CRAFT TAPE

(A)

PART NAME

Packing case Pad Tray

MATERIAL

Corrugated cardboard Corrugated cardboard

Polystyrene

MODEL NUMBER

(C)

DATE QUANTITY

PACKING METHOD

1. Each tray holds 50 pieces. Packing methods are shown in (A).

2. Each box holds 10 trays. Pads are added to top and bottom, and between layers, as in (B). top and bottom. Put pads between each tray (9 pads total) see above drawing (B).

3. The box is sealed with craft tape. (C) shows the location of the Model number, Quantity, and Inspection date. 4. Package weight: Approximately 4 kg.

GP2Y0A02YK-8

(53)

GP2D12

NOTES

• Keep the sensor lens clean. Dust, water, oil, and other contaminants can deteriorate the tics of this device. Applications should be designed to eliminate sources of lens contamination. • When using a protective cover over the emitter and detector, ensure the cover efficiently transmits light throughout the wavelength range of the LED ( = 850 nm ± 70 nm). Both sides of the protective cover should be highly polished. Use of a protective cover may decrease the effective distance over which the sensor operates. Ensure that any cover does not negatively affect the operation over the intended application range.

• Objects in proximity to the sensor may cause tions that can affect the operation of the sensor. • Sources of high ambient light (the sun or strong ficial light) may affect measurement. For best results, the application should be designed to vent interference from direct sunlight or artificial light.

• Using the sensor with a mirror can induce ment errors. Often, changing the incident angle on the mirror can correct this problem.

• If a prominent boundary line exists in the surface being measured, it should be aligned vertically to avoid measurement error. See Figure 6 for further details.

• When measuring the distance to objects in motion, align the sensor so that the motion is in the horizontal direction instead of vertical. Figure 7 illustrates the preferred alignment.

• A 10 µF (or larger) bypass capacitor between VCC and GND near the sensor is recommended. • To clean the sensor, use a dry cloth. Use of any uid to clean the device may result in decreased sitivity or complete failure.

• Excessive mechanical stress can damage the internal sensor or lens.

(AVOID IF POSSIBLE) (PREFERRED)

[image:53.612.63.549.332.434.2]

GP2D12-1

Figure 6. Proper Alignment to Surface Being Measured

(AVOID IF POSSIBLE) (PREFERRED)

DIRECTION OF MOVEMENT

DIRECTION OF MOVEMENT

[image:53.612.65.551.471.594.2]

GP2D12-2

Figure 7. Proper Alignment to Moving Surfaces

(54)

GP2D12

NOTICE

The circuit application examples in this publication are provided to explain representative applications of SHARP devices and are not intended to guarantee any circuit design or license any intellectual property right. SHARP takes no responsibility for any problems related to any intellectual property right of a third party resulting from the use of SHARP devices.

SHARP reserves the right to make changes in the specifications, characteristics, data, materials, structures and other contents described herein at any time without notice in order to improve design or reliability.

Contact SHARP in order to obtain the latest device specification sheets before using any SHARP device. Manu-facturing locations are also subject to change without notice.

In the absence of confirmation by device specification sheets, SHARP takes no responsibility for any defects that occur in equipment using any SHARP devices shown in catalogs, data books, etc.

The devices listed in this publication are designed for standard applications for use in general electronic equip-ment. SHARP’s devices shall not be used for or in connection with equipment that requires an extremely high level of reliability, such as military and aerospace applications, telecommunication equipment (trunk lines), nuclear power control equipment and medical or other life support equipment (e.g. Scuba). SHARP takes no responsibility for dam-age caused by improper use of device, which does not meet the conditions for use specified in the relevant specifi-cation sheet.

If the SHARP devices listed in the publication fall within the scope of strategic products described in the Foreign Exchange and Foreign Trade Law of Japan, it is necessary to obtain approval to export such SHARP devices. This publication is the proprietary product of SHARP and is copyrighted, with all rights reserved. Under the copy-right laws, no part of this publication may be reproduced or transmitted in any form or by any means, electronic or mechanical for any purpose, in whole or in part, without the express written permission of SHARP. Express written permission is also required before any use of this publication may be made by a third party.

Contact and consult with a SHARP representative if there are any questions about the contents of this publication.

(55)
(56)

BAB I

PENDAHULUAN

Bab ini membahas tentang latar belakang, identifikasi masalah, perumusan

masalah, tujuan, pembatasan masalah, spesifikasi alat, serta sistematika pembahasan.

I.1 Latar Belakang

Teknologi robot selalu berkembang setiap saat baik dalam hal jenis maupun

bentuk. Jenis dan bentuk robot yang berbeda-beda disesuaikan dengan kegunaan dari

robot tersebut. Robot berkaki termasuk salah satu jenis robot yang banyak

dikembangkan. Pengembangan robot berkaki ditujukan agar robot mampu bergerak

di segala medan.

Kesulitan yang dihadapi oleh robot berkaki adalah kesetimbangan dan

kelincahan bermanuver. Kesetimbangan dan kelincahan bermanuver robot

bergantung pada jumlah kaki, bentuk robot, dan cara berjalan robot.

I.2 Identifikasi Masalah

Identifikasi masalah Tugas Akhir ini adalah kebutuhan akan robot yang

memiliki kemampuan bergerak holonomik.

I.3 Perumusan Masalah

Perumusan masalah Tugas Akhir ini adalah bagaimana membuat struktur

tubuh robot dan mengontrol gerakan kaki agar dapat berjalan secara holonomik

berdasar pada langkah dan arah yang diperintahkan dan bermanuver dalam

maze

yang tetap.

I.4 Tujuan

Tujuan Tugas Akhir ini adalah membuat prototipe robot merangkak enam

(57)

BAB I PENDAHULUAN

I.5 Pembatasan Masalah

Tugas Akhir ini dibatasi oleh beberapa hal :

1.

Kaki robot memiliki dua derajat kebebasan.

2.

Arah tujuan robot mengikuti posisi bumi dengan kelipatan 45

0

(0

0

-360

0

).

3.

Arah 0

0

merupakan posisi utara bumi.

4.

Tugas yang dikerjakan robot :

Robot mampu berjalan sesuai dengan langkah dan arah yang

dimasukkan melalui

keypad

.

Robot dapat berjalan menuju ruangan-ruangan yang terdapat pada

maze

.

5.

Lapangan yang digunakan untuk tempat percobaan menggunakan lapangan

yang sama dengan lapangan pada KRCI divisi senior berkaki dengan batasan:

Lapangan berlantai satu.

Lapangan berupa lahan datar bersekat.

Konfigurasi lapangan tetap untuk semua percobaan.

Konfigurasi lapangan yang digunakan ditunjukkan pada Gambar 1.1.

Gambar 1.1 Konfigurasi Lapangan Percobaan

I.6 Spesifikasi Alat

Spesifikasi alat adalah sebagai berikut:

1.

Robot berbentuk hexapod.

2.

Robot mampu bergerak holonomik.

(58)

BAB I PENDAHULUAN

I.7 Sistematika Pembahasan

Sistematika pembahasan laporan Tugas Akhir ini disusun menjadi lima bab,

yaitu sebagai berikut :

BAB I

PENDAHULUAN

Bab ini membahas tentang latar belakang, identifikasi masalah, perumusan

masalah, tujuan, pembatasan masalah, spesifikasi alat, serta sistematika

pembahasan.

BAB II

LANDASAN TEORI

Bab ini membahas teori-teori yang digunakan dalam merancang dan

merealisasikan struktur kaki robot yaitu berupa teori tentang robot berkaki,

motor servo, sensor kompas, sensor jarak, dan pengontrol mikro ATMEGA

16 dan ATtiny 2313.

BAB III

PERANCANGAN DAN REALISASI

Bab ini membahas tentang perancangan sistem robot berkaki enam,

perancangan dan realisasi robot berkaki enam, perancangan dan realisasi

rangkaian sensor dan pengontrol mikro, algoritma pergerakan kaki, algoritma

pemrograman robot berkaki enam, serta gerakan robot holonomik.

BAB IV

DATA PENGAMATAN DAN ANALISA

Bab ini menjelaskan mengenai proses pengambilan data pengamatan,

pengujian kemampuan robot, dan analisisnya.

BAB V

KESIMPULAN DAN SARAN

Bab ini membahas mengenai kesimpulan dari Tugas Akhir dan saran-saran

(59)

BAB V

KESIMPULAN DAN SARAN

Bab ini berisi kesimpulan dari Tugas Akhir dan saran-saran yang perlu

diperhatikan untuk perbaikan di masa yang akan datang.

V.1

Kesimpulan

Dengan memperhatikan data pengamatan dan analisis pada bab sebelumnya,

dapat disimpulkan bahwa:

1.

Robot merangkak enam kaki dengan bentuk segienam, memiliki dua derajat

kebebasan pada setiap kaki, dan mampu bergerak holonomik berhasil

direalisasikan.

2.

Robot merangkak enam kaki menggunakan prinsip

wave gait

untuk berjalan.

3.

Penyimpangan sudut robot semakin besar bila berjalan lebih dari lima langkah.

4.

Mekanik robot yang tidak sempurna dan penempatan sensor merupakan

faktor-faktor yang menyebabkan robot tidak dapat menjalankan tugasnya dengan baik.

V.2

Saran

Saran-saran yang dapat diberikan untuk perbaikan dan pengembangan Tugas

Akhir ini di masa mendatang adalah:

1.

Penempatan sensor pada robot perlu diperhatikan sehingga semua tempat dapat

terdeteksi.

2.

Koreksi digunakan ketika robot berjalan berdasarkan langkah dan arah untuk

meminimalkan penyimpangan sudut.

(60)

DAFTAR PUSTAKA

1.

Andrianto, H., Buku Panduan : Pelatihan Mikrokontroler AVR

ATmega16, 2008.

2.

Pitowarno, E.,

Robotika Disain, Kontrol, Dan Kecerdasan Buatan

,

Edisi ke-1, Yogyakarta:Andi, 2006.

3.

Sigit, Riyanto.

Robotika, Sensor, Dan Aktuator

, Edisi ke-1,

Yogyakarta:Graha Ilmu, 2007.

4.

http://en.wikibooks.org

5.

http://www14.addr.com/~oricom//projects/leg-time.htm

6.

http://en.wikipedia.org/wiki/Degrees_of_freedom_(mechanics)

7.

http://www.id.wikipedia.org

8.

http://www.atmel.

Gambar

Figure 2. Block Diagram
Figure 3. Timing Diagram
Table 2. Quality Level
Figure 4. GP2D12 Example of Output/Distance Characteristics
+3

Referensi

Dokumen terkait

Hipotesis penelitian yang diajukan dalam penelitian ini adalah ada pengaruh iklim organisasi terhadap etos kerja pada karyawan bulu mata PT Royal Korindah Purbalingga.

Laporan hasil Tugas Akhir ini khusus berorientasi pada aplikasi buku induk siswa yang mendukung aplikasi ilmu kami dalam bidang Teknik Informatika. Tidak lupa kami

Pengembangan tersebut akan berdampak pada eksistensi lembaga semakin kuat, sehingga memiliki daya saing yang kompetitif. Pada sisi lain, pengembangan

Ber dasarkan hasil penelitian membuktikan bahwa bagian dari variabel independen Bauran Pemasaran, yaitu Produk, Harga, Promosi dan lokasi mempunyai pengaruh yang positif

ISPA sering disebut sebagai penyakit musiman. Epidemik ISPA pada negara yang memiliki empat musim berlangsung pada musim gugur dan musim dingin, yakni sekitar bulan

Komplikasi plasenta dapat berupa perdarahan, terutama plasenta abruption (solutio  plasenta) dan, yang lebih sedikit, ialah plasenta previa, merupakan faktor yang penting dalam

Hal tersebut berbeda dengan urea molasses multinutrients block (UMMB) yang dibutuhkan pada ransum sapi. Nutrisi yang dikonsumsi sapi dengan penambahan UMMB sulit

Classifier (Effendi, 2016) Pada penelitian ini didapat hasil bahwa metode Naive Bayes Classifier dapat diterapkan pada sistem pakar layanan kesehatan diagnosis penyakit,