Sezgin Gül
Published © GPL3+

Talking Robot Based on Arduino

Add an audio breakout to a robot to make it talk.

AdvancedShowcase (no instructions)2 hours3,727
Talking Robot Based on Arduino

Things used in this project

Hardware components

Arduino Mega 2560
Arduino Mega 2560
×1
SparkFun Bluetooth Modem - BlueSMiRF Silver
SparkFun Bluetooth Modem - BlueSMiRF Silver
×1
Dual H-Bridge motor drivers L293D
Texas Instruments Dual H-Bridge motor drivers L293D
×1
Ultrasonic Sensor - HC-SR04 (Generic)
Ultrasonic Sensor - HC-SR04 (Generic)
×1
SparkFun Audio-Sound Breakout - WTV020SD
SparkFun Audio-Sound Breakout - WTV020SD
×1
RobotGeek 180 Degree Robot Servo
RobotGeek 180 Degree Robot Servo
×1
AA Batteries
AA Batteries
×1
MicroSD Card (Generic)
×1
speaker: 0.5 W, 8 Ohm
×1

Software apps and online services

BT Voice Control for Arduino

Hand tools and fabrication machines

robot kit

Story

Read more

Schematics

Xk5BDZMqdvfu66ahSXfJ.png

Code

Code snippet #1

C/C++
// Arduino Artificial Intelligence Based Talking Robot By Robimek
//Software developer By Sezgin Gül
//www.robimek.com
#include <Servo.h>
#include <NewPing.h>
#include <Wtv020sd16p.h>
int resetPin = 13; 
int clockPin = 11;
int dataPin = 12; 
int busyPin = 10; 
Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin);
String voice;
//motor pinleri
#define SolMotorileri 6
#define SolMotorGeri 5
#define SagMotorileri 8
#define SagMotorGeri 9
#define led 53
#define ledmavi 51
#define ledyesil 49
#define ledkirmizi 45
#define ledvcc 47
#define tx 1
#define rx 0
//sensör pinleri
#define USTrigger 3
#define USEcho 2
#define Maksimum_uzaklik 100
 
 
Servo servo; //servo motor tanımlama
NewPing sonar(USTrigger, USEcho, Maksimum_uzaklik);//ultrasonik sensör tanımlama
//kullanılacak eleman tanımı
unsigned int uzaklik;
unsigned int on_uzaklik;
unsigned int sol_uzaklik;
unsigned int sag_uzaklik;
unsigned int zaman;
// program ilk çalıştığında sadece bir kez çalışacak programlar
void setup() 
{
Serial.begin(9600); //iletişim ayarı
//motor çıkışları
 pinMode(SolMotorileri, OUTPUT);
 pinMode(SolMotorGeri, OUTPUT);
 pinMode(SagMotorileri, OUTPUT);
 pinMode(SagMotorGeri, OUTPUT);
 pinMode(led, OUTPUT);
 pinMode(ledkirmizi, OUTPUT);
 pinMode(ledmavi, OUTPUT);
 pinMode(ledyesil, OUTPUT);
 pinMode(ledvcc, OUTPUT);
 
 servo.attach(4); //servo pin tanımı 
 wtv020sd16p.reset();
 wtv020sd16p.playVoice(0);
 wtv020sd16p.playVoice(13);
 delay(10000);
 wtv020sd16p.playVoice(14); 
 
 
}
// sonsuz döngü
void loop() {
 
 while (Serial.available()){ //Okumak için kullanılabilir bayt olup olmadığını kontrol et
 delay(10); //10 milisaniye bekle
 char c = Serial.read(); //Seri okuma
 if (c == '#') {break;} // # tespit edildiğinde döngüden çık
 voice += c; //Ses = ses + c Steno 
 }
 
 if (voice.length() > 0) {
 Serial.println(voice); 
 
 if(voice == "*ileri"||voice == "*ileri git") 
 {wtv020sd16p.playVoice(3);
 ileri();} 
 else if(voice == "*geri"||voice == "*geri gel")
 {wtv020sd16p.playVoice(2);
 geri();}
 else if(voice == "*sağa dön"||voice == "*sağ") 
 {wtv020sd16p.playVoice(7);
 sag();} 
 else if(voice == "*sola dön"||voice == "*sol") 
 {wtv020sd16p.playVoice(1);
 sol();}
 else if(voice == "*dur"||voice == "*arabayı durdur") 
 {dur();
 wtv020sd16p.playVoice(11);}
 else if(voice == "*sol ileri")
 {sol(); 
 delay(100); 
 ileri();}
 else if(voice == "*sağ ileri")
 {sag(); 
 delay(100); 
 ileri();}
 else if(voice == "*sol geri")
 {sol(); 
 delay(100);
 geri();}
 else if(voice == "*sag geri")
 {sag(); 
 delay(100); 
 geri();}
 else if(voice == "*ileri git dur"||voice == "*biraz ileri git") 
 {ileri(); 
 delay(1000); 
 dur();} 
 else if(voice == "*geri gel dur"||voice == "*biraz geri gel") 
 {geri();
 delay(1000); 
 dur();}
 else if(voice == "*sola dön dur"||voice == "*biraz sola dön") 
 {sol(); 
 delay(300);
 dur();}
 else if(voice == "*sağa dön dur"||voice == "*biraz sağa dön") 
 {sag();
 delay(300);
 dur();}
 else if(voice == "*sola bak"||voice == "*soluna bak") 
 {wtv020sd16p.playVoice(8);
 solabak();}
 else if(voice == "*sağa bak"||voice == "*sağına bak"||voice == "*sabah") 
 {wtv020sd16p.playVoice(6);
 sagabak();}
 else if(voice == "*önüne bak"||voice == "*öne bak") 
 {wtv020sd16p.playVoice(5);
 onunebak();}
 else if(voice == "*ışığı aç"||voice == "*ledi yak")
 {wtv020sd16p.playVoice(4);
 ledyak();}
 else if(voice == "*ışığı kapat"||voice == "*ledi söndür") 
 {digitalWrite(51,HIGH);
 digitalWrite(49,HIGH); 
 digitalWrite(45,HIGH); 
 digitalWrite(47,LOW);}
 else if(voice == "*kırmızı") 
 {digitalWrite(45,LOW);
 digitalWrite(49,HIGH);
 digitalWrite(51,HIGH);
 digitalWrite(47,HIGH);}
 else if(voice == "*yeşil") 
 {digitalWrite(49,LOW);
 digitalWrite(45,HIGH);
 digitalWrite(51,HIGH);
 digitalWrite(47,HIGH); }
 else if(voice == "*mavi")
 {wtv020sd16p.playVoice(4);
 digitalWrite(51,LOW);
 digitalWrite(49,HIGH);
 digitalWrite(45,HIGH);
 digitalWrite(47,HIGH);}
 else if(voice == "*mor") 
 {digitalWrite(51,LOW); 
 digitalWrite(49,HIGH); 
 digitalWrite(45,LOW);
 digitalWrite(47,HIGH);}
 else if(voice == "*beyaz") 
 {digitalWrite(51,LOW); 
 digitalWrite(49,LOW); 
 digitalWrite(45,LOW);
 digitalWrite(47,HIGH);}
 else if(voice == "*engel"||voice == "*engel algıla")
 {wtv020sd16p.playVoice(0);
 engel();
 delay(5000);
 dur();}
 else if(voice == "*merhaba")
 { wtv020sd16p.playVoice(9);}
 else if((voice == "*müziği kapat")||(voice == "*kapat"))
 { wtv020sd16p.reset();
 wtv020sd16p.stopVoice();} 
 else if((voice == "*müziği aç")||(voice == "*şarkı söyle")||(voice == "*muzik"))
 { wtv020sd16p.playVoice(12);} 
 voice="";
 }
 }
 
 
// robotun yön komutları
void ileri() 
{
 digitalWrite(SolMotorGeri, LOW);
 digitalWrite(SolMotorileri, HIGH);
 digitalWrite(SagMotorGeri, LOW);
 digitalWrite(SagMotorileri, HIGH);
}
 
void geri() 
{
 digitalWrite(SolMotorileri, LOW);
 digitalWrite(SolMotorGeri, HIGH);
 digitalWrite(SagMotorileri, LOW);
 digitalWrite(SagMotorGeri, HIGH);
}
 
void sag() 
{
 digitalWrite(SolMotorileri, HIGH);
 digitalWrite(SolMotorGeri, LOW);
 digitalWrite(SagMotorGeri, HIGH);
 digitalWrite(SagMotorileri, LOW);
 }
 
void sol() 
{
 digitalWrite(SolMotorGeri, HIGH);
 digitalWrite(SolMotorileri, LOW);
 digitalWrite(SagMotorileri, HIGH);
 digitalWrite(SagMotorGeri, LOW);
}
 
void dur() 
{
 digitalWrite(SolMotorGeri, LOW);
 digitalWrite(SolMotorileri, LOW);
 digitalWrite(SagMotorileri, LOW);
 digitalWrite(SagMotorGeri, LOW);
}
void sagabak()
{
 servo.write(0);
 delay(100);
}
void solabak()
{
 servo.write(180);
 delay(100);
}
void onunebak()
{
 servo.write(90);
 delay(100);
}
void ledyak()
{
 digitalWrite(53,HIGH);
 }
void ledkapat()
{
 digitalWrite(53,LOW);
 }
// sensörün mesafe ölçümü
void sensor_olcum() 
{
 delay(50); 
 zaman = sonar.ping(); 
 uzaklik = zaman / US_ROUNDTRIP_CM;
}
void engel()
{
 delay(500);
 servo.write(90); 
 sensor_olcum(); 
 on_uzaklik = uzaklik; 
 if(on_uzaklik > 35 || on_uzaklik == 0) 
 {
 ileri(); 
 } 
 else
 {
 dur(); 
 servo.write(180); 
 delay(500); 
 sensor_olcum(); 
 sol_uzaklik = uzaklik; 
 servo.write(0); 
 delay(500); 
 sensor_olcum(); 
 sag_uzaklik = uzaklik;
 servo.write(90);
 delay(500); 
 if(sag_uzaklik < sol_uzaklik) 
 {
 sol(); 
 delay(500);
 ileri(); 
 }
 else if(sol_uzaklik < sag_uzaklik) 
 {
 sag(); 
 delay(500);
 ileri(); 
 }
 else
 {
 geri(); 
 } 
 }
 }

Credits

Sezgin Gül

Sezgin Gül

3 projects • 3 followers
Mechanical Engineer, Robimek - Founder

Comments