Robotic And Programming Dasar

Arsip Blog

  • ▼  2011 (15)
    • ►  Agustus (1)
    • ►  Juli (9)
    • ▼  Mei (5)
      • Sedikit Dokumentasi Ebotec 2011 Part 1 (Team Elect...
      • Teori Line follower PID Robot
      • Dasar Sensor 1
      • Driver Motor L293D & L298
      • Robotika Dasar dan Bahasa Pemrograman (Pict)

Mengenai Saya

Wahyu_Rudiyan_Note
Otodidak.
Lihat profil lengkapku
Diberdayakan oleh Blogger.

Selasa, 24 Mei 2011

Sedikit Dokumentasi Ebotec 2011 Part 1 (Team Electric Blitz (UGM) sebagai juara the best design)

Berikut adalah dokumentasi Ebotec 2011 yang di adakan oleh Fakultas Mipa Elektronika dan Instrumentasi  UGM pada tanggal 1 mei 2011 kemaren, saya merupakan team pemula yang baru pertama kali joint dengan lomba seperti ini, ya walaupun cuma sampai 32 Besar/Perempat final yaitu team satu satunya dari kalimantan barat...... team saya adalah Khatulistiwa-8 Robot dengan robot saya yang sederhana yaitu Altrax z.v.1 yang akan saya posting selanjutnya...........

ya saya coba mengambil sedikit dikumentasi dari salah satu peserta yaitu Team Blitz dari kakak"2 UGM...
daripada panjang lebar, ya udah nih dokumentasi dari para jawara...... dan ada juga dari Rumah Robot Thamrin City......



Para pemenang dan Panitia
Nih..... Robot Blitznya.....




Dari Rumah Robot Thamrin
Sang Juara



Nao Robot Dari Aldebaran Prancis




Diposting oleh Wahyu_Rudiyan_Note di 02.33 0 komentar
Kirimkan Ini lewat EmailBlogThis!Bagikan ke XBerbagi ke FacebookBagikan ke Pinterest

Minggu, 22 Mei 2011

Teori Line follower PID Robot

altrax mesem menggunakan 8 sensor di depan untuk mengikuti garis. Lebar garis yang ideal untuk diikuti adalah 1.5 – 2 cm dengan kemungkinan 2 – 3 sensor dapat mengenai garis. Langkah selanjutnya adalah melakukan mapping nilai sensor untuk mendapatkanprocess variable (PV). Kurang lebih seperti berikut (misal nilai 0 merepresentasikan sensor mengenai garis):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
11111110 (-7)        // ujung kiri
11111000 (-6)
11111100 (-6)
11111101 (-5)
11110001 (-4)
11111001 (-4)
11111011 (-3)
11100011 (-2)
11110011 (-2)
11110111 (-1)
11100111 (0)        // tengah
11101111 (1)
11000111 (2)
11001111 (2)
11011111 (3)
10001111 (4)
10011111 (4)
10111111 (5)
00011111 (6)
00111111 (6)
01111111 (7)        // ujung kanan
11111111 (8 / -8)  // loss
Kondisi ideal pada robot adalah bergerak maju lurus mengikuti garis, dengan kata lain PV = 0 (nilai sensor = 11100111). Dari sini bisa kita asumsikan Set Point (SP) / kondisi ideal adalah saat SP = 0. Nilai sensor yang dibaca oleh sensor disebut Process Variable (PV) / nilai aktual pembacaan. Menyimpangnya posisi robot dari garis disebut sebagai error (e), yang didapat dari e = SP - PV. Dengan mengetahui besar error, microcontroller dapat memberikan nilai PWM motor kanan dan kiri yang sesuai agar dapat menuju ke posisi ideal (SP = 0). Nah besar PWM ini bisa kita dapatkan dengan menggunakan kontrol Proportional (P), dimana P = e * Kp (Kp adalah konstanta proportional yang nilainya kita set sendiri dari hasil tuning). Misalkan nilai PWM didefinisikan dari 0 – 255 dengan nilai 0 berarti berhenti dan 255 berarti kecepatan penuh. Dari data nilai 8 sensor yang telah dimapping ada 16 PWM untuk tiap motor. Tapi dalam kondisi real dimisalkan saat sepelan-pelannya motor adalah PWM < 30 dan secepat-cepatnya (maju lurus) adalah 250. Saat PV = 8 atau -8 itu tergantung dari kondisi PV sebelumnya, jika PV lebih besar dari 0 maka, nilai PV adalah 8 dan jika PV kurang dari 0 maka nilai PV adalah -8. Kodenya bisa ditulis secara sederhana seperti berikut:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
...
Kp = 1;
SP = 0;
MAXPWM = 255;
MINPWM = 0;
intervalPWM = (MAXPWM - MINPWM) / 8;
 
void scan() {
    switch(sensor) {
        case 0b11111110:        // ujung kiri
            PV = -7;
            break;
        case 0b11111000:
        case 0b11111100:
            PV = -6;
            break;
        case 0b11111101:
            PV = -5;
            break;
        case 0b11110001:
        case 0b11111001:
            PV = -4;
            break;
        case 0b11111011:
            PV = -3;
            break;
        case 0b11100011:
        case 0b11110011:
            PV = -2;
            break;
        case 0b11110111:
            PV = -1;
            break;
        case 0b11100111:        // tengah
            PV = 0;
            break;
        case 0b11101111:
            PV = 1;
            break;
        case 0b11000111:
        case 0b11001111:
            PV = 2;
            break;
        case 0b11011111:
            PV = 3;
            break;
        case 0b10001111:
        case 0b10011111:
            PV = 4;
            break;
        case 0b10111111:
            PV = 5;
            break;
        case 0b00011111:
        case 0b00111111:
            PV = 6;
            break;
        case 0b01111111:        // ujung kanan
            PV = 7;
            break;
        case 0b11111111:        // loss
 
        if (PV < 0) {
            PV = -8;
        } else if (PV > 0) {
            PV = 8;
        }
    }
 
    error = SP - PV;
    P = Kp * error;
 
    MV = P;
    if (MV == 0) { //lurus, maju cepat
        lpwm = MAXPWM;
        rpwm = MAXPWM;
    } else if (MV > 0) { // alihkan ke kiri
        rpwm = MAXPWM - ((intervalPWM - 20) * MV);
        lpwm = (MAXPWM - (intervalPWM * MV) - 15);
 
        if (lpwm < MINPWM) lpwm = MINPWM;
        if (lpwm > MAXPWM) lpwm = MAXPWM;
        if (rpwm < MINPWM) rpwm = MINPWM;
        if (rpwm > MAXPWM) rpwm = MAXPWM;
    } else if (MV < 0) { // alihkan ke kanan
        lpwm = MAXPWM + ( ( intervalPWM - 20 ) * MV);
        rpwm = MAXPWM + ( ( intervalPWM * MV ) - 15 );
 
        if (lpwm < MINPWM) lpwm = MINPWM;
        if (lpwm > MAXPWM) lpwm = MAXPWM;
        if (rpwm < MINPWM) rpwm = MINPWM;
        if (rpwm > MAXPWM) rpwm = MAXPWM;
    }
}
 
}
...
Nah dengan mengukur seberapa jauh robot menyimpang dari kondisi ideal, sistem kontrol P sudah diterapkan. Output (berupa nilai PWM) didapat dari perhitungan yang melibatkan hanya variabel P = e * Kp. Jika pergerakan robot masih terlihat bergelombang, bisa ditambahkan kontrol Derivative (D). Kontrol D digunakan untuk mengukur seberapa cepat robot bergerak dari kiri ke kanan atau dari kanan ke kiri. Semakin cepat bergerak dari satu sisi ke sisi lainnya, maka semakin besar nilai D. Konstanta D (Kd) digunakan untuk menambah atau mengurangi imbas dari derivative. Dengan mendapatkan nilai Kd yang tepat pergerakan sisi ke sisi yang bergelombang akibat dari proportional PWM bisa diminimalisasi. Nilai D didapat dari: D = Kd * rate, dimana rate = e(n) - e(n-1). Dalam program nilai error (SP – PV) saat itu menjadi nilai last_error, sehingga rate didapat darierror - last_error
Untuk menambahkan kontrol D, program di atas dapat dimodifikasi menjadi :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Kd = 0.8;
 
...
 
error = SP - PV;
P = Kp * error;
 
rate = error - last_error;
D    = rate * Kd;
 
last_error = error;
 
MV = P + D;
 
...
Jika dengan P + D sudah membuat pergerakan robot cukup smooth, maka penambahan Integral menjadi opsional. Jika ingin mencoba-coba bisa ditambahakan Integral (I). I digunakan untuk mengakumulasi error dan mengetahui durasi error. Dengan menjumlahkan error disetiap pembacaan PV akan memberikan akumulasi offset yang harus diperbaiki sebelumnya. Saat robot bergerak menjauhi garis, maka nilai error akan bertambah. Semakin lama tidak mendapatkan SP, maka semakin besar nilai I. Degan mendapatkan nilai Ki yang tepat, imbas dari Integral bisa dikurangi. Nilai akumulasi error didapat dari: I = I + error. Nilai I sendiri : I = I * Ki. Jika dinginkan nilai MV = P + I + D, maka program di atas di modifikasi menjadi :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Kd = 0.8;
Ki = 0.3;
 
...
 
error = SP - PV;
P = Kp * error;
 
I = I + error;
I = I * Ki;
 
rate = error - last_error;
D    = rate * Kd;
 
last_error = error;
 
MV = P + I + D;
 
...
Fitur menu belum sepenuhnya ada, silahkan modifikasi sesuai kebutuhan dan sesuaikan formula untuk lpwm dan rpwm dengan kecepatan motor DC yang digunakan. 
From Gedex....
Diposting oleh Wahyu_Rudiyan_Note di 06.35 0 komentar
Kirimkan Ini lewat EmailBlogThis!Bagikan ke XBerbagi ke FacebookBagikan ke Pinterest
Postingan Lebih Baru Postingan Lama Beranda
Langganan: Postingan (Atom)

apa menurut anda yang kurang dari blog ini????

Pengikut