Arduino
OKUDUĞUNUZ KONU
Arduino Ses Kontrollü Robot Yapımı
62

Arduino Ses Kontrollü Robot Yapımı

Yazar : Sezgin Gül27 Haziran 2015
Projeyi Satın Al
Bu projeyi kurulu çalışır halde yada isterseniz demonte halde satın alabilirsiniz.Proje ile birlikle yapım aşaması resimleri bağlantı şemaları ve kodları açık kaynak olarak gönderilir. "Satın Almak İçin Yukarıda Butona Basınız"

Ses kontrollü robot uzun yıllardır üzerinde çalışan yapay zeka sistemlerinin başında yer almaktadır.Robot aldığı sesli komutları işleyerek yerine getirmektedir.Bu projemizde robotumuz söylenen komutlara göre hareket etmesi amaçlanmıştır.Andoid telefondaki sesi yazıya dönüştürme uygulaması ile söylediğimiz komutu yazıya çevirir.Yazıya çevrilen komut bluetooth üzerinden arduinoya aktarılır.Burada işlenerek algoritmada karşılığı olan fonksiyon gerçekleşerek robotun hareketi sağlanır.

Malzemeler:

  1. Arduino mega
  2. Robot kit veya rc oyuncak araba şasesi
  3. Hc-06 bluetooth modül
  4. led
  5. L293B motor sürücü
  6. Lipo pil
  7. Kontrol için android uygulaması
  8. Hcsr-04 ultrasonik sensör

Arduino Kodları

Bağlantı şeması aşağıdaki gibidir , motor sürücü bağlantılarını ister breadboard üzerine istersenizde özel pcb kart yapın onun üstüne entegre edin pcb kart yaparsanız daha profesyönel durur.Projede arduino mega kullanılmış mega kullanmanıza gerek yok aslında elinizde UNO varsa oda olur.Boşuna yeni bir arduino almanıza gerek yok.

Bütün bağlantı şemasını yaptıktan sonra sıra robotumuzu çalıştırmaya geliyor.50- 60 tl ye bir robot kiti alın ve bu kit üzerinde çalışma denemesi yapın.Andorid telefonunuza yüklediğiniz program ile google ses tanımlama sihirbazı kullanarak ses algılaması yapmaktadır.Bu yüzden telefonunuzun internet erişimine açık olması gerekmektedir.

Bazı hazırladığımız komutları tam olarak algılamakta güçlük çekiyor bu yüzden benzer kelimelerden bir kombinasyon oluşturarak aynı işlevi yapmasını ayarladık.Örnek vermek gerekirse “SAĞA BAK” kelimesini bazen “SALAK” olarak bazen de “SABAH” olarak çevirmekteydi.Bizde bu 3 kelimeden oluşan yapıyı aynı komuta ekledik.Yani siz “SABAH” deseniz bile sağa dönüş yapacak.

#include <Servo.h>// servo motor kütüphanesi
#include <NewPing.h>//ultrasonik sensör kütüphanesi
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
 
//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ı
}
// 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") {ileri();}
else if(voice == "*geri"||voice == "*geri gel"){geri();}
else if(voice == "*sağa dön"||voice == "*sağ") {sag();}
else if(voice == "*sola dön"||voice == "*sol") {sol();}
else if(voice == "*dur"||voice == "*arabayı durdur") {dur();}
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(500); dur();}
else if(voice == "*geri gel dur"||voice == "*biraz geri gel") {geri(); delay(500); dur();}
else if(voice == "*sola dön dur"||voice == "*biraz sola dön") {sol(); delay(500); dur();}
else if(voice == "*sağa dön dur"||voice == "*biraz sağa dön") {sag(); delay(500); dur();}
else if(voice == "*sola bak"||voice == "*soluna bak") {solabak();}
else if(voice == "*sağa bak"||voice == "*sağına bak") {sagabak();}
else if(voice == "*önüne bak"||voice == "*öne bak") {onunebak();}
else if(voice == "*ışığı aç"||voice == "*ledi yak") {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") {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"){engel();}
 
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, LOW);
digitalWrite(SolMotorGeri, HIGH);
digitalWrite(SagMotorGeri, LOW);
digitalWrite(SagMotorileri, HIGH);
}
 
void sol()
{
digitalWrite(SolMotorGeri, LOW);
digitalWrite(SolMotorileri, HIGH);
digitalWrite(SagMotorileri, LOW);
digitalWrite(SagMotorGeri, HIGH);
}
 
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();
}
}
}
SİZCE NASIL OLMUŞ?
Beğendim
65%
İlginç
13%
Eh İşte
5%
Anlamadım
11%
Kötü
2%
Berbat
5%
YAZAR HAKKINDA
Sezgin Gül
Atatürk Üniversitesi Makine Mühendisliği bölümünde lisans eğitimi almaktayım.Bölümüme paralel olarak robotik sistemler üzerine projeler geliştirmekteyim. Disiplinli ve düzenli çalışmayı severim.Sürekli yeni şeyler öğrenmeye hevesli, kendi alanımdaki konularda uzman, kendi kendime öğrenebilen, aktif çalışmayı seven, dinamik bir kişiliğim vardır.Ayrıca takım çalışmasına yatkın, değişime açık, yaratıcı, yenilikçi, çalışkan ve kararlı biriyimdir.
62 YORUMLAR
1 2

YORUM YAP