Anda di halaman 1dari 13

Laporan Resmi

Analog Input dan Audio Processing

Rafika Rizky Ramadhani


1210181008 / 3 D4 TA
Politeknik Elektronika Negeri Surabaya
MATERI 2
ANALOG INPUT DAN AUDIO PROCESSING
I. TUJUAN
1. Membaca data yang masuk pada pin Analog Input Arduino.
2. Memvisualisasikan data dari pin Analog Input dalam bentuk grafik.
3. Memvisualisasikan data file audio dalam bentuk grafik.

II. DASAR TEORI


A. Analog Input dengan Processing.
Visualisasi merupakan salah satu proses yang penting dalam memaknai suatu
data. Data yang divisualkan dalam berbagai bentuk grafik yang sesuai (grafik garis,
batang, pie, dsb.) dapat mempermudah pengguna dalam menganalisis data. Dalam
kaitannya dengan Arduino, pengguna dapat memvisualisasikan data tersebut
menggunakan Processing. Menggunakan sebuah Arduino Uno dan potensiometer
sebagai sensor. Potensiometer digunakan untuk memodelkan penggunaan semua
jenis sensor analog. Baca sensor atau perangkat input dan kirim nilainya sebagai
byte melalui protokol serial ke PC ke Processing. Potensiometer untuk mengatur
obyek pada Processing melalui Arduino.

B. Konsep Pixel
Sebuah obyek dapat dipadukan dengan obyek yang lain. Selanjutnya, obyek -
obyek ini dapat dibuatkan animasi. Lebih jauh lagi, obyek - obyek ini dapat
berinteraksi dengan lingkungan di luar komputer. Menggambar pada layar
komputer sama halnya dengan menggambar pada kertas. Harus memulai suatu
obyek dari suatu sudut atau titik tertentu pada bidang kerja. Pada layar komputer,
elemen-elemen terkecil pembentuk bidang kerja dikenal sebagai piksel. Piksel ini
dapat diilustrasikan seperti grid kertas kotak. Posisi dari tiap-tiap kotak ditentukan
oleh koordinat x dan y-nya. Pada Processing, koordinat-x adalah jarak dari sisi kiri
jendela display (Display Window), dan koordinat-y adalah jarak dari sisi atas
jendela display.

Gambar 1. Konsep Pixel

Pada Gambar 1, piksel (0,0) diawali dari sisi kiri-atas, dan akan berakhir pada sisi
kanan-bawah. Indeks dimulai dari 0, bukan dari 1. layar berukuran 200 x 300
piksel,
maka sudut kiri-atas memiliki koordinat (0,0), dan sudut kanan-bawah memiliki
koordinat (199 x 299). Pada ukuran 200 x 300 piksel, nilai 200 menyatakan Lebar
layar, sedangkan nilai 300 menyatakan Tinggi layar.

C. Ploting Data Arduino Menggunakan Processing


1. Gelombang Sinus
Membangkitkan sebuah gelombang sinus pada Arduino dan
memvisualisasikan pada Processing. Gelombang sinus memiliki nilai yang
dapat bergerak dari -1 sampai 1 dengan nilai 0 sebagai sumbu tengah. Karena
nilai yang akan dikirim memiliki nilai dari 0 sampai 1023 (ingat, resolusi ADC
pada Arduino Uno 10-bit (2^10 = 1024). Dengan menggeser agar semua
komponen sehingga memiliki nilai positif. Sumbu utama (nilai 0) akan digeser
menjadi 511 (hampir setengah dari nilai maksimal), dan selanjutnya gelombang
akan bergerak dari 0 sampai mendekati 1023.
2. Ploting Nilai Sensor dari Arduino
a. Baca sensor atau perangkat input, pembacaan pada pin A2 (atau di pin
analog lainnya).
b. Memvisualisasikan data dari pin Analog Input dalam bentuk grafik.
c. Mengatur grafik pada Processing menggunakan Potensiometer
3. Ploting Data Audio Dari File
a. Baca data audio dari file .mp3.
b. Memvisualisasikan data dari file .mp3 dalam bentuk grafik.
c. Grafik data dinamis sesuai perubahan data yang diterima
d. Perintah load file lagu dan play:
e. ”lagu = minim.loadFile(”nama_lagu.mp3"); ” ”lagu.play();”

III. PERALATAN
1. Arduino Uno Board
2. Softwarre Processing
3. Potensiometer

IV. RANGKAIAN

Gambar 2. Rangkaian Percobaan


V. PERCOBAAN DAN ANALISA
1. Membuat Gelombang Sinus.

a. Program Arduino
double x,y;
void setup() {
Serial.begin(9600);
x = 0;
}
void loop() {
Serial.flush();
y = 511+511*sin(x);
Serial.println(y);
x += 0.05;
if(x >= 2*3.14)
x = 0;
delay(100);
}

b. Program Processing
import processing.serial.*;
Serial portSerial;
int dataSekarang;
int inByte;
int[] nilaiY;
int w;
void setup() {
size (700,400);
w = width-10;
strokeWeight(3);
smooth();
nilaiY = new int[w];
//sesuikan dengan nomer COM
portSerial = new Serial(this, "COM1", 9600);
}
void draw(){
String inString = portSerial.readStringUntil('\n');
if(inString != null){
inString = trim(inString);
inByte = int(inString);
println(inByte);
dataSekarang = int(map(inByte, 0, 1023, 0+10, height-50));
dataSekarang = height-dataSekarang;
background(0);
for(int i = 1; i < w; i++) {
nilaiY[i-1] = nilaiY[i];
}
nilaiY[w-1] = dataSekarang;
textSize(32);
text(inByte, 10, 30);
stroke(255);
line(w, dataSekarang, width, dataSekarang);
strokeWeight(1);
line(0, dataSekarang, width, dataSekarang);
strokeWeight(3);
for(int i=2; i<w; i++) {
strokeWeight(3);
stroke(220, 10, nilaiY[i]);
line(i, nilaiY[i-1], i, nilaiY[i]);
}
}
}

c. Hasil :

d. Video hasil :
https://drive.google.com/file/d/18c9ZvLZN15S7rDVAr__Jay7pGQ669zQT/vi
ew?usp=sharing
e. Analisa
Pada percobaan ini yaitu akan menampilkan gelombang sinus dengan
persamaan 511+511sin(x) sehingga gelombang tersebut memiliki nilai
maksimum 511 dan minimum -511. Komponen yang digunakan pada software
proteus adalah Arduino uno dan compim. Sebelumnya, connector COM1
haruslah dibuat dan diaktifkan dulu pada VSPE. Lalu pastikan baud rate dan
port pada compim sesuai yaitu 9600 dan COM1. Program Arduino digunakan
untuk mengirim perintah ke processing untuk membentuk gelombang sinus.
Persamaan gelombang tadi berada pada loop() di program Arduino. Nilai x yaitu
0,05 dimana semakin besar nilai x maka bentuk gelombang sinus akan semakin
rapat.
Pada processing, program diatur untuk membuat sebuah tampilan gelombang
sinus. Pada fungsi draw(), berisi baris program yang mengatur warna
background agar berwarna hitam, mengatur ukuran teks yang menampilkan
nilai amplitude gelombang sinus, mengatur ketebalan warna gelombang sinus,
dan menggambar gelombang sinus dengan nilai-nilai seperti pada program.

2. Ploting Nilai Sensor dari Arduino

a. Program Arduino
void setup() {
Serial.begin(9600);
}
void loop() {
int nilaiSensor = analogRead(A2);
Serial.println(nilaiSensor);
delay(100);
}
b. Program Processing import
import processing.serial.*;
Serial portSerial;
int dataSekarang;
int inByte;
int[] nilaiY;
int w;
void setup(){
size (700,400);
w = width-10;
strokeWeight(3);
smooth();
nilaiY = new int[w];
portSerial = new Serial(this, Serial.list()[0], 9600);
}

void draw(){
String inString = portSerial.readStringUntil('\n');
if(inString != null){
inString = trim(inString);
inByte = int(inString);
println(inByte);
dataSekarang = int(map(inByte, 0, 1023, 0+10, height-50));
dataSekarang = height-dataSekarang;
background(0);
for(int i = 1; i < w; i++) {
nilaiY[i-1] = nilaiY[i];
}
nilaiY[w-1] = dataSekarang;
textSize(32);
text(inByte, 10, 30);
stroke(255);
line(w, dataSekarang, width, dataSekarang);
strokeWeight(1);
line(0, dataSekarang, width, dataSekarang);
strokeWeight(3);
for(int i=2; i<w; i++) {
strokeWeight(3);
stroke(220, 10, nilaiY[i]);
line(i, nilaiY[i-1], i, nilaiY[i]);
}
}
}

c. Hasil :
d. Video hasil percobaan :
https://drive.google.com/file/d/1j8A3a9TdlzutC5r8aEc28ip-
05pb0F1j/view?usp=sharing

e. Analisa :
Pada percobaan kedua yaitu membangkitkan gelombang pada arduino dengan
menggunakan potensiometer. Potensiometer dihubungkan dengan pin Arduino
A2. Sebelum dijalankan, pastikan COM1 sudah aktif pada VSPE. Untuk
membentuk grafiknya (nilai naik atau turun), potensio diputar-putar. Pada
software processing, program diatur untuk membuat sebuah tampilan grafik
yaitu baris program yang mengatur warna background, mengatur ketebalan
warna garis, dan menggambar grafik serta pergerakan graffik dengan nilai-nilai
seperti pada program.

3. Ploting Data Audio Dari File


a. Program Procesing
import ddf.minim.*;
AudioPlayer lagu;
Minim minim;
void setup(){
size(400, 200);
minim = new Minim(this);
lagu = minim.loadFile("01. 너에게 난, 나에게 넌.mp3");
lagu.play();
}
void draw(){
background(0);
stroke(255);
for (int i = 0; i < lagu.bufferSize() - 1; i++)
{
line(i, 100 + lagu.right.get(i)*50, i+1, 100 + lagu.right.get(i+1)*50);
}
}

b. Hasil :
c. Video hasil percobaan :
https://drive.google.com/file/d/1ARIiplH1K8r7WHseKfPIx_sWbF99rLgF/vie
w?usp=sharing

d. Analisa :
Pada percobaan ketiga membangkitkan audio dengan library minim pada
processing. Sebelumnya library minim dan library audio haruslah di unduh
dahulu. File audio harus ditaruh di direktori yang sama dengan file processing.
Baris lagu = minim.loadFile("01. 너에게 난, 나에게 넌.mp3"); artinya
memutar file audio bernama 01. 너에게 난, 나에게 넌.mp3. selanjutnya akan
ditampilkan semacam gelombang dari lagu tersebut, dengan background hitam
dan garis gelombang berwarna putih.

VI. KESIMPULAN
1. Nilai analog yang diterima Arduino merupakan nilai hasil ADC (Analog to Digital
Converter) 10 Bit yang mempunyai range 0 – 1023.
2. Stroke pada tampilan grafik menggunakan system RGB
3. Untuk menggunakan perintah minim atau memutar lagu, file lagu harus satu
direktori dengan file processing (program processing yang telah dibuat).
4. Untuk dapat menggunakan library minim dan audio, haruslah di download terlebih
dahulu library nya.

VII. LATIHAN
1. Buatlah eksperimen dengan meggunakan Analog Input Arduino dan Potensiometer.
Data hasil pembacaan divisualisasikan dengan software processing seperti gambar
di samping

Jawab :
a. Coding pada Arduino :
void setup() {
Serial.begin(9600);
}
void loop() {
int nilaiSensor = analogRead(A2);
Serial.println(nilaiSensor);
delay(100);
}

b. Coding pada Processing


import processing.serial.*;
Serial portSerial;
int dataSekarang;
int inByte;
int[] nilaiY;
int w;
void setup() {
size (700,400);
w = width-10;
strokeWeight(3);
smooth();
nilaiY = new int[w];
portSerial = new Serial(this, "COM1", 9600);
}
void draw(){
String inString = portSerial.readStringUntil('\n');
if(inString != null){
inString = trim(inString);
inByte = int(inString);
println(inByte);
dataSekarang = int(map(inByte, 0, 1023, 0+10, height-50));
dataSekarang = height-dataSekarang;
background(0);
for(int i = 1; i < w; i++) {
nilaiY[i-1] = nilaiY[i];
}
nilaiY[w-1] = dataSekarang;
textSize(32);
text(inByte, 10, 30);
stroke(255);
line(w, dataSekarang, width, dataSekarang);
strokeWeight(1);
line(0, dataSekarang, width, dataSekarang);
strokeWeight(3);
for(int i=2; i<w; i++) {
strokeWeight(3);
stroke(105, 37, 207);
line(i, 1023, i, nilaiY[i]);
}
}
}
c. Hasil

d. Video Hasil :
https://drive.google.com/file/d/1Qpm49wFBj11utBQp1P77G4xKiTH3G-
a4/view?usp=sharing

2. Buatlah eksperimen seperti rangkaian dan hasil di bawah ini.

Jawab :
a. Coding pada Arduino
void setup(){
Serial.begin(9600);
}
void loop(){
int nilaiSensor =
analogRead(A2);
Serial.println(nilaiSensor);
delay(100);
}

b. Coding pada Processing


import processing.serial.*;
Serial portSerial;
int dataSekarang;
int inByte;
int[] nilaiY;
int w;
void setup(){
size(700,400);
w = width-10;
strokeWeight(3);
smooth();
nilaiY = new int[w];
portSerial = new Serial(this, Serial.list()[0], 9600);
}
void draw(){
String inString =
portSerial.readStringUntil('\n');
if(inString != null){
inString = trim(inString);
inByte = int(inString);
println(inByte);
dataSekarang = int(map(inByte, 0, 1023, 0+10, height-50));
dataSekarang = height-dataSekarang;
background(0);
for(int i=1;i<w;i++){
nilaiY[i-1] = nilaiY[i];
}
nilaiY[w-1] = dataSekarang;
textSize(32);
text(inByte, 10, 30);
stroke(255);
line(w, dataSekarang, width, dataSekarang);
strokeWeight(1);
line(0, dataSekarang, width, dataSekarang);
strokeWeight(3);
for(int i=2;i<w;i++){
strokeWeight(3);
stroke(255, 255, 255);
line(i, nilaiY[i-1], i, nilaiY[i]);
}
}
}

c. Hasil
d. Video hasil :
https://drive.google.com/file/d/15hG-
pmbo_mdMo3luRW9reXIkRobnEsgS/view?usp=sharing

Anda mungkin juga menyukai