Daha önce “Sesli Asistan için Fiziksel Arayüz” projesi ile yapay zekayı fiziksel dünyaya taşıyan bir arayüz oluşturmuştuk. Şimdi bu projenin ikinci versiyonuyla karşınızdayız! Daha güçlü bir donanım, daha gelişmiş görsel arayüz, ses tanıma ve konuşma özellikleriyle desteklenen bu sürüm, bir bilgisayara ihtiyaç duymadan ev ortamında çok daha etkili bir deneyim sunuyor.

Kullanılan Malzemeler
Projede ses tanıma, görsel arayüz ve fiziksel tepki verebilen bir sistem kurabilmek için aşağıdaki malzemeler kullanıldı:
- Raspberry Pi 5 – 4GB
- Raspberry Pi 5 için 27W USB-C Güç Adaptörü
- SanDisk 64GB microSD Kart Class10 – 98MB/s
- Raspberry Pi USB Ses Kart Modülü (Mikrofon ve Kulaklık Girişi)
- WaveShare 4inch HDMI LCD, 800×480, IPS
- WS2812 8-Piece RGB LED Stick
- Arduino Nano Klon – USB Kablo Hediyeli – (USB Chip CH340)
- 40 Pin Ayrılabilen Dişi-Erkek M-F Jumper Kablo-200 mm
Projenin Özellikleri
Fiziksel asistanın yeni versiyonu, kullanıcıyla doğal konuşmalar yapabilen ve fiziksel olarak yanıt verebilen bir sistemdir.
- Yapay zeka ile sesli sohbet: Kullanıcıdan gelen sesli komutlar alınır ve Gemini Pro üzerinden yanıt oluşturulur.
- Fiziksel LED tepkisi: Yapay zeka işlem sürecinde ya da yanıt sırasında LED’ler belirli animasyonlarla tepki verir.
- Tamamen yerel mikrofon/ses kartı: Raspberry Pi’ye USB ses kartı üzerinden mikrofon ve hoparlör bağlanır.
- Arduino ile haberleşme: Raspberry Pi’den gelen seri veriye göre Arduino LED efektleri oynatır.
Bu özellikler sayesinde asistan artık sadece bir yazılım değil, fiziksel olarak sizinle etkileşim kuran bir cihaza dönüşüyor.
Ek olarak, bu yeni versiyon ilkinden farklı olarak tamamen bağımsız çalışabiliyor. Önceki sürümde sistemin çalışabilmesi için bir bilgisayara bağlı olması gerekiyordu. Ancak V2’de tüm sistem Raspberry Pi üzerinde çalıştığı için bilgisayara ihtiyaç duymadan kendi başına ses algılayıp yanıt verebiliyor.
Devre Tasarımı
Arduino Nano üzerinden kontrol edilen WS2812 LED’ler, Pi tarafından gönderilen seri veriye göre yanıt verir. Böylece sesli asistan konuşmaya başladığında veya komut aldığında ışık efektleri ile görsel bir geribildirim sağlar.
Aşağıdaki bağlantı şeması bu yapıyı detaylı şekilde göstermektedir:
3D Baskı Tasarımı
Tüm sistemi şık bir şekilde bir araya getiren özel 3D yazdırılmış kasa tasarlandı. Bu kasa, ekran, Raspberry Pi ve LED çıkışları için özel yuvalara sahip.
Aşağıdaki görsellerde hem kasa parçalarını hem de montaj sonrası görünümünü inceleyebilirsiniz:


Python ve Arduino Kodları
Python tarafında ses kaydı, Google Speech ile tanıma, yapay zeka yanıt üretimi ve sesli geri dönüş sağlanıyor. Arduino tarafında ise LED’ler gelen karaktere göre animasyon oynatıyor.
Bu iki sistem arasındaki iletişim seri port üzerinden gerçekleşiyor. Python kodu, b, c, v gibi karakterlerle Arduino’ya LED efekti tetikleyici komutlar gönderiyor.
Kodlar modüler, sade ve genişletilebilir yapıda yazıldı. Bu sayede sesli asistanınıza başka özellikler eklemeniz oldukça kolay!
Python Kodu
import speech_recognition as sr
import pyttsx3
import google.generativeai as genai
import os
import serial
import time
os.environ["PYTHONWARNINGS"] = "ignore"
os.environ["ALSADEV"] = "hw:2,0"
r = sr.Recognizer()
engine = pyttsx3.init()
engine.setProperty('rate', 150)
genai.configure(api_key='')
model = genai.GenerativeModel('models/gemini-pro')
def dinle():
with sr.Microphone(device_index=2) as source:
r.adjust_for_ambient_noise(source)
ses = r.listen(source)
global sonuc
sonuc = r.recognize_google(ses, language="eng-US")
print(f"Siz: {sonuc}")
time.sleep(5)
def cevapla(cevap):
engine.say(cevap)
engine.runAndWait()
time.sleep(5)
chat = model.start_chat()
arduino_port = "/dev/ttyUSB0"
baud_rate = 115200
arduino = serial.Serial(arduino_port, baud_rate, timeout=1)
arduino.write(b'b')
arduino.close()
try:
while True:
try:
arduino = serial.Serial(arduino_port, baud_rate, timeout=1)
time.sleep(2)
dinle()
response = chat.send_message(sonuc)
print(f"CEVAP: {response.text}")
cevapla(response.text)
arduino.write(b'c')
arduino.close()
except sr.UnknownValueError as hata:
print("Ses algılanamadı: ", hata)
arduino.close()
except Exception as hata2:
print("Bir hata oluştu: ", hata2)
arduino.close()
except KeyboardInterrupt:
print("\nProgram kapatılıyor...")
print("Seri port kapatıldı.")
arduino.close()
Arduino Kodu
#include <Adafruit_NeoPixel.h>
#define LED_PIN 6
#define LED_COUNT 16
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
Serial.begin(115200);
strip.begin();
strip.show();
delay(1000);
for (int brightness = 0; brightness <= 2; brightness++)
{
for (int i = 0; i < LED_COUNT; i++) {
strip.setPixelColor(i, strip.Color(brightness, 0, 0));
}
strip.show();
delay(10);
}
}
void loop() {
if (Serial.available()) {
char data = Serial.read();
if (data == 'b')
{
turnOffAllLEDs();
animateToRed();
fadeToRedOff();
fadeToWhite();
}
else if (data == 'c')
{
speechAnimation();
}
else if (data == 'v')
{
fadeToOrangeOff();
}
}
}
void turnOffAllLEDs()
{
for (int i = 0; i < LED_COUNT; i++)
{
strip.setPixelColor(i, strip.Color(0, 0, 0));
}
strip.show();
}
void animateToRed()
{
for (int i = 0; i < LED_COUNT; i++)
{
strip.setPixelColor(i, strip.Color(255, 0, 0));
strip.show();
delay(30);
}
}
void fadeToRedOff()
{
for (int step = 255; step >= 0; step--)
{
for (int i = 0; i < LED_COUNT; i++)
{
uint8_t red = step;
strip.setPixelColor(i, strip.Color(red, 0, 0));
}
strip.show();
delay(5);
}
}
void fadeToWhite()
{
for (int step = 0; step <= 255; step++)
{
for (int i = 0; i < LED_COUNT; i++)
{
uint8_t red = 255 - step;
uint8_t white = step;
strip.setPixelColor(i, strip.Color(white, white, white));
}
strip.show();
delay(5);
}
}
void speechAnimation()
{
for (int i = 0; i < LED_COUNT; i++)
{
strip.setPixelColor(i, strip.Color(255, 150, 0));
}
strip.show();
delay(50);
for (int i =0; i <= 5; i++)
{
for (int brightness = 200; brightness <= 255; brightness += 15)
{
for (int i = 0; i < LED_COUNT; i++)
{
strip.setPixelColor(i, strip.Color(brightness, 150, 0));
}
strip.show();
delay(70);
}
for (int brightness = 255; brightness >= 200; brightness -= 15)
{
for (int i = 0; i < LED_COUNT; i++)
{
strip.setPixelColor(i, strip.Color(brightness, 150, 0));
}
strip.show();
delay(70);
}
}
}
void fadeToOrangeOff()
{
for (int step = 150; step >= 0; step--)
{
for (int i = 0; i < LED_COUNT; i++)
{
uint8_t orange = step;
strip.setPixelColor(i, strip.Color(orange, orange, 0));
}
strip.show();
delay(5);
}
}
Video Anlatım
Projenin yapım aşamaları, detaylı anlatımı ve örnek çalışması için hazırladığımız YouTube videosunu izlemeyi unutmayın!

📺 YouTube Videosunu İzlemeyi Unutmayın!
Bu proje sayesinde yapay zekayı yalnızca ekranınızda değil, fiziksel dünyada da deneyimleyebilirsiniz. LED’lerle ışıklı tepkiler veren, sizinle konuşan ve anlamlı cevaplar üreten bir asistan oluşturmak artık çok daha kolay.
Kendi sesli asistan projenizi geliştirin, ışıkları yakıp söndürsün, sorularınızı yanıtlasın ve evinize teknoloji katın!