lapres robotika pens - kontrol motor servo

13
Praktikum: Robotika Tanggal: 14 September 2015 Lab: Embedded System H-102 Nama Kelompok: 1. Bachrul Arief F (1103131002) 2. Prizky Alexandra S (1103131008) 3. Yoshua Kurniawan (1103131011) TTD Judul ACC Kinematika Robot 2 DOF Planar (Ali Husein) Tujuan: Setelah dilaksanakan praktikum, mahasiswa mampu: 1. Memahami prinsip kerja mekanik robot lengan 2 DOF Planar. 2. Mahasiswa memahami cara membangkitkan PWM menggunakan timer pada ATMega 8535. Alat Dan Bahan: 1. PC & Software CVAVR (1) 2. Modul atmega 8535 (1) 3. LCD Karakter 16 x 4 (1) 4. DT HiQ USB Downloader (1) 5. Toolset (1) 6. Kabel Jumper (1) 7. DC Power Supply (1) 8. Modul Robotika (1) Gambar Rangkaian Percobaan:

Upload: arief-bachrul

Post on 21-Feb-2016

46 views

Category:

Documents


3 download

DESCRIPTION

Lapres 1 Robotika

TRANSCRIPT

Page 1: LAPRES ROBOTIKA PENS - Kontrol Motor Servo

Praktikum: Robotika

Tanggal: 14 September 2015

Lab: Embedded System H-102

Nama Kelompok:

1. Bachrul Arief F (1103131002)

2. Prizky Alexandra S (1103131008)

3. Yoshua Kurniawan (1103131011)

TTD Judul ACC

Kinematika Robot

2 DOF Planar

(Ali Husein)

Tujuan: Setelah dilaksanakan praktikum, mahasiswa mampu:

1. Memahami prinsip kerja mekanik robot lengan 2 DOF Planar.

2. Mahasiswa memahami cara membangkitkan PWM menggunakan timer pada ATMega

8535.

Alat Dan Bahan:

1. PC & Software CVAVR (1)

2. Modul atmega 8535 (1)

3. LCD Karakter 16 x 4 (1)

4. DT HiQ USB Downloader (1)

5. Toolset

(1)

6. Kabel Jumper (1)

7. DC Power Supply (1)

8. Modul Robotika (1)

Gambar Rangkaian Percobaan:

Page 2: LAPRES ROBOTIKA PENS - Kontrol Motor Servo

Prosedur Percobaan:

1. Menyiapkan alat dan bahan yang dibutuhkan seperti modul robot lengan 2 Dof, kabel,

downloader, kabel jumper, kabel prob, power supply, kabel buaya

2. Menyambungkan power supply ke modul ATMEGA 8535, Port (+) diasambungkan ke

port 5V modul ATMEGA 8535 dan port (-) disambungkan ke port GND modul

ATMEGA 8535

3. Menyetting Power Supply sebesar +5V

4. Menyambungkan port c ke LCD

5. Pada motor servo 1 terdapat 3n kabel, kabel warna merah disambungkan ke port D no. 2,

kabel warna hitam disambungkan ke port D pin no.1 dan kabel warna putih

disambungkan ke port D no.7

6. Pada motor servo 2 terdapat 3n kabel, kabel warna merah disambungkan ke port D no. 2,

kabel warna hitam disambungkan ke port D pin no.1 dan kabel warna putih

disambungkan ke port D no.8

7. Menyambungkan kabelm USB Downloader ke port ATMEGA 8535.

8. Setelah semua alat dan bahan seudah terangkai, maka dilanjutkan dengan memprogram

robot planar 3 Dof menggunakan aplikasi Codevision AVR

Page 3: LAPRES ROBOTIKA PENS - Kontrol Motor Servo

9. Menyalakan komputer dan membuka aplikasi Codevision AVR

10. Menyetting Codevision AVR

11. Membuat project baru pada codevision AVR dengan mengklik File new, project, OK

12. Setelah itu akan tampil kotak menu code wizard avr, memilih chip, kemudian mengatur

chip ATMEGA 8535 dan mengatur clock sebesar 4MHZ, memilih timer 1 dan mengatur

mode fast PWM top= ICR0, setelah itu mengisi compare A dengan nilai ffff .

13. Kemudian memilih progam generate, save dan exit. Kemudian menyimpan file

dengan nama yang diinginkan dan melakukannya sebanyak 3 kali dengan nama file yang

sama.

14. Membuat progam sesuai contoh.

15. Posisi awal: ϴ1 = 0o dan ϴ2 = 0o

Page 4: LAPRES ROBOTIKA PENS - Kontrol Motor Servo

Hasil Percobaan:1. Percobaan 1

Data Sudut Nilai OCR1 Gambar Hasil Percobaan

1 ᶿ1= 0° dan ᶿ2= 0°OCR1A= 1800OCR1B= 6100

2 ᶿ1= 0° dan ᶿ2= 90°OCR1A= 1800OCR1B= 2500

3 ᶿ1= 90° dan ᶿ2= 0°OCR1A= 5560OCR1B= 6100

2. Percobaan 2

Data Sudut Nilai OCR1

1 ᶿ1= 45° dan ᶿ2= 45°OCR1A0= 1800OCR1B0= 6100

OCR1A90= 5560OCR1B90= 2500

OCR1A= 5560OCR1B= 6100

OCR1A= 1800OCR1B= 2500

OCR1A= 1800OCR1B= 6100

teta1= 45.0teta2= 45.0

Page 5: LAPRES ROBOTIKA PENS - Kontrol Motor Servo

LAMPIRAN

1. Percobaan 1

#include <mega8535.h>#include <stdio.h>#include <delay.h>

// Alphanumeric LCD Module functions#asm .equ __lcd_port=0x18 ;PORTB#endasm#include <lcd.h>

void main(void){// Declare your local variables herechar kata[16];

PORTA=0x00;DDRA=0x00;PORTB=0x00;DDRB=0x00;PORTC=0x00;DDRC=0x00;PORTD=0x00;DDRD=0x30;

TCCR1A=0xA2;TCCR1B=0x19;TCNT1H=0x00;TCNT1L=0x00;ICR1H=0xFF;ICR1L=0xFF;

ACSR=0x80;SFIOR=0x00;

// LCD module initializationlcd_init(16);

while (1) { if(PINC.0==1) OCR1A= OCR1A + 10; if(PINC.1==1) OCR1A= OCR1A - 10; if(PINC.2==1) OCR1B= OCR1B + 10; if(PINC.3==1) OCR1B= OCR1B - 10; sprintf(kata, "OCR1A=%d ",OCR1A); lcd_gotoxy(0,0); lcd_puts(kata); sprintf(kata, "OCR1B=%d ",OCR1B); lcd_gotoxy(0,1); lcd_puts(kata); delay_ms(50); };}

Page 6: LAPRES ROBOTIKA PENS - Kontrol Motor Servo

2. Percobaan 2

#include <mega8535.h>#include <stdio.h>#include <delay.h>

// Alphanumeric LCD Module functions#asm .equ __lcd_port=0x18 ;PORTB#endasm#include <lcd.h>

void main(void){// Declare your local variables herechar kata[16];unsigned int OCR1A0= 1800,OCR1A90= 5560,OCR1B0= 6100,OCR1B90= 2500;float teta1, teta2;

PORTA=0x00;DDRA=0x00;PORTB=0x00;DDRB=0x00;PORTC=0x00;DDRC=0x00;PORTD=0x00;DDRD=0x30;

TCCR1A=0xA2;TCCR1B=0x19;ICR1H=0xFF;ICR1L=0xFF;

ACSR=0x80;SFIOR=0x00;

// LCD module initializationlcd_init(16);

while (1) { if(PINC.0==1) teta1= teta1 + 1.0; if(PINC.1==1) teta1= teta1 - 1.0; if(PINC.2==1) teta2= teta2 + 1.0; if(PINC.3==1) teta2= teta2 - 1.0; OCR1A= OCR1A0 + (teta1*(OCR1A90-OCR1A0)/90.0); OCR1B= OCR1B0 - (teta2*(OCR1B0-OCR1B90)/90.0); sprintf(kata, "teta1=%.1f ",teta1); lcd_gotoxy(0,0); lcd_puts(kata); sprintf(kata, "teta2=%.1f ",teta2); lcd_gotoxy(0,1); lcd_puts(kata); delay_ms(50); };}

Page 7: LAPRES ROBOTIKA PENS - Kontrol Motor Servo

Gambar Hasil Percobaan

1

Gambar 1. ᶿ1= 0° dan ᶿ2= 0°

2

Gambar 2. ᶿ1= 0° dan ᶿ2= 90°

3

Gambar 3. ᶿ1= 90° dan ᶿ2= 0°

4

Gambar 4. ᶿ1= 45° dan ᶿ2= 45°

Page 8: LAPRES ROBOTIKA PENS - Kontrol Motor Servo

Analisa Data:

Dari praktikum yang kami lakukan, terdapat 2 percobaan tentang “Kinematika Robot 2 Planar”. Pada praktikum ini LCD terhubung pada PORTB mikrokontroler ATmega 8535. Kemudian Push Button terhubung pada PORTD. Untuk mengaktifkan sebuah servo diperlukan PWM sebagai pembangkit clock. Mengatur nilai Ton PWM pada CVAVR dapat dilakukan dengan cara memilih menu tab Timer pilih fast PWM. Nilai Ton tersebut didapat dengan cara mengatur nilai OCR1A/OCR1B.

Berikut 3 terminal servo mekanik:a. Merah (VCC)b. Hitam (GND)c. Warna lain (data)

T = T on + T off

Duty cycle = T on/T

Tipe servo ada 2, yaitu:1. Servo standar (0°-180° putaran)2. Servo continous (360° putaran)

Percobaan 1

Untuk mendapatkan nilai 90° digunakan rumus untuk menghitung sebuah nilai Ton:

Dari rumus diatas dapat diturunkan rumus untuk menghitung nilai OCR1. Berikut rumus untuk menghitung nilai OCR1:

Percobaan 2

Pada percobaan ini, nilai OCR1A dan OCR1B yang didapat dari percobaan 1 akan dijadikan

variabel dalam percobaan 2. Sehingga dapat diperoleh pergerakan robot dengan sudut teta1 dan

teta 2 sebesar 45 °. Untuk menghitung nilai OCR1A dan OCR1B digunakan rumus:

Data Sudut OCR1

1 ᶿ1= 0° dan ᶿ2= 90° OCR1A = 1800

OCR1B = 2500

2 ᶿ1= 90° dan ᶿ2= 0° OCR1A = 5560

OCR1B = 6100

Data Sudut

1 teta1= 45° dan teta2= 45°

Ton (ᶿ) = ᶿ/180 *(Ton(180°) - Ton(0°))+Ton(0°)

OCR1 = Ton(ᶿ)/0.25 us

OCR1A = OCR1A0 + (teta1/90)*(OCR1A90-OCR1A0)

OCR1B = OCR1B0 - (teta2/90)*(OCR1B0-OCR1B90)

OCR1A = OCR1A0 + (teta1/90)*(OCR1A90-OCR1A0)

OCR1B = OCR1B0 - (teta2/90)*(OCR1B0-OCR1B90)

OCR1A = OCR1A0 + (teta1/90)*(OCR1A90-OCR1A0)

OCR1B = OCR1B0 - (teta2/90)*(OCR1B0-OCR1B90)

Page 9: LAPRES ROBOTIKA PENS - Kontrol Motor Servo

Analisa Program:

Percobaan 1

Percobaan 2

Kesimpulan

Setelah melakukan beberapa percobaan diatas, dapat kami simpulkan bahwa:

1. Motor Servo dapat dibangkitkan dengan PWM (Pulse Width Modulation) melalui Timer.

2. OCR1A dan OCR1B digunakan untuk menentukan nilai pulsa dari PWM.

3. Untuk mengatur pergerakan dari sebuah robot planar dapat digunakan OCR1A/OCR1B

dengan cara mengubah nilainya.

while (1) { if(PINC.0==1) OCR1A= OCR1A + 10; if(PINC.1==1) OCR1A= OCR1A - 10; if(PINC.2==1) OCR1B= OCR1B + 10; if(PINC.3==1) OCR1B= OCR1B - 10; sprintf(kata, "OCR1A=%d ",OCR1A); lcd_gotoxy(0,0); lcd_puts(kata); sprintf(kata, "OCR1B=%d ",OCR1B); lcd_gotoxy(0,1); lcd_puts(kata); delay_ms(50); };}

Jika PINC ditekan maka nilai OCR1A dan OCR1B ditambah dengan 10 dan atau dikurangi dengan 10.

while (1) {

if(PINC.0==1) teta1= teta1 + 1.0; if(PINC.1==1) teta1= teta1 - 1.0; if(PINC.2==1) teta2= teta2 + 1.0; if(PINC.3==1) teta2= teta2 - 1.0;

OCR1A= OCR1A0 + (teta1*(OCR1A90-OCR1A0)/90.0);OCR1B= OCR1B0 - (teta2*(OCR1B0-OCR1B90)/90.0);

sprintf(kata, "teta1=%.1f ",teta1); lcd_gotoxy(0,0); lcd_puts(kata); sprintf(kata, "teta2=%.1f ",teta2); lcd_gotoxy(0,1); lcd_puts(kata); delay_ms(50); };}

Menampilkan nilai OCR1A di LCD karakter di titik 0,0. Dan menampilkan nilai OCR1B di titik 0,1

Jika PINC ditekan maka nilai teta1 dan teta2 ditambah dengan 10 dan atau dikurangi dengan 10. teta 1 dan teta 2 merupakan variabel dimana variabel tersebut akan dimasukkan ke rumus OCR1

Menampilkan nilai teta1 di LCD karakter di titik 0,0. Dan menampilkan nilai teta2 di titik 0,1.

OCR1A = OCR1A0 + (teta1/90)*(OCR1A90-OCR1A0)

OCR1B = OCR1B0 - (teta2/90)*(OCR1B0-OCR1B90)

OCR1A = OCR1A0 + (teta1/90)*(OCR1A90-OCR1A0)

OCR1B = OCR1B0 - (teta2/90)*(OCR1B0-OCR1B90)

OCR1A = OCR1A0 + (teta1/90)*(OCR1A90-OCR1A0)

OCR1B = OCR1B0 - (teta2/90)*(OCR1B0-OCR1B90)