Komunikasi Serial Processing-Arduino
Processing dan Arduino berkomunikasi secara Serial memalui port USB. Ketika papan Arduino telah dikoneksikan dengan komputer melalui kabel USB, maka komputer akan mendeteksi keberadaan papan Arduino dan memberinya alamat tertentu. Papan yang sama umumnya akan memiliki alamat port yang sama jika dikoneksikan berulang-kali.
Langkah pertama untuk menghubungkan Processing dan Arduino adalah mengetahui port COM berapa yang digunakan. Caranya, hubungkanlah papan Arduino ke komputer. Bukalah Processing dan lakukan import pustaka serial. Sintaks import processing.serial.*; akan secara otomatis ditambahkan. Ketiklah skrip untuk testing berikut:
[[{"fid":"394","view_mode":"default","fields":{"format":"default","field_file_image_alt_text[und][0][value]":"Processing - Import Serial","field_file_image_title_text[und][0][value]":"Processing - Import Serial"},"type":"media","attributes":{"alt":"Processing - Import Serial","title":"Processing - Import Serial","height":"303","width":"457","class":"media-element file-default"},"link_text":null}]]
import processing.serial.*; Serial portKu; void setup() { size(200,200); println(Serial.list()); }
Maka, akan diperoleh contoh hasil berikut pada jendela konsol:
COM1 COM3 COM29 COM33
Hasil yang ditampilkan pada komputer Anda mungkin berbeda, tergantung nomer port yang digunakan. Pada komputer penulis, Port Arduino yang digunakan adalah port pada urutan keempat, yaitu COM33.
Mengirim Data String dari Arduino ke Processing
Bukalah IDE Arduino, lalu ketikkan skrip berikut:
void setup() { Serial.begin(9600); } void loop() { Serial.println("Hallo Dunia!!!"); delay(200); }
Pada sisi Processing, ketiklah skrip berikut:
import processing.serial.*; Serial portSerial; String stringKu; void setup(){ String namaPort = Serial.list()[3]; portSerial = new Serial(this, namaPort, 9600); } void draw() { if ( portSerial.available() > 0) { stringKu = portSerial.readStringUntil('\n'); } println(stringKu); delay(100); }
Pada contoh di atas, skrip String namaPort = Serial.list()[3] menandakan bahwa indeks port yang digunakan adalah port keempat. Mengapa demikian? Amatilah hasil pemrograman sebelumnya, yaitu sebagai berikut:
COM1 COM3 COM29 COM33
Bahasa Java memulai indeks dari 0. Port COM1 memiliki indeks 0, COM3 memiliki indeks 1, COM29 memiliki indeks 2, dan COM33 memiliki indeks 3. Karena port yang digunakan Penulis adalah port COM33, maka indeks yang digunakan adalah 3, seperti yang tertulis pada skrip String namaPort = Serial.list()[3].
Jika kita mengetahui dengan pasti nomer port Com yang digunakan, kita dapat menuliskan secara langsung nomer yang digunakan. Amatilah contohnya, sebagai berikut:
import processing.serial.*; Serial portSerial; String stringKu; void setup(){ portSerial = new Serial(this, "COM33", 9600); } void draw() { if ( portSerial.available() > 0) { stringKu = portSerial.readStringUntil('\n'); } println(stringKu); delay(100); }
Mengirim Data dari Processing ke Arduino
Setelah berhasil mengirim data dari Arduino ke Processing, selanjutnya kita balikkan arah komunikasi. Kita akan mengirim data dari Processing ke Arduino.
char val; int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available()) { val = Serial.read(); } if (val == '1') { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } delay(10); }
Pada Processing, ketiklah skrip berikut:
import processing.serial.*; Serial portSerial; void setup(){ size(200,200); portSerial = new Serial(this, "COM33", 9600); } void draw() { background(204); if (mousePressed == true) { portSerial.write('1'); background(255, 0, 0); } else { portSerial.write('0'); } }
Tekanlah jendela display menggunakan mouse. Jika ditekan, layar akan berwarna merah dan LED pada pin 13 akan menyala.
Mengatur Objek Melalui Arduino
Untuk dapat mengatur objek pada Processing melalui Arduino, tipe data yang diterima Processing haruslah sesuai, misalnya bertipe data int atau float. Kita tidak dapat mengatur objek jika tipe data yang dikirmkan berupa string. Sintaks print atau println pada Arduino akan mengirim data ke Processing dalam format ASCII. Format ini tidak cocok jika langsung diambil tanpa melakukan konversi terlebih dahulu.
Selain print atau println, kita dapat menggunakan fungsi write. Fungsi write akan mengirim data dalam format byte. Byte yang diterima selanjutnya akan diubah menjadi format int. Amatilah contoh berikut ini.
Tempatkanlah sebuah potensiometer di pin A0. Pada Arduino, ketiklah skrip berikut:
const int analogInPin = A0; int nilaiSensor = 0; int nilaiOutput = 0; void setup() { Serial.begin(9600); } void loop() { nilaiSensor = analogRead(analogInPin); nilaiOutput = map(nilaiSensor, 0, 1023, 0, 255); Serial.write(nilaiOutput); delay(30); }
Pada Processing, ketiklah skrip berikut dan amatilah hasilnya pada jendela konsol (ingat, sesuikan dengan nomer port COM Anda) :
import processing.serial.*; Serial portKu; void setup(){ portKu = new Serial(this, "COM33", 9600); } void draw(){ while (portKu.available() > 0) { int inByte = portKu.read(); println(inByte); } }
Selain mengirim secara byte, kita juga dapat mengirim menggunakan format ASCII menggunakan fungsi println. Mari kita ubah program Arduino dan Processing kita dan tampilkan grafik hasil pembacaan sensor di pin A0.
const int analogInPin = A0; int sensorValue = 0; void setup() { Serial.begin(9600); } void loop() { sensorValue = analogRead(analogInPin); Serial.println(sensorValue); delay(30); }
Pada Processing, ketiklah skrip berikut:
import processing.serial.*; Serial portSerial; int xPos = 1; float inByte = 0; void setup () { size(400, 300); portSerial = new Serial(this, "COM33", 9600); portSerial.bufferUntil('\n'); background(0); } void draw () { stroke(127, 34, 255); line(xPos, height, xPos, height - inByte); if (xPos >= width) { xPos = 0; background(0); } else { xPos++; } delay(10); } void serialEvent (Serial myPort) { String inString = myPort.readStringUntil('\n'); if (inString != null) { inString = trim(inString); inByte = float(inString); println(inByte); inByte = map(inByte, 0, 1023, 0, height); } }
[[{"fid":"395","view_mode":"default","fields":{"format":"default","field_file_image_alt_text[und][0][value]":"Processing - Menampilkan Grafik","field_file_image_title_text[und][0][value]":"Processing - Menampilkan Grafik"},"type":"media","attributes":{"alt":"Processing - Menampilkan Grafik","title":"Processing - Menampilkan Grafik","height":"345","width":"418","class":"media-element file-default"},"link_text":null}]]
Sekarang, mari kita buat objek elips dengan diameter yang dapat diatur sesui dengan nilai putaran potensiometer yang dibaca oleh Arduino. Letakkanlah potensiometer di pin A0, dan ketiklah sintaks berikut:
const int analogInPin = A0; int nilaiSensor = 0; int nilaiOutput = 0; void setup() { Serial.begin(9600); } void loop() { nilaiSensor = analogRead(analogInPin); nilaiOutput = map(nilaiSensor, 0, 1023, 0, 255); Serial.write(nilaiOutput); delay(30); }
Pada Processing, ketiklah skrip berikut:
import processing.serial.*; Serial portKu; int inByte; void setup(){ size(400, 400); portKu = new Serial(this, "COM33", 9600); } void draw(){ background(204); while (portKu.available() > 0) { inByte = portKu.read(); println(inByte); } //atur elips sesuai nilai sensor ellipse(200, 200, inByte, inByte); delay(100); }
[[{"fid":"396","view_mode":"default","fields":{"format":"default","field_file_image_alt_text[und][0][value]":"Processing - Mengatur Diameter Ellips","field_file_image_title_text[und][0][value]":"Processing - Mengatur Diameter Ellips"},"type":"media","attributes":{"alt":"Processing - Mengatur Diameter Ellips","title":"Processing - Mengatur Diameter Ellips","height":"339","width":"340","class":"media-element file-default"},"link_text":null}]]
Kita juga dapat mengatur warna yang kita inginkan. Modifikasilah program Processing kita sebelumnya.
import processing.serial.*; Serial portKu; int inByte; void setup(){ size(400, 400); portKu = new Serial(this, "COM33", 9600); } void draw(){ background(204); while (portKu.available() > 0) { inByte = portKu.read(); println(inByte); } //atur warna ellips Fill(inByte, 100, 100); //atur elips sesuai nilai sensor ellipse(200, 200, inByte, inByte); delay(100); }
[[{"fid":"397","view_mode":"default","fields":{"format":"default","field_file_image_alt_text[und][0][value]":"Processing - Mengatur Diameter dan Warna Ellips","field_file_image_title_text[und][0][value]":"Processing - Mengatur Diameter dan Warna Ellips"},"type":"media","attributes":{"alt":"Processing - Mengatur Diameter dan Warna Ellips","title":"Processing - Mengatur Diameter dan Warna Ellips","height":"338","width":"339","class":"media-element file-default"},"link_text":null}]]
Semoga tutorial kali ini bermanfaat. Selamat berkarya :)
Komentar Terbaru