Ses ile kontrol edilebilen bir araba, robotik projelerle ilgilenen herkesin hayalidir. Bu yazımızda PicoBricks kullanarak nasıl ses ile kontrol edilebilen bir araba yapacağımızı öğreneceğiz.
İçindekiler Listesi
- Detaylar ve Algoritma
- Bileşenler
- Devre Şeması
- Yapım Aşamaları
- MicroBlocks Kodları
- MicroPython Kodları
- Arduino C Kodları
Detaylar ve Algoritma
Set ile birlikte gelen robot araba kiti birleştirilecektir. Robot araba bir cep telefonu aracılığıyla kontrol edilebilir. Bunun için HC05 Bluetooth modülü kullanılır ve PicoBricks ile cep telefonunuz arasında kablosuz iletişim kurulmasını sağlar. Cep telefonuna yüklenen bir uygulama ile istenilen komutlar girilerek PicoBricks’e gönderilir ve robot araba bu komutlara göre ileri, geri, sağa veya sola hareket eder.
Bileşenler
1x PicoBricks
2x 6V DC Motor
1x HC05 Bluetooth Modülü
Devre Şeması
Yapım Aşamaları
1) Set içerisinden çıkan robot arabanın şasesine bir motoru vidalayıp sabitleyin.
2) İkinci motoru şaseye vidalayarak sabitleyin.
3) Tekerlekleri her iki motora da takın
4) Ara parçaları kullanarak tekerlekleri şasenin altına sabitleyin.
5) Bir ara parçayı şasenin üst kısmındaki somunla sabitleyin.
6) Alt şasenin dört köşesine de 4 ara parçayı sabitleyin.
7) Üst şaseyi tapa ve somun kullanarak sabitleyin.
8) Motor kablolarını motor üzerindeki terminallere bağlayın.
9) Motor sürücüsünü, Bluetooth modülün, PicoBricks kartını ve pil kutusunu silikon kullanarak şaseye sabitleyin.
Bu projede yaptığımız robot arabayı uygulama üzerinden sesli komutar vererek hareket ettiririz.
İki eksenli robot kol projesinde araba yerine pan-tilt mekanizmasını da aynı yöntemi kullanarak kontrol edebilirsiniz. Ayrıca sesli komutlar yerine butonları kullanabileceğiniz bir uygulamayı da deneyebilir veya MIT Appinventor ile kendi uygulamanızı da geliştirebilirsiniz.
HC05 modülü ile sadece motorları değil, PicoBricks üzerindeki farklı modülleri de çalıştırabilirsiniz. Mesela bir RGB LED’i istediğiniz bir renkte yakabilirsiniz.
Bu etkileşimi göstermek için MIT Appinventor ile yazılan özel bir program Microblocks programı vardır. Bu etkileşimleri kullanmak için programı aşağıdaki zip dosyasından indirebilirsiniz.
ZIP arşivinde 2 dosya bulunur. Bunlar A MicroBlocks program – PicoBricks BT Demo2 ve An Android APK – PicoBricks_Remote_BKGND.apk’dır.
APK dosyasını ZIP arşivinden çıkarın ve telefonunuza yükleyin. Ve Microblocks programını bilgisayarınıza kaydedin. Her ikisinin de aynı çalışması gerektiğini ve Bluetooth modülünün PicoBricks’te kurulu olması gerektiğini unutmayın
Android Uygulaması İçin:
APP’nin ekran düzeni, PicoBricks kart düzenine benzer bir düzenleme sunar; modülleri temsil eden düğmeler ve ekranın altında bir modül haritası bulunur. Bir modülü test etmek için seçtiğinizde, düğmede adı sarı renge döner ve haritadaki karşılık gelen modül konumu, uyguladığınız modülü turuncu renkte gösterir.
İlk yapmanız gereken şey, telefonun Bluetooth ayarlarını HC-05 ile EŞLEŞTİRMEK’tir. Bu konuda cihazınızın talimatlarına başvurun. Eşleştirme işlemi tamamlandığında Demo APP’i kullanmaya başlayabilirsiniz.
Uygulamada, BLUETOOTH bağlantısını PicoBricks’e kurmak için BAĞLAN’a tıklayın. Bluetooth modül ışıklarınızın iki saniyede bir çift yanıp sönme göreceksiniz. Şimdi test etmeye hazırsınız.
LED, DHT, RELAY, LDR, BUZZER modülleri, telefonun ilgili düğmesine tek tıklamayla çalışır. LED ve RELAY’e tıklanınca açılır ve bir sonraki tıklamada kapanır. DHT, LDR tıklandığında sensör okumasını sağlar, bu değerler telefon ekranında görüntülenir. BUZZER tıklandığında kısa bir ses çıkarır.
POT modülü, PicoBoard üzerindeki potansiyometreyi kullanmanızı ve pot değerlerini OLED ve telefonda görüntülemenizi isteyecektir. İşlem bittiğinde POT düğmesine tekrar tıklayın.
NEO modülü, RGB renklerini kontrol etmek için üç kaydırıcı gösterecektir. Ayarları değiştirdikçe, PicoBricks üzerindeki NEOPixel ve NEO düğme arka planı aynı anda renk değiştirir, böylece elde ettiğiniz renk seçimini gösterir. İşlem bittiğinde NEO düğmesine tekrar tıklayın.
OLED modülü, kısa mesajlar yazabileceğiniz bir metin giriş alanını açar. Yazmaya başladığınızda, Android klavyesi veri girişi için görünecektir. Metni girdikten sonra klavyeyi gizleyin ve ardından “OLED’E GÖNDER” düğmesine tıklayın. Mesajınız PicoBricks’in OLED ekranında görüntülenecektir. İşlem bittiğinde OLED düğmesine tekrar tıklayın.
MOTOR modülü, PicoBricks’e bağlı bir SERVO motoru kontrol etmenizi sağlayan bir kaydırıcı gösterecektir. Unutmayın ki demo yalnızca SERVO #2’yi çalıştırır. Servo motor ile -90 ila +90 derece arasında hareket yapabilirsiniz. İşlem bittiğinde MOTOR düğmesine tekrar tıklayın.
İşlem sırasında BT bağlantısı düşebilir veya telefon ile PicoBricks ünitesi arasında mesaj senkronizasyon sorunları yaşayabilirsiniz. Bu programlar, kavramları göstermek amacıyla yazılmış olup sıkı hata kontrolü içermez. En iyi çözüm, her şeyi yeniden başlatmak ve tekrar denemektir.
Mobil Uygulama İçin:
Android cihazlar için uygulamayı aşağıdaki linkten indirebilirsiniz.
MicroBlocks Kodları
MicroPython Kodları
from machine import Pin, UART
from utime import sleep
uart = UART(0, 9600) # If connection cannot be established, try 115200.
m1 = Pin(21, Pin.OUT)
m2 = Pin(22, Pin.OUT)
m1.low()
m2.low()
while True:
sleep(0.05)
if uart.any():
cmd = uart.readline()
if cmd == b'F':
m1.high()
m2.high()
elif cmd == b'R':
m1.high()
m2.low()
elif cmd == b'L':
m1.low()
m2.high()
elif cmd == b'S':
m1.low()
m2.low()
cmd = ""
Arduino C Kodları
void setup() {
Serial1.begin(9600);
}
void loop() {
if (Serial1.available() > 0) {
char sread = Serial1.read();
Serial.println(sread);
if (sread == 'f') {
Forward();
} else if(sread == 'r'){
Turn_Right();
} else if(sread == 'l'){
Turn_Left();
} else if(sread == 's'){
Stop();
}
}
}
void Forward(){
digitalWrite(21,HIGH);
digitalWrite(22,HIGH);
delay(1000);
digitalWrite(21,LOW);
digitalWrite(22,LOW);
}
void Turn_Left(){
digitalWrite(21,LOW);
digitalWrite(22,HIGH);
delay(500);
digitalWrite(21,LOW);
digitalWrite(22,LOW);
}
void Turn_Right(){
digitalWrite(21,HIGH);
digitalWrite(22,LOW);
delay(500);
digitalWrite(21,LOW);
digitalWrite(22,LOW);
}
void Stop(){
digitalWrite(21,LOW);
digitalWrite(22,LOW);
delay(1000);
}