Minggu, 21 Desember 2008

Robo_Tiko



Robo Tiko ini sudah memakai logika PID, walau terlihat laju tapi masih gagal untuk menang.

berikut adalah sebagian dari code saya:


void kond_sensor() //kondisi sensor
{
if (adc[0] > bts[0]) {sens |= 0b00000001;}
else {sens &= 0b11111110;};

if (adc[1] > bts[1]) {sens |= 0b00000010;}
else {sens &= 0b11111101;};

if (adc[2] > bts[2]) {sens |= 0b00000100;}
else {sens &= 0b11111011;};

if (adc[3] > bts[3]) {sens |= 0b00001000;}
else {sens &= 0b11110111;};

if (adc[4] > bts[4]) {sens |= 0b00010000;}
else {sens &= 0b11101111;};

if (adc[5] > bts[5]) {sens |= 0b00100000;}
else {sens &= 0b11011111;};

if (adc[6] > bts[6]) {sens |= 0b01000000;}
else {sens &= 0b10111111;};

if (adc[7] > bts[7]) {sens |= 0b10000000;}
else {sens &= 0b01111111;};
}

void nil_error() //kesetaraan nilai error
{
switch (sensor)
{

case 0b00000100: error=35; break;
case 0b00000101: error=24; break;
case 0b00000110: error=48; break;
case 0b00000111: error=35; break;
case 0b00001000: error=15; break;
case 0b00001001: error=8; break;
case 0b00001010: error=24; break;
case 0b00001011: error=15; break;
case 0b00001100: error=24; break;
case 0b00001101: error=15; break;
case 0b00001110: error=35; break;
case 0b00001111: error=24; break;
case 0b00010000: error=3; break;
case 0b00010001: error=0; break;
case 0b00010010: error=8; break;
case 0b00010011: error=3; break;

case 0b00011000: error=8; break;
case 0b00011001: error=3; break;
case 0b00011010: error=15; break;
case 0b00011011: error=8; break;
case 0b00011100: error=15; break;
case 0b00011101: error=8; break;
case 0b00011110: error=24; break;
case 0b00011111: error=15; break;
case 0b00100000: error=-3; break;
case 0b00100001: error=-8; break;
case 0b00100010: error=0; break;
case 0b00100011: error=-3; break;

case 0b00110000: error=0; break;
case 0b00110001: error=-3; break;
case 0b00110010: error=3; break;
case 0b00110011: error=0; break;

case 0b00111000: error=3; break;
case 0b00111001: error=0; break;
case 0b00111010: error=8; break;
case 0b00111011: error=3; break;
case 0b00111100: error=15; break;
case 0b00111101: error=8; break;
case 0b00111110: error=35; break;
case 0b00111111: error=15; break;
case 0b01000000: error=-15; break;
case 0b01000001: error=-24; break;
case 0b01000010: error=-8; break;
case 0b01000011: error=-15; break;

case 0b01100000: error=-8; break;
case 0b01100001: error=-15; break;
case 0b01100010: error=-3; break;
case 0b01100011: error=-8; break;

case 0b01110000: error=-3; break;
case 0b01110001: error=-8; break;
case 0b01110010: error=0; break;
case 0b01110011: error=-3; break;

case 0b01111000: error=0; break;
case 0b01111001: error=-3; break;
case 0b01111010: error=3; break;
case 0b01111011: error=0; break;
case 0b01111100: error=3; break;
case 0b01111101: error=-3; break;
case 0b01111110: error=3; break;
case 0b01111111: error=0; break;
case 0b10000000: error=-35; break;
case 0b10000001: error=-48; break;
case 0b10000010: error=-24; break;
case 0b10000011: error=-35; break;

case 0b11000000: error=-24; break;
case 0b11000001: error=-35; break;
case 0b11000010: error=-15; break;
case 0b11000011: error=-24; break;

case 0b11100000: error=-15; break;
case 0b11100001: error=-24; break;
case 0b11100010: error=-8; break;
case 0b11100011: error=-15; break;

case 0b11110000: error=-8; break;
case 0b11110001: error=-15; break;
case 0b11110010: error=-3; break;
case 0b11110011: error=-8; break;

case 0b11111000: error=-3; break;
case 0b11111001: error=-8; break;
case 0b11111010: error=0; break;
case 0b11111011: error=-3; break;
case 0b11111100: error=0; break;
case 0b11111101: error=-3; break;
case 0b11111110: error=3; break;
case 0b11111111: error=0; break;
};
}

void pid() //pengolahan PID
{
// Kp Kk Kd
nil_kan=(int)(((-error)* (((kp)))) +ts)-((error-error1)* (((kd))));
nil_kir=(int)((( error)* (((kp)))) +ts)+((error-error1)* (((kd))));
error1=error;
}

void keluarkan() //pengeluaran
{
if (nil_kan >255) {kanan =255; arah.2=0; arah.3=1; goto akhir_kan;};
if (nil_kan >=0) {kanan =nil_kan; arah.2=0; arah.3=1; goto akhir_kan;};
if (nil_kan <-255) {kanan =255; arah.2=1; arah.3=0; goto akhir_kan;};
if (nil_kan <0) {kanan =(-nil_kan); arah.2=1; arah.3=0; goto akhir_kan;};
akhir_kan:

if (nil_kir >255) {kiri =255; arah.6=1; arah.7=0; goto akhir_kir;};
if (nil_kir >=0) {kiri =nil_kir; arah.6=1; arah.7=0; goto akhir_kir;};
if (nil_kir <-255) {kiri =255; arah.6=0; arah.7=1; goto akhir_kir;};
if (nil_kir <0) {kiri =(-nil_kir); arah.6=0; arah.7=1; goto akhir_kir;};
akhir_kir:
}

7 komentar:

  1. mas Tiko, saya blh minta rangkaian driver motor (H-Bridge) yg pake mosfet?
    please perlu bgt nih!
    makasih banyak mas

    BalasHapus
  2. pak, bisa minta tutorial cara buat rangkaian robot line followernya gak? saya mau belajar niy...

    BalasHapus
  3. Percuma klo punya ilmu tp ga diamalkan, GA BAKALAN BERKAH BUAT HIDUP di DUNIA DAN AKHIRAT...
    perlu dinget bahwa ilmu tuh cuma titipan klo suatu saat yang diatas ngambil semuanya so pasti hidup lho bakalan percuma & sia2.
    liat dong mas gedex ngebagi ilmunya sampai titik penghabisan, nal lho ngasih ilmu sepotong2.
    gue jamin ga bakalan berkah tu ilmu,
    KARENA SUATU SAAT PASTI BAKALAN ADA YANG BISA NGALAHIN ROBot Lho...

    BalasHapus
  4. thx walaupun sedikit yang diFlorkan,,,

    BalasHapus
  5. Ada yang komen gara2 sebel berharap dapat full panduan dari sini. Ada yang bangga. Yang penting terus berkarya..

    BalasHapus
  6. Yang sabar ya Tik menghadapi komen netizen. Terus berkarya saja Tik. Btw selamat ya sudah wisuda. Maaf g bisa dtng soalnya jauh di Malaysia. Saya memang pernah ke Malaysia kebetulan ada keluarga saya yang tinggal di Bukit Badong, Kuala Selangor

    BalasHapus