Tahap 2

Kontrol Open Loop + Grafik PWM & Encoder

Pada Tahap 2 ini, teman-teman akan dapat membuat hal-hal berikut ini:
  1. Rangkaian Proteus.
    • Rangkaian Proteus di sini sama seperti Tahap 1.
  2. Program Arduino.
    • Program Arduino di sini untuk menerima data nilai PWM dari komunikasi serial untuk mengontrol Motor dan menampilkan nilai pembacaan Encoder ke Serial Monitor.
  3. Program LabVIEW.
    • Program LabVIEW di sini untuk mengirimkan nilai PWM melalui komunikasi serial ke Arduino dan menampilkan nilai PWM dan nilai Encoder yang diterima dalam grafik.
Untuk membuat hal-hal di atas, berikut ini langkah-langkahnya:
1. Siapkan rangkaian Proteus seperti rangkaian di Tahap 1. Teman-teman dapat mengunduh file tersebut di sini: file_Proteus

2. Buka software IDE Arduino, dan ketik program berikut ini:

#include <Encoder.h>
Encoder myEnc(2, 3);
unsigned long a = 0;
void setup() {
  Serial.begin(9600);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
}
void loop() {
  long b = myEnc.read();
  if (millis() - a >= 50) {
    a = millis();
    Serial.println(b);
  }
}
void serialEvent() {
  while (Serial.available()) {
    int c = Serial.parseInt();
    int d = Serial.parseInt();
    if (Serial.read() == char(13)) {
      analogWrite(9, c);
      analogWrite(10, d);
    }
  }
}

Keterangan program:
Program Arduino di atas akan menghasilkan sinyal PWM di kaki D9 dan D10, sesuai dengan nilai PWM yang diterima dari komunikasi serial. Kedua nilai PWM yang diterima tersebut dipisahkan dengan koma dan diakhiri dengan karakter Carriage Return (ASCII 13). Di samping itu, program Arduino di atas juga akan mengirimkan data Encoder setiap 50 milidetik ke komunikasi serial. Program pembacaan Encoder tersebut menjadi mudah karena bantuan library Encoder. Untuk itu, teman-teman harus mengunduh dan memasang library Encoder ke software Arduino IDE, agar program di atas bisa dikompilasi. Berikut ini link library Encoder: file_library_Encoder

Untuk pemasangan library Encoder ke software Arduino IDE, dapat dilakukan dengan memilih menu Sketch, pilih Include Library, pilih Add. ZIP Library, arahkan ke file library Encoder yang sudah diunduh, maka selang beberapa saat, akan muncul pesan bahwa library Encoder sudah ditambahkan. 

3. Teman-teman dapat mengunduh program Arduino di atas di link ini: file_Arduino_2

4. Untuk mensimulasikan program di atas pada rangkaian Arduino di Proteus, kompilasi program di atas dengan menekan tombol Verify. Namun sebelum kompilasi, pastikan Board di menu Tools pada pilihan Arduino Uno atau Arduino Nano. Setelah muncul pesan Done Compilling, tanda kompilasi selesai, copy keterangan lokasi file Hex yang dihasilkan, kemudian tempelkan lokasi file Hex tersebut di kolom Program File di komponen ATmega328P di Proteus. Jangan lupa untuk mengatur parameter yang lain seperti gambar berikut:


5. Berikutnya, untuk program LabVIEW, untuk mempercepat pembuatan, kita akan mulai dari program LabVIEW pada Tahap 1. Teman-teman dapat mengunduh file program LabVIEW tersebut di link ini: file_LabVIEW_1

6. Buka program LabVIEW di atas. Tekan tombol Control dan T untuk membuat Front Panel dan Block Diagram berdampingan seperti gambar berikut.


7. Di Block Diagram, sisipkan VISA Read pada garis data dan error VISA, tempatkan sebelum VISA Write. Klik kanan pada input byte count VISA Read, pilih Create, pilih Constant. Isi dengan angka 10 atau lebih dari 10. Mengapa 10? Dari mana angka 10? Perhatikan gambar berikut ini. Ketika Arduino mengirimkan angka -9999999 maka data tersebut sudah mencapai 10 byte, karena dengan instruksi Serial.println(data), maka data tersebut memiliki tambahan 2 karakter, yaitu karakter Carriage Return (CR) dan New Line (NL = LF). Jadi untuk input byte count = 10, nilai enkoder yang bisa dikirimkan adalah dari -9999999 hingga 99999999. Nilai input byte count ini tidak boleh lebih kecil dari jumlah byte data yang dikirimkan oleh Arduino, karena jika lebih kecil, maka komunikasi akan error. Mengapa error? Karena di LabVIEW, tepatnya di VISA Configure, secara default, LabVIEW mengaktifkan penanda data sudah lengkap (Enable termination Char) berupa karakter LF atau NL. Sehingga ketika karakter NL tidak diterima, maka data dianggap belum lengkap, sehingga LabVIEW akan terus-menerus menunggu, hingga karakter NL diterima. Sebaliknya apabila nilai input byte count diisi nilai yang lebih besar dari jumlah byte data yang dikirimkan oleh Arduino, maka komunikasi serial akan berjalan baik dan lancar, karena ketika karakter NL diterima, maka LabVIEW tahu bahwa data sudah lengkap, tidak perlu harus mengambil data sesuai jumlah byte pada input byte count (jadi seandainya input byte count diisi 100 atau bahkan 1000, tidak akan menjadi masalah).  


8. Setelah input byte count VISA Read diisi 10 (boleh diisi 100), berikutnya klik kanan pada output read buffer VISA Read, dan pilih Create, pilih Indicator. Read buffer ini akan berisi data yang diterima dari komunikasi serial (dari Arduino).


9. Karena Arduino mengirimkan data setiap 50 milidetik, maka agar sama, ubah delay di While Loop, dari 100 milidetik menjadi 50 milidetik. Kemudian agar bisa berjalan pada kelipatan waktu tertentu, ganti icon Wait(ms) dengan icon Wait Until Next ms Multiple. Kedua fungsi tersebut sebenarnya sama-sama membuat tunda waktu di While Loop sesuai nilai inputnya. Lalu apa perbedaan antara Wait(ms) dengan Wait Until Next ms Multiple? Perbedaannya terletak pada waktu mulai. Apabila Wait(ms) dimulai saat tombol Run ditekan, maka Wait Until Next ms Multiple selalu dimulai berdasarkan nilai kelipatan input waktunya. Untuk lebih jelasnya, teman-teman dapat membaca informasi di sini: referensi. Setelah itu, agar nilai Encoder yang diterima dapat ditampilkan dalam bentuk grafik, gandakan Waveform Chart dengan copy-paste, dengan memilih Waveform Chart dan menekan tombol Control + C diikuti Control + V. Kemudian hubungkan input Waveform Chart yang baru dengan output read buffer VISA Read. Karena input Grafik harus berupa angka maka sisipkan icon Decimal String to Number, untuk membuat tipe data String read buffer menjadi Integer. Terakhir, ubah nama Waveform Chart pertama dengan nama Grafik PWM, dan Waveform Chart kedua dengan nama Grafik Encoder.


10. Berikutnya, agar Grafik PWM dan Grafik Encoder bisa menampilkan data setiap detik, dengan delay waktu 50 milidetik di While Loop, maka lakukan pengubahan pada nilai Multiplier, dari 0.1 menjadi 0.05. Nilai Multiplier ini berada di Tab Scales, di pilihan Waktu (detik) (X-Axis). Pastikan juga kotak Autoscale tidak dicentang, dan nilai Minimum = 0 dan Maksimum = 15.


11. Setelah nilai Multiplier di Grafik PWM dan Grafik Encoder diatur ke 0.05, berikutnya tempatkan Grafik Encoder di atas Grafik PWM seperti gambar berikut. Karena nilai Encoder bisa lebih dari 255, maka buat Sumbu Y Grafik Encoder menjadi Autoscale Y. Untuk membuat hal itu, klik kanan Grafik Encoder, pilih Y Scale, pilih AutoScale Y. Agar lebih menarik, buat garis Grafik Encoder berwarna hijau. Untuk itu klik pada kotak kecil di samping tulisan Plot 0 di atas Grafik Encoder, dan pilih Color, dan pilih warna hijau. Teman-teman dapat mengunduh program LabVIEW Tahap 2 ini di link ini: file_LabVIEW_2


12. Kemudian jalankan Proteus, dan kemudian jalankan program LabVIEW di atas (jangan lupa untuk memilih Port COM dulu, baru menjalankan program LabVIEW). Geser naik turun Slide kontrol PWM, dan perhatikan tampilan grafik PWM dan grafik Encoder. Seharusnya setiap kali nilai Slide dinaikkan, nilai Encoder semakin besar, dan ketika nilai Slide diturunkan, nilai Encoder semakin kecil, seperti ditunjukkan pada gambar berikut. 


13. Untuk lebih jelas mengenai pembuatan Tahap 2 ini dan hasilnya, teman-teman dapat melihat video youtube berikut ini: 


14. Sampai di sini pembuatan simulasi Kontrol Tahap 2 selesai.

15. File-file program yang telah dihasilkan di Tahap 2 ini dapat diunduh di link berikut ini:

Tidak ada komentar:

Posting Komentar