Rahmawati
Pada kesempatan kali ini kita akan membuat sebuah robot yang dapat dikendalikan
dengan suara. Ketika pengguna memberikan instruksi arah gerak robot maka robot akan
bergerak sesuai dengan apa yang diinstruksikan.
RANCANG BANGUN VOICE CONTROLLED ROBOT
Pada kesempatan kali ini kita akan membuat sebuah robot yang dapat dikendalikan dengan suara. Ketika pengguna memberikan instruksi arah gerak robot maka robot akan bergerak sesuai dengan apa yang diinstruksikan.
Alat dan Bahan
Langkah Pengerjaan
1. Setelah semua bahan/komponen dan alat tersedia maka kita akan membuat wiring diagram robot tersebut. Wiring diagram merupakan suatu tahapan dimana membuat perencanaan perkabelan yang menghubungkan setiap komponen yang ada sehingga alur perkabelan efektif dan efisien. Kegiatan ini dilakukan sebelum tahap perakitan.
2. Setelah wiring diagram beres maka selanjutnya ialah melakukan perancangan robot berdasarkan wiring diagram yang telah dibuat.
3. Kemudian buat kode program mengenai robot tersebut. Robot ini akan dikendalikan oleh suara dengan transmitter berupa aplikasi transmitter Bluetooth yang dapat diunduh gratis di Google Play. Aplikasi tersebut akan mengubah instruksi kata yang diberikan, yang semula berbentuk string, menjadi bentuk integer. Data integer ini akan ditransmisikan dan diterima oleh modul Bluetooth HC-05 pada robot. Instuksi tersebut akan dikirim ke mikrokontroler sehingga mikrokontroler dapat membuat keputusan apakah robot akan bergerak maju, mundur, belok kanan/kiri, ataupun berhenti. Eksekusi pergerakan robot akan dilakukan oleh aktuator yaitu motor DC. Ketika robot mendeteksi rintangan baik di depan maupun di belakang maka robot secara otomatis akan langsung berhenti.
Source Code
#include <NewPing.h>
//Motor DC
#define enA 9
#define in1 4
#define in2 5
#define enB 10
#define in3 6
#define in4 7
int motorSpeedA = 0;
int motorSpeedB = 0;
int IR_PIN = 12;
int adaRintangan = LOW;
int trig = 2; // membuat varibel trig yang di set ke-pin 3
int echo = 3; // membuat variabel echo yang di set ke-pin 2
long durasi, jarak; // membuat variabel durasi dan jarak
char voice;
//ultrasonic
//#define TRIGGER_PIN 2
//#define ECHO_PIN 3
//#define MAX_DISTANCE 300
//#define IR_PIN 12
//#define MAX_JARAK 300
//NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
//NewPing IR (IR_PIN, MAX_JARAK);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(trig, OUTPUT); // set pin trig menjadi OUTPUT
pinMode(echo, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
// int jarak = sonar.ping_cm();
//int jarakIR = IR.ping_cm();
// program dibawah ini agar trigger memancarakan suara ultrasonic
digitalWrite(trig, LOW);
delayMicroseconds(8);
digitalWrite(trig, HIGH);
delayMicroseconds(8);
digitalWrite(trig, LOW);
delayMicroseconds(8);
durasi = pulseIn(echo, HIGH); // menerima suara ultrasonic
jarak = (durasi / 2) / 29.1; // mengubah durasi menjadi jarak (cm)
Serial.println(jarak);
if(Serial.available()>0) {
voice = Serial.read();
Serial.print(voice); //Pembacaan dan ditampilkan data yang masuk
Serial.print("\n");
Serial.print(jarak);
}
if(voice == '1') {
forward();
} else if (voice == '2'){
right();
delay(500);
voice = '0';
} else if (voice == '3'){
left();
delay(500);
voice = '0';
} else if(voice == '4') {
backward();
} else if(voice == '0'){
berhenti();
}
// digitalWrite(motor1pin1, HIGH);
// digitalWrite(motor1pin2, LOW);
//
// digitalWrite(motor2pin1, HIGH);
// digitalWrite(motor2pin2, LOW);
// delay(1000);
// digitalWrite(motor1pin1, LOW);
// digitalWrite(motor1pin2, HIGH);
//
// digitalWrite(motor2pin1, LOW);
// digitalWrite(motor2pin2, HIGH);
// delay(1000);
}
void forward(){
// int jarak = sonar.ping_cm();
if(jarak < 20){
berhenti();
} else {
motorSpeedA = 100;
motorSpeedB = 100;
analogWrite(enA, motorSpeedA);
analogWrite(enB, motorSpeedB);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
}
}
void backward(){
//int jarakIR = IR.ping_cm();
if(adaRintangan == HIGH){
berhenti();
} else {
motorSpeedA = 100;
motorSpeedB = 100;
analogWrite(enA, motorSpeedA);
analogWrite(enB, motorSpeedB);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
}
}
void berhenti(){
motorSpeedA = 0;
motorSpeedB = 0;
analogWrite(enA, motorSpeedA);
analogWrite(enB, motorSpeedB);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void right(){
motorSpeedA = 150;
motorSpeedB = 150;
analogWrite(enA, motorSpeedA);
analogWrite(enB, motorSpeedB);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
// delay(500);
// berhenti();
}
void left(){
motorSpeedA = 150;
motorSpeedB = 150;
analogWrite(enA, motorSpeedA);
analogWrite(enB, motorSpeedB);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// delay(1500);
// berhenti();
}
4. Terakhir ialah pengujian dan evaluasi