PERANCANGAN
Pada bab ini menjalaskan perancangan dari robot Delvin, mulai dari tahap alur kerja sistem pada robot Delvin, perancangan alat dan sistem kendali, pada sistem pengolahan ouput pada robot Delvin, robot Delvin akan bergerak sesuai dengan keinginan pemakai.
4.1 Diagram Keseluruhan Alat Kendali
Gambar 4.1 Merupakan rancangan awal dari proses-proses untuk menghasilkan gerak yang sesuai dengan perintah.
Gambar 4.2 Diagram Keseluruhan Alat Kendali
Pada alur robot terlihat bahwa sistem kendali robot Delvin ini mempunyai 4 Motor DC sebagai penggerak pada roda. Secara umum , cara kerja sistem robot Delvin ini sebagai berikut :
Android
(mendeteksi perintah ) Arduino Uno (menerima Perintah)
Motor DC 1 kanan (Roda 1 bergerak)
Motor DC 2 kanan
(Roda 1 bergerak) Motor DC 2 kiri
(Roda 1 bergerak) Motor Shield
(dapat Perintah )
Motor DC 1 kiri (Roda 1 bergerak)
Motor Servo Motor Servo
▸ Baca selengkapnya: perintah g01 adalah perintah yang berarti
(2)2. Kemudian Android dapat perintah suara dari pengguna, kemudian android mendeksi suara lalu mengirim perintah itu pada Arduino Uno.
3. Setelah itu, Arduino Uno menerima perintah. Apabila perintah sesuai maka program yang terdapat pada arduino, akan dilanjutkan dengan memberikan perintah terhadap Motor DC atau Motor Servo untuk menggerakkan Motor DC atau Motor Servo tersebut.
4. Motor DC yang terhubung pada roda akan bergerak dengan sesuai perintah atau Motor Servo yang terhubung pada Pintu .
4.2 Flowchart
Gambar 4.2 Flowchart Robot Delvin
Gambar Flowchart 4.2, merupakan rangkaian proses dari masukan suara dari android sampai dengan pergerakkan Motor DC. Mulai dari input suara ke android lalu android mengirim ke arduino, arduino akan menggerakkan Motor DC sesuai perintah yang diberikan.
4.2.1 Perancangan Diagram Suara
Perintah suara yang akan dideteksi oleh Android , kemudian perintah yang telah didekstesi akan dikirim ke Arduino Uno .
Gambar 4.3 Proses Diagram Input Suara Gambar 4.3 Proses Diagram Input Suara
Gambar 4.3 bisa dilihat proses penginputan suara yang didektesi oleh android.
4.2.1 Perancangan Diagram Pengolahan Suara
Terdapat 5 perintah suara yang berbeda yaitu maju, mundur , belok kanan , belok kiri, stop .Perintah ini akan didektesi oleh android, dan dikirimkan Arduino Uno untuk diproses. Gambar 4.4 merupakan gambaran proses pengolahan suara.
Gambar 4.4 Perancangan Proses Diagram Pengolahan Suara
Gambar 4.3 adalah perancangan proses yang dimulai dari inputan suara yang
Menginput Suara Android mendeteksi
Suara
Motor DC mendapatkan perintah Pergerakkan
sesuai Program Arduino Uno
menerima lalu melanjutkan perintah
suara Android
Mengirim perintah
suara
4.1.1 Perancangan Diagram Proses Output pada Gerak Roda
Gambar 4.5 Perancangan Diagram Proses Output pada Gerak Roda
Gambar 4.5 Perancangan Diagram Proses Output pada Gerak Roda
Pada gambar 4.5 diatas menjelaskan bagaim Proses kerja Output dari Motor Shield sampai ke pada Roda agar dapat bergerak sesuai dengan perintah pemakai. Saat Motor Shield mendapatkan perintah dari Arduino , maka Motor shield akan menggerakkan roda, contohnya seperti Maju, maka semua roda akan berputar kedepan dengan sesuai perintah yang telah didapatkan oleh Arduino Uno.
4.3 Perancangan Hardware
Berikut bagian-bagian yang ada dalam robot Delvin mulai dari sistem kendali gerak pada robot Delvin .dalam perancangan hardware ini , penulis menggunakan port- port tersebut antara lain pin GND, pin 5 volt, pin 13,14 dan pin motor shield.
4.3.1 Rancangan Sistem Kendali Motor DC dengan Arduino Uno
Sistem kendali pada Motor DC dengan komponen elektronik lainnya menggunakan Arduino Uno yang berbasis Atmega 328P, sebagai pusat kontrol pada setiap komponen Robot Delvin yang ada pada Robot Delvin. Karena port yang ada diAtmega 328P sudah dapat memenuhi port yang dibutuhkan untuk Robot Delvin yang dibantu dengan Motor Shield sebagai port untuk Motor DC.pada gambar 4.6 merupakan Rangkaian komponen yang terdapat pada robot Delvin.
Motor Shield
Motor DC Kiri Motor DC kanan
1
Roda Karet kiri 1 Roda Karet kiri 1
Roda Karet Kiri 2 Roda Karet Kiri 2 Motor DC Kiri 2
Roda Karet kiri 1
Gambar 4.6 Rangkaian Motor DC pada Arduino
4.4 Rangkaian Tata Letak pada Robot Delvin
Rangakaian Tata Letak komponen-kompenen Hardware yang ada pada robot Delvin tersebut sangan berperan penting untuk membuat robot Delvin dapat bekerja dengan baik maka itu dalam rangkaian.
Pada gambar 4.7 dibawah merupakan tata letak Rangkaian Alat yang terdapat
pada robot Delvin, dan dibawah juga terdapat letak Motor DC dan Motor Servo ,box
dan roda pada robot Delvin.
Gambar 4.7 Rangkaian Tata Letak Komponen pada Robot Delvin
Pada gambar 4.7 , terlihat jelas komponen-komponen yang ada dalam robot Delvin, mulai dari Motor DC yang terletak dibawah, dan diatasnya terdapat arduino, fungsi motor dc dekat dengan arduino , agar dapat dipasang dengan mudah ke arduino tersebut. Dan sebelahnya Arduino Uno juga terdapat Module Bluetooth yang berfungsi sebagai penyambung antara Arduino Uno dan Android, dan letak pada servo tersebut berguna sebagai pengerak dari pengerak pada pintu yang ada dibox.
4.5 Algoritma Gerak Roda pada Robot Delvin
robot Delvin ini menggunakan 4 Motor DC sebagai pergerakkan motor, pergerakkan yang dapat dilakukan maju, mundur, belok kiri, belok kanan sesuai perintah yang diberikan Android ke Arduino.Pada tabel 4.5 dibawah ini menjelakan bagaimana cara robot Delvin bergerak.
Tabel 4.1 Algoritma Gerak Roda pada Robot Delvin Arah Gerak Robot Delvin
Roda Robot Roda Kiri 1 Roda Kiri 2 Roda kanan 2 Roda kanan 2
Maju Depan Depan Depan Depan
Mundur Belakang Belakang Belakang Belakang
Belok Kanan Depan Depan Belakang Belakang
Belok Kiri Belakang Belakang Depan Depan
Jika voice deteksi Maju if(voice == "maju"){
Mobil_Maju();
}
Maka akan memanggil Mobil_Maju void Mobil_Mundur()
{
motor1.run(FORWARD);
motor1.setSpeed(170);
motor2.run(FORWARD);
motor2.setSpeed(170);
motor3.run(FORWARD);
motor3.setSpeed(170);
motor4.run(FORWARD);
motor4.setSpeed(170);
}
4.6 Pengaturan Arah Gerak Roda Kiri dan Roda Kanan
4.6.1 Maju
Gerak Maju akan dilakukan pada robot Delvin ketika menerima perintah dari Android melalui deteksi suara Maju. Semua roda mulai dari Roda Kiri 1, 2, dan Roda Kanan 1, 2 akan bergerak Maju bersamaan. Berikut potongan kode program Delvin maju pada robot Delvin .
4.6.2 Mundur
Gerak Mundur akan dilakukan pada robot Delvin ketika menerima perintah
dari Android melalui deteksi suara Maju. Semua roda mulai dari Roda Kiri 1, 2, dan
Roda Kanan 1, 2 akan bergerak mundur bersamaan. Berikut potongan kode program
Delvin mundur pada robot Delvin .
Jika Voice terdekteksi Mundur else if(voice == "mundur"){
Mobil_Mundur();
}
Maka akan Memanggil Mobil_Mundur void Mobil_Mundur()
{
motor1.run(BACKWARD);
motor1.setSpeed(170);
motor2.run(BACKWARD);
motor2.setSpeed(170);
motor3.run(BACKWARD);
motor3.setSpeed(170);
motor4.run(BACKWARD);
motor4.setSpeed(170);
}
4.6.3 Belok Kanan
Gerak belok kanan akan dilakukan pada robot Delvin ketika menerima perintah
dari Android melalui deteksi suara belok kanan. Semua roda mulai dari Roda Kiri 1, 2
akan bergerak maju, dan Roda Kanan 1, 2 akan bergerak mundur. Berikut potongan
kode program Delvin belok kanan pada robot Delvin .
4.6.4 Belok Kiri
Gerak belok kiri akan dilakukan pada robot Delvin ketika menerima perintah dari Android melalui deteksi suara belok kiri. Semua roda mulai dari Roda Kiri 1, 2 akan bergerak mundur, dan Roda Kanan 1, 2 akan bergerak maju. Berikut potongan kode program Delvin belok kiri pada robot Delvin .
Jika Voice terdekteksi Belok Kanan else if(voice == "Belok kanan") { Mobil_Belok_Kanan();
}
Maka akan Memanggil Mobil Belok kanan void Mobil_Belok_Kanan()
{
motor1.run(FORWARD);
motor1.setSpeed(170);
motor2.run(FORWARD);
motor2.setSpeed(170);
motor3.run(BACKWARD);
motor3.setSpeed(170);
motor4.run(BACKWARD);
motor4.setSpeed(170);
delay(2000);
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
Jika Voice terdekteksi Belok Kiri else if(voice == "kiri") {
Mobil_Belok_kiri();
}
Maka akan Memanggil Mobil Belok kanan void Mobil_Belok_kiri()
{
myServo.write(0);
delay(1000);
myServo.write(90);
delay(1000);
motor1.run(BACKWARD);
motor1.setSpeed(170);
motor2.run(BACKWARD);
motor2.setSpeed(170);
motor3.run(FORWARD);
motor3.setSpeed(170);
motor4.run(FORWARD);
motor4.setSpeed(170);
delay(2000);
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
4.6.5 Berhenti
Gerak berhenti akan dilakukan pada robot Delvin ketika menerima perintah dari
Android melalui deteksi suara berhenti. Semua roda mulai dari Roda Kiri 1, 2, dan Roda
Kanan 1, 2 akan bergerak berhenti bersamaan. Berikut potongan kode program Delvin
maju pada robot Delvin .
else if(voice == "berhenti") { Mobil_Berhenti();
}
Maka akan Memanggil Mobil Berhenti void stop_car ()
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
Jika Voice terdeteksi Buka else if(voice == "buka") { Mobil_Buka();
}
void Mobil_Buka() {
myServo2.write(0);
myServo1.write(0);
}
4.6.6 Buka
Buka yang dilakukan pada robot Delvin , itu berfungsi untuk membuka tempat penyimpanan pada robot Delvin. Berfungsi jika Android mendeteksi suara buka, maka 2 motor servo akan bergerak dari 90 menjadi 0 derajat.
4.6.7 Tutup
else if(voice == "tutup") { Mobil_Buka();
}
void Mobil_Tutup() {
myServo2.write(90);
myServo1.write(90);
}
4.7 Perancangan Perangkat Lunak
Dalam proses perangkaian yang telah buat, langkah selanjutnya adalah membuat perangkat lunak, ini berguna untuk mengatur gerak yang akan dilakukan Motor DC agar dapat menggerakkan Robot Delvin, dapat bergerak maju, mundur, belok kanan, dan belok kiri.
4.7.1 Perancangan Software Arduino IDE
Untuk menyelesaikan robot Delvin yang telah dibuat sesuai dengan kebutuhan maka perlu dibuat program yang akan dimasukkan ke Arduino Uno. Berikut ini fungsi bahasa programan yang digunakan dalalm permbuatan progaram diatas :
Void Setup : ini digunakan untuk mendifiniskan pin dan serial yang akan digunakan pada Robot Delvin.
Void loop : ini merupakan fungsi pengulangan yang terjadi pada menu Setup.
Serial Begin(9600) : ini merupakan fungsi untuk menentukan kecepatan Transmisi Data untuk Arduino Uno.
Setelah membuat program di Arduino IDE maka selanjutnya untuk melihat
apakah program tersebut terjadi ada error atau tidaknya , dilakukan kompilasi. jika
tidak terjadi error , maka dapat dimasukkan ke Arduino Uno. Pada gambar 4.9
merupakan contoh program arduino yang telah dikompilasi.
Gambar 4.8 Contoh Compile berhasil di Arduino Uno
Gambar 4.8 merupakan contoh dari kode program yang berhasil dicompile oleh Arduino Uno.
4.8.1 Perancangan Sistem Android
Dalam merancang sistem perangkat lunak mobile digunakan use case diagram,
activity diagram dan sequence diagram untuk memodelkan rancangan sistem.
4.8.1.1 Use Case Diagram
Gambar 4.9 Use Case Diagram Rancangan perangkat lunak
Gambar 5.0 dijelaskan seorang aktor yang memulai voice recognition untuk mengirim perintah kepada sistem arduino.
Tabel 4.2 Use Case Diagram Voice Recognition
Nama Use Case Use Case Diagram Voice Recognition
Aktor User
Deskripsi Singkat User menigirim perintah kepada sistem arduino uno
melewati voice recognition
4.8.1.2 Activity Diagram
Gambar 4.10 Activity Diagram pergerakan maju
Pada gambar diatas dijelaskan user mengirimkan perintah maju dengan voice
recognition, lalu arduino menerima perintah, dan melakukan pergerakan maju.
Gambar 4.11 Activity Diagram pergerakan mundur
Pada gambar diatas dijelaskan kegiatan user mengirimkan perintah mundur
dengan voice recognition, lalu arduino melakukan pergerakan mundur.
Gambar 4.12 Activity Diagram pergerakan belok kanan
Pada gambar diatas dijelaskan kegiatan user mengirimkan perintah belok kanan dengan voice recognition, lalu arduino melakukan pergerakan belok kanan.
Gambar 4.13 Activity Diagram pergerakan belok kiri
Pada gambar diatas dijelaskan kegiatan user mengirimkan perintah belok kiri
dengan voice recognition, lalu arduino melakukan perintah belok kiri.
Gambar 4.14 Activity Diagram pergerakan menutup
Pada gambar diatas dijelaskan kegiatan user mengirimkan perintah menutup
dengan voice recognition, lalu arduino melakukan menutup pintu box.
Gambar 4.15 Activity Diagram pergerakan buka
Pada gambar diatas dijelaskan kegiatan user mengirimkan perintah buka dengan voice recognition, lalu arduino melakukan pembukaan pintu box.
4.9 Algoritma Speech Recognition pada aplikasi android
Algoritma yang akan digunakan dalam aplikasi ini adalah algoritma FFT (Fast Fourier Transform), merupakan salah satu metode untuk transformasi sinyal suara menjadi sinyal frekuensi.
Gambar 4.11 Skema Speech Recognition
Gambar diatas adalah skema dari voice recognition yang dimulai dari Speech signal yang masuk ke tahapan Feature Extractor lalu sampai akhirnya menjadi sebuah text yang dapat dibaca.
4.10 Pengaturan aplikasi pada android
4.10.1 Pengaturan Bluetooth
Pada kode bluetooth, untuk penyambungan khusus hanya pada arduino HC-05 maka memiliki kode unik yaitu UUID yaitu kode unik pada setiap perangkat bluetooth
.Kode diatas adalah UUID khusus untuk HC – 05, dan pendeklarasian variabel bluetooth, seperti :
String address diberi dengan nilai null
Mybluetooth sebagai bluetooth adapter diberi nilai awal null
isBtCOnnected sebagai boolean diberi nilai false
myUUID di alamatkan khusus untuk bluetooth module board
String address = null;
private ProgressDialog progress;
BluetoothAdapter myBluetooth = null;
private boolean isBtConnected = false;
final UUID myUUID = UUID.fromString("00001101-0000-1000-8000- 00805F9B34FB");//koneksi kode unik untuk bluetooth hc-05 private boolean ConnectSuccess = true; //jika konesi berhasil ConnectBT(String address) {
this.address = address;
}
potongan kode diatas adalah dialog proses penyambungan dan pengecekan perangkat bluetooth
4.10.2 Pengaturan voice recognition
Pada bagian ini berfungsi untuk mendapatkan suara dari pengguna lalu mengirim suara tersebut ke arduino dalam bentuk string
@Override
protected void onPreExecute() {
progress = ProgressDialog.show(VoiceRecognitionActivity.this,
"Menyambungkan...", "Tunggu Sebentar"); //memperlihatkan proses menyambungkan
}
@Override
protected Void doInBackground(Void... devices) { //ketika proses dialog connecting memulai, maka dialog ini melakukan pekerjaan nya di belakang layar
try {
if (btSocket == null || !isBtConnected) { myBluetooth =
BluetoothAdapter.getDefaultAdapter();//mendapatkan perangkat bluetooth btDevice =
myBluetooth.getRemoteDevice(address);//menyambungkan ke perangkat dan mengecek alamat jika masih ada
btSocket =
btDevice.createInsecureRfcommSocketToServiceRecord(myUUID);//cmembuat sebuah RFCOMM (SPP) connection
BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
btSocket.connect();//memulai penyambungan }
}
catch (IOException e) {
ConnectSuccess = false; //jika try telah gagal, kita bisa cek IOExeption disini
}
return null;
}
@Override
protected void onPostExecute(Void result) { //setelah doinbackground maka di cek lagi disni
super.onPostExecute(result);
if (!ConnectSuccess) {
Toast.makeText(VoiceRecognitionActivity.this, "Harus Menghubungkan Ke Robot.", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(VoiceRecognitionActivity.this, "Terhubung", Toast.LENGTH_SHORT).show();
isBtConnected = true;
}
progress.dismiss();
}
Pendeklarasian variabel speech input dan layout pada android xml
Memulai voice recognition untuk mendapatkan perintah yang akan dikirim ke arduino
private static final int REQ_CODE_SPEECH_INPUT = 100;
private static final int REQ_BLUETOOTH_ADDRESS = 766;
private TextView mVoiceInputTv;
private ImageButton mSpeakBtn;
private ImageButton mBtBtn;
private BluetoothDevice btDevice;
private BluetoothSocket btSocket ;
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_voice);
mVoiceInputTv = (TextView) findViewById(R.id.voiceInput);
mSpeakBtn = (ImageButton) findViewById(R.id.btnSpeak);
mBtBtn = (ImageButton) findViewById(R.id.btnBt);
mSpeakBtn.setOnClickListener(this);
mBtBtn.setOnClickListener(this);
}
private void startVoiceInput() { Intent intent = new
Intent(RecognitionrIntent.ACTION_RECOGNITION_SPEECH);
intent.putExtra(RecognitionrIntent.EXTRA_LANGUAGE_MODEL, RecognitionrIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognitionrIntent.EXTRA_LANGUAGE, Locale.getDefault());
intent.putExtra(RecognitionrIntent.EXTRA_PROMPT, "Katakan Sesuatu");
try {
startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);
} catch (ActivityNotFoundException a) {
Toast.makeText(this, "Tidak bisa memulai voice recognition.", Toast.LENGTH_SHORT).show();
} }
private void connectBluetooth() {
startActivityForResult(new Intent(this,
BluetoothActivity.class), REQ_BLUETOOTH_ADDRESS);
}
Memulai mendapatkan suara dan mengirimnya dalam bentuk string kedalam variabel mVoiceInputTv , jika pengiriman atau perintah gagal maka akan keluar dialog perintah
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQ_CODE_SPEECH_INPUT:
if (resultCode == RESULT_OK && null != data) { ArrayList<String> result =
data.getStringArrayListExtra(RecognitionrIntent.EXTRA_RESULTS);
String msg = result.get(0);
mVoiceInputTv.setText(msg);
try {
OutputStream mmOutputStream = btSocket.getOutputStream();
mmOutputStream.write(msg.getBytes());
Toast.makeText(this, "Terhubung ke robot.", Toast.LENGTH_SHORT).show();
} catch (NullPointerException e) {
Toast.makeText(this, "Perintah gagal, silahkan sambungkan ke robot.", Toast.LENGTH_SHORT).show();
} catch (IOException e) { e.printStackTrace();
} } break;
case REQ_BLUETOOTH_ADDRESS:
if (resultCode == RESULT_OK && data != null) { String name = data.getStringExtra("btName");
String address = data.getStringExtra("btAddress");
Toast.makeText(this, name + "\n" + address, Toast.LENGTH_SHORT).show();
new ConnectBT(address).execute();
} break;
} }
@Override
public void onClick(View v) { switch (v.getId()) { case R.id.btnSpeak:
startVoiceInput();
break;
case R.id.btnBt:
connectBluetooth();
break;
} }