Merhaba genç mucitler! Robotların duyguları olmadığını kim söylemiş? Bugün laboratuvarımızda üç farklı tuşa basarak "Üzgün", "Sinirli" veya "Şaşkın" olabilen süper eğlenceli bir Duygu Robotu yapacağız! Bu robot, hislerine göre ekranın tam ortasında emojiler gösterecek, size servo motoruyla el sallayarak veda edecek ve her duygu için farklı bir ritimde kendi şarkısını çalacak. Eğlenceli mekanikleri, sesleri ve şekilleri birleştirmeye hazırsanız, robotumuzu inşa etmeye başlayalım!
Gerekli malzemeler
- 1 adet Arduino Uno
- 1 adet Breadboard (Devre tahtası)
- 1 adet 16x2 I2C modüllü LCD Ekran
- 1 adet SG90 Servo Motor (Robotumuzun eli!)
- 1 adet Buzzer (Hoparlör)
- 3 adet Push Buton
- Yeteri kadar Jumper Kablo
Adım adım yapım
1. 1. Bölüm
Bağlantılarımız biraz kalabalık ama çok eğlenceli! İlk olarak I2C LCD ekranımızı bağlayalım. Ekranın arkasındaki GND'yi Arduino'nun GND'sine, VCC'yi 5V'a, SDA'yı A4 pinine ve SCL'yi A5 pinine bağlayın.
2. 2. Bölüm
Şimdi müzik aletimiz olan Buzzer'ı takalım. Buzzer'ın uzun bacağını (artı) Arduino'nun 8 numaralı pinine, kısa bacağını (eksi) ise GND'ye bağlayın.
3. 3. Bölüm
Robotumuza el sallatacak olan Servo Motorun 3 renkli kablosu vardır. Kahverengi (veya siyah) kabloyu GND'ye, Kırmızı kabloyu 5V'a, Turuncu (veya sarı) sinyal kablosunu ise Arduino'nun 9 numaralı pinine takın.
4. 4. Bölüm
Son olarak 3 adet butonumuzu breadboard'a yerleştirin. Her butonun bir bacağını ortak olarak GND'ye bağlayın. Birinci (Üzgün) butonun diğer bacağını 2 numaralı pine, İkinci (Sinirli) butonun diğer bacağını 3 numaralı pine, Üçüncü (Şaşkın) butonun diğer bacağını 4 numaralı pine bağlayın. (Yine dışarıdan direnç takmıyoruz, sihirli INPUT_PULLUP kodunu kullanacağız!)
5. 5. Bölüm
Bağlantılar tamam! Aşağıdaki kodda, pikselleri tek tek boyayarak kendi "Üzgün, Sinirli ve Şaşkın" yüzlerimizi nasıl çizdiğimizi inceleyebilirsiniz. Kodu Arduino'ya yükleyin ve robotunuzla tanışın!
Proje kodu
Kodu Arduino IDE'ye aktarın. Pin numaralarını kendi devrenize göre kontrol ettikten sonra karta yükleyin.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
// Ekran ve Servo tanımlamaları
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo elServo;
// Pin numaraları
const int btnUzgun = 2;
const int btnSinirli = 3;
const int btnSasirmis = 4;
const int buzzerPin = 8;
const int servoPin = 9;
// KENDİ EMOJİLERİMİZİ ÇİZİYORUZ!
byte uzgunYuz[8] = {
B00000, B01010, B01010, B00000, B00000, B01110, B10001, B00000
};
byte sinirliYuz[8] = {
B10001, B01010, B00000, B00000, B11111, B10001, B00000, B00000
};
byte saskinYuz[8] = {
B00000, B01010, B01010, B00000, B00100, B01010, B00100, B00000
};
// HER DUYGU İÇİN 6 NOTALIK VEDA ŞARKILARI (Diziler)
int sarkiUzgun[] = {294, 277, 261, 247, 233, 220}; // Giderek kalınlaşan hüzünlü sesler
int sarkiSinirli[] = {523, 587, 659, 784, 880, 1047}; // Giderek hızlanan tiz sesler
int sarkiSaskin[] = {330, 440, 330, 554, 440, 659}; // Atlamalı ve komik sesler
void setup() {
lcd.init();
lcd.backlight();
// Çizdiğimiz emojileri LCD'nin hafızasına kaydediyoruz
lcd.createChar(1, uzgunYuz);
lcd.createChar(2, sinirliYuz);
lcd.createChar(3, saskinYuz);
// Butonları ve Buzzer'ı ayarlıyoruz
pinMode(btnUzgun, INPUT_PULLUP);
pinMode(btnSinirli, INPUT_PULLUP);
pinMode(btnSasirmis, INPUT_PULLUP);
pinMode(buzzerPin, OUTPUT);
// Servo motoru başlat ve kolu dik (90 derece) tut
elServo.attach(servoPin);
elServo.write(90);
// Karşılama Ekranı
lcd.setCursor(2, 0);
lcd.print("Duygu Robotu");
}
void loop() {
// 1. Butona basıldıysa: ÜZGÜN
if (digitalRead(btnUzgun) == LOW) {
robotHareketi(1, " UZGUNUM :( ", sarkiUzgun);
}
// 2. Butona basıldıysa: SİNİRLİ
else if (digitalRead(btnSinirli) == LOW) {
robotHareketi(2, " SINIRLIYIM! ", sarkiSinirli);
}
// 3. Butona basıldıysa: ŞAŞKIN
else if (digitalRead(btnSasirmis) == LOW) {
robotHareketi(3, " SASIRDIM!O ", sarkiSaskin);
}
}
// Şarkı çalma ve el sallamayı AYNI ANDA yapan fonksiyon!
void robotHareketi(int emojiNo, String yazi, int sarki[]) {
lcd.clear();
// Emojiyi ekranın tam ortasına (7. sütun, 0. satır) yazdırıyoruz
lcd.setCursor(7, 0);
lcd.write(emojiNo);
// Alt satıra yazıyı yazdırıyoruz
lcd.setCursor(0, 1);
lcd.print(yazi);
// Servo motor el sallarken aynı anda şarkı dizisindeki 6 notayı çalar
for (int i = 0; i < 6; i++) {
tone(buzzerPin, sarki[i]); // Şarkının sıradaki notasını çal
// i değeri çift sayıysa eli yukarı kaldır, tek sayıysa aşağı indir (El sallama efekti)
if (i % 2 == 0) {
elServo.write(130);
} else {
elServo.write(50);
}
delay(350); // Hem servo pozisyonunu alsın hem de nota 350 milisaniye duyulsun
}
// Şarkı bitince müziği ve hareketi durdur, eli düzelt
noTone(buzzerPin);
elServo.write(90);
delay(1000); // 1 saniye mesaj ekranda kalsın
// Ekranı temizle ve başa dön
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("Duygu Robotu");
}

Yorumlar
İlk yorumu siz yazın.