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.

Arduino / C++
#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");
}
9görüntülenme
0beğeni
0yorum
Atölyeye katıl →
Topluluk

Yorumlar

0

İlk yorumu siz yazın.

Yorum yap