Kemarin ane dapet orderan dari temen ada yang
minta bikinin alat pengukur tinggi badan pake arduino katanya, dan outputnya
ada suara juga yang bunyi suaranya itu tinggi badan yang diukur.
Langsung deh ane list komponen apa aja yang
dibutuhkan untuk merakit keseluruhan dari alat ini. Sebetulnya sih simpel,
berikut udah ane siapin listnya dibawah ini.
List Kebutuhan :
- Niat
- Duit
- Mikrokontroler Arduino (bebas. disini ane pake yang UNO)
- Sensor Ultrasonik/ PING HC-SR04
- Modul Suara DFPlayer
- LCD 16x2 plus modul I2C
- Mini Speaker 0.5W
- SD Card min. 1GB/2GB
- ProtoBoard
- Kabel Jumper min.20 (male-male 10, male-female 10)
- Adaptor 5V
- Dah, itu aja.
Disini ane gabakal ngejelasin secara detail
definisi dan cara kerja dari tiap-tiap komponen yang akan kita pakai nantinya,
karena akan memakan waktu juga. Jadi ane asumsikan kalian udah cukup paham ya.
1. Mikrokontroler Arduino : fungsinya sebagai
otak pemroses data.
2. Sensor HC-SR04 : sensor ini yang akan mengukur jarak/ tinggi
badan kita.
3. Modul DFPlayer : modul ini dapat memainkan
file berekstensi *.mp3 dan *.wav. jadi ga perlu susah-susah konversi ke *.AD4
seperti pada penggunaan modul WTV020m01 (diawal pengerjaan sempet pake ini,
tapi frustasi karena suaranya ga keluar2. T_T )
4. LCD 16x2 + I2C : nanti di layar LCD nya
muncul teks berupa Tinggi badan kita.
5. SD Card yang kita pakai usahakan diformat
dulu menjadi FAT16 / FAT32. Karena tidak semua format FS disupport.
Sekarang, kita langsung ke tahap perancangan
skematik/ mapping pin komponen yang terhubung.
Gambar skematik alat yang akan dirakit
Untuk
rincian pin-pinnya, ane jelasin per komponen:
1. Sensor
PING
Power
yang diperlukan sensor ultrasonik adalah 5V DC, dapat dihubungkan langsung ke
pin Vcc 5v yang disediakan arduino. Jangan lupa juga jalur GND, karena sensor
pasti tidak akan berfungsi apabila tidak mendapat tegangan referensi dari Vcc
sensor.
Untuk jalur data, pin Trigger (pemicu/pemancar
gelombang ultrasonik) dihubungkan ke pin Digital 3 (D3), ping Echo (menyerap
gelombang balik) ke pin Digital 4 (D4). Referensi mengenai bagaimana cara kerja
sensor PING ini dapat kita baca pada artikel-artikel yang “bejibun” di
internet.
2. LCD modul
Modul
lcd yang digunakan disini sudah dikombinasikan dengan modul I2C sehingga
meminimalkan penggunaan pin menjadi 2 pin saja, yakni pin Serial Data (SDA) ke
pin Analog 4 (A4) dan Serial Clock (SCL) ke pin analog 5(A5) yang memang mode
transfer data tersebut hanya disediakan pada 2 pin analog ini. Suplai tegangan
yang diperlukan adalah kisaran 3.3 – 5V.
3. Modul Mp3 DFPlayer
Untuk
bertukar data dengan arduino, modul ini melakukan komunikasi serial dengan
mikrokontroler ( Transmit – Receive ). Oke , disini kita tidak akan menggunakan
fungsi Hardware Serial pada arduino, melainkan memanfaatkan ketersediaan pin
yang ada sebagai penggantinya dengan menambahkan library “SoftwareSerial.h”.
Kemudian hubungkan pin Tx DFPlayer (pin 3) ke
pin Digital 5(D5, sebagai receiver) dan pin Rx DFPlayer (pin 2) ke pin Digital
6 (D6, sebagai Transmitter). Lalu berikan suplai tegangan sebesar 5V DC.
3a. Penyimpanan file Mp3
File
mp3 yang akan kita gunakan disimpan didalam folder di SD card. Berikut ini
gambaran isi dari sd cardnya.
NOTE :
PENAMAAN FILE HARUS DENGAN ANGKA BERURUT SESUAI PRIORITAS. KARENA DFPLAYER
HANYA MENGENAL FILE MP3 SESUAI DENGAN URUTAN ANGKA TERKECIL – TERBESAR.
Jadi
usahakan berikan penomoran file sesuai prioritas.
Disini
kita bagi menjadi 3 Folder. Penamaan folder harus format angka 01 – 99 dan
berurutan.
Folder
01 : Berisi file mp3 dengan urutan nama 001.mp3 – 004.mp3. Suara dari 4 file
disini adalah suara pengarahan/petunjuk kepada pengguna nantinya. Mulai dari
suara pembuka, petunjuk tinggi maksimal, peringatan ketinggian dan kurang
tinggi. Bisa ditambah jika mau.
Folder 02 : Isinya adalah file-file suara yang akan
mengatakan ketinggian badan kita saat pengukuran. Kita dapat memberikan nama
file sesuai keinginan kita, hanya saja saran ane adalah berikan awalan dengan “angka
urutan terakhir” setelah urutan pada
jumlah file pertama di folder 01. Tujuannya adalah supaya kita mudah mengingat kesesuaian
urutan file dengan bunyi suara.
Kemudian disini ane menyiapkan 1 folder bernama
“Tambahan” bukan folder urutan “03”, hal ini sengaja karena ane ga akan
memanggil file di dalam folder ini. Isinya adalah range Tinggi badan yang sudah
kita buat sebagai cadangan.

Udah
jelas kan semua? Kita lanjut ke pemrogramannya.
Pertama,
masukan library yang diperlukan.
#include <Wire.h>
#include <NewPing.h>
#include
<LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
#include
"DFRobotDFPlayerMini.h"
DFRobotDFPlayerMini
myDFPlayer;
// tetapkan pin komunikasi
soft serial untuk modul DFPlayer
SoftwareSerial
mySoftwareSerial(5,6); // RX, TX
LiquidCrystal_I2C
lcd(0x3F,16,2);
// set pin untuk sensor PING
const int pingPin = 3;
const int echoPin = 4;
NewPing sonar(3,4, 500);
int val2, tinggi, val =0;
int alert1, alert2;
int
mp3list[20]={5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24};
int rangeTinggi[20]={
141,142,143,144,145,
146,147,148,149,150,
151,152,153,154,155,
156,157,158,159,160};
void setup() {
lcd.begin();
Serial.begin(9600); mySoftwareSerial.begin(9600);
pinMode(echoPin, INPUT);
if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3.
Serial.println(F("Unable to begin.
Please recheck the connection / insert the SD card!"));
while(true){
delay(0); // Code to
compatible with ESP8266 watch dog.
}
}
Serial.println(F("DFPlayer Mini online."));
myDFPlayer.volume(25); //Set
volume value. From 0 to 30
Serial.println(" Kalibrasi batas tinggi
selama 2 detik ");
////////////////////////////////////////////////////
unsigned int uS = sonar.ping();
plus();
val2 = uS/ US_ROUNDTRIP_CM ;
Serial.print("Tinggi maks :");
Serial.print(val2);
Serial.println(" cm");
myDFPlayer.play(2);
lcd.setCursor(0,0);
lcd.print("Tinggi maks :");
lcd.setCursor(0,1);
lcd.print(val2); lcd.setCursor(7,1);
lcd.print("CM");
delay(2000);
lcd.clear();
//////////////////////////////////////////////////////
myDFPlayer.play(1);
delay(3000);
}
void loop() {
/////////////////// MENGUKUR TINGGI BADAN REALTIME ///////////////
unsigned int uS = sonar.ping();
tinggi = val2 - uS / US_ROUNDTRIP_CM;
Serial.print("Tinggi Anda: ");
Serial.print(tinggi);
Serial.println(" cm");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Tinggi anda :");
lcd.setCursor(0,1);
lcd.print(tinggi); lcd.setCursor(7,1);
lcd.print("CM");
int a;
while(a < 20){
if(tinggi == rangeTinggi[a]){
Serial.print("PlayVoice : ");
Serial.println(a);
myDFPlayer.play(mp3list[a]);
delay(5000);
alert1=1; alert2=1;
}
a++;
}
if(tinggi > rangeTinggi[19]){
if(alert1 == 1){
Serial.println("Anda
Ketinggian");
myDFPlayer.play(4); //ketinggian
delay(2000);
alert1++;
}
}
else if(tinggi < rangeTinggi[0]){
if(alert2 == 1){
Serial.println("Anda Kurang
tinggi");
myDFPlayer.play(3); //kurang tinggi
delay(2500);
alert2++;
}
}
delay(1000);
}
void plus(){
val = val + 1;
}
NOTE : Pengelompokkan file suara disimpan di
dalam Array “mp3list[]”. Contoh :
Misalkan,
kita dapatkan Variabel “a” dengan nilai “2”.
myDFPlayer.play(mp3list[a]);
1. Karena angka “2” yang didapat, berarti program berhasil mendapatkan tinggi aktual yang diukur sesuai dengan range yang kita buat pada Variabel Array “rangeTinggi[20]”, yakni angka “143”.
2. Angka “2” merujuk pada urutan Array “mp3list[20]”.
Berarti angka yang dipanggil adalah angka “7”, betul kan?
3. Nah, dengan angka “7” ini adalah format
urutan file yang disimpan di dalam SD Card dengan posisi ke-7 dari file
pertama, yaitu file “143.mp3”.
Yaps, selesai penjelasannya. Untuk program lebih
lengkapnya silahkan download pada link dibawah.



