RANCANG BANGUN VOICE CONTROLLED ROBOT

Rahmawati

Sosial Media


0 orang menyukai ini
Suka

Summary

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. 

Description

 

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

  1. Mikrokontroler Arduino Uno (1 buah)
  2. Breadboard
  3. Kabel jumper male to male/female to female/male to female
  4. Motor driver L298N (1 buah), berfungsi sebagai driver dari motor DC
  5. Motor DC (4 buah), berfungsi sebagai aktuator robot
  6. Modul Bluetooth HC-05 (1 buah), berfungsi sebagai media receiver instruksi dari penggguna
  7. Sensor ultrasonic HC-SR04 (1 buah), berfungsi untuk mendeteksi halangan di depan robot sehingga ketika arah gerak robot terdapat halangan maka robot akan langsung berhenti.
  8. Sensor infrared FC-51 (1 buah), berfungsi mendeteksi halangan di belakang robot sehingga ketika arah gerak robot terdapat halangan maka robot akan langsung berhenti.
  9. Baterai 18650 (3 buah) berfungsi sebagai suplai daya ketika robot beroperasi.
  10. Obeng
  11. Solder

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

Informasi Course Terkait
  Kategori: Internet of Things / FPGA
  Course: Robotic: Mikrokontroller