back to top

Sesli Asistan V3: Yerel Sunucu Kontrollü Akıllı Ev Sistemi Tasarımı ile Geleceğini Kodla

Evde teknolojiyi konuşturmak isteyenler için yepyeni bir proje ile geldik! Daha önce “Sesli Asistan V2” projesiyle yapay zeka destekli sesli yanıt sistemi kurmuştuk. Bu yazımızda ise onu bir adım ileri taşıyarak fiziksel cihazları kontrol edebilen, yerel sunucu destekli bir akıllı ev sistemine dönüştüreceğiz.

Projemizde bir Raspberry Pi, bir NodeMCU ve bir sesli asistan bir araya geliyor. Örneğin: “Lambayı aç” diyorsunuz, evdeki masa lambası yanıyor. Tüm komutlar için internete bağlı olmanıza gerek yok, çünkü sistem tamamen yerel olarak çalışıyor!

Proje Görselleri

Projenin aşama aşama ilerleyişine ait bazı fotoğraflar:

  • Yerleştirilen devre kartları
  • Kablolama detayı
  • 3D baskı montaj adımları
  • Rölelerin çalışır hâli


Akıllı Ev Sistemi Ne Yapıyor?

Sistemin amacı, Raspberry Pi üzerine kurulu yerel bir sunucu üzerinden ESP8266 ile 4 röleyi kontrol etmek. Röleler sayesinde masa lambası, fan gibi yüksek voltajlı cihazları açıp kapatabiliyorsunuz. Aynı zamanda sesli asistan yazılımı sayesinde konuşarak cihazları tetikleyebiliyor ve akıllı ev sistemine “eller serbest” konforunu getiriyorsunuz.

Python ile geliştirilen sunucu, GPIO kontrolünün yanında Web arayüzü sunuyor. Aynı zamanda Arduino tarafında gelen NodeMCU devresi, sunucudan gelen HTTP isteklerine göre röleleri kontrol ediyor.

Akıllı Ev Sistemi Projesinde Neler Var?

  • Raspberry Pi üzerinde çalışan Python tabanlı sesli asistan
  • Yerel Flask sunucusu ile NodeMCU ESP8266 haberleşmesi
  • 4 kanal röle kartı ile 220V cihazları kontrol etme
  • 3D yazıcı ile tasarlanmış koruyucu kasalar
  • Dokunmatik ekranlı şık masa üstü tasarım

Kullanılan Malzemeler

Kodlarla Sistem Kontrolü

 Raspberry Pi Üzerindeki Python Kodları

  • asistan_yeni.py dosyası mikrofon ile sesi tanıyor,
  • Gemini API ile komut işleniyor,
  • Yerel Flask sunucusuna HTTP isteği gönderiliyor (“/komut/lamba_ac” gibi).
import speech_recognition as sr     
import pyttsx3                       
import google.generativeai as genai  
import os
import time
import requests

base_url = "http://"

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-2.0-flash')

def dinle():
    with sr.Microphone(device_index=0) 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()

try:
    while True:
        try:
            dinle()
            if sonuc == "turn on the relay":
                response = requests.get(f"{base_url}/relay2/on")
                print("röle açıldı")
                cevapla("okey sir")
            elif sonuc == "turn off the relay":
                response = requests.get(f"{base_url}/relay2/off")
                print("röle kapatıldı")
                cevapla("okey sir")
            else:
                response = chat.send_message(sonuc)
                print(f"CEVAP: {response.text}")
                cevapla(response.text)
        except sr.UnknownValueError as hata:
            print("Ses algılanamadı: ", hata)
        except Exception as hata2:
            print("Bir hata oluştu: ", hata2)
except KeyboardInterrupt:
    print("\nProgram kapatılıyor...")

NodeMCU Üzerindeki Arduino Kodu

  • NodeMCU_Server.ino dosyası gelen istekleri karşılıyor,
  • GPIO pinleri ile röle modülü kontrol ediliyor,
  • Örnek: /komut/lamba_ac isteğiyle masa lambası yanıyor.
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

const char* ssid = "";
const char* password = "";

// Röle pin tanımları
#define RELAY1 0   
#define RELAY2 2   
#define RELAY3 4   
#define RELAY4 5   

ESP8266WebServer server(80);  // Web sunucu portu: 80

void setup() {
  Serial.begin(115200);

  pinMode(RELAY1, OUTPUT);
  pinMode(RELAY2, OUTPUT);
  pinMode(RELAY3, OUTPUT);
  pinMode(RELAY4, OUTPUT);

  digitalWrite(RELAY1, HIGH);
  digitalWrite(RELAY2, HIGH);
  digitalWrite(RELAY3, HIGH);
  digitalWrite(RELAY4, HIGH);

  // WiFi bağlantısı
  WiFi.begin(ssid, password);
  Serial.println("Wi-Fi ağına bağlanılıyor...");

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }

  Serial.println("");
  Serial.print("Bağlandı! IP adresi: ");
  Serial.println(WiFi.localIP());

  // Ana sayfa
  server.on("/", handleRoot);

  // Röle kontrol URL'leri
  server.on("/relay1/on", []() {
    digitalWrite(RELAY1, LOW); // AÇ
    server.sendHeader("Location", "/");
    server.send(303);
  });
  server.on("/relay1/off", []() {
    digitalWrite(RELAY1, HIGH); // KAPAT
    server.sendHeader("Location", "/");
    server.send(303);
  });

  server.on("/relay2/on", []() {
    digitalWrite(RELAY2, LOW);
    server.sendHeader("Location", "/");
    server.send(303);
  });
  server.on("/relay2/off", []() {
    digitalWrite(RELAY2, HIGH);
    server.sendHeader("Location", "/");
    server.send(303);
  });

  server.on("/relay3/on", []() {
    digitalWrite(RELAY3, LOW);
    server.sendHeader("Location", "/");
    server.send(303);
  });
  server.on("/relay3/off", []() {
    digitalWrite(RELAY3, HIGH);
    server.sendHeader("Location", "/");
    server.send(303);
  });

  server.on("/relay4/on", []() {
    digitalWrite(RELAY4, LOW);
    server.sendHeader("Location", "/");
    server.send(303);
  });
  server.on("/relay4/off", []() {
    digitalWrite(RELAY4, HIGH);
    server.sendHeader("Location", "/");
    server.send(303);
  });

  server.begin();
  Serial.println("Web sunucu başlatıldı.");
}

void loop() {
  server.handleClient();
}

void handleRoot() {
  String html = "<!DOCTYPE html><html><head><meta charset='UTF-8'><title>4 Röle Kontrol</title><style>";
  html += "body { font-family: Arial; text-align: center; padding-top: 50px; }";
  html += "button { padding: 20px; font-size: 20px; margin: 10px; border: none; border-radius: 10px; cursor: pointer; }";
  html += ".on { background-color: #4CAF50; color: white; }";
  html += ".off { background-color: red; color: white; }";
  html += "</style></head><body>";
  html += "<h1>4 Röleli Kontrol Paneli</h1>";

  html += "<h2>Röle 1</h2>";
  html += "<a href='/relay1/on'><button class='on'>Aç</button></a>";
  html += "<a href='/relay1/off'><button class='off'>Kapat</button></a>";

  html += "<h2>Röle 2</h2>";
  html += "<a href='/relay2/on'><button class='on'>Aç</button></a>";
  html += "<a href='/relay2/off'><button class='off'>Kapat</button></a>";

  html += "<h2>Röle 3</h2>";
  html += "<a href='/relay3/on'><button class='on'>Aç</button></a>";
  html += "<a href='/relay3/off'><button class='off'>Kapat</button></a>";

  html += "<h2>Röle 4</h2>";
  html += "<a href='/relay4/on'><button class='on'>Aç</button></a>";
  html += "<a href='/relay4/off'><button class='off'>Kapat</button></a>";

  html += "</body></html>";

  server.send(200, "text/html", html);
}

Devre Şeması

ESP8266 ile röle kartı arasında doğrudan bağlantılar kullanıldı. Enerji için harici 5V adaptör desteği sunuldu. Aşağıda sistemin temel devre şeması yer alıyor:

3D Yazıcı ile Baskı

Hem Raspberry Pi ve ekranın, hem de NodeMCU + röle modülünün yer aldığı iki ayrı kasa tasarlandı. Bu kasalar havalandırma ızgaraları, bağlantı delikleri ve modüler montaj yapısıyla tasarımı tamamlıyor. Tasarımda hem işlevsellik hem estetik ön planda tutuldu.

Stl dosyalarını buradan indirebilirsiniz:

Akıllı Ev Sistemi Stl

YouTube Videosunu Kaçırma!

Tüm kurulumu detaylarıyla adım adım görmek için YouTube videomuza mutlaka göz atın!

Sen de Yap!

Projemiz, sesli komutlarla kontrol edilen bir yerel sunucu altyapısı kurmak isteyen herkes için birebir. Öğrenciler, makerlar ve IoT geliştiricileri bu projeyle hem yazılım hem donanım alanında yeni beceriler kazanacak.

Hazırsanız, Raspberry Pi’nizi başlatın, PLA filamentlerinizi yükleyin ve akıllı evinizi kendiniz kurmaya başlayın!

Unutmayın! Teknolojiye yön verenler onu sadece kullananlar değildir. Kendisi yapanlardır!

Son Çıkan Yazılar

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz