Muchamad
Dwi Purnama, Thosin Novandrian
Jurusan Teknik Elektro POLINES
Jl. Prof. H. Soedarto, SH Tembalang Semarang 50275 INDONESIA
Jl. Prof. H. Soedarto, SH Tembalang Semarang 50275 INDONESIA
Abstract — This document is a report on the
subject project Arduino Microcontroller Laboratory 2. This project uses the
input of whistling sounds and knocks to move the device outputs a linear
actuator. At the input device there are four piezo sounder and a sound sensor,
while the outputs using a motor stepper as the driving actuators. Piezo sounder
as an input to adjust the position of the linear actuator device by tapping it.
Linear actuator will move to the position corresponding location of the piezo
sounder is tapped. While the sound sensor is used to measure the frequency of
the sound around the device. Linear actuators
will go to the starting position when the appliance is
turned on and also when the Arduino Uno
microcontroller detect sound frequencies corresponding
to the settings in the program.
Keywords— Arduino, knock, whistling, linear actuator.
Ringkasan — Dokumen ini merupakan laporan proyek arduino pada matakuliah
Laboratorium Mikrokontroler 2. Proyek ini mengunakan masukan berupa suara siul
dan ketukan untuk menggerakkan perangkat luaran yang berupa linier aktuator.
Pada masukan terdapat empat buah perangkat bel atau piezo
sounder dan sebuah sensor suara sedangkan pada
luaran menggunakan motor langkah sebagai
penggerak aktuator. Bel sebagai
masukan untuk mengatur posisi linier aktuator dengan cara mengetuk perangkat ini. Linier aktuator akan bergerak menuju
posisi sesuai letak bel yang diketuk. Sedangkan sensor suara digunakan untuk
mengukur frekuensi suara disekitar perangkat. Linier aktuator akan kembali
keposisi awal pada awal penggunaan alat dan juga ketika Mikrokontroler Arduino
Uno mendeteksi frekuensi suara yang sesuai dengan pengaturan pada program.
Kata kunci—
Arduino, ketukan, siul, linier aktuator.
I.
PENDAHULUAN
Untuk tugas proyek Arduino masukan yang digunakan berupa
ketukan dan siul, serta keluaran linier aktuator. Alat yang digunakan untuk
memproses data masukan dan keluaran adalah Arduino Uno Revisi
3. Pada proyek Arduino kali ini,yang diatur adalah pergerakan linier
aktuator. Untuk mengatur linier aktuator menggunakan Bel dan Sensor suara yang
terdiri dari mic dan penguat. Bel yang digunakan sebagai masukan berupa
ketukan, karena bel dapat menghasilkan tegangan. Dalam proyek ini menggunakan 4
buah bel untuk mengatur 4 posisi yang
akan diatur, dimana tiap bel memiliki posisi yang berbeda-beda. Selain Bel juga
digunakan Sensor suara yang terdiri dari mic dan penguat. Mic pada sensor ini
berfungsi untuk menangkap gelombang suara disekitarnya sebelum dikuatkan. Selain
mic, terdapat sirkuit yang terintegrasi (IC) LM 393 yang
digunakan sebagai penguat karena tegangan masukan pada mic
harus mencukupi untuk menghasilkan logika ‘1’ pada
keluarannya. Sensor suara yang digunakan ini untuk mengatur aktuator untuk
bergerak ke posisi awal atau dengan kata lain untuk mengatur
ulang (reset). Keluaran
pada proyek arduino yang digunakan
adalah linier aktuator. Dimana
linier aktuator yang digunakan bergerak berdasarkan masukan dari masukan bel
dan sensor suara. Sebagai penggerak aktuator ini adalah motor langkah .Dan alat
pemroses data yang digunakan adalah arduino. Arduino merupakan
mikrokontroler yang saat ini sedang populer digunakan. Mikrokontroler ini
memiliki bahasa yang lebih mudah dimengerti dari pada bahasa C, karena hampir
semua perintahnya menggunakan bahasa inggris yang utuh (bukan merupakan
singkatan).
II.
landasan teori
A.
Arduino Uno Revisi 3
Gbr
1. Arduino Uno R3
Arduino Uno adalah
mikrokontroler yang berbasis ATmega328. Mikrokontroler Ini memiliki 14 masukan
digital/ pin keluaran dimana 6 pin dapat digunakan sebagai output modulasi
lebar pulsa (Pulse Width Modulation/ PWM), 6 masukan analog, resonator keramik
16 MHz, koneksi USB, jek listrik, header
ICSP, dan tombol reset. Arduino ini berisi semua yang diperlukan untuk
mendukung mikrokontroler, hanya terhubung ke komputer dengan kabel USB atau
catu dengan adaptor atau baterai AC ke DC untuk menggunakannya.
“Uno” berarti satu di Italia dan diberi nama tersebut untuk menandai peluncuran Arduino
1.0. Kata Uno dan versi 1.0 akan
menjadi versi referensi dari Arduino untuk bergerak maju. Uno ini adalah yang
terbaru dalam serangkaian Arduino USB, dan model referensi untuk platform Arduino
Sifat Arduino Uno R3:
- Menggunakan mikrokkontroler ATmega328
- Tegangan masukan : 7-12V
- Memiliki 14 digital pin masukan/keluaran (6 luaran modulasi lebar pulsa)
- 6 masukan analog
- Memori Flash 32k
- Kecepatan Clock 16Mhz
B.
Bel
Gbr
2. Bel
Buzzer atau bel adalah sebuah komponen
elektronika yang berfungsi untuk mengubah getaran listrik menjadi getaran
suara. Pada dasarnya prinsip kerja bel hampir sama dengan penyuara (speaker), jadi bel juga terdiri dari
kumparan yang terpasang pada diafragma dan kemudian kumparan tersebut dialiri
arus sehingga menjadi elektromagnet, kumparan tadi akan tertarik ke dalam atau
keluar, tergantung dari arah arus dan polaritas magnetnya, karena kumparan
dipasang pada diafragma maka setiap gerakan kumparan akan menggerakkan
diafragma secara bolak-balik sehingga membuat udara bergetar yang akan
menghasilkan suara. Bel biasa digunakan sebagai indikator bahwa proses telah
selesai atau terjadi suatu kesalahan pada sebuah alat (alarm).
Buzzer atau bel juga dapat digunakan sebagai masukan. Jika bel diberi tegangan akan menghasilkan
suara, begitu juga jika bel diberi
getaran berupa ketukan maka bel akan
menghasilkan luaran berupa tegangan. Tegangan yang bangkit itulah yang
digunakan untuk sinyal perintah untuk menggerakkan linier aktuator ke posisi
yang diinginkan.
C.
Sensor Suara
Gbr
3. Sensor suara
Sensor suara ini terdiri dari mikrofon, penguat dan komparator.
Mikrofon akan menangkap suara disekitarnya dan dikuatkan oleh komponen penguat,
lalu dibandingkan dengan tegangan yang ditetapkan. Jika sinyal masukan
komparator lebih besar dari pada pengaturan tegangannya, maka keluaran pada
komparator berlogika tinggi (5Volt) sedangkan jika sinyal masukan komparator
lebih kecil dari pada pengaturan tegangannya, maka keluaran komparator akan
berlogika rendah.
D.
Linier Aktuator
Gbr 4. Linier Aktuator
Linier aktuator adalah sebuah aktuator yang keluarannya berupa
gerakan lurus dengan penggerak berupa motor langkah bipolar. Gerakan motor langkah akan menggerakkan sabuk bergigi yang
kemudian menggerakkan lurus aktuatornya. Jarak pergeseran dapat dihitung dengan
mencari panjang pergeseran satu langkahnya. Linier aktuator ini memiliki
gerakan 1mm per langkahnya.
Adapun motor langkah bipolar memiliki tabel kebenaran sebagai
berikut:
Gambar 5. Motor langkah
bipolar
TABEL I
Tabel Kebenaran Langkah
Penuh
1a
|
2a
|
1b
|
2b
|
Keterangan
|
1
|
0
|
0
|
0
|
Kanan
|
0
|
1
|
0
|
0
|
|
0
|
0
|
1
|
0
|
|
0
|
0
|
0
|
1
|
1a
|
2a
|
1b
|
2b
|
Keterangan
|
0
|
0
|
0
|
1
|
Kiri
|
0
|
0
|
1
|
0
|
|
0
|
1
|
0
|
0
|
|
1
|
0
|
0
|
0
|
TABEL II
Tabel Kebenaran Setengah Langkah
1a
|
2a
|
1b
|
2b
|
Keterangan
|
1
|
0
|
0
|
0
|
Kanan
|
1
|
1
|
0
|
0
|
|
0
|
1
|
0
|
0
|
|
0
|
1
|
1
|
0
|
|
0
|
0
|
1
|
0
|
|
0
|
0
|
1
|
1
|
|
0
|
0
|
0
|
1
|
|
1
|
0
|
0
|
1
|
1a
|
2a
|
1b
|
2b
|
Keterangan
|
0
|
0
|
0
|
1
|
Kiri
|
0
|
0
|
1
|
1
|
|
0
|
0
|
1
|
0
|
|
0
|
1
|
1
|
0
|
|
0
|
1
|
0
|
0
|
|
1
|
1
|
0
|
0
|
|
1
|
0
|
0
|
0
|
|
1
|
0
|
0
|
1
|
III.
PERANCANGAN PERANGKAT KERAS DAN
PERANGKAT LUNAK
A. Perancangan Perangkat Keras
Perangkat
keras pada alat ini terdiri dari piezo bel,
sensor suara dan linier aktuator. Perancangan perangkat keras adalah sebagai
berikut:
Gbr 6. Rangkaian masukan
Empat
buah bel dirangkai seperti gambar.
Letak bel akan mewakili posisi linier
aktuator. Sedangkan keluaran sensor suara dihubungkan dengan pin 8 karena dalam
pustaka arduino untuk pengukuran frekuensi dengan Arduino Uno harus menggunakan
pin 8 [3].
Gambar 3.2 Rangkaian keluaran
Linier
aktuator menggunakan motor langkah sebagai penggeraknya. Sehingga membutuhkan
driver motor untuk mengendalikan motor langkah. Driver motor menggunakan IC
L298 yang di dalamnya merupakan rangkaian H-Bridge.
B. Perancangan Perangkat Lunak
1)
Diagram Alir:
2)
Program:
/*================================
PProyek-<> Proyek Arduino
program untuk mengendalikan
posisi linier
aktuator dengan masukan berupa
ketukan dan
siulan.
----------------------------------
Materi Baru:
- switch-case
----------------------------------
Komponen:
- 4x Piezo Sounder
- 4x R1M
- 1x IC L293
- 1x Liniear Aktuator
================================*/
#include <FreqMeasure.h>
// diunduh pada [2]
// menggunakan pin 8 untuk
// arduino
// (lihat file capture.h atau
// laman)
#define pinA 5
// pin untuk Stepper masukan A
#define pinB 4
// pin untuk Stepper masukan B
#define pinC 3
// pin untuk Stepper masukan C
#define pinD 2
// pin untuk Stepper masukan D
//=== Deklarasi Variable ===
int
arah,
// var arah linier aktuator
posAwal=0,
// var posisi awal linier
// aktuator
posAkhir=0,
// var posisi akhir linier
// aktuator
masukanAkhir=0,
// var masukan yang terakhir
// diberi
jmlStep, // var jumlah langkah
ambang=1000, // batas ADC
normal=1,
// tanda sudah ke posisi
// normal/ belum
klik=13;
// pin masukan limit switch
double sum=0;
// var jumlah pengukuran
// frekuensi
int count=0;
// var jumlah berapa kali
// mengukur
//=== Pengesetan Awal ===
void setup() {
FreqMeasure.begin();
// mengaktifkan pembacaan
// frekuensi
pinMode (pinA,OUTPUT);
// pin 5 sebagai keluaran
pinMode (pinB,OUTPUT);
// pin 4 sebagai keluaran
pinMode (pinC,OUTPUT);
// pin 3 sebagai keluaran
pinMode (pinD,OUTPUT);
// pin 2 sebagai keluaran
pinMode (klik,INPUT);
// pin 13 sebagai masukan
digitalWrite(klik,HIGH);
// mengaktifkan pull up
// internal
}
//==Program Utama
(Pengulangan)===
void loop() {
if (normal==1) {posisiNormal();}
// jika belum pernah ke
posisi normal
bacaFrek(); // baca frekuensi
posisiTujuan();
// mendeteksi posisi tujuan
jumlahStep();
// menghitung jumlah
langkah
arahPutar();
// menentukan arah gerakan
linier aktuator
}
//=== Sub Program ===
//----------------------------------------
void posisiNormal() {
int masukan,
// var masukan limit switch
jedaMotor=5; // jeda motor 5ms
normal=0; // kembali ke pengaturan awal
posAwal=0;
posAkhir=0;
masukanAkhir=0;
label1: // label pengulangan
digitalWrite (pinA,LOW);
digitalWrite (pinB,LOW);
digitalWrite (pinC,HIGH);
digitalWrite (pinD,LOW);
delay(jedaMotor); // delay 5ms
masukan=digitalRead (klik);
// baca masukan limit switch
if (masukan==0) {return;}
// jika sudah menyentuh
limit switch
// kembali
digitalWrite (pinA,HIGH);
digitalWrite (pinB,LOW);
digitalWrite (pinC,LOW);
digitalWrite (pinD,LOW);
delay(jedaMotor); // delay 5ms
masukan=digitalRead (klik);
// baca masukan limit switch
if (masukan==0) {return;}
// jika sudah menyentuh
limit switch
// kembali
digitalWrite (pinA,LOW);
digitalWrite (pinB,LOW);
digitalWrite (pinC,LOW);
digitalWrite (pinD,HIGH);
delay(jedaMotor); // delay 5ms
masukan=digitalRead (klik);
// baca masukan limit switch
if (masukan==0) {return;}
// jika sudah menyentuh
limit switch
// kembali
digitalWrite (pinA,LOW);
digitalWrite (pinB,HIGH);
digitalWrite (pinC,LOW);
digitalWrite (pinD,LOW);
delay(jedaMotor); // delay 5ms
masukan=digitalRead (klik);
// baca masukan limit switch
if (masukan==0) {return;}
// jika sudah menyentuh
limit switch
// kembali
goto label1; // kembali ke label
// jika belum menyentuh limit switch
}
//------------------------------------------
void arahPutar () {
int posisi; // var posisi
posisi=posAkhir-posAwal;
// mencari keadaan negatif/
positif
if (posisi<0) {arah=-1;}
else {arah=1;}
// mendefinisikan ke var
arah
posAwal=posAkhir;
// menyalin data ke var
posAwal
switch (arah){
//jika hasilnya negatif
case -1:
putarKanan(jmlStep,5);
break;
//putar kanan sesuai langkah
dan jeda
//jika hasilnya positif
case 1:
putarKiri(jmlStep,5);
break;
//putar kiri sesuai langkah
dan jeda
}
}
//------------------------------------------
int posisiTujuan () {
int piezoA= 3;
// pin analog 3 untuk buzzer
A
int piezoB= 2;
// pin analog 2 untuk buzzer
B
int piezoC= 1;
// pin analog 1 untuk buzzer
C
int piezoD= 0;
// pin analog 0 untuk buzzer
D
if(analogRead (piezoA)>ambang &&
masukanAkhir!=1) {
// jika tegangan melebihi
batas ambang dan
// tidak pada posisi 1
masukanAkhir=1;
posAkhir=1;
return posAkhir;
}
if(analogRead (piezoB)>ambang &&
masukanAkhir!=2) {
// jika tegangan melebihi
batas ambang dan
// tidak pada posisi 2
masukanAkhir=2;
posAkhir=2;
return posAkhir;
}
if(analogRead (piezoC)>ambang &&
masukanAkhir!=3) {
// jika tegangan melebihi
batas ambang dan
// tidak pada posisi 3
masukanAkhir=3;
posAkhir=3;
return posAkhir;
}
if(analogRead (piezoD)>ambang &&
masukanAkhir!=4) {
// jika tegangan melebihi
batas ambang dan
// tidak pada posisi 3
masukanAkhir=4;
posAkhir=4;
return posAkhir;
}
}
//-------------------------------------------
int jumlahStep (){
int selisih; // var selisih
selisih=posAkhir-posAwal;
if (selisih<0) {selisih=-selisih;}
// selisih hanya diambil
nilai positif
switch (selisih) {
case 0:
// jika hasilnya 0
jmlStep=0;
// jalan 0 siklus
break;
case 1:
// jika hasilnya 1
jmlStep=30;
// jalan 30 siklus
break;
case 2:
// jika hasilnya 2
jmlStep=60;
// jalan 60 siklus
break;
case 3:
// jika hasilnya 3
jmlStep=90;
// jalan 90 siklus
break;
case 4:
// jika hasilnya 4
jmlStep=120;
// jalan 120 siklus
break;
} return jmlStep;
} // kembali dengan nilai
jml langkah
//-------------------------------------------
void putarKanan(int jmlStep,
int jedaMotor) {
int a;
for (a=0;a<jmlStep;a++) {
// loop sebanyak jml langkah
digitalWrite (pinA,LOW);
digitalWrite (pinB,LOW);
digitalWrite (pinC,HIGH);
digitalWrite (pinD,LOW);
delay(jedaMotor); // jeda selama 5 ms
digitalWrite (pinA,HIGH);
digitalWrite (pinB,LOW);
digitalWrite (pinC,LOW);
digitalWrite (pinD,LOW);
delay(jedaMotor); // jeda selama 5 ms
digitalWrite (pinA,LOW);
digitalWrite (pinB,LOW);
digitalWrite (pinC,LOW);
digitalWrite (pinD,HIGH);
delay(jedaMotor); // jeda selama 5 ms
digitalWrite (pinA,LOW);
digitalWrite (pinB,HIGH);
digitalWrite (pinC,LOW);
digitalWrite (pinD,LOW);
delay(jedaMotor); // jeda selama 5 ms
}
}
//------------------------------------------
void putarKiri(int jmlStep, int jedaMotor) {
int a;
for (a=0;a<jmlStep;a++) {
// loop sebanyak jml langkah
digitalWrite (pinA,LOW);
digitalWrite (pinB,HIGH);
digitalWrite (pinC,LOW);
digitalWrite (pinD,LOW);
delay(jedaMotor); // jeda selama 5 ms
digitalWrite (pinA,LOW);
digitalWrite (pinB,LOW);
digitalWrite (pinC,LOW);
digitalWrite (pinD,HIGH);
delay(jedaMotor); // jeda selama 5 ms
digitalWrite (pinA,HIGH);
digitalWrite (pinB,LOW);
digitalWrite (pinC,LOW);
digitalWrite (pinD,LOW);
delay(jedaMotor); // jeda selama 5 ms
digitalWrite (pinA,LOW);
digitalWrite (pinB,LOW);
digitalWrite (pinC,HIGH);
digitalWrite (pinD,LOW);
delay(jedaMotor); // jeda selama 5 ms
}
}
//-----------------------------------------
void bacaFrek() {
if (FreqMeasure.available()) {
// menghintung total pembacaan frekuensi
sum = sum + FreqMeasure.read();
count = count + 1;
// menghitung banyaknya pengukuran
if (count > 20) {
double frequency = F_CPU / (sum / count);
// merata-rata hasil pengukuran
if (frequency > 2000 &&
frequency < 4000)
{posisiNormal();}
// jika hasil perhitungan
diantara 2000-4000
// maka kembali ke posisi
normal
else {
// kembali ke nilai awal
sum = 0;
count = 0;
return;
}
// kembali ke nilai awal
sum = 0;
count = 0;
}
}
}
IV.
PENGUJIAN DAN ANALISIS
A.
Pengujian Alat
TABEL III
Tabel Kebenaran Langkah Penuh
No.
|
Masukan
|
Posisi
Linier Aktuator
|
|
Ketukan
|
Siulan
|
||
1
|
-
|
-
|
0 (Posisi Awal)
|
2
|
Buzzer 1
|
-
|
1
|
3
|
Buzzer 2
|
-
|
2
|
4
|
Buzzer 3
|
-
|
3
|
5
|
Buzzer 4
|
-
|
4
|
6
|
-
|
Siulan
|
0 (Posisi Awal)
|
Saat pertama kali alat dinyalakan, maka
secara otomatis linier aktuator akan menuju ke posisi awal yang ditandai dengan
limit switch yang tertekan oleh
linier aktuator. Setelah linier aktuator mencapai posisi 0, maka alat baru bisa
diperintah dengan masukan yang lainnya. Jika
buzzer 1 diketuk, maka linier aktuator akan
menuju posisi 1. Selama proses menuju posisi 1, linier aktuaor akan mengabaikan
masukan-masukan yang diberikan saat itu. Setelah linier aktuator mencapai
posisi 1, alat bisa diperintah lagi. Ketika buzzer
2 diketuk, maka linier aktuator menuju posisi 2, jika buzzer 3 diketuk maka linier
aktuator akan menuju posisi 3, begitu pula jika buzzer 4 diketuk maka linier aktuator akan bergerak menuju posisi
4. Dan ketika sensor suara mendeteksi suara dengan frekuensi antara 2KHz s/d
4KHz, maka linier aktuator akan kembali ke posisi 0.
B.
Analisa Rangkaian
1)
Pada masukan buzzer: buzzer
yang diketuk akan menghasilkan
sinyal gelombang sejenak. Semakin keras ketukan, maka sinyal tegangan yang
dihasilkan semakin besar. Dengan membatasi nilai ADC, maka akan dapat
membedakan ketukan sebagai perintah dan ketukan yang bukan sebagai perintah.
Jika tegangan yang dihasilkan buzzer melebihi batasan nilai ADC yang
sudah ditetapkan maka ketukan tersebut merupakan perintah, dan linier aktuator
akan menuju posisi sesuai buzzer yang
diketuk. Sedangkan jika tegangan keluaran buzzer
kurang dari batas ADC maka ketukan tersebut diabaikan.
2)
Pada masukan sensor suara: luaran pada sensor suara ini berupa
sinyal pulsa. Pulsa keluaran mewakili periode sinyal masukan suara. Keluaran
sensor suara akan diolah secara program sehingga didapat nilai frekuensi suara
tersebut. Frekuensi yang dihitung menggunakan metode perbandingan kecepatan clock pada mikrokontroler dengan rumus:
Dimana:
fs= frekuensi suara
fc= frekuensi clock (16MHz)
Clock= jumlah pulsa clock
Semakin tinggi frekuensi suara yang diukur
semakin sedikit clock yang digunakan.
Semakin rendah frekuensi suara yang diukur semakin banyak clock yang digunakan.
3)
Pada luaran linier aktuator: dengan mengukur jarak tiap langkah
motornya, maka dapat diukur berapa langkah untuk mencapai sudut linier
aktuator. Pada alat telah diukur bahwa untuk mencapai ujung linier aktuator
dari ujung yang lain membutuhkan 496 langkah. Karena menggunakan langkah penuh
sehingga setiap siklusnya ada 4 langkah, maka dapat diambil 120 siklus motor
langkah untuk menuju ujung linier aktuator. Karena ada 4 posisi, maka 120 siklus
dibagi lagi dengan 4 posisi, sehingga setiap posisinya memiliki selisih 30
siklus atau 120 langkah motor.
V.
PENUTUP
Kesimpulan
· Alat
pengatur posisi dengan ketukan dan siulan ini menggunakan perangkat masukan
berupa buzzer 4 buah dan sebuah
sensor suara sedangkan perangkat luaran sebuah linier aktuator.
· Linier
akan menuju posisi 0 pada awal alat dinyalakan.
· Linier
aktuator akan bergerak menuju posisi sesuai posisi buzzer yang diketuk.
· Linier
aktuator akan kembali ke posisi 0 (awal) jika mendeteksi suara dengan frekuensi
antara 2KHz s/d 4KHz.
· Masukan
yang diberikan saat linier aktuator bergerak akan diabaikan.
Referensi
[1] Mcrobert,Michael.Begining
Arduino
[2] http://indraharja.wordpress.com/2012/01/07/pengertian-buzzer/ di akses pada tanggal 5 Desember 2013
[3] http://www.pjrc.com/teensy/td_libs_FreqMeasure.html di akses pada tanggal 6 Desember 2013
[4] https://www.sparkfun.com/products/11021 di akses pada tanggal 8 Desember 2013
Tidak ada komentar:
Posting Komentar