Anda di sini

Pemrograman

[TUTORIAL] Menghubungkan Processing dengan Arduino

Kusuma Wardana - 13 Desember 2015 08:32:40 0

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:

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);
  }
}

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);
}

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);
}

Semoga tutorial kali ini bermanfaat. Selamat berkarya Smile

6.173
Daftar Artikel Terkait
Image

Kusuma Wardana

I Nyoman Kusuma Wardana, yang akrab dipanggil Kusuma, lahir dan besar di Bali. Ia tinggal di Desa Wisata Ubud, dan lebih banyak melaksanakan aktivitasnya di Denpasar. Profesinya adalah sebagai staf pengajar di Jurusan Teknik Elektro, Politeknik Negeri Bali. Saat ini Ia menjadi salah satu penulis di tutorkeren.com.

Mari Gabung

Halo Emo 51 , Ada yang ingin disampaikan? Jangan sungkan untuk gabung diskusi ini. Silahkan Login dulu atau Daftar baru.