Robot Line follower dengan alogaritma PD

Postingan ini dipindah ke http://saringantahu.net/robot-line-follower-dengan-alogaritma-pd/

 

20 Responses to Robot Line follower dengan alogaritma PD

  1. sips mas kurniawan..
    siap mencoba…

    dipermari tambah artkel yang bagus…

    salam

    • Y makasih..!

  2. salam kenal mas,..!!mau nanya untuk gambar skema nya ko kurang jalas ya,…
    sekalian sya jga mau nanya mas,klo program bahasa c yg sudah termasuk ada LCD nya ad gx untuk robot LF…cz sya pingin bgt bgt belajar membuat nya (maklum masih awam)hehe….

  3. Salam kenal juga mas kholil, iya emang gambarnya kurang jelas. Tapi cuman yang rangkaian Sistem minimum aja kan? Insya Allah tak benerin tu linknya..! Untuk programnya yang ada LCD nya mungkin lain kali aja ya akan saya bahas. Program di atas, udah bagus kok, maksutnya udah mengena ke prinsip-prinsip dasarnya. Tinggal pengembangannya..! Mungkin dari setiap orang akan berbeda-beda gitu…!

  4. mas, pada program LF diatas, saya ada beberapa pertanyaan, untuk mapping sensor sendiri bagaimana cara menentukan nilainya ? trus, jelaskan dengan rinci dong untuk rumus PID nya dan rumus untuk PWM nya, satu lagi nih, disitu ada “goto akhir_kan” dan “goto akhir_kir” maksudnya apa ya ?
    oke mas, ditunggu jawabannya,
    thanks sebelumnya…..

    • Menentukan nilainya kalo saya cuma coba -coba aja. Pokoknya kalo bisa yang linier aja. Tentukan salah satu sisi aja, sisi yang lain tinggal mengikuti, misalnya sisi yang kanan bobotnya plus semua ( 1,2,3,4,5,), maka yang kiri tinggal ditambah minus.(-5,-4,-3,-3,-2,-1) . Maka jadinya kayak gini : -5,-4,-3,-2,-1,0,1,2,3,4,5
      Rumus PID standart kok cuman kayak gini : pwm_kanan=(int)(((-error)* (((kp)))) +ts)-((error-error1)* (((kd))));
      Note: rumus ini bukan rumus PID, tapi rumus PD.

      Kalo nilai error 0 , robot tetep akan berjalan, karena ada penambahan dengan variabel ts.
      ts itu ada Top speed.( speed awal ).

      perintah goto itu, buat lompat.!!

  5. ms kurniawan, ane mw nanya.. di minsis yg dicantumkan tdak ada kapasitor yg bernilai besar ya (ex : 2200 uF) ?? padahal konsumsi arus dari driver mosfet /l298 kan besar ya ms? itu kenapa ya ms? atw memang tdak bgitu diperlukan.. terimakasih atas jawaban yg diberikan..

    • kebetulan untuk sismin robot saya ini nggak ada masalah ketika pada inputannya nggak ada kapasitornya. Tapi untuk kasus yang lain. saya pernah mengalaminya juga. Sismin saya sering reset juga akibat beban motor saya terlalu besar. Akal akalannya ya dipasang kapasitor di inputannya…! Alhasil tidak reset reset lagi .

      Sori baru bales.! terimakasih telah berkunjung di blog saya..!

  6. lam kenal mass

    saya bisa mintablayout pcb a g mass

    al a gambar diatas kurang jelas

    krim lwt email y mass

    thx

    ilmu yang bermanfaat utk orang lain
    blasan a dr allah

    amin

    • Salam kenal juga mas.
      Kebetulan, rangkaian di atas ntu bukan buatan ane. Jadi ane nggak berani share layoutnya. Rangkaian nya jelas kan? kalo yang nggak jelas. Bisa ditanyakan kok. OK..!! Emangsih rangkain sisminnya kurang begitu jelas. Tapi rangkaian sismin ya gitu2 aja kok.

  7. Bang ada kontak yg bs saya hubungi buat konsultasi…
    saya baru belajar Robot…
    Bang itu sudah full program ya?? saya coba kok tidak bisa baca sensornya?
    trs untuk adc[0] artinya apa? kan adc masih dalam pendefinisian array kok sudah dibandingkan, nilai adc[0]-adc[7] didapat dari mn??

    Tolong cepat balas ya bang uda mepet tugas saya :) mksih sebelumnya

    • itu udah full mas. adc[0] artinya variabel array dengan nama adc yang ke 0. Coba baca alur programnya lagi. sebelum dibandingkan, nilai adc itu kan diambil dulu dari PORT nya kan?
      adc[0]=read_adc(0); //====>> ini ngambil di adc 0
      if (adc[0] > bts[0]) {sens |= 0b00000001;}
      else {sens &= 0b11111110;};
      adc[1]=read_adc(1); //====>> ini ngambil di adc 1
      if (adc[1] > bts[1]) {sens |= 0b00000010;}

      klo mau lebih sip, mungkin nilai sensornya ditampilin pake LCD . jadi klo ada salah algoritma bisa diketahui. Makasih sudah mampir di blog saya..!!

      mas.koera@gmail.com

      • makasih mas jawabannya. maaf banyak pertanyaan maklum dari informatika belum dapet matkulh robotika tapi uda dapat tugas bikin mikrokontroller. :( (

        1.Cara ngambil portnya gmn? kan di program mas
        adc[0]=read_adc(0); ngambil dari fungsu read_adc??? Bukanya untuk ngambil nilai adc dari sensor lewat PINx??

        2. trus untuk nilai bts[]. Ngambil nilai array dari mana kok langsung dibandingkan dari adc? if (adc[0] > bts[0])

        3. ini fungsinya apa??
        ADMUX=0×60;
        ADCSRA=0×87;
        TCCR1A=0xA1;
        TCCR1B=0x0c;

        4. Masih bingung dengan PWM :( bukannya output dari mikrokontroller 1 dan 0???

  8. 1.Cara ngambil portnya gmn? kan di program mas
    adc[0]=read_adc(0); ngambil dari fungsu read_adc??? Bukanya

    untuk ngambil nilai adc dari sensor lewat PINx??

    jawab:
    - ngambil nilai adc ama ngambil nilai di port itu beda.
    - untuk kasus robot LF ini, saya pakai adc sebagai pembaca sensornya. Jadi saya nggak pakai PINx untuk mbaca sensornya.
    - variabel adc[0] di isi oleh fungsi read_adc(). NIlai maximal nya adalah 255 karena saya pakai adc 8 bit.
    - nilai adc tergantung dari pembacaan dari sensor.
    - semakin banyak kena hitam , tegangan adc nya semakin besar

    dan sebaliknya. (catatan: untuk hardware sensor seperti punya saya itu)

    2. trus untuk nilai bts[]. Ngambil nilai array dari mana kok langsung dibandingkan dari adc? if (adc[0] > bts[0])

    jawab:
    - oh ya proram saya kurang. isi aja bts[0] sampai bts[8]

    dengan nilai 100;
    - thanks atas koreksinya

    3. ini fungsinya apa??
    ADMUX=0×60; //adc
    ADCSRA=0×87; //adc
    TCCR1A=0xA1; //pwm
    TCCR1B=0x0c; //pwm

    jawab:
    - itu seting ADC dan PWM nya..!

    4. Masih bingung dengan PWM :( bukannya output dari

    mikrokontroller 1 dan 0???

    jawab:
    - PWM itu memang keluarannya 1 dan 0. cuman 1 dan 0 nya itu
    bisa kita atur waktunya. PWM biasanya dinyatakan dalam duty cycle. misalnya PWM dengan Duty Cycle 40%, berarti 40% On dan
    60% off. dengan mengatur lebar on atau off. kita dapat
    mengatur tegangan yang akan dikeluarkan. mengatur tegangan
    dengan PWM mungkin kmu tau tapi nggak sadar. apa itu? charger
    laptop itu salah satu contohnya. So nggak perlu lagi Trafo
    yang berat banget itu…

    - misal drivermu itu inputnya 12 volt, trus kamu kasih PWM

    40% . keluaran di outputnya menurut perhitungan adalah (40/100)x12 = 4,8 Volt kalo 50% ya pasti setenaghnya dari 12 yaitu 6 volt kalo 100% ya brarti 12 volt.. paham to?

    • belom paham om :D
      Deklaraso0 pwmnya kan ini
      TCCR1A=0xA1; //pwm
      TCCR1B=0x0c; //pwm
      hubungannya dengan hasil rpwm dan lpwm apa??? gimana hubunginnya??? makasih :( (

      • oya bang selain hubungan
        TCCR1A=0xA1; //pwm
        TCCR1B=0x0c; //pwm
        sama rpwm dan lpwm??
        Gimana algoritmanya cara membaca perempatan pertigaan dan garis putus putus???

      • Ok mas, ini tak bikinin Postingan baru, semoga membantu. http://koera.wordpress.com/2012/01/07/membuat-pwm-dengan-timer-1/

        Programnya udah saya tambahin, coba dilihat lagi..! bingunya nyambungin PWM nya ya? kalo iya PWMnya itu dihasilkan di kaki OC1A dan OC1B ( kaki 18 dan kaki 19 uC AVR ). Di, postingan yang itu, sudah saya jelaskan juga..semoga membantu..!!

        - untuk baca garis putus-putus sangat mudah, yaitu tidak perlu trik apapun. dengan program di atas (PD biasa), sudah bisa melewati garis putus-putusnya.!
        - Kalo mau baca perempatan, maping aja garisnya, misalnya 0b00111100; maping aja sesuai sensornya kamu..!!

  9. mas., klo saya liat d video. cara robot bisa invers garis (garis hitam ke garis putih) seperti itu gmn..??
    klo saya liat program d atas cuma utk logika garis hitam. bener gak mas..? maaf klo salah..

    • Benar program di atas hanya untuk garis item aja. Kalo mau bisa invers juga. Tinggal nambah Kondisinya aja. yaitu dengan kondisi jika sensornya kebalik. kalo 0b00000001 menjadi 0b11111110 . Bisa juga main status.

      ini potongan program di void main nya :

      while(1)
      {
      baca_sensor();
      cari_status();
      if(status==1){sens=~sens;}else{sens=sens;}
      nilai_error();
      pid();
      keluarkan();
      }

      prosedure cari status adalah prosedure untuk mengetahui posisi robot itu di tempat invers atau bukan . bagaimana caranya? liat contoh ini:

      cari_status()
      {
      if(sens==0b11100111 || sens==0b11110111 || sens==0b11101111 ){status=1;}

      if(sens==0b00011000 || sens==0b00010000 || sens==0b00001000){status=0;}
      }

  10. Pingback: Membuat PWM dengan Timer 1 | KoeRa Go BloG

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s