Laporan
Praktikum 8
Disusun oleh :
Happy Fibi Ananda
Yunika Bestari
Gabymars Yofie
Ulfa Sutrianingsih
Mohammad Bastomy
Nur Rahmaniah
JURUSAN TELEKOMUNIKASI
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
2014
Tujuan
1. Mahasiswa mampu menggunakan program Arduino dengan baik.
2. Mahasiswa memahami dan mampu mengirim frame data pada komunikasi serial
Arduino.
II.
Dasar Teori
II.1.
Parsing Data
Parsing data merupakan sebuah kegiatan untuk pengolahan data terhadap sebuah
paket data tertentu. Parsing data juga diperlukan pada sisi software dan hardware dari
robosoccer. Data yang diperoleh dari komputer server mengharuskan hardware
melakukan parsing data terhadap paket data yang diterima.
Proses parsing data terjadi pada fungsi. Sebelum proses parsing dimulai, data yang
diterima yang telah ditampung sebelummnya ditampilkan/dikirimkan kembali melalui
serial port.
Parsing data dilakukan dengan cara mengecek tiap karakter yang ada pada
variabel yang telah dideskripsikan. Tiap karakter tersebut akan dibandingkan dengan
tail (karakter terakhir paket data) yang, misal, berupa karakter pagar (#) dan karakter
pemisah antar data yang, misal, berupa karakter koma(,). Pengecekan dimulai dari
index 1 (karakter kedua) variabel, hal ini dikarenakan index 0 (karakter pertama)
merupakan header (karakter pertama) dalam paket data.
Setiap karakter yang telah melalui proses pengecekan, akan ditampung kedalam
sebuah variabel string yang dikelompokkan dalam sebuah array. Jika pada proses
pengecekan ditemukan karakter koma (,), maka dengan otomatis variabel penampung
data setelah dicek akan berpindah dengan cara increment index array-nya. Proses
tersebut akan terus dilakukan berulangkali sampai perulangan berakhir.
Setelah proses parsing data selesai, data hasil proses parsing yang terdapat pada
array akan ditampilkan. Dengan begitu, proses parsing data pun selesai dilakukan.
II.2.
Komunikasi serial adalah salah satu metode komunikasi data dimana proses
pengiriman data dilakukan per satu bit data secara berurutan dan bergantian yang
dikirimkan melalui seuntai kabel pada suatu waktu tertentu. Fungsinya digunakan
untuk komunikasi data antara Arduino dengan komputer atau perangkat lain (PLC,
Sensor, HMI, dll).
Tabel 8.1. Daftar Istilah pada Komunikasi Serial
1.
No.
Istilah
Baudrate
Penjelasan
Kecepatan transfer data dinyatakan dalam
2.
Data Bit
3.
Parity Bit
4.
5.
Start Bit
Stop Bit
Komunikasi ini mempunyai suatu kelebihan yaitu hanya membutuhkan satu jalur
dan kabel yang sedikit dibandingkan dengan komunikasi paralel. Pada prinsipnya
komunikasi serial merupakan komunikasi dimana pengiriman data dilakukan per bit
sehingga lebih lambat dibandingkan komunikasi parallel, atau dengan kata lain
komunikasi serial merupakan salah satu metode komunikasi data di mana hanya satu
bit data yang dikirimkan melalui seuntai kabel pada suatu waktu tertentu. Pada
dasarnya komunikasi serial adalah kasus khusus komunikasi paralel dengan nilai n = 1,
atau dengan kata lain adalah suatu bentuk komunikasi paralel dengan jumlah kabel
hanya satu dan hanya mengirimkan satu bit data secara simultan.Hal ini dapat
disandingkan dengan komunikasi paralel yang sesungguhnya di mana n-bit data
dikirimkan bersamaan, dengan nilai umumnya 8 n 128.
20
20
Data yang dikirim dan diterima arduino dalam bentuk ASCII. Misalnya program
arduino mengirim huruf A maka akan dikirim sebenarnya adalah 1 byte code ascii
yaitu 65. Jika mengirim angka 123 maka sebetulnya yg dikirm adalah 3 byte data ascii
yaitu 49, 48, dan 50.
Tabel. 8.2. Fungsi yang Tersedia untuk Komunikasi Serial Arduino
No
Fungsi
Keterangan
.
1.
if (Serial)
2.
Serial.available()
20
penerima
3.
Serial.begin()
4.
serial.end()
5.
Serial.find()
6.
Serial.findUntil()
mencari
buffer
data
sampai
data
dgn
Serial.flush()
8.
Serial.parseFloat()
9.
serial.parseInt()
10.
Serial.peek()
11.
Serial.print()
12.
Serial.println()
13.
Serial.read()
14.
Serial.readBytes()
15.
Serial.setTimeout()
mengeset
batas
maksimum
waktu
Serial.write()
17.
Serial.serialEvent()
fungsi
ini
akan
dipanggil
jika
data
2. Perangkat Komputer
3. Arduino Uno
4. Kabel USB
IV.
20
Langkah Percobaan
Hubungkan Arduino ke PC Anda menggunakan kabel USB, lalu buka software
Arduino. Program ini untuk memastikan bahwa koneksi antara Arduino dan PC tidak ada
kendala. Ketik program seperti di bawah ini lalu upload ke Arduino.
a. Pengiriman Frame Data dengan Header
1)
void setup() {
Serial.begin(9600);
}
void loop() {
int dataValue1=100;
int dataValue2=80;
char header1='%';
char header2='!';
Serial.print(header1);
Serial.print(dataValue1);
Serial.print(header2);
Serial.print(dataValue2);
Serial.println("");
delay(1);
}
2)
void setup() {
Serial.begin(9600);
}
void loop() {
int dataValue1=100;
int dataValue2=80;
char header1='%';
char header2='!';
Serial.print(header1 + dataValue1 + header2 + dataValue2);
Serial.println("");
20
delay(1);
}
3)
void setup() {
Serial.begin(9600);
}
void loop() {
int dataValue1=100;
int dataValue2=80;
char header1='%';
char header2='!';
Serial.print((String)header1 + (String)dataValue1 + (String) header2 + (String)dataValue2);
Serial.println("");
delay(1);
}
20
void setup(){
Serial.begin(9600);
}
void loop(){
while(Serial.available()>0){
incomingByte=Serial.read();
if(incomingByte == '%'){
index=0;
flag=true;
}
if(flag){
buffer[index++] = incomingByte;
}
}
Serial.write(buffer);
Serial.println("");
}
Tugas
a. Buat program untuk parsing data untuk dua header $ dan #
int incomingByte;
char buffer[15];
char buffer1[15];
int index=0;
boolean flag;
boolean flag1;
void setup(){
Serial.begin(9600);
}
void loop(){
while(Serial.available()>0){
incomingByte=Serial.read();
Praktikum 8 | Praktikum Mikrokontroler
if(incomingByte=='!'){
20
index=0;
flag=false;
flag1=false;
}
if(flag){
buffer[index++]=incomingByte;
}
if(flag1){
buffer1[index++]=incomingByte;
}
if(incomingByte=='%'){
index=0;
flag=true;
flag1=false;
}
if(incomingByte=='#'){
index=0;
flag=false;
flag1=true;
}
}
Serial.write(buffer);
Serial.println("");
Serial.write(buffer1);
Serial.println("");
}
b. Tambahan program dengan tail dari dua header tersebut, tail yang digunakan
adalah !
Praktikum 8 | Praktikum Mikrokontroler
int incomingByte;
20
char buffer[15];
char buffer1[15];
int index=0;
boolean flag;
boolean flag1;
void setup(){
Serial.begin(9600);
}
void loop(){
while(Serial.available()>0){
incomingByte=Serial.read();
if(flag){
buffer[index++]=incomingByte;
if(incomingByte=='!'){
index=0;
flag=false;
flag1=false;
}
}
if(flag1){
buffer1[index++]=incomingByte;
if(incomingByte=='!'){
index=0;
flag=false;
flag1=false;
}
}
if(incomingByte=='%'){
index=0;
flag=true;
flag1=false;
}
if(incomingByte=='#'){
Praktikum 8 | Praktikum Mikrokontroler
index=0;
20
flag=false;
flag1=true;
}
}
Serial.write(buffer);
Serial.println("");
Serial.write(buffer1);
Serial.println("");
}
V.
Hasil Percobaan
a. Pengiriman Frame Data dengan Header
Output :
1)
%100 !80
2)
%100 !80
3)
%100 !80
b. Penerimaan Komunikasi Serial
Output :
0
0
0
.
.
.
0
c. Melakukan Parsing Data pada Arduino
Input :
%100
20
Output :
100
100
100
.
.
.
100
Tugas
a. Buat program untuk parsing data untuk dua header $ dan #
Input :
$100#80
Output :
100
80
100
80
.
.
.
b. Tambahan program dengan tail dari dua header tersebut, tail yang digunakan
adalah !
Input :
%100!#80!
Output :
100
80
100
80
.
.
.
VI.
Analisa Data
Pada praktikum ini, terdapat 3 percobaan mengenai pengiriman frame data pada
komunikasi serial. Berikut adalah sub percobaan yang terdapat dalam percobaan ini.
Inisialisasi
20
digunakan serial.print() untuk mengirim data ascii, namun output akan muncul
dalam baris yang sama. Data ascii yang dikirim adalah data yang telah
dideklarasikan sebelumnya. Output akan muncul sesuai dengan pengaturan
serial.print(). Sedangkan, serial.printl() untuk mengirimkan data ascii, namun
output akan muncul pada baris selanjutnya (penambahan enter). Selain itu,
ditambahkan delay(1) agar output selanjutnya terdelay 1 ms.
Pada program ini, dilakukan perbedaan pada output serial.print(). Berikut
perbedaannya :
Program (1)
Serial.print(header1);
Serial.print(dataValue1);
Serial.print(header2);
Serial.print(dataValue2);
Pada program tersebut, maka output yang dihasilkan adalah :
%100 !80
Program (2)
Serial.print(header1 + dataValue1 + header2 + dataValue2);
Pada program tersebut, maka output yang dihasilkan adalah :
%100 !80
Program (3)
Serial.print((String)header1 + (String)dataValue1 + (String) header2 +
Praktikum 8 | Praktikum Mikrokontroler
(String)dataValue2); 20
Pada program tersebut, maka output yang dihasilkan adalah :
%100 !80
Persamaan output pada ketiga program tersebut dikarenakan output
dikeluarkan dengan perintah serial.print(). Dari program tersebut, terlihat pula
bahwa pengeluaran data dengan header dapat dengan 3 cara berbeda. Pada
program (3), data juga dapat dikategorikan dalam string. Namun, dengan
adanya string tersebut, data tersebut tidak dapat diolah lebih lanjut dalam
perhitungan.
b) Penerimaan Komunikasi Serial
Pada penerimaan komunikasi serial ini, terdapat bagian program yang
dijelaskan di bawah ini :
Deklarasi Variabel
Pada program yang dibuat, variable yang dideskripsikan adalah :
int incomingByte = 0;
Pada deklarasi variable tersebut, incomingByte memiliki nilai 0 dengan tipe
data integer.
Inisialisasi
Inisialisasi dilakukan pada fungsi setup() dimana hanya dijalankan sekali
saat program pertama kali dijalankan. Dengan kata lain fungsi setup() akan
dijalankan pada saat rangkaian diberi sumber tegangan.
void setup() {
Serial.begin(9600);
}
Pada program tersebut, program diatur dengan baudrate sebesar 9600.
20
incomingByte = Serial.read();
Serial.write(incomingByte);
Serial.println("");
Serial.println(incomingByte);
}
}
Pada program tersebut, program diatur untuk melakukan pengecekan pada
data yang masuk dengan perintah serial.available(). Pada fungsi pengulangan
while(), data diambil dari buffer penerima dengan perintah serial.read().
Pengambilan dilakukan pada variable incomingByte yang bernilai 0. Kemudian,
program akan mengirimkan data incomingByte dengan perintah serial.write(), lalu
mengeluarkannya secara sebaris-sebaris dengan perintah serial.println() dan
serial.println(incomingByte).
Maka, output yang dihasilkan adalah nilai 0, sesuai yang dideskripsikan pada
variable incomingByte. Nilai 0 tersebut akan dikeluarkan secara terus menerus
dalam baris yang berkelanjutan. Output dari program tersebut adalah :
0
0
.
.
0
c) Melakukan Parsing Data pada Arduino
Pada penerimaan komunikasi serial ini, terdapat bagian program yang
dijelaskan di bawah ini :
Deklarasi Variabel
Pada program yang dibuat, variable yang dideskripsikan adalah :
int incomingByte;
char buffer[15];
int index=0;
boolean flag;
Pada deklarasi variable tersebut, incomingByte memiliki tipe data integer;
variable buffer bertipe character dengan batas karakter 15; variable index
bernilai 0 dengan tipe integer; dan variable flag bertipe data boolean.
Praktikum 8 | Praktikum Mikrokontroler
Inisialisasi
20
Parsing Data
Terima data serial dilakukan pada fungsi loop() dimana dilakukan
Kesimpulan
Kesimpulan yang didapatkan dari praktikum ini adalah :
1. Pada pengirimian data frame dengan header, header dideskripsikan dalam tipe data
char dimana data dengan header dapat dicetak dengan perintah serial.print().
Pengeluaran data juga dapat dilakukan dalam 3 cara berbeda : (1) pengeluaran data dan
header secara satu persatu (dalam serial.print() berbeda); (2) pengeluaran data dan
header secara bersamaan (dalam serial.print() yang sama); (3) pengeluaran data dan
header secara bersamaan (dalam serial.print() yang sama), namun dalam tipe string.
2. Pada penerimaan komunikasi serial, data disimpan di buffer, kemudian dapat
dipanggil dengan perintah serial.read().
3. Pada parsing data Arduino, karakter yang dimasukkan dapat dicek satu persatu untuk
mengecek posisi header. Kemudian data input akan dikeluarkan tanpa header.
20
Daftar Pustaka
https://grsbatch5.wordpress.com/2013/02/19/parsing-data-di-arduino/
http://ricosanfransisko-samosir.blogspot.com/2013/10/komunikasi-serial_22.html
https://pccontrol.wordpress.com/2014/06/28/pengetahuan-dasar-serial-komunikasi-pada-
arduino/
http://simpultekno.blogspot.com/2014/11/belajar-komunikasi-serial-arduino.html