Archive for the ‘Kuliah Kontrol’ Category

Identifikasi Plant

Identifikasi plant orde 1

Identifikasi plant ditujukan untuk mendapatkan model matematis berupa fungsi alih yang digunakan untuk proses perancangan kontroler nantinya. Untuk jenis  plant yang dibahas berupa  motor DC sistem orde satu. Orde sistem menentukan jenis kontroler yang akan dipakai dan mencari nilai parameter kontroler  untuk hasil respon yang diinginkan.

Persamaan (1) memperlihatkan bentuk umum fungsi alih dari sistem orde satu.

Dengan demikian dapat diketahui keluaran sistem terhadap masukan unit step atau biasa disebut unit step response. Transformasi Laplace untuk masukan sinyal berupa unit step adalah 1/s, dengan mensubtitusikan kedalam persamaan (1) maka didapatkan persamaan (2) untuk keluaran sistem.

Dengan metode pecahan parsial maka didapat persamaan (3) untuk nilai K= 1.

Dengan mentransformasikan persamaan (3) kedalam domain waktu maka didapatkan persamaan (4). Persamaan ini menyatakan bahwa kondisi awal keluaran sistem C(t) adalah nol dan pada akhirnya mendekati suatu nilai tertentu. Salah satu kriteria penting dari keluaran sistem adalah ketika nilai t = τ , yaitu keluaran sistem pada saat mencapai nilai 63,2 % dari total perubahan keluaran sistem. Semakin kecil nilai dari τ atau biasa disebut konstanta waktu maka semakin cepat kondisi transien dari sistem tersebut.

untuk   t > 0:

Karakteristik penting lainnya adalah nilai dari kemiringan kurva keluaran sistem pada saat t = 0 adalah 1/τ. Dapat dilihat pada Gambar 1 bahwa setelah kurva keluaran sistem telah melewati nilai t = τ  maka nilai kemiringan kurva menurun begitu cepat.

Gambar 1. Kemiringan kurva keluaran sistem orde satu

CONTOH:

Identifikasi plant motor DC menggunakan perangkat lunak LabVIEW. Kemudian diberi masukan sebesar step 1 volt dengan waktu sampling 1 ms.

Hasil identifikasi ditunjukkan pada Gambar 2.

Gambar 2. Identifikasi plant motor DC dengan waktu sampling sebesar  1ms.

Dari grafik respon diperoleh fungsi alih  Plant Motor DC ialah

K=gain overall=3,618

τ=4,142*1 ms = 0,004142 detik

Untuk kemudahan dalam menganalisa maka dilakukan pembulatan data matematis dari fungsi alih, berikut hasil pembulatan fungsi alih dari Plant:

Dengan menggunakan matlab dapat digambarkan step respon sebagai berikut:

Gambar 3. Plotting step respon plant menggunakan Matlab

Dari hasil step respon didapat settling time (ts 5%) mendekati nilai 0,015 detik.

Modulasi Sinyal

Pengertian Modulasi

Modulasi adalah proses pencampuran dua sinyal menjadi satu sinyal. Biasanya sinyal yang dicampur adalah sinyal berfrekuensi tinggi dan sinyal berfrekuensi rendah. Dengan memanfaatkan karakteristik masing-masing sinyal, maka modulasi dapat digunakan untuk mentransmisikan sinyal informasi pada daerah yang luas atau jauh. Sebagai contoh Sinyal informasi (suara, gambar, data), agar dapat dikirim ke tempat lain, sinyal tersebut harus ditumpangkan pada sinyal lain. Dalam konteks radio siaran, sinyal yang menumpang adalah sinyal suara, sedangkan yang ditumpangi adalah sinyal radio yang disebut sinyal pembawa (carrier). Jenis dan cara penumpangan sangat beragam. Yaitu untuk jenis penumpangan sinyal analog akan berbeda dengan sinyal digital. Penumpangan sinyal suara juga akan berbeda dengan penumpangan sinyal gambar, sinyal film, atau sinyal lain.

Tujuan Modulasi

  • Transmisi menjadi efisien atau memudahkan pemancaran.
  • Masalah perangkat keras menjadi lebih mudah.
  • Menekan derau atau interferensi.
  • Untuk memudahkan pengaturan alokasi frekuensi radio.
  • Untuk multiplexing, proses penggabungan beberapa sinyal informasi untuk disalurkan secara bersama-sama melalui satu kanal transmisi.

Fungsi Modulasi

Sinyal informasi biasanya memiliki spektrum yang rendah dan rentan untuk tergangu oleh noise. Sedangakan pada transmisi dibutuhkan sinyal yang memiliki spektrum tinggi dan dibutuhkan modulasi untuk memindahkan posisi spektrum dari sinyal data, dari pita spektrum yang rendah ke spektrum yang jauh lebih tinggi. Hal ini dilakukan pada transmisi data tanpa kabel (dengan antena), dengan membesarnya data frekuensi yang dikirim maka dimensi antenna yang digunakan akan mengecil.

Gelombang pembawa berbentuk sinusoidal

c(t) = Ac cos(2π fct + Φc )

Parameter – parameter dari gelombang tersebut yang dapat dimodulasi adalah :

•      Amplitudo, Ac untuk modulasi amplitudo

•      Frekuensi, fc atau ωc = 2π fc t untuk modulasi frekuensi

•      Phasa, Φc untuk modulasi fasa.

Amplitudo, Frekuensi, Phase


Amplitudo

Nilai maksimum dari besaran elektrik (mis voltage) dari gelombang

Frekuensi

Jumlah cycle yang dihasilkan dalam satu detik (cycles per second atau Hertz)

Phase

Gelombang A dengan phase 00

Gelombang B dengan selisih phase  -900 (lebih lambat) terhadap A

Gelombang C dengan selisih phase  +900 (lebih cepat) terhadap A

Jenis-jenis modulasi analog

  • Amplitude modulation (AM)
  • Frequency modulation (FM)
  • Pulse Amplitude Modulation (PAM)

1. Amplitude modulation (AM)

Modulasi jenis ini adalah modulasi yang paling simple, frekwensi pembawa atau carrier diubah amplitudenya sesuai dengan signal  informasi atau message signal yang akan dikirimkan. Dengan kata lain AM adalah modulasi dalam mana amplitude dari signal pembawa (carrier) berubah karakteristiknya sesuai dengan amplitude signal informasi. Modulasi ini disebut juga linear modulation, artimya bahwa pergeseran frekwensinya bersifat linier mengikuti signal informasi yang akan ditransmisikan.

2. Frequency modulation (FM)

Modulasi Frekwensi adalah salah satu cara memodifikasi/merubah Sinyal sehingga memungkinkan untuk membawa dan mentransmisikan informasi ketempat tujuan. Frekwensi dari Sinyal Pembawa (Carrier Signal) berubah-ubah menurut besarnya amplitude dari signal informasi. FM ini lebih tahan noise dibanding AM.

3. Pulse Amplitude Modulation (PAM)

Basic konsep PAM adalah merubah amplitudo signal carrier yang berupa deretan pulsa (diskrit) yang perubahannya mengikuti bentuk amplitudo dari signal informasi yang akan dikirimkan ketempat tujuan. Sehingga signal informasi yang dikirim tidak seluruhnya tapi hanya sampelnya saja (sampling signal).

 

Modulasi Digital

Teknik modulasi digital pada prinsipnya merupakan variant dari metode modulasi analog.

Teknik modulasi digital :

  • Amplitude shift keying (ASK)
  • Frequency shift keying (FSK)
  • Phase shift keying (PSK)

 

Definisi Kontroler

Kontroler merupakan salah satu komponen sistem pengaturan yang berfungsi mengolah sinyal umpan balik dan sinyal masukan acuan (setpoint) atau sinyal error mejadi sinyal kontrol. Sinyal error disini adalah selisih antara sinyal umpan balik yang dapat berupa sinyal keluaran plant sebenarnya atau sinyal keluaran terukur dengan sinyal masukan acuan (setpoint).

Letak kontroler dalam sistem pengaturan khususnya sistem pengaturan loop tertutup dapat bervariasi sesuai dengan kebutuhan desain, yaitu :

1. Kontroler terletak pada lintasan umpan maju (feedforward), seperti pada diagram blok berikut ini :

2. Kontroler terletak pada lintasan umpan balik (feedback), seperti pada diagram blok berikut ini :

3. Kontroler diletakkan seri dengan loop tertutup, seperti pada diagram blok berikut ini :

4. Kontroler terletak pada lintasan umpan maju (feedforward), lintasan umpan balik (feedback) dan diletakkan seri dengan loop tertutup. Dalam hal ini kontroler disebut sebagai model following controller. Hal ini dapat kita lihat seperti pada diagram blok berikut ini :

Kontroler dapat diklasifikasikan berdasarkan beberapa sudut pandang tertentu. Berdasarkan aksi kontrolnya, kontroler dapat diklasifikasikan sebagai berikut :

Paper “Fuzzy Logic And Fuzzy Logic Sun Tracking Control”

FUZZY LOGIC AND FUZZY LOGIC SUN TRACKING CONTROL


ABSTRAKSI

Logika Fuzzy adalah suatu proses pengambilan keputusan berbasis aturan yang bertujuan untuk memecahkan masalah, dimana sistem tersebut sulit untuk dimodelkan atau terdapat ambiguitas dan  ketidakjelasan yang berlimpah. Logika Fuzzy ditentukan oleh persamaan logika bukan dari persamaan diferensial komplek dan berasal dari pemikiran yang mengidentifikasi serta mengambil keuntungan dari grayness antara dua ekstrem. Sistem logika fuzzy terdiri dari himpunan fuzzy dan aturan fuzzy. Subset fuzzy merupakan himpunan bagian yang berbeda dari variabel input dan output. Aturan fuzzy berhubungan dengan variabel masukan dan  variabel output melalui subset. Mengingat seperangkat aturan fuzzy, sistem dapat mengkompensasi dengan cepat dan efisien. Meskipun dunia Barat pada awalnya tidak menerima logika fuzzy dan ide fuzzy, hari ini logika fuzzy diterapkan dalam banyak sistem. Dalam riset ini, sistem pelacakan surya diimplementasikan menggunakan logika fuzzy. Langkah-langkah bagaimana membuat serta gambaran tentang bagaimana kerja sistem fuzzy dijelaskan dalam paper ini.


Kata kunci: fungsi keanggotaan, grayness, subset fuzzy, fuzzification, aturan fuzzy, defuzzifikasi, Fuzzy Teorema Aproksimasi (FAT), angka fuzzy, dan sistem fuzzy


PENDAHULUAN

Bagaimana mendefinisikan dunia tempat kita hidup di hari ini? Bagaimana kita melihat hal-hal di sekitar kita? Sebagian besar dari kita diajarkan dari usia yang sangat muda untuk melihat dunia dalam hal hitam dan putih, A-atau-bukan-A, Boolean 1 atau 0. Banyak ilmu pengetahuan, matematika, logika, dan bahkan budaya mengasumsikan dunia 1 dan 0 itu, benar atau salah, panas atau dingin, A-atau-tidak-A. Apakah ada atau setengah setengah hilang? Apakah setengah gelas penuh atau setengah kosong? Apakah mobil akan cepat atau lambat? Masing-masing pertanyaan ini mengenai hal  grayness di dunia biasanya menjelaskan dalam warna hitam dan putih.

Rene Descartes berpikir tentang perubahan sepotong lilin seperti meleleh di depan perapian. Pada titik melakukan perubahan dari sepotong lilin menjadi genangan lilin? Ada beberapa periode perubahan dari padat menjadi cair.

Grayness adalah ketidakjelasan. Einstein bertanya-tanya tentang grayness tersebut. “Sejauh hukum matematika mengacu pada realitas, mereka tidak yakin. Dan sejauh mereka yakin, mereka tidak mengacu pada realitas, “katanya [13]. Mereka menggambarkan dunia sebagai sistem yang rapi dan teratur tanpa grayness. Matematika dan ilmu pengetahuan mencoba menyesuaikan setiap proses di dunia untuk persamaan dan persamaan yang rapi dan terorganisir. Bayangkan dunia tanpa grayness. Tidak mungkin. Dunia yang kita hidup di sangat berantakan dan termasuk banyak  grayness didalamnya. Dengan matematika dan ilmu pengetahuan, kita telah mengamati kecenderungan tertentu dan hubungan yang tetap berlaku untuk jangka waktu dan didefinisikan mereka sebagai logika matematika dan hukum ilmiah. Kebenaran logika dan undang-undang hanyalah masalah derajat dan dapat berubah setiap saat [13]. Matahari dapat membakar dan tidak pernah bangkit kembali. Bulan bisa berhenti berputar mengelilingi bumi. Hukum ini rapi dan terorganisir dan aturan akan mengalami perubahan. Ada unsur grayness yang hadir bahkan dalam matematika dan sains.

Untuk lebih menjelaskan perbedaan antara model ilmiah atau matematis hitam dan putih dibandingkan dengan model dunia nyata, pertimbangkan ketika seseorang berubah dari remaja ke dewasa [13]. Gambar 1 menunjukkan grafik Representasi Ilmiah. Hal ini menunjukkan bahwa seseorang adalah baik dewasa maupun non-dewasa. Filsafat Aristoteles didasarkan pada A-atau tidak A. Ia merumuskan Hukum Tengah dikecualikan, yang mengatakan segala sesuatu yang jatuh ke dalam salah satu kelompok atau yang lain, tetapi tidak bisa di kedua [8].

Gambar 1: Representasi Ilmiah

Gambar 2 menunjukkan grafik yang sama dengan naungan prinsip abu-abu, A-dan-tidak-prinsip A. Ia tidak mengikuti hukum Aristoteles tentang bivalensi. Kemungkinannya adalah seseorang akan memiliki karakteristik beberapa orang dewasa dan beberapa karakteristik non-dewasa. Untuk tingkat tertentu mereka adalah orang dewasa dan untuk beberapa derajat mereka tidak dewasa.

Gambar 2: Representasi Grayness

representasi ini tampaknya paling akurat menggambarkan dunia yang kita hidup ini. Namun, ide ini ditantangan oleh Aristoteles dan filsafat yang sebagian besar dunia telah memeluk begitu lama.

Grayness adalah ide kunci dari logika fuzzy. Logika Fuzzy adalah nama yang diberikan kepada analisis yang berusaha untuk menentukan bidang grayness yang begitu tepat dengan karakteristik dunia yang kita tinggal. Logika fuzzy merupakan alternatif ke A-atau-bukan-A, Boolean 1 dan 0 definisi logika dibangun ke dalam masyarakat. Ia berusaha untuk menangani konsep kebenaran parsial dengan menciptakan nilai-nilai yang mewakili apa yang ada antara kebenaran dan kepalsuan. Logika fuzzy dapat digunakan di hampir aplikasi apapun dan berfokus pada penalaran perkiraan.

SEJARAH
Logika fuzzy dimulai pada tahun 1965 dengan kertas yang disebut “Fuzzy Sets” oleh seorang pria bernama Lutfi Zadeh. Zadeh adalah profesor imigran dan Iran dari teknik elektro UC Berkeley, departemen ilmu komputer. Sambungan sejarah pertama logika fuzzy dapat dilihat dalam pemikiran Buddha, pendiri agama Buddha sekitar 500 SM. Dia percaya bahwa dunia itu penuh dengan kontradiksi dan semuanya berisi beberapa kebalikannya. Bertentangan dengan pemikiran Buddha, filsuf Yunani Aristoteles menciptakan logika biner melalui Hukum Tengah dikecualikan. Sebagian besar dunia Barat menerima filosofi dan itu menjadi dasar pemikiran ilmiah. Masih hari ini, jika ada sesuatu yang terbukti secara logis benar, itu dianggap ilmiah benar [7].

Sebelum Zadeh, seorang pria bernama Max Black menerbitkan sebuah makalah pada tahun 1937 disebut “ketidakjelasan: Latihan di Logical Analysis” [13]. Gagasan bahwa Black terjawab adalah hubungan antara ketidakjelasan dan sistem berfungsi. Zadeh, di sisi lain, melihat hubungan ini dan mulai mengembangkan iden nya tentang logika “kabur” dan fuzzy set. Ide-ide Zadeh’s mengalami banyak perlawanan dari dunia Barat. Ada tiga kritik utama. Yang pertama adalah bahwa orang ingin melihat logika fuzzy diterapkan. Hal ini tidak terjadi untuk kadang-kadang karena ide-ide baru membutuhkan waktu untuk menerapkan. Kritik kedua datang dari sekolah probabilitas. Fuzzy logic menggunakan angka antara 0 dan 1 untuk menggambarkan derajat fuzzy. Probabilists merasa bahwa mereka melakukan hal yang sama [13]. Kritik ketiga adalah yang terbesar. Logika fuzzy untuk bekerja, orang harus setuju bahwa A-dan-tidak-A adalah benar. Ini ilmu pengetahuan modern mengancam dan ide-ide matematika. Akibatnya, dunia Barat menolak logika fuzzy untuk jangka waktu tertentu.

Pada tahun 1980, Jepang memiliki lebih dari 100 perangkat logika fuzzy [13]. Menurut Zadeh, pada tahun 1994, Amerika Serikat hanya menempati peringkat ketiga dalam aplikasi fuzzy belakang Jepang dan Jerman [2]. Masih hari ini, Amerika Serikat, beberapa tahun belakang dalam pengembangan dan implementasi logika fuzzy.
Zadeh ingat bahwa ia memilih kata “kabur” karena ia “merasa paling akurat menggambarkan apa yang sedang terjadi di dalam teori” [2]. Kata-kata lain yang ia pikirkan tentang penggunaan kata untuk menggambarkan teori tersebut termasuk istilah  lembut, tidak tajam, kabur, atau elastis. Dia memilih istilah “kabur” karena “hubungan dengan akal sehat” [13].

LOGIKA FUZZY

Ada banyak manfaat untuk menggunakan logika fuzzy. Logika fuzzt adalah konseptual mudah dipahami dan memiliki pendekatan alami [8]. Logika fuzzy fleksibel dan dapat dengan mudah ditambah dan disesuaikan. Hal ini sangat toleran terhadap data yang tidak tepat dan terhadap model yang nonlinier/ kompleksitas sedikit. Hal ini juga bisa dicampur dengan teknik kontrol konvensional. Ada tiga komponen utama dari sistem fuzzy: set fuzzy, aturan fuzzy, dan bilangan fuzzy.

Logika fuzzy dan berpikir fuzzy terjadi di set fuzzy. Pertimbangkan contoh kendaraan. Kita semua berbicara kendaraan yang sama, tapi kita berpikir kendaraan pada tingkat yang berbeda. Ini adalah kata benda. Ini menggambarkan sesuatu. Ada sekelompok perangkat yang kita sebut kendaraan. Perangkat ini mungkin termasuk truk, pesawat, bus, mobil, sepeda, skuter, atau skateboard. Apa yang saya anggap kendaraan yang akan bisa menjadi sesuatu yang sangat berbeda dari apa yang orang lain anggap. Yang benar-benar kendaraan atau tidak? Beberapa tampak lebih dekat dengan gagasan kita tentang sebuah kendaraan daripada yang lain. Aristoteles akan mengatakan bahwa hanya ada satu kendaraan dan bukan kendaraan. logika fuzzy mengatakan bahwa untuk gelar masing-masing perangkat ini adalah kendaraan. Beberapa merupakan kendaraan lebih dari yang lain tetapi semua jatuh dalam grayness antara kendaraan dan bukan kendaraan. Intinya adalah bahwa kendaraan kata singkatan untuk satu set fuzzy dan hal-hal yang termasuk dalam mengatur beberapa derajat.

Lambang fuzzy sebenarnya adalah simbol “yin-yang” [13]. Simbol yin-yang, ditunjukkan pada Gambar 3 adalah sama hitam dan putih. Hal ini dalam keadaan yang paling fuzzy.

Gambar 3: Simbol yin-yang

Untuk lebih melihat bagaimana isi set fuzzy yang lebih kecil dan sebagainya, pertimbangkan kendaraan off-road. Sebuah kendaraan off road adalah seperangkat kecil kendaraan. Setiap kendaraan off-road adalah kendaraan, tetapi tidak setiap kendaraan sebuah kendaraan off-road. Pertanyaan yang diajuakan adala: kapan sebuah kendaraan adalah off-road? Sekali lagi ini adalah masalah derajat.Fuzzy set ini dikombinasikan dengan aturan-aturan fuzzy membangun sistem fuzzy. Fuzzy set dapat diciptakan dari apa pun.

Komponen kedua dari sistem fuzzy adalah aturan fuzzy. Aturan fuzzy didasarkan pada pengetahuan manusia. Pertimbangkan bagaimana alasan manusia dengan contoh sederhana: jika Anda membawa payung untuk bekerja? Pertama, Anda memiliki pengetahuan tentang ramalan: sekitar 70% kemungkinan hujan. Kedua, Anda memiliki pengetahuan tentang fungsi payung: untuk membuat Anda tetap kering ketika hujan. Dari pengetahuan ini, Anda dapat membuat aturan yang membimbing Anda melalui suatu keputusan. Jika hujan, Anda akan mendapatkan basah. Jika Anda mendapatkan basah, Anda akan tidak nyaman di tempat kerja. Jika Anda menggunakan payung, Anda akan tetap kering. Oleh karena itu, Anda memutuskan untuk membawa payung. Aturan yang dipandu untuk keputusan Anda berhubungan satu hal atau peristiwa atau proses ke hal atau peristiwa dalam bentuk :jika-maka” [13].

Pengetahuan tentang kesempatan hujan menyebabkan aturan yang membuat Anda memutuskan cara yang Anda lakukan. Ini adalah bagaimana aturan fuzzy diciptakan, melalui pengetahuan manusia. Mendefinisikan aturan-aturan fuzzy atau fuzzy patch. Fuzzy patch, bersama dengan grayness, merupakan ide kunci dalam logika fuzzy. “Patch ini akal sehat dasi ke geometri sederhana dan membantu mendapatkan pengetahuan untuk dapat menuliskan program ke dalam komputer,” kata Bart Kosko, penganjur terkenal di dunia dan populizer logika fuzzy [13]. Patch ditentukan oleh bagaimana sistem fuzzy dibangun untuk dapat meliputi  jalur output yang didefinisikan oleh sistem. Gambar 4 menunjukkan bercak fuzzy yang meliputi jalur output. Sebuah konsep yang dirancang oleh Kosko disebut Fuzzy Teorema Aproksimasi (FAT) menyatakan bahwa jumlah terbatas patch dapat mencakup kurva [13]. Jika patch yang besar, aturan yang besar. Jika patch kecil, aturan yang tepat. Mencoba untuk membuat aturan yang terlalu tepat membangun banyak kompleksitas ke dalam suatu sistem fuzzy.

Gambar 4: Patch Fuzzy Meliputi Line

Setiap bilangan fuzzy adalah fungsi domain. Bilangan fuzzy memungkinkan perbandingan perkiraan [3]. Pertimbangkan objek bergerak dengan kecepatan yang kurang lebih sama dengan 50 mph. Hal ini akan “sekitar 50 mph.” Fuzzy hal yang berguna dalam  memungkinkan kita untuk mengabaikan kekakuan bahwa sebenarnya kecepatan 50,1 mph atau bahkan 51 mph. Dari perkiraan ini suatu perbandingan dapat dibuat untuk objek lain akan “sekitar 50 mph.”

Ada beberapa cara untuk mengasosiasikan nomor fuzzy ke deskripsi dalam kata-kata. Asosiasi ini terjadi dalam bentuk-bentuk tertentu. Bentuk ini disebut sebagai fungsi keanggotaan. Ada empat bentuk yang terutama digunakan. Hal ini termasuk segitiga, trapesium, Gaussian, dan Singleton.

Gambar 5: menunjukkan bentuk yang mungkin digunakan untuk definisi subset.

Referensi

[1] Aziz, Shahariz Abdul. “You Fuzzyin’ With Me?”   1996. Online posting. 13 Dec. 2002. <http://www.doc.ic.ac.uk/~nd/surprise_96/journal/vol1/sbaa/article1.html >

[2] Blair, Betty. “Interview with Lotfi Zadeh.” Azerbaijan International. 2.4 (1994). 4 Dec. 2002.

<http://www.azer.com/aiweb/categories/magazine/24_folder/24_articles/24_fuzzylogic.html>

[3] “Chapter 1: Fuzzy Mathematics: Fuzzy Logic, Fuzzy Sets, Fuzzy Numbers.” 14 Dec. 2002. <http://members.aol.com/wsiler/chap01.htm>

[4] Conti, S., G. Tina, C. Ragusa.  “Optimal Sizing Procedure for Stand-Alone Photovoltaic Systems by Fuzzy Logic.” Journal of Solar Energy Engineering. Feb. 2002, vol. 124. 77-82.

[5] Cruz, Adriano. “Extension Principle.” 2002. UFRJ. 12 Dec. 2002. <http://equipe.nce.ufrj.br/adriano/fuzzy/transparencias/extension.pdf>

[6] “Fuzzy Arithmetic.” 4 Oct. 2000. Online posting. Everything 2. 12 Dec, 2002. <http://www.everything2.com/index.pl?node=fuzzy%20arithmetic>

­[7] “Fuzzy Logic.” Online posting. 12 Dec. 2002. <http://www.ch172.thinkquest.hostcenter.ch/fuzzy-logic7.html>

[8] “Fuzzy Logic Toolbox.” The MathWorks. Online posting. 2002. 6 Dec. 2002. <http://www.mathworks.com/access/helpdesk/help/toolbox/fuzzy/fuzzy.shtml >

[9] Giachetti, Ronald E., Robert E. Young. “A Parametric Representation of Fuzzy Numbers and their Arithmetic Operators.” Online posting. 14 Dec. 2002. <http://citeseer.nj.nec.com/cache/papers/cs/9060/http:zSzzSzwww.nist.govzSzmsidstaffzSzgiachettizSzpfn-fss.pdf/giachetti96parametric.pdf>

[10] Hanns, Michael. “A Nearly Strict Fuzzy Arithmetic for Solving Problems with Uncertainties.” Online posting. 14 Dec. 2002. <http://www.mecha.uni-stuttgart.de/Mitarbeiter/Hanss/papers/nafips00a.pdf >

[11] Isaka, Satoru, Bart Kosko. “Fuzzy Logic.” ­Scientific American. Online posting. July 1993. 14 Dec. 2002. <http://www.fortunecity.com/emachines/e11/86/fuzzylog.html>

[12] Jacob, Christian. Chapter 4: Fuzzy Systems. Online posting. 11 Dec. 2002. <http://pages.cpsc.ucalgary.ca/~jacob/Courses/Winter2001/CPSC533/Slides/04-Fuzzy-6up.pdf>

[13] Kosko, Bart.  “Fuzzy Thinking: The New Science of Fuzzy Logic.” Hyperion. New York. 1993.

[14] “Tour Of Fuzzy Logic Functions.” Wolfram Reasearch, Inc. 28 Nov. 2002. <http://library.wolfram.com/examples/FuzzyLogic/>

Sumber Paper: Fuzzy Logic and Fuzzy Control Systems

TUNING KONTROLER PID Pada Robot Line Follower

TUNING KONTROLER PID LINE FOLLOWER

Tunning kontrol PID ini bertujuan untuk menentukan paramater aksi kontrol Proportional, Integratif, Derivatif pada robot line follower. Proses ini dapat dilakukan dengan cara trial and error . Keunggulan cara ini kita gak perlu mengidentifikasi plant, membuat model matematis plant, menentukan parameter plant dengan grafis ataupun analitis…cukup dengan cara coba-coba memberikan konstanta P-I-D pada formula PID hingga di peroleh hasil yang di inginkan, dengan mengacu pada karakteristik masing-masing kontrol P-I-D.

Nach kalo kita menggunakan kendali PID artinya kita nantinya bertujuan mengolah suatu sinyal kesalahan atau error, nilai error tersebut diolah dengan formula PID untuk dijadikan suatu sinyal kendali atau sinyal kontrol yang akan diteruskan ke aktuator. Gampangnya perhatikan saja blok diagram umpan balik loop tertutup pada perancangan kedali PID pada robot line follower berikut ini:

Dari blok diagram diatas dapat q jelasin sebagai berikut

  1. SP = Set point, secara simple maksudnya ialah suatu prameter nilai acuan atau nilai yang kita inginkan.
  2. PV = Present Value, kalo yang ini maksudnya ialah nilai bobot pembacaan sensor saat itu atau variabel terukur yang di umpan balikan oleh sensor (sinyal feedback dari sensor).
  3. Error = nilai kesalahan, nach kalo yang ini pengertiannya ialah Deviasi atau simpangan antar variabel terukur atau bobot sensor (PV) dengan nilai acuan (SP)

Setelah memahami alur pengendalian PID nach berikut ilustrasi pemberian bobot sensor (nilai kesalahan pembacaan sensor) pada robot line follower:

Dari blok iliustrasi tersebut dapat q jelasin sebagai berikut:

Proses pemberian bobot sensor dapat dilakukan dengan proses pemetaan (mapping) pembacaan sensor terhadap garis, berikut salah satu sample proses mapping sensor:

11111110 (PV=-7)

11111000 (PV=-6)

11111100 (PV=-6)

11111101 (PV=-5)

11110001 (PV=-4)

11111001 (PV=-4)

11111011 (PV=-3)

11100011 (PV=-2)

11110011 (PV=-2)

11110111 (PV=-1)

11100111 (PV=0)

11101111 (PV=1)

11000111 (PV=2)

11001111 (PV=2)

11011111 (PV=3)

10001111 (PV=4)

10011111 (PV=4)

10111111 (PV=5)

00011111 (PV=6)

00111111 (PV=6)

01111111 (PV=7)

11111111 (PV=8 / -8)

Kondisi ideal robot terjadi saat kondisi robot pada PV= 0 (misal kondisi nilai sensor = 11100111, nilai 0 merepresentasikan sensor mengenai garis). Atau SP = 0 ialah kondisi ideal dari robot line follower. Jika PV tidak sama dengan 0 berarti robot tidak berada pada kondisi ideal dan artinya ada sinyal kesalahan (error). Pada kondisi error inilah formula PID akan menentukan hasil sinyal kendalinya. Nach berikut ini penjelasan tentang penerapan PID pada robot line follower:

Proporsional kontrol

Kondisi ideal pada robot adalah bergerak maju lurus mengikuti garis, dengan kata lain PV = 0 (nilai sensor = 11100111). Dari sini dapat diasumsikan bahwa 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, mikrokontroler dapat memberikan nilai PWM motor kiri dan kanan yang sesuai agar dapat menuju ke posisi ideal (SP = 0). Besarnaya nilai PWM ini dapat diperoleh dengan menggunakan kontrol Proporsional (P), dimana P = e  Kp (Kp adalah konstanta proporsional yang nilainya di set sendiri dari hasil tuning).

Saat Sensor = 11111111 nilai PV dapat ditentukan dengan cara membandingkan kondisi PV sebelumnya, jika PV lebih besar dari 0, maka nilai PV dapat diasumsikan 30 dan jika PV kurang dari 0, maka nilai PV dapat diasumsikan -30 atau dengan cara menyimpan nilai error yang lalu.

Dalam pemrograman robot line follower ini kodenya  ditulis secara sederhana seperti berikut:

If Sensor = &B11111111 Then

If Pv < 0 Then : Pv = -30

End If

If Pv > 0 Then : Pv = 30

End If

End If

Perhitungan Kontroler Proporsional

Sp_sensor = 0                             ‘setpoint sensor

Error = Sp_sensor – Pv           ‘nilai error

P = Kp * Error                              ‘proporsional kontrol

Aplikasi kontrol proporsional pada PWM ialah sebagai berikut:

Pwm = Sp_kecepatan + P       ‘motor kiri

Pwm = Sp_kecepatan – P       ‘motor kanan

Derivatif kontrol

Jika pergerakan robot masih terlihat bergelombang, bisa ditambahkan kontrol Derivatif (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 derivatif. Dengan mendapatkan nilai Kd yang tepat pergerakan sisi ke sisi yang bergelombang akibat dari kontrol proporsional bisa diminimalisasi. Nilai D didapat dari D = Kd/Ts * rate, dimana Ts ialah time sampling atau waktu cuplik dan rate = e(n) – e(n-1). Dalam program nilai error (SP – PV) saat itu menjadi nilai last_error, sehingga rate didapat dari error – last_error. Untuk menambahkan kontrol D, program dimodifikasi menjadi:

Perhitungan Kontroler Proporsional + Derivatif

Sp_sensor = 0                             ‘setpoint sensor

Error = Sp_sensor – Pv           ‘nilai error

P = Kp * Error                              ‘proporsional kontrol

D1 = Kd * 10                                 ‘derivatif kontrol

D2 = D1 / Ts

D3 = Error – Last_error           ‘rate

D = D2 * D3

Last_error = Error                   ‘error lampau

Pd = P + D                                     ‘proporsional-derivatif kontrol

Aplikasi kontrol proporsional dan drivatif pada PWM ialah sebagai berikut:

Pwm = Sp_kecepatan + Pd     ‘motor kiri

Pwm = Sp_kecepatan – Pd     ‘motor kanan

Integratif kontrol

Jika dengan P + D sudah membuat pergerakan robot cukup smooth, maka penambahan Integratif menjadi opsional. Jika ingin mencoba-coba bisa ditambahakan Integratif (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 Integratif bisa dikurangi. Nilai akumulasi error didapat dari: error + last_error. Untuk menambahkan kontrol I, maka program di modifikasi menjadi:

Perhitungan Kontroler Proporsional + Integratif + Derivatif

Sp_sensor = 0                             ‘setpoint sensor

Error = Sp_sensor – Pv           ‘nilai error

P = Kp * Error                              ‘proporsional kontrol

D1 = Kd * 10                                  ‘derivatif kontrol

D2 = D1 / Ts

D3 = Error – Last_error           ‘rate

D = D2 * D3

I1 = Ki / 10                                    ‘integratif kontrol

I2 = Error + Last_error           ‘akumulasi error

I3 = I1 * I2

I = I3 * Ts

Last_error = Error                   ‘error lampau

Pd = P + D                                     ‘proporsional-derivatif kontrol

Pid = Pd+I                                    ‘proporsional-integratif-derivatif

Aplikasi kontrol proporsional, integratif dan drivatif pada PWM ialah sebagai berikut:

Pwm = Sp_kecepatan + Pid    ‘motor kiri

Pwm = Sp_kecepatan – Pid    ‘motor kanan

Parameter Nilai Konstanta Kontroler P I D

Nilai konstanta perhitungan PID di tuning secara trial and error, proses ini dilakukan dengan metode mencoba-coba (eksperimental) nilai proporsional, derivatif dan integratif pada formula PID hingga ditemukan hasil sistem yag stabil, adapun cara yang dilakukan untuk mentuning PID pada robot line follower ialah sebagai berikut:

  1. Langkah awal gunakan kontrol proporsional terlebih dahulu, abaikan konstanta integratif dan derivatifnya dengan memberikan nilai nol pada integratif dan derivatif.
  2. Tambahkan terus konstanta proporsional maksimum hingga keadaan stabil namun robot masih berosilasi.
  3. Untuk meredam osilasi, tambahkan konstanta derivatif dengan membagi dua nilai proporsional, amati keadaan sistem robot hingga stabil dan lebih responsif.
  4. Jika sistem robot telah stabil, kontrol integratif dapat menjadi opsional, dalam artian jika ingin mencoba-coba tambahkan kontrol integratif tersebut, namun pemberian nilai integratif yang tidak tepat dapat membuat sistem robot menjadi tidak stabil.
  5. Nilai set point kecepatan dan nilai batas bawah/atas memberikan patokan kecepatan robot.
  6. Nilai time sampling (waktu cuplik) juga mempengaruhi perhitungan PID, tentunnya saat penggunaan kontrol integratif dan derivatif.
  7. Periksa kembali perfoma sistem hingga mendapatkan hasil yang memuaskan.

Acuan penentuan parameter Kp, Ki dan Kd  dapat diadopsi dari watak dari kontroler itu masing seperti yang dijelaskan pada tabel berikut ini:

Simulasi PID Parameter :  klik here

Dan berikut ini sample coding PID line followerku dengan pemrograman BASCOM AVR :

$regfile = “m8535.dat”
$crystal = 12000000
$eeprom

‘—————————inisialisasi pwm————————————
Config Timer1 = Pwm , Pwm = 10 , Prescale = 64 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down       ‘pwm dengan settingan fast pwm 10 bit

‘—————————inisialisasi adc————————————
Config Adc = Single , Prescaler = Auto

‘—————————inisialisasi lcd————————————
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0
Config Lcd = 16 * 2 : Cursor Off

‘——————————————————————————-
‘PENDEFINISIAN PIN MIKRO
‘——————————————————————————-
Config Portd = Output

alias logika motor
M1a Alias Portd.0
M1b Alias Portd.1
M2a Alias Portd.2
M2b Alias Portd.3

Config Portb = Input
Portb = 255
alias tombol
Sw_ok Alias Pinb.3
Sw_cancel Alias Pinb.2
Sw_down Alias Pinb.1
Sw_up Alias Pinb.0

Config Portc.3 = Output

‘——————————————————————————-
‘DEKLARASI VARIABEL
‘——————————————————————————-
Dim B1 As Bit , B2 As Bit , B3 As Bit , B4 As Bit , B5 As Bit , B6 As Bit , B7 As Bit , B8 As Bit,
Dim S1 As Byte , S2 As Byte , S3 As Byte , S4 As Byte , S5 As Byte , S6 As Byte , S7 As Byte , S8 As Byte
Dim Adc1 As Integer , Adc2 As Integer , Adc3 As Integer , Adc4 As Integer , Adc5 As Integer , Adc6 As Integer , Adc7 As Integer , Adc8 As Integer,
Dim S12 As Byte , S123 As Byte , S1234 As Byte , S12345 As Byte , S123456 As Byte , S1234567 As Byte , S12345678 As Byte
Dim C As Byte
Dim B As Byte
Dim Sensor As Byte
Dim Konversi_sensor As Byte
Dim Data1 As Byte
Dim Menu As Byte

‘——————————-declarasi variabel——————————
variabel eeprom
Dim Kp_eprom As Eram Integer
Dim Ki_eprom As Eram Integer
Dim Kd_eprom As Eram Integer
Dim Ts_eprom As Eram Integer
Dim Sp_kecepatan_eprom As Eram Integer
Dim Up_eprom As Eram Integer
Dim Lp_eprom As Eram Integer
Dim Nos_eprom As Eram Integer
Dim Hold_eprom As Eram Integer

Dim Kp As Integer
Dim Ki As Integer
Dim Kd As Integer
Dim Ts As Integer
Dim Sp_sensor As Integer
Dim Sp_kecepatan As Integer
Dim Up As Integer
Dim Lp As Integer
Dim Nos As Integer
Dim Hold As Integer

Dim Error As Integer
Dim Last_error As Integer
Dim Pv As Integer
Dim P As Integer
Dim Pd As Integer
Dim Pid As Integer
Dim Pwm As Integer

Dim I1 As Integer
Dim I2 As Integer
Dim I3 As Integer
Dim I As Integer

Dim D1 As Integer
Dim D2 As Integer
Dim D3 As Integer
Dim D As Integer

Dim N1 As Integer
Dim N2 As Integer

‘——————————————————————————-
‘DEKLARASI SUBRUTIN
‘——————————————————————————-

Declare Sub Baca_sensor()
Declare Sub Kiri_maju()
Declare Sub Kanan_maju()
Declare Sub Kiri_mundur()
Declare Sub Kanan_mundur()
Declare Sub Bantingkanan()
Declare Sub Bantingkiri()

Portc.3 = 0                                                 ‘lcd on

Cls : Home
Lcd “ADC LINEfollower”
Waitms 500
Lowerline
Lcd “Fahmizal_dte2006”
Waitms 1500

Portc.3 = 1                                                 ‘lcd off

Menu_utama:
Cls
Home : Lcd “‘menu'<<<<^>>>>>”
Lowerline
Lcd “Please choice…”
Do
If Sw_up = 0 Then : Waitms 250 : Menu = 1
End If
If Sw_down = 0 Then : Waitms 250 : Menu = 2
End If

If Menu = 1 Then : Locate 2 , 1 : Lcd “Setting ROBOT…”
If Sw_ok = 0 Then : Waitms 250 : Gosub Setting_pid : End If
End If

If Menu = 2 Then : Locate 2 , 1 : Lcd “Go……..Ready?”
If Sw_ok = 0 Then : Waitms 250 : Gosub Go : End If
End If
Loop

‘——————————-menu Konstanta PID——————————
Setting_pid:
Cls
Menu_kp:
Do

Kp = Kp_eprom
If Sw_up = 0 Then : Incr Kp : Waitms 10
End If
If Sw_down = 0 Then : Decr Kp : Waitms 10
End If

If Sw_ok = 0 Then : Waitms 250 : Gosub Menu_ki
End If
If Sw_cancel = 0 Then : Waitms 250 : Gosub Menu_utama
End If

If Kp > 50 Then : Kp = 0 : Waitms 10
End If
If Kp < 0 Then : Kp = 50 : Waitms 10
End If

Home : Lcd “Tuning PID ^–^ “ : Locate 2 , 1 : Lcd “KP:” : Locate 2 , 4 : Lcd ”           “ : Locate 2 , 4 : Lcd Kp : Waitms 100

Kp_eprom = Kp
Loop

‘———————————————

Menu_ki:
Do

Ki = Ki_eprom
If Sw_up = 0 Then : Incr Ki : Waitms 10
End If
If Sw_down = 0 Then : Decr Ki : Waitms 10
End If

If Sw_ok = 0 Then : Waitms 250 : Gosub Menu_kd
End If
If Sw_cancel = 0 Then : Waitms 250 : Gosub Menu_kp
End If

If Ki > 20 Then : Ki = 0 : Waitms 10
End If
If Ki < 0 Then : Ki = 20 : Waitms 10
End If

Home : Lcd “Tuning PID ^–^ “ : Locate 2 , 1 : Lcd “KI:” : Locate 2 , 4 : Lcd ”           “ : Locate 2 , 4 : Lcd Ki : Waitms 100

Ki_eprom = Ki
Loop

‘———————————————

Menu_kd:
Do

Kd = Kd_eprom
If Sw_up = 0 Then : Kd = Kd + 5 : Waitms 10
End If
If Sw_down = 0 Then : Kd = Kd – 5 : Waitms 10
End If

If Sw_ok = 0 Then : Waitms 250 : Gosub Menu_ts
End If
If Sw_cancel = 0 Then : Waitms 250 : Gosub Menu_ki
End If

If Kd > 150 Then : Kd = 0 : Waitms 10
End If
If Kd < 0 Then : Kd = 150 : Waitms 10
End If

Home : Lcd “Tuning PID ^–^ “ : Locate 2 , 1 : Lcd “KD:” : Locate 2 , 4 : Lcd ”           “ : Locate 2 , 4 : Lcd Kd : Waitms 100

Kd_eprom = Kd

Loop

‘———————————————

Menu_ts:
Do

Ts = Ts_eprom
If Sw_up = 0 Then : Ts = Ts + 5 : Waitms 10
End If
If Sw_down = 0 Then : Ts = Ts – 5 : Waitms 10
End If

If Sw_ok = 0 Then : Waitms 250 : Gosub Menu_sp_kecepatan
End If
If Sw_cancel = 0 Then : Waitms 250 : Gosub Menu_kd
End If

If Ts > 20 Then : Ts = 0 : Waitms 10
End If
If Ts < 0 Then : Ts = 20 : Waitms 10
End If

Home : Lcd “TimeSampling(ms)” : Locate 2 , 1 : Lcd “TS:” : Locate 2 , 4 : Lcd ”           “ : Locate 2 , 4 : Lcd Ts : Waitms 100

Ts_eprom = Ts

Loop

‘———————————————

Menu_sp_kecepatan:
Do

Sp_kecepatan = Sp_kecepatan_eprom
If Sw_up = 0 Then : Sp_kecepatan = Sp_kecepatan + 50 : Waitms 10
End If
If Sw_down = 0 Then : Sp_kecepatan = Sp_kecepatan – 50 : Waitms 10
End If

If Sw_ok = 0 Then : Waitms 250 : Gosub Menu_up
End If
If Sw_cancel = 0 Then : Waitms 250 : Gosub Menu_ts
End If

If Sp_kecepatan > 600 Then : Sp_kecepatan = 400 : Waitms 5
End If
If Sp_kecepatan < 400 Then : Sp_kecepatan = 600 : Waitms 5
End If

Home : Lcd “Set Point  ^–^ “ : Locate 2 , 1 : Lcd “kecepatan:” : Locate 2 , 11 : Lcd ”        “ : Locate 2 , 11 : Lcd Sp_kecepatan : Waitms 100

Sp_kecepatan_eprom = Sp_kecepatan

Loop

‘———————————————
Menu_up:
Do

Up = Up_eprom
If Sw_up = 0 Then : Up = Up + 50 : Waitms 10
End If
If Sw_down = 0 Then : Up = Up – 50 : Waitms 10
End If

If Sw_ok = 0 Then : Waitms 250 : Gosub Menu_nos
End If
If Sw_cancel = 0 Then : Waitms 250 : Gosub Menu_sp_kecepatan
End If

If Up > 1000 Then : Up = 700 : Waitms 10
End If
If Up < 700 Then : Up = 1000 : Waitms 10
End If

Home : Lcd “TOP speed ROBOT “ : Locate 2 , 1 : Lcd “top:” : Locate 2 , 5 : Lcd ”           “ : Locate 2 , 5 : Lcd Up : Waitms 100

Up_eprom = Up

Loop

‘———————————————
Menu_nos:
Do

Nos = Nos_eprom
If Sw_up = 0 Then : Nos = Nos + 100 : Waitms 10
End If
If Sw_down = 0 Then : Nos = Nos -100 : Waitms 10
End If

If Sw_ok = 0 Then : Waitms 250 : Gosub Menu_hold:
End If
If Sw_cancel = 0 Then : Waitms 250 : Gosub Menu_up
End If

If Nos > 500 Then : Nos = 100 : Waitms 10
End If
If Nos < 100 Then : Nos = 500 : Waitms 10
End If

Home : Lcd “POWER ^–^ ROBOT” : Locate 2 , 1 : Lcd “start:” : Locate 2 , 7 : Lcd ”           “ : Locate 2 , 7 : Lcd Nos : Waitms 100

Nos_eprom = Nos

Loop
‘——————————————————————————-

Menu_hold:
Do

Hold = Hold_eprom
If Sw_up = 0 Then : Hold = Hold + 5 : Waitms 10
End If
If Sw_down = 0 Then : Hold = Hold – 5 : Waitms 10
End If

If Sw_ok = 0 Then : Waitms 250 : Gosub Rampung_setting:
End If
If Sw_cancel = 0 Then : Waitms 250 : Gosub Menu_nos
End If

If Hold > 75 Then : Hold = 25 : Waitms 10
End If
If Hold < 25 Then : Hold = 75 : Waitms 10
End If

Home : Lcd “TressHold^SENSOR” : Locate 2 , 1 : Lcd “hold:” : Locate 2 , 6 : Lcd ”           “ : Locate 2 , 6 : Lcd Hold : Waitms 100

Hold_eprom = Hold

Loop
‘——————————————————————————-

‘——————————-tampilansaveepprom——————————
Rampung_setting:

Cls
Locate 1 , 1 : Lcd “Write’_to_EEPROM”
Locate 2 , 1 : Lcd “=” : Waitms 200
Locate 2 , 2 : Lcd “=” : Waitms 180
Locate 2 , 3 : Lcd “=” : Waitms 155
Locate 2 , 4 : Lcd “=” : Waitms 125
Locate 2 , 5 : Lcd “=” : Waitms 90
Locate 2 , 6 : Lcd “=” : Waitms 70
Locate 2 , 7 : Lcd “=” : Waitms 50
Locate 2 , 8 : Lcd “=” : Waitms 35
Locate 2 , 9 : Lcd “=” : Waitms 20
Locate 2 , 10 : Lcd “=” : Waitms 15
Locate 2 , 11 : Lcd “=” : Waitms 13
Locate 2 , 12 : Lcd “=” : Waitms 11
Locate 2 , 13 : Lcd “=” : Waitms 9
Locate 2 , 14 : Lcd “=” : Waitms 7
Locate 2 , 15 : Lcd “=” : Waitms 5
Locate 2 , 16 : Lcd “=” : Waitms 300
Locate 2 , 1 : Lcd “writesucsesfully : Waitms 500 : Gosub Go:
‘——————————————————————————-

Go:

Kp = Kp_eprom
Ki = Ki_eprom
Kd = Kd_eprom
Ts = Ts_eprom
Sp_kecepatan = Sp_kecepatan_eprom
Up = Up_eprom
Nos = Nos_eprom
Hold = Hold_eprom

Portc.3 = 0                                                 ‘lcd      on
Cls
Locate 2 , 5 : Lcd “Ready..!!”
Locate 1 , 8 : Lcd “-“ : Waitms 150
Locate 1 , 8 : Lcd “3” : Waitms 150
Locate 1 , 8 : Lcd “2” : Waitms 150
Locate 1 , 8 : Lcd “1” : Waitms 150
Locate 1 , 8 : Lcd “-“ : Waitms 150
Cls : Locate 2 , 7 : Lcd “GO…” : Waitms 200 : Cls

Do

Portc.3 = 1                                                ‘lcd      off

Call Baca_sensor()

Sensor = Konversi_sensor

If Sensor = &B00000001 Then : Pv = 20 : End If
If Sensor = &B00000010 Then : Pv = 11 : End If
If Sensor = &B00000100 Then : Pv = 5 : End If
If Sensor = &B00001000 Then : Pv = 0 : End If
If Sensor = &B00010000 Then : Pv = 0 : End If
If Sensor = &B00100000 Then : Pv = -5 : End If
If Sensor = &B01000000 Then : Pv = -11 : End If
If Sensor = &B10000000 Then : Pv = -20 : End If

If Sensor = &B00000011 Then : Pv = 16 : End If
If Sensor = &B00000110 Then : Pv = 8 : End If
If Sensor = &B00001100 Then : Pv = 2 : End If
If Sensor = &B00011000 Then : Pv = 0 : End If
If Sensor = &B00110000 Then : Pv = -2 : End If
If Sensor = &B01100000 Then : Pv = -8 : End If
If Sensor = &B11000000 Then : Pv = -16 : End If

If Sensor = &B00000111 Then : Pv = 12 : End If
If Sensor = &B00001110 Then : Pv = 6 : End If
If Sensor = &B00011100 Then : Pv = 3 : End If
If Sensor = &B00111000 Then : Pv = -3 : End If
If Sensor = &B01110000 Then : Pv = -6 : End If
If Sensor = &B11100000 Then : Pv = -12 : End If

If Sensor = &B00001111 Then : Pv = 8 : End If
If Sensor = &B00011110 Then : Pv = 2 : End If
If Sensor = &B00111100 Then : Pv = 0 : End If
If Sensor = &B01111000 Then : Pv = -2 : End If
If Sensor = &B11110000 Then : Pv = -8 : End If

If Sensor = &B00000000 Then
Portc.3 = 0                                                ‘lcd      on
If Pv < -10 Then : Pv = -30 : Nos = Up / 2
End If
If Pv > 10 Then : Pv = 30 : Nos = Up / 2
End If
End If

If Pv < 0 Then
N1 = Up / 2
N2 = Nos / 3
Nos = N1 + N2
End If

If Pv > 0 Then
N1 = Up / 2
N2 = Nos / 3
Nos = N1 + N2
End If

setpoint sensor
Sp_sensor = 0
nilai error
Error = Sp_sensor – Pv
proportional control
P = Kp * Error

integrativ control

I1 = Error + Last_error
I2 = I1 / 2
I = Ki * I2

derivative control
D1 = Kd * 10
D2 = Error – Last_error
D = D1 * D2

error lampau
Last_error = Error

proportional-derivative control
Pd = P + D

proportionalintegrativ-derivative control
Pid = Pd + I

‘===== Hitung Kondisi Pertama=============’sebelah kiri
Pwm = Sp_kecepatan + Pid
If Pwm > 0 Then : Call Kiri_maju() : Locate 2 , 7 : Lcd “F” : End If
If Pwm > Up Then : Pwm = Up : End If
If Pwm < 0 Then : Call Kiri_mundur() : Pwm = 0 – Pwm : Locate 2 , 7 : Lcd “R” : End If
If Pv = 0 Then : Pwm = Nos : If Nos < Up Then : Nos = Nos + 25 : End If : End If
Pwm1a = Pwm

‘=====Hitung Kondisi Kedua===============’sebelah kanan
Pwm = Sp_kecepatan – Pid
If Pwm > 0 Then : Call Kanan_maju() : Locate 2 , 16 : Lcd “F” : End If
If Pwm > Up Then : Pwm = Up : End If
If Pwm < 0 Then : Call Kanan_mundur() : Pwm = 0 – Pwm : Locate 2 , 16 : Lcd “R” : End If
If Pv = 0 Then : Pwm = Nos : If Nos < Up Then : Nos = Nos + 25 : End If : End If
Pwm1b = Pwm

Locate 2 , 1 : Lcd “L:” : Locate 2 , 3 : Lcd ”    “ : Locate 2 , 3 : Lcd Pwm1a : Locate 2 , 10 : Lcd “R:” : Locate 2 , 12 : Lcd ”    “ : Locate 2 , 12 : Lcd Pwm1b
Locate 1 , 11 : Lcd “PV:” : Locate 1 , 14 : Lcd ”   “ : Locate 1 , 14 : Lcd Pv

selang waktu cuplik
Waitms Ts                                                   ‘time sampling
Loop
End

Sub Baca_sensor()
Start Adc
Adc1 = Getadc(0) : Adc1 = Adc1 / 5
Adc2 = Getadc(1) : Adc2 = Adc2 / 5
Adc3 = Getadc(2) : Adc3 = Adc3 / 5
Adc4 = Getadc(3) : Adc4 = Adc4 / 5
Adc5 = Getadc(4) : Adc5 = Adc5 / 5
Adc6 = Getadc(5) : Adc6 = Adc6 / 5
Adc7 = Getadc(6) : Adc7 = Adc7 / 5
Adc8 = Getadc(7) : Adc8 = Adc8 / 5
If Adc1 < Hold Then : S1 = &B00000000 : B1 = 0 : End If : If Adc1 > Hold Then : S1 = &B00000001 : B1 = 1 : End If
If Adc2 < Hold Then : S2 = &B00000000 : B2 = 0 : End If : If Adc2 > Hold Then : S2 = &B00000010 : B2 = 1 : End If
If Adc3 < Hold Then : S3 = &B00000000 : B3 = 0 : End If : If Adc3 > Hold Then : S3 = &B00000100 : B3 = 1 : End If
If Adc4 < Hold Then : S4 = &B00000000 : B4 = 0 : End If : If Adc4 > Hold Then : S4 = &B00001000 : B4 = 1 : End If
If Adc5 < Hold Then : S5 = &B00000000 : B5 = 0 : End If : If Adc5 > Hold Then : S5 = &B00010000 : B5 = 1 : End If
If Adc6 < Hold Then : S6 = &B00000000 : B6 = 0 : End If : If Adc6 > Hold Then : S6 = &B00100000 : B6 = 1 : End If
If Adc7 < Hold Then : S7 = &B00000000 : B7 = 0 : End If : If Adc7 > Hold Then : S7 = &B01000000 : B7 = 1 : End If
If Adc8 < 120 Then : S8 = &B00000000 : B8 = 0 : End If : If Adc8 > 120 Then : S8 = &B10000000 : B8 = 1 : End If
S12 = S1 Or S2 : S123 = S12 Or S3 : S1234 = S123 Or S4 : S12345 = S1234 Or S5 : S123456 = S12345 Or S6 : S1234567 = S123456 Or S7 : S12345678 = S1234567 Or S8
Konversi_sensor = S12345678 And &B11111111
Locate 1 , 1 : Lcd “s”
Locate 1 , 2 : Lcd B1
Locate 1 , 3 : Lcd B2
Locate 1 , 4 : Lcd B3
Locate 1 , 5 : Lcd B4
Locate 1 , 6 : Lcd B5
Locate 1 , 7 : Lcd B6
Locate 1 , 8 : Lcd B7
Locate 1 , 9 : Lcd B8
End Sub

Sub Kiri_maju()
Reset M2a
Set M2b
End Sub

Sub Kanan_maju()
Reset M1a
Set M1b
End Sub

Sub Kiri_mundur()
Set M2a
Reset M2b
End Sub

Sub Kanan_mundur()
Set M1a
Reset M1b
End Sub

===============================================================

Dan berikut ini sample coding PID line followerku dengan pemrograman CODEVISION AVR :

#include<mega8535.h>
#include <delay.h>
#define sensor PINB
//===pwm motor alias
#define motor_ki OCR1A  //sip
#define motor_ka OCR1B

#define m1a PORTD.0
#define m1b PORTD.1
#define m2a PORTD.2
#define m2b PORTD.3

void maju ()
{
m1a=1;m1b=0;
m2a=0;m2b=1;
}

void rem_kanan ()
{
m1a=0;m1b=1;
m2a=0;m2b=1;
}

void rem_kiri ()
{
m1a=1;m1b=0;
m2a=1;m2b=0;
}

//===Tombol Yang Digunakan======
#define sw_ok     PINC.3
#define sw_cancel PINC.2
#define sw_down   PINC.1
#define sw_up     PINC.0

#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>
#include <stdio.h>

//====Variabel di eeprom=====
eeprom int Kp = 0;
eeprom int Ki = 0;
eeprom int Kd = 0;
eeprom int Ts= 0;
eeprom int Upper= 0;
eeprom int Lower= 0;
eeprom int Set_point=0;
//====Nilai-nilai eror=======
eeprom int e0=  0;
eeprom int e1 = 0;
eeprom int e2 = 0;
eeprom int e3 = 0;
eeprom int e4 = 0;
eeprom int e5 = 0;
eeprom int e6 = 0;
eeprom int e7 = 0;

int error,error1,nil_pid,pwm,kode;
char lcd_buff[33];

void seting_awal ()
{
set:
Kp=Kp;
if(sw_up==0){Kp++;delay_ms(10);}
if(sw_down==0){Kp=Kp-1;delay_ms(10);}
if(Kp>100){Kp=0;delay_ms(10);}
if(Kp<0){Kp=100;delay_ms(10);}
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(“***************”);
lcd_gotoxy(0,1);
sprintf(lcd_buff,”Nilai Kp:%i”,Kp);
lcd_puts(lcd_buff);
delay_ms(100);
if(sw_ok==0)
{
delay_ms(150);goto set1;
}
else goto set;
//====================================
set1:
Ki=Ki;
if(sw_up==0) {Ki++;delay_ms(10);}
if(sw_down==0) {Ki=Ki-1;delay_ms(10);}
if(Ki>100){Ki=0;delay_ms(10);}
if(Ki<0) {Ki=100;delay_ms(10);}
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(“***************”);
lcd_gotoxy(0,1);
sprintf(lcd_buff,”Nilai Ki:%i.%i”,Ki/10,Ki%10);
lcd_puts(lcd_buff);
delay_ms(100);
if(sw_ok==0) {delay_ms(150);goto set2;}
if(sw_cancel==0){delay_ms(150);goto set;}
else
goto set1;
//======================================
set2:
Kd=Kd;
if(sw_up==0) {Kd++;delay_ms(10);}
if(sw_down==0) {Kd=Kd-1;delay_ms(10);}
if(Kd>100){Kd=0;delay_ms(10);}
if(Kd<0) {Kd=100;delay_ms(10);}
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(“***************”);
lcd_gotoxy(0,1);
sprintf(lcd_buff,”Nilai Kd:%i”,Kd);
lcd_puts(lcd_buff);
delay_ms(100);
if(sw_ok==0) {delay_ms(150);goto set3;}
if(sw_cancel==0){delay_ms(150);goto set1;}
else
goto set2;
//========================================
set3:
Ts=Ts;
if(sw_up==0) {Ts++;delay_ms(10);}
if(sw_down==0) {Ts=Ts-1;delay_ms(10);}
if(Ts>100){Ts=0;delay_ms(10);}
if(Ts<0) {Ts=100;delay_ms(10);}
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(“Time Sampling”);
lcd_gotoxy(0,1);
sprintf(lcd_buff,”Delay:%ims”,Ts);
lcd_puts(lcd_buff);
delay_ms(100);
if(sw_ok==0) {delay_ms(150);goto set4;}
if(sw_cancel==0){delay_ms(150);goto set2;}
else
goto set3;
//=============================================
set4:
Ts=Ts;
if(sw_up==0) {Set_point++;delay_ms(10);}
if(sw_down==0) {Set_point=Set_point-1;delay_ms(10);}
if(Set_point>255){Set_point=0;delay_ms(10);}
if(Set_point<0) {Set_point=255;delay_ms(10);}
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(“Set Point”);
lcd_gotoxy(0,1);
sprintf(lcd_buff,”Kec:%i”,Set_point);
lcd_puts(lcd_buff);
delay_ms(100);
if(sw_ok==0) {delay_ms(150);goto set5;}
if(sw_cancel==0){delay_ms(150);goto set3;}
else
goto set4;
//=================================================
set5:
Upper=Upper;
if(sw_up==0) {Upper++;delay_ms(10);}
if(sw_down==0) {Upper=Upper-1;delay_ms(10);}
if(Upper>255){Upper=0;delay_ms(10);}
if(Upper<0) {Upper=255;delay_ms(10);}
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(“Limit Speed”);
lcd_gotoxy(0,1);
sprintf(lcd_buff,”Upper:%i”,Upper);
lcd_puts(lcd_buff);
delay_ms(100);
if(sw_ok==0) {delay_ms(150);goto set6;}
if(sw_cancel==0){delay_ms(150);goto set4;}
else
goto set5;
//====================================================
set6:
Lower=Lower;
if(sw_up==0) {Lower++;delay_ms(10);}
if(sw_down==0) {Lower=Lower-1;delay_ms(10);}
if(Lower>255){Lower=0;delay_ms(10);}
if(Lower<0) {Lower=255;delay_ms(10);}
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(“Limit Speed”);
lcd_gotoxy(0,1);
sprintf(lcd_buff,”Lower:%i”,Lower);
lcd_puts(lcd_buff);
delay_ms(100);
if(sw_ok==0) {delay_ms(150);goto set7;}
if(sw_cancel==0){delay_ms(150);goto set5;}
else
goto set6;

//========Menampilkan Eror-Eror===============
set7:
e0=e0;
if(sw_up==0) {e0++;delay_ms(10);}
if(sw_down==0) {e0=e0-1;delay_ms(10);}
if(e0>100){e0=0;delay_ms(10);}
if(e0<0) {e0=100;delay_ms(10);}
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(“Error 0”);
lcd_gotoxy(0,1);
sprintf(lcd_buff,”e0:%i”,e0);
lcd_puts(lcd_buff);
delay_ms(100);
if(sw_ok==0) {delay_ms(150);goto set8;}
if(sw_cancel==0){delay_ms(150);goto set6;}
else
goto set7;
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//========Menampilkan Eror-Eror===============
set8:
e1=e1;
if(sw_up==0) {e1++;delay_ms(10);}
if(sw_down==0) {e1=e1-1;delay_ms(10);}
if(e1>100){e1=0;delay_ms(10);}
if(e1<0) {e1=100;delay_ms(10);}
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(“Error 1”);
lcd_gotoxy(0,1);
sprintf(lcd_buff,”e1:%i”,e1);
lcd_puts(lcd_buff);
delay_ms(100);
if(sw_ok==0) {delay_ms(150);goto set9;}
if(sw_cancel==0){delay_ms(150);goto set7;}
else
goto set8;
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//========Menampilkan Eror-Eror===============
set9:
e2=e2;
if(sw_up==0) {e2++;delay_ms(10);}
if(sw_down==0) {e2=e2-1;delay_ms(10);}
if(e2>100){e2=0;delay_ms(10);}
if(e2<0) {e2=100;delay_ms(10);}
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(“Error 2”);
lcd_gotoxy(0,1);
sprintf(lcd_buff,”e2:%i”,e2);
lcd_puts(lcd_buff);
delay_ms(100);
if(sw_ok==0) {delay_ms(150);goto set10;}
if(sw_cancel==0){delay_ms(150);goto set8;}
else
goto set9;
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//========Menampilkan Eror-Eror===============
set10:
e3=e3;
if(sw_up==0) {e3++;delay_ms(10);}
if(sw_down==0) {e3=e3-1;delay_ms(10);}
if(e3>100){e3=0;delay_ms(10);}
if(e3<0) {e3=100;delay_ms(10);}
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(“Error 3”);
lcd_gotoxy(0,1);
sprintf(lcd_buff,”e3:%i”,e3);
lcd_puts(lcd_buff);
delay_ms(100);
if(sw_ok==0) {delay_ms(150);goto set11;}
if(sw_cancel==0){delay_ms(150);goto set9;}
else
goto set10;
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//========Menampilkan Eror-Eror===============
set11:
e4=e4;
if(sw_up==0) {e4++;delay_ms(10);}
if(sw_down==0) {e4=e4-1;delay_ms(10);}
if(e4>100){e4=0;delay_ms(10);}
if(e4<0) {e4=100;delay_ms(10);}
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(“Error 4”);
lcd_gotoxy(0,1);
sprintf(lcd_buff,”e4:%i”,e4);
lcd_puts(lcd_buff);
delay_ms(100);
if(sw_ok==0) {delay_ms(150);goto set12;}
if(sw_cancel==0){delay_ms(150);goto set10;}
else
goto set11;
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//========Menampilkan Eror-Eror===============
set12:
e5=e5;
if(sw_up==0) {e5++;delay_ms(10);}
if(sw_down==0) {e5=e5-1;delay_ms(10);}
if(e5>100){e5=0;delay_ms(10);}
if(e5<0) {e5=100;delay_ms(10);}
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(“Error 5”);
lcd_gotoxy(0,1);
sprintf(lcd_buff,”e5:%i”,e5);
lcd_puts(lcd_buff);
delay_ms(100);
if(sw_ok==0) {delay_ms(150);goto set13;}
if(sw_cancel==0){delay_ms(150);goto set11;}
else
goto set12;
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//========Menampilkan Eror-Eror===============
set13:
e6=e6;
if(sw_up==0) {e6++;delay_ms(10);}
if(sw_down==0) {e6=e6-1;delay_ms(10);}
if(e6>100){e6=0;delay_ms(10);}
if(e6<0) {e6=100;delay_ms(10);}
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(“Error 6”);
lcd_gotoxy(0,1);
sprintf(lcd_buff,”e6:%i”,e6);
lcd_puts(lcd_buff);
delay_ms(100);
if(sw_ok==0) {delay_ms(150);goto set14;}
if(sw_cancel==0){delay_ms(150);goto set12;}
else
goto set13;
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//========Menampilkan Eror-Eror===============
set14:
e7=e7;
if(sw_up==0) {e7++;delay_ms(10);}
if(sw_down==0) {e7=e7-1;delay_ms(10);}
if(e7>100){e7=0;delay_ms(10);}
if(e7<0) {e7=100;delay_ms(10);}
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(“Error 7”);
lcd_gotoxy(0,1);
sprintf(lcd_buff,”e7:%i”,e7);
lcd_puts(lcd_buff);
delay_ms(100);
if(sw_ok==0) {delay_ms(150);goto Magelang;}
if(sw_cancel==0){delay_ms(150);goto set13;}
else
goto set14;
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Magelang:
lcd_clear();
lcd_gotoxy(1,0);
lcd_putsf(” Save To EEPROM”);
delay_ms(200);
Kp=Kp;Ki=Ki;Kd=Kd;Ts=Ts;Set_point=Set_point;Lower=Lower;Upper=Upper;
e0=e0;e1=e1;e2=e2;e3=e3;e4=e4;e5=e5;e6=e6;e7=e7;

}

void tampilan_awal()
{
lcd_gotoxy(0,0);
lcd_putsf(” C_Tools__!     “);
delay_ms(1000);
lcd_gotoxy(6,1);
lcd_putsf(“Present         “);
delay_ms(1000);
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(“Fahmizal_DTE_UGM”);
delay_ms(500);
lcd_gotoxy(0,1);
lcd_putsf(” Line Follower  “);
delay_ms(1000);
lcd_clear();
}

//=====Perlihatkan Sensor=========
//#define sensor    PINA
#define s0   PINB.0
#define s1   PINB.1
#define s2   PINB.2
#define s3   PINB.3
#define s4   PINB.4
#define s5   PINB.5
#define s6   PINB.6
#define s7   PINB.7

void show_sensor()
{
lcd_gotoxy(2,1);
if (s7) lcd_putchar(‘1’);
else    lcd_putchar(‘0’);
if (s6) lcd_putchar(‘1’);
else    lcd_putchar(‘0’);
if (s5) lcd_putchar(‘1’);
else    lcd_putchar(‘0’);
if (s4) lcd_putchar(‘1’);
else    lcd_putchar(‘0’);
if (s3) lcd_putchar(‘1’);
else    lcd_putchar(‘0’);
if (s2) lcd_putchar(‘1’);
else    lcd_putchar(‘0’);
if (s1) lcd_putchar(‘1’);
else    lcd_putchar(‘0’);
if (s0) lcd_putchar(‘1’);
else    lcd_putchar(‘0’);
}
//=====Tutup Perlihatkan Sensor====

void PID ()
{
//***hitam=mati/0 &  putih=nyala/1

//=====sensor mengarah ke Kiri
if (sensor==0b11101110) {error=e0;}
else if (sensor==0b11001110) {error=-e1;}
else if (sensor==0b11011110) {error=-e2;}
else if (sensor==0b10011110) {error=-e3;}
else if (sensor==0b10111110) {error=-e4;}
else if (sensor==0b00111110) {error=-e5;}
else if (sensor==0b01111110) {error=-e6;kode=12;}

//=====sensor mengarah ke Kanan
else if (sensor==0b11101110) {error=e0;}
else if (sensor==0b11100110) {error=e1;}
else if (sensor==0b11110110) {error=e2;}
else if (sensor==0b11110010) {error=e3;}
else if (sensor==0b11111010) {error=e4;}
else if (sensor==0b11111000) {error=e5;}
else if (sensor==0b11111100) {error=e6;kode=24;}

else if (sensor==0b11111110)//di putih semua
{
if (kode==12)
{
error=-e7;
rem_kiri();
delay_ms(20);
}
else if (kode==24)
{
error=e7;
rem_kanan();
delay_ms(20);
}
}

maju();
nil_pid=((Kp*error)+((Ki/10)*(error+error1)*Ts)+((Kd/Ts)*(error-error1)));
error1=error;

//===== Hitung Kondisi Pertama=============
pwm=Set_point-(nil_pid);
if(pwm>Upper){pwm=Upper;}
if(pwm<Lower){pwm=Lower;}
motor_ka=pwm;
//=====Hitung Kondisi Kedua===============
pwm=Set_point+(nil_pid);
if(pwm>Upper){pwm=Upper;}
if(pwm<Lower){pwm=Lower;}
motor_ki=pwm;
//kode=0;
delay_ms(Ts);
}

void show_detail()
{
lcd_gotoxy(0,0);
sprintf(lcd_buff,”e:%i”,error);
lcd_puts(lcd_buff);
lcd_gotoxy(5,0);
sprintf(lcd_buff,”Ki%i”,motor_ki);
lcd_puts(lcd_buff);
lcd_gotoxy(11,0);
sprintf(lcd_buff,”Ka%i”,motor_ka);
lcd_puts(lcd_buff);
}
void inisialisasi_port()
{
//===Seting untuk sensor============
DDRB=0b00000000;
PORTB=0b11111111;
//===Seting untuk fungsi Tombol======
DDRC=0x00;
PORTC=0xff;
//===Seting motor====================
DDRD=0xff;
PORTD=0x00;
//——-inisialisasi PWM—–//
TCCR1A=0xA3;
TCCR1B=0x0B;
TCNT1=0x0000;//PWM 16 bit//
OCR1A=0x3FF;
OCR1B=0x3FF;
TIFR=0;

}
void main(void)
{
inisialisasi_port();
lcd_init(16);
lcd_clear();
tampilan_awal();
seting_awal();
while(1)
{
lcd_clear();
PID();
show_sensor();
kode=0;
show_detail();
delay_ms(Ts);
}
}

Nach ni dia hasil tunning pid pada robotku disini….dan disana

Dan berikut aplikasi kontroler PID pada Robot-Wall Follower ato yg lebih dikenal dengan robot telusur dinding:

[youtube http://www.youtube.com/watch?v=mSK4oDcMiYM&w=480&h=390%5D

Referensi:

===============================================================

bacaan terkait di blog ini:

1. robot-line-follower-dengankendalipid klik disini

2. robot line follower dengan multiplekser-ADC  klik disini

Pengaturan Kecepatan Motor Dc Dengan Mikrokontroler [open-loop]

Penggunaan motor DC dewasa ini sudah sangatlah umum, salah satu kelebihan motor DC adalah relatif gampang didapat dan mudah diatur kecepatan putarnya. Secara umum pengaturan kecepatan motor DC adalah dengan menggunakan cara analog. Pada artikel kali ini akan dibahas contoh cara mengatur kecepatan motor DC dengan menggunakan mikrokontroller.

Mikrokontroler yang digunakan adalah Tipe AVR dari Atmel seperti mikrokontroler Atmega 8535, 16, 32. Informasi kecepatan motor akan ditampilkan pada modul LCD HD4480. Sedangkan sebagai driver motor menggunakan modul driver motor IC L298.

Cara pengaturan kecepatan yang digunakan adalah dengan menggunakan teknik PWM (Pulse Width Modulation), salah satu teknik untuk mengatur kecepatan motor DC yang umum digunakan. Dengan menggunakan PWM kita dapat mengatur kecepatan yang diinginkan dengan mudah. Teknik PWM untuk pengaturan kecepatan motor adalah, pengaturan kecepatan motor dengan cara merubah-rubah besarnya duty cycle pulsa. Pulsa yang yang berubah ubah duty cycle-nya inilah yang menentukan kecepatan motor. Besarnya amplitudo dan frekuensi pulsa adalah tetap, sedangkan besarnya duty cycle berubah-ubah sesuai dengan kecepatan yang diinginkan, semakin besar duty cylce maka semakin cepat pula kecepatan motor, dan sebaliknya semakin kecil duty cycle maka semakin pelan pula kecepatan motor. Sebagai contoh bentuk pulsa yang dikirimkan adalah seperti pada gambar 1, pulsa kotak dengan duty cycle pulsa 50%. Sedangkan sebagai contoh bentuk pulsa PWM adalah seperti pada gambar 2.

Gambar 1

Gambar 2

Seperti pada gambar 1, semakin besar duty cycle pulsa kotak, maka semakin lama pula posisi logika high. Jika motor diatur agar berjalan ketika diberi logika high, maka jika memberi pulsa seperti pada gambar 1 diatas, maka motor akan berada pada kondisi “nyala-mati-nyala-mati” sesuai dengan bentuk pulsa tersesebut. Semakin lama motor berada pada kondisi “nyala” maka semakin cepat pula kecepatan motor tersebut. Motor akan berputar dengan kecepatan maksimum jika mendapat pulsa dengan duty cycle 100%. Dengan kata lain motor mendapat logika high terus menerus.

Dengan mengatur besarnya duty cycle pulsa kotak yang dikirimkan, kita dapat mengatur banyaknya logika high yang diberikan pada motor, dengan kata lain mengatur lamanya waktu motor untuk berputar dalam satu periode pulsa. Jika lamanya waktu motor untuk berputar dalam satu periode pulsa ini berubah maka kecepatan purtaran motor juga akan berubah, sesuai dengan duty cycle atau waktu motor untuk berputar dalam satu periode pulsa.

Sumber :http://delta-electronic.com/article/wp-content/uploads/2008/09/an0082.pdf

===============================================================

PENGATURAN KECEPATAN MOTOR DC Berbasis Atmega8535

Skema dengan proteus:


Hasil simulasi dengan proteus:

Program Pengaturan Kecepatan Motor DC dengan Bascom AVR

$regfile = “m8535.dat”                                    ‘menggunakan Atmega8535 sebagai preprosesor

$crystal = 12000000                                      ‘menggunakan crystal clock 12 MHz

$eeprom                                                                     ‘menggunakan fasilitas eeprom Atmega8535

‘—————————inisialisasi lcd————————————

Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0

Config Lcd = 16 * 2 : Cursor Off

‘—————————inisialisasi pwm———————————–

Config Timer1 = Pwm , Pwm = 10 , Prescale = 64 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up       ‘pwm dengan settingan fast pwm 10 bit

‘—————————inisialisasi port——————————–

‘inisialisasi tombol

Config Portb = Input

‘—————————pull up internal——————————–

Portb.0 = 1

Portb.1 = 1

Portb.2 = 1

Portb.3 = 1

Config Portd = Output

‘alias logika motor

M1a Alias Portd.0

M1b Alias Portd.1

M2a Alias Portd.2

M2b Alias Portd.3

‘——————————alias——————————————–

‘alias tombol

Sw_ok Alias Pinb.3

Sw_cancel Alias Pinb.2

Sw_down Alias Pinb.1

Sw_up Alias Pinb.0

‘——————————————————————————-

Dim Pwm As Integer

Dim Pwm_eprom As Eram Integer

Home

Lcd “Fahmizal_dte2006”

Lowerline

Lcd “Cek fungsi PWM”

Wait 1

Do

Pwm = Pwm_eprom

If Sw_up = 0 Then : Incr Pwm : Waitms 10

End If

If Sw_down = 0 Then : Decr Pwm : Waitms 10

End If

If Pwm > 1023 Then : Pwm = 0 : Waitms 10

End If

If Pwm < 0 Then : Pwm = 1023 : Waitms 10

End If

Pwm_eprom = Pwm

Cls

Home

Lcd “tes uji pwm”

Lowerline

Reset M1a

Reset M2a

Set M1b

Set M2b

Pwm1a = Pwm

Pwm1b = Pwm

Lcd “nilai pwm:” ; Pwm1a : Waitms 100

Loop

End

nach berikut hasil video pengaturan sinyal PWM nya ^_^

===============================================================

bacaan terkait di blog ini:

1. mudah-belajar-mikro-dengan-simulasi-program-proteus klik disini

2. aplikasi-pwm-mikrokontroler-atmega8535 klik disini

===============================================================

Teori Sampling

Proses sampling/pencuplikan

Proses ini mengubah representasi sinyal yang tadinya berupa sinyal kontinyu menjadi sinyal diskrit. Dapat juga diibaratkan sebagai sebuah saklar on/off yang membuka dan menutup setiap periode tertentu(T)

Sinyal sampling ideal (r*(t)) dapat kita nyatakan dalam bentuk perkalian sinyal input r(t) dan sinyal delta pulse train P(t).

Bentuk matematis ialah

Gambar hasil sampling ideal

Hasil Sampling Menggunakan Matlab

Kaidah sampling

Kecepatan pengambilan sampel (frekuensi sampling) dari sinyal analog yang akan dikonversi haruslah memenuhi kriteria Nyquist yaitu:

dimana frekuensi sampling (Fs) minimum adalah 2 kali frekuensi sinyal analog yang akan dikonversi (Finmax). Misalnya bila sinyal analog yang akan dikonversi mempunyai frekuensi sebesar 100Hz maka frekuensi sampling minimum dari ADC adalah 200Hz. Atau bila dibalik, bila frekuensi sampling ADC sebesar 200Hz maka sinyal analog yang akan dikonversi harus mempunyai frekuensi maksimum 100Hz. Apabila kriteria Nyquist tidak dipenuhi maka akan timbul efek. Disebut aliasing karena frekuensi tertentu terlihat sebagai frekuensi yang lain (menjadi alias dari frekuensi lain).

Zero Order Hold

Untuk menjadikan sinyal kontinyu terkuantisasi dapat didekati dengan rangkaian ‘Zero Order Hold’

Sinyal hasil sampling yang telah berubah dari sinyal kontinus menjadi sinyal diskrit harus dikalikan dengan impulse respon dari zero-order hold, hal ini agar sinyal tersebut menjadi sinyal kontinyu terkuantisasi.

Impuls respon dari zero-order hold:

Persamaan g(t) di atas bila di-laplace-kan menjadi:


Berikut hasil sampling ideal dan ZOH

Aplikasi Sampling Process

Dalam sistem kontrol digital terdapat konverter A/D yang berfungsi mengubah sinyal kontinyu menjadi sinyal diskrit. Proses sampling terjadi pada blok A/D dimana sinyal error analog diubah ke sinyal digital untuk kemudian diproses oleh komputer.

referensi:

  1. Hand Book“-Microcontroller Based Applied Digital Control- Dogan Ibrahim, Department of Computer Engineering Near East University, Cyprus
  2. mbah google