Rehberler · 15 dk okuma

Arduino Akıllı Ev Projesi: Maket, Sensörler, Kod ve Telefon

Arduino akıllı ev projesi adım adım: maket ev planı, PIR ışık, gaz ve yangın alarmı, RFID kapı, röleyle lamba, ESP32 ile telefondan kontrol ve tam kod.

Arduino akıllı ev projesi, bir maket evin ışıklarını, kapısını, penceresini ve alarmlarını sensörlerle otomatik hâle getirdiğin, istersen hepsini telefondan da yönettiğin; okul projelerinin en sevilen konularından biridir. Hareket algılayınca yanan koridor ışığı, gaz kaçağında öten alarm, sıcaklık yükselince çalışan fan ve kartla açılan kapı, gerçek akıllı ev sistemlerinin küçük ama çalışan bir kopyasıdır. Bir Arduino Uno ya da ESP32, yaklaşık on modül ve bir hafta sonu ile bunu sen de yapabilirsin.

Bu rehberde maket evin planından başlıyoruz: hangi modül hangi odaya gider, bütçe nereye harcanır, güç nasıl planlanır, pinler nasıl dağıtılır. Ardından her modülü tek tek kurup test ediyor, hepsini delay() kullanmadan aynı anda çalıştıran tam Arduino kodunu yazıyoruz. Son bölümlerde evi ESP32 web sunucusu ya da Blynk ile telefondan kontrol etmeyi, sık yapılan hataları ve okul sunumunda jüriyi etkileyecek ipuçlarını bulacaksın.

HC-SR501 PIR
HC-SR501 PIR
MQ-2
MQ-2
DHT11
DHT11
RC522 RFID
RC522 RFID
SG90
SG90
I2C LCD 16x2
I2C LCD 16x2

Akıllı ev sistemi nasıl çalışır?

Her akıllı ev üç parçalı aynı döngüyle çalışır. Sensörler ortamı ölçer: hareket var mı, hava karanlık mı, sıcaklık kaç derece, mutfakta gaz ya da alev var mı, kapıya hangi kart okutuldu? Denetleyici, yani Arduino ya da ESP32, bu bilgileri kurallarla karşılaştırır: "karanlıksa ve hareket varsa ışığı yak", "sıcaklık 28 °C'yi geçerse fanı çalıştır". Eylemciler de kararı uygular: röle lambayı ve fanı açar, servo kapıyı ve pencereyi çevirir, buzzer öter, ekran durumu gösterir. Telefondan kontrol bu döngüye yalnızca yeni bir giriş ekler; bu kez kural yerine senin dokunuşun karar verir.

Oda / bölümModülNe yapar?
Giriş kapısıRC522 RFID + SG90 servoYetkili kart okutulunca kapıyı açar, 5 saniye sonra kapatır
Koridor / salonHC-SR501 PIR + LDR + röleKaranlıkta hareket algılayınca lambayı yakar, 20 saniye hareket olmazsa söndürür
MutfakMQ-2 gaz sensörü + alev sensörü + buzzerGaz ya da alev algılayınca kesik kesik alarm çalar
PencereSG90 servoGaz algılanınca havalandırmak için pencereyi açar
Yatak odasıDHT11 + röle + fanSıcaklık 28 °C'ye ulaşınca fanı çalıştırır, 26 °C'de durdurur
Teknik odaArduino, I2C LCD, güç kaynağıSıcaklık, nem, gaz değeri ve durum mesajlarını gösterir

Maket ev planı

Maketi elektroniğe göre tasarla; elektroniği maketin içine sonradan sıkıştırmaya çalışma. Yaklaşık 50×40 cm'lik bir taban, iki ya da üç oda ve bir giriş için yeterlidir. Duvarlar için 5 mm'lik dekota (PVC köpük levha) ya da maket kartonu (foam board) maket bıçağıyla kolayca kesilir; 3–4 mm'lik MDF daha sağlamdır ama testere ya da lazer kesim ister. 1:20 ölçek iyi bir başlangıçtır: 2,6 m'lik tavan 13 cm'lik duvar, 90 cm'lik kapı da 4,5 cm genişlik demektir. Çatıyı çıkarılabilir yap ya da hiç koyma; jüri odaların içini görmek ister.

  • Teknik oda ya da çift taban: Arduino, breadboard, röle modülü ve güç girişini evin arkasındaki bir bölmeye ya da 3–4 cm yüksekliğindeki çift tabanın altına koy. Üstünü şeffaf bir pleksiyle kapatırsan devre hem korunur hem görünür.
  • Kablo kanalları: Her sensörün altına 6–8 mm'lik bir delik aç ve kabloları tabanın altından teknik odaya taşı. Kısa kabloları birbirine ekleyip uzatmak yerine sensör kablolarını baştan yeterince uzun seç.
  • Kapı: Kapıyı ince bir menteşe ya da bantla duvara tuttur, SG90'ın kolunu ataştan bükülmüş bir telle kapıya bağla. RC522'yi dış duvarın iç yüzüne yapıştır; okuyucu kartı 5 mm'lik levhanın arkasından da genellikle okur.
  • Mutfak: Doğalgaz (metan) havadan hafif olduğu için gaz sensörü gerçek evlerde tavana yakın, tüpgaz (LPG) ağır olduğu için yere yakın konur; maket için tavana yakın bir yer yeterlidir. Alev sensörünü ocağa bakacak şekilde yerleştir.
  • Diğer sensörler: PIR'i giriş yolunu yandan gören bir köşeye, LDR'yi lambanın ışığını görmeyecek şekilde dış duvara ya da pencereye, DHT11'i ise lambadan ve MQ-2'nin ısınan gövdesinden uzağa koy.
Malzemeyi almadan önce maketin kuşbakışı bir çizimini yap; her modülün yerini ve kablosunun teknik odaya hangi yoldan gideceğini işaretle. Böyle projelerde en çok zamanı kod ya da lehim değil kablo düzeni alır; iyi bir plan bu süreyi yarıya indirir.

Malzeme listesi ve maliyet

ParçaAdetGöreviFiyat seviyesi
Arduino Uno R3 (klon olabilir) ya da ESP32 DevKit1Evin beyniOrta
Breadboard ve jumper kablo seti (erkek-erkek, erkek-dişi)1 setBağlantılarDüşük
HC-SR501 PIR hareket sensörü1Koridor ışığıDüşük
LDR ve 10 kΩ direnç1 + 1Karanlığı algılamaÇok düşük
MQ-2 gaz sensörü modülü1Gaz ve duman alarmıDüşük
Alev sensörü modülü (LM393)1Yangın alarmıDüşük
DHT11 sıcaklık ve nem modülü1Fan kontrolüDüşük
RC522 RFID modülü (kart ve anahtarlıkla)1Kartlı kapıDüşük
SG90 servo motor2Kapı ve pencereDüşük
2 kanallı 5 V röle modülü1Lamba ve fanDüşük
Aktif buzzer1Alarm sesiÇok düşük
I2C 16x2 LCD ekran1Durum ekranıDüşük – orta
5 V mini fan ve 5 V LED lamba ya da LED şerit1 + 1Rölelerin yükleriDüşük
5 V 2–3 A adaptör ve DC jak ya da klemens1Servo, röle ve sensör beslemesiOrta
Dekota ya da maket kartonu, maket bıçağı, sıcak silikon–Evin gövdesiOrta

Fiyatlar satıcıya ve kura göre sık değiştiği için rakam vermiyoruz; tabloda her parçanın bütçedeki ağırlığını görüyorsun. Sensör ve modüllerin hepsi tek tek ucuzdur; bütçenin büyük kısmını kart, LCD, adaptör ve maket malzemesi oluşturur. Elinde bir Arduino başlangıç seti varsa kart, breadboard, kablolar, LDR, buzzer ve çoğu zaman servo ile LCD zaten hazırdır. Bütçe darsa LCD'yi ve ikinci servoyu çıkarabilirsin: ekran yerine Seri Monitör'ü kullanır, pencereyi sonraki aşamaya bırakırsın. DHT11 yerine daha hassas DHT22 almak fiyatı biraz artırır ama ölçümlerini sunumda daha inandırıcı yapar.

Güç planı: neden ayrı bir 5 V adaptör?

Akıllı ev maketlerinde "arada bir resetleniyor", "servo titriyor", "LCD'de garip karakterler çıkıyor" şikâyetlerinin neredeyse hepsi güçten gelir. Bilgisayarın USB portu yaklaşık 500 mA verir ve kart USB'den beslenirken Uno'nun 5V pini de bu sınırın arkasındadır. Aşağıdaki değerleri topladığında, iki servo aynı anda hareket ederken toplam akımın kolayca 1 A'i geçtiğini görürsün.

Parça5 V'ta yaklaşık akım
Arduino Uno45–50 mA
MQ-2 (ısıtıcı sürekli açık)Yaklaşık 150 mA
Röle modülü (kanal başına, röle çekiliyken)70–80 mA
SG90 servo (hareket ederken / zorlanınca)100–250 mA / 0,5–0,7 A'e kadar
I2C LCD (arka ışık açık)20–30 mA
RC522 (3,3 V pininden)13–26 mA
Aktif buzzer, DHT11, PIR ve alev sensörüToplam 30–40 mA
5 V mini fan ve LED lambaModele göre 100–400 mA
Servoları, röle modülünü, MQ-2'yi ve rölelerin yüklerini Arduino'nun 5V pininden besleme. Bunları 5 V 2–3 A'lik ayrı bir adaptörden besle ve adaptörün GND'sini Arduino'nun GND'sine mutlaka bağla (ortak toprak). Arduino'yu ayrıca besleyebilirsin: geliştirme sırasında USB'den, sonra DC jakından kendi 7–12 V'luk adaptörüyle; jak en az 7 V istediği için 5 V'luk adaptörü buraya takma. Servo hattına 470–1000 µF'lık bir elektrolitik kondansatör eklemek, servo kalkarken oluşan anlık gerilim çökmesini yumuşatır. Ayrıntılar Arduino güç besleme rehberinde.

Pin planı: Arduino Uno ve ESP32

Bu kadar modül Uno'nun pinlerini neredeyse bitirir, bu yüzden pinleri baştan planlamak gerekir. RC522 donanımsal SPI kullandığı için MOSI, MISO ve SCK hatları D11, D12 ve D13'e bağlıdır. LCD ise I2C üzerinden yalnızca A4 ve A5'i kullanır; paralel bağlanan bir LCD yerine I2C modüllü ekranı bu yüzden seçtik. Analog pinler gerektiğinde dijital pin gibi de çalışır; pencere servosunu A2'ye bu sayede bağlıyoruz. D0 ve D1'i boş bırak: kod yüklerken ve kart numaralarını Seri Monitör'den okurken bu seri hat kullanılır. Kartının pin yerleşimini Pinout aracında görebilirsin.

Modül piniArduino UnoESP32
PIR OUTD2GPIO 16
Alev sensörü DOD3GPIO 17
DHT11 DATAD4GPIO 13
Aktif buzzer (+)D5GPIO 25
Kapı servosu (sinyal)D6GPIO 32
Röle IN1 (lamba)D7GPIO 26
Röle IN2 (fan)D8GPIO 27
RC522 RSTD9GPIO 4
RC522 SDA (SS)D10GPIO 5
RC522 MOSI / MISO / SCKD11 / D12 / D13GPIO 23 / 19 / 18
MQ-2 AOA0GPIO 34 (gerilim bölücüyle)
LDR bölücüsünün orta noktasıA1GPIO 35 (bölücü 3V3'ten)
Pencere servosu (sinyal)A2GPIO 33
I2C LCD SDA / SCLA4 / A5GPIO 21 / 22
RC522'yi iki kartta da 3,3 V pininden besle; 5 V modülü bozabilir. ESP32'de iki kurala daha dikkat et: Wi-Fi açıkken ADC2 pinleri analog okuma yapamaz, bu yüzden MQ-2'yi ve LDR'yi ADC1 pinlerine (GPIO 32–39) bağladık. 5 V ile beslenen MQ-2'nin analog çıkışı ise 3,3 V'u aşabilir; araya örneğin üstte 10 kΩ, altta 15 kΩ'luk bir gerilim bölücü koy (5 V × 15 / 25 = 3,0 V). Aynı nedenle ESP32'de alev sensörünü ve DHT11'i de 3V3'ten besle; ikisi de 3,3 V'ta çalışır ve böylece dijital çıkışları 3,3 V'u aşmaz. HC-SR501'in çıkışı ise 5 V ile beslense bile zaten 3,3 V'tur. ESP32 sütununda RC522'nin RST pinini GPIO 22 yerine GPIO 4'e aldık, çünkü GPIO 22 burada LCD'nin SCL hattıdır.

Adım adım birleştirme

  1. Maketin gövdesini kur, modüllerin yerlerini ve kablo deliklerini hazırla; elektronik parçaları en son yerleştir.
  2. Güç hattını kur: 5 V adaptörü breadboard'un güç raylarına bağla, adaptörün GND'sini Arduino'nun GND'siyle birleştir ve multimetreyle 5 V'u ölç.
  3. I2C LCD'yi bağla ve ekrana bir yazı yazdır. Ekran adresini bulamazsan I2C LCD yazısındaki tarayıcı kodunu kullan.
  4. Sensörleri tek tek ekle: DHT11, LDR, PIR, MQ-2 ve alev sensörü. Her birini kısa bir test koduyla Seri Monitör'de dene; temiz havadaki, karanlıktaki ve aydınlıktaki değerleri not al.
  5. Eylemcileri ekle: önce röleleri yük bağlamadan, tık sesini ve LED'ini izleyerek dene; sonra servoları harici beslemeyle, en son da RC522'yi bağla. Kartlarını okutup numaralarını not et.
  6. Ana kodu yükle ve notlarındaki değerlere göre GAS_LIMIT, DARK_LIMIT ve FAN_ON eşiklerini ayarla.
  7. Kabloları sıcak silikon ve etiketlerle sabitle; sistemi yarım saat açık bırakıp resetlenme, aşırı ısınma ya da yanlış alarm olup olmadığını gözle.
Her şeyi bir anda bağlayıp tek seferde çalıştırmaya çalışma. Sekiz modül birlikte çalışmadığında hatanın nerede olduğunu bulmak saatler sürer; tek tek test edilmiş modüller ise birleştirildiğinde çoğu zaman ilk denemede çalışır.

PIR ve LDR ile otomatik ışık

HC-SR501 PIR sensörü, insan vücudunun yaydığı kızılötesi ışınımdaki değişimi algılar ve hareket görünce çıkışını HIGH yapar. Yalnızca PIR kullanırsan lamba gündüz de yanar; bu yüzden kuralımız iki koşullu: hareket varsa ve ortam karanlıksa yak. LDR, 10 kΩ'luk bir dirençle gerilim bölücü olarak bağlanır (5V → LDR → A1 → 10 kΩ → GND) ve ortam karardıkça A1'deki değer düşer. Kod son hareketin zamanını tutar ve 20 saniye boyunca yeni hareket olmazsa lambayı söndürür; odada biri dolaştıkça süre her seferinde yeniden başlar. Sensörün jumper'ını H (tekrarlı) konumuna, Tx potunu en kısa süreye al ve süreyi kod belirlesin. Ayrıntılar PIR hareket sensörü ve LDR ışık sensörü yazılarında.

Gaz ve yangın alarmı

MQ-2'nin içinde bir ısıtıcıyla sıcak tutulan kalay dioksit bir katman vardır; LPG, metan, bütan, hidrojen, alkol ve duman bu katmanın direncini değiştirir. Modülün AO pini, gaz arttıkça yükselen bir gerilim verir. Sensör her açılışta bir süre ısınmalıdır, bu yüzden kod ilk 60 saniye gaz alarmını yok sayar. Alev sensörü ise ateşin yaydığı 760–1100 nm'lik kızılötesi ışığı algılar; çoğu modülde alev görülünce DO çıkışı LOW olur ve kartın üzerindeki ikinci LED yanar, ama kendi modülünü uzaktan tuttuğun bir çakmakla mutlaka doğrula. Gaz algılandığında alarm çalar ve pencere havalandırma için açılır; alev algılandığında ise pencere kapalı kalır, çünkü taze hava ateşi büyütür. Eşik ayarı ve diğer MQ sensörleri MQ-2 gaz sensörü yazısında.

Bu alarm bir öğrenme projesidir; gerçek bir evde gaz kaçağına ya da yangına karşı tek koruma olarak asla kullanma, sertifikalı ticari dedektörlerin yerini tutmaz. Ayrıca gerçek bir gaz kaçağında elektrikli bir cihazı açıp kapatmak, hatta bir motoru çalıştırmak bile kıvılcım çıkarabilir; gerçek sistemler bu yüzden patlamaya dayanıklı (Ex sertifikalı) ekipman kullanır. Maketteki pencere servosu ve röleler yalnızca fikri göstermek içindir.

Sıcaklık, nem ve otomatik fan

DHT11 sıcaklığı 0–50 °C aralığında ±2 °C, nemi %20–90 aralığında ±%5 doğrulukla ölçer ve saniyede en fazla bir kez okunabilir; kod onu iki saniyede bir okur. Fan için tek bir eşik yerine histerezis kullanıyoruz: fan 28 °C'de çalışır, ancak sıcaklık 26 °C'ye düşünce durur. Tek eşik olsaydı sıcaklık 27 ile 28 °C arasında gidip geldikçe röle sürekli tıklayıp hem kendini hem fanı yorardı. Sensör okuma hatası verip "nan" döndürürse kod o ölçümü atlar ve son geçerli değeri kullanır. Daha hassas ölçüm istersen DHT22 aynı kodla çalışır, yalnızca DHT11 yerine DHT22 yazman yeterli; ayrıntılar DHT11 sıcaklık ve nem sensörü yazısında.

RFID kartlı ve servolu kapı

RC522, 13,56 MHz'lik MIFARE kartları ve anahtarlıkları 3–5 cm mesafeden okur. Her kartın kendine özgü bir kimlik numarası (UID) vardır; kod okunan UID'yi yetkili kart listesiyle karşılaştırır. Eşleşirse servo kapıyı 90 dereceye açar, kısa bir bip sesi gelir ve LCD'de "Hos geldin!" yazar; 5 saniye sonra kapı kendiliğinden kapanır. Tanımsız bir kartta uzun bir bip çalar. Kendi kartlarının UID'sini öğrenmek için kodu yükle, Seri Monitör'ü 9600 baud ile aç ve kartı okut: ekranda "UID: A1 B2 C3 D4" gibi bir satır görürsün. Bu baytları koddaki CARDS listesine 0xA1 biçiminde yaz; tek haneli görünen bir baytın başına sıfır ekle (5 yerine 0x05). Yalnızca UID'ye bakan bir kilit eğitim için uygundur, gerçek bir güvenlik sağlamaz; nedenini RFID RC522 yazısında anlattık.

Pencere ve perde

Pencere için ikinci bir SG90 yeterlidir: menteşeli küçük bir pleksi pencereyi servo koluna bir telle bağlarsın; 0 derece kapalı, 90 derece açık demektir. Servoya önce write(0) deyip sonra attach() çağırmak, açılışta servonun 90 dereceye sıçrayıp pencereyi çarpmasını önler. Perde ise daha uzun bir yol ister: kumaşı ince bir çubuğa sarıp çubuğu döndürmen gerekir. Bunun için 28BYJ-48 step motor ve ULN2003 sürücü sessiz ve hassastır ama 4 pin ister; Uno'da pin kalmadığı için perdeyi ESP32 sürümüne ya da Arduino Mega'ya bırakmak mantıklıdır. Tek pinle yetinmek istersen FS90R sürekli dönen servo da iş görür, ancak konumunu bilmediği için perdeyi süreyle açıp kapatırsın. Pencereyi yağmurda kendiliğinden kapatmak için bir yağmur sensörü eklemek de güzel bir genişletmedir.

Röleyle lamba ve fan

5 V röle modülü
Röle modülü: Arduino'nun küçük sinyaliyle ayrı bir devredeki lambayı ya da fanı açıp kapatır; yük COM, NO ve NC uçlarına bağlanır.

Arduino'nun bir pini güvenle ancak 20 mA civarında akım verebilir (mutlak sınır 40 mA); fan ve lamba ise çok daha fazlasını ister. Röle modülü bu yüzden araya girer: IN pinine gelen sinyal bir elektromıknatısı çalıştırır ve ayrı bir devredeki kontakları kapatır. Yükü COM ve NO uçlarına bağla; böylece Arduino kapalıyken ya da yeniden başlarken lamba da kapalı kalır. Bu modüllerin çoğu aktif LOW çalışır, yani LOW verince röle çeker; koddaki RELAY_ON ve RELAY_OFF sabitleri bunun için var. Kod, setup() içinde pini çıkış yapmadan önce HIGH yazar; böylece Arduino açılırken röle bir anlığına bile çekmez. Fan sık açılıp kapanmasın diye histerezis kullandık, lamba ise PIR süresi dolana kadar yanık kalır.

Maket için 5 V ya da 12 V'luk LED lamba ve fan kullan. Rölenin üzerinde "10 A 250 V AC" yazsa da 220 V şebeke gerilimi öldürücüdür; okul projesinde yalnızca bir yetişkinin gözetiminde, kapalı bir kutu içinde ve sigortalı olarak bağlanmalıdır. Güvenli bağlantı kuralları Röle modülü nedir? yazısında.

Tüm sistemin kodu (Arduino Uno)

Akıllı evin kodundaki en önemli kural, hiçbir modülün diğerini beklememesidir. Kapıyı delay(5000) ile 5 saniye açık tutsaydın o süre boyunca ne gaz alarmı çalışır ne de PIR okunurdu. Bu yüzden her modülü ayrı bir fonksiyona koyduk; loop() bu fonksiyonları sırayla, saniyede yüzlerce kez çağırır. Zaman gerektiren işler millis() ile ölçülür, her modülün durumu da lightOn, fanOn, doorOpen ve alarmOn gibi değişkenlerde tutulur. Bütün ayarlar kodun en üstünde sabit olarak durur, eşikleri değiştirmek için kodun içinde dolaşman gerekmez. Bu yaklaşımın mantığını millis() ve delay() yazısında bulabilirsin. Kodu derlemek için Kütüphane Yöneticisi'nden MFRC522, Adafruit'in DHT sensor library ve Frank de Brabander'in LiquidCrystal I2C kütüphanelerini kur; bağımlılıkları sorarsa hepsini kur. Servo, SPI ve Wire, Arduino IDE ile birlikte gelir.

Arduino (C++)
1#include <SPI.h>
2#include <MFRC522.h>
3#include <Servo.h>
4#include <DHT.h>
5#include <Wire.h>
6#include <LiquidCrystal_I2C.h>
7
8// Pinler / Pins
9const byte PIR_PIN = 2, FLAME_PIN = 3, DHT_PIN = 4, BUZZER_PIN = 5, DOOR_PIN = 6;
10const byte LAMP_RELAY = 7, FAN_RELAY = 8, RST_PIN = 9, SS_PIN = 10;
11const byte GAS_PIN = A0, LDR_PIN = A1, WINDOW_PIN = A2;
12
13// Ayarlar / Settings
14const byte RELAY_ON = LOW, RELAY_OFF = HIGH;     // aktif LOW röle / active-LOW relay
15const byte FLAME_ACTIVE = LOW;                   // alev görünce DO LOW olur / DO goes LOW on flame
16const int GAS_LIMIT = 400;                       // temiz havaya göre ayarla / tune in clean air
17const int DARK_LIMIT = 300;                      // bunun altı karanlık / below this is dark
18const float FAN_ON = 28.0, FAN_OFF = 26.0;       // fan histerezisi (°C) / fan hysteresis (°C)
19const unsigned long LIGHT_MS = 20000;            // son hareketten sonra ışık / light after last motion
20const unsigned long DOOR_MS = 5000;              // kapı açık kalma süresi / door open time
21const unsigned long WARMUP_MS = 60000;           // MQ-2 ve PIR ısınması / MQ-2 and PIR warm-up
22
23const byte CARDS[][4] = {                        // yetkili kart UID'leri / authorised card UIDs
24  {0xA1, 0xB2, 0xC3, 0xD4},
25  {0x12, 0x34, 0x56, 0x78}
26};
27
28MFRC522 rfid(SS_PIN, RST_PIN);
29Servo door, window;
30DHT dht(DHT_PIN, DHT11);
31LiquidCrystal_I2C lcd(0x27, 16, 2);
32
33float tempC = 0, hum = 0;
34int gas = 0;
35bool lightOn = false, fanOn = false, doorOpen = false, alarmOn = false;
36unsigned long lastMotion = 0, doorAt = 0, lastDht = 0, lastLcd = 0, beepUntil = 0;
37
38void setup() {
39  Serial.begin(9600);
40  digitalWrite(LAMP_RELAY, RELAY_OFF); pinMode(LAMP_RELAY, OUTPUT);  // açılışta kapalı / off at boot
41  digitalWrite(FAN_RELAY, RELAY_OFF);  pinMode(FAN_RELAY, OUTPUT);
42  pinMode(PIR_PIN, INPUT);
43  pinMode(FLAME_PIN, INPUT);
44  pinMode(BUZZER_PIN, OUTPUT);
45  door.write(0);   door.attach(DOOR_PIN);        // önce açı, sonra attach / angle first, then attach
46  window.write(0); window.attach(WINDOW_PIN);
47  dht.begin();
48  SPI.begin();
49  rfid.PCD_Init();
50  lcd.init();
51  lcd.backlight();
52  lcd.print(F("BlueGrays Ev"));
53}
54
55void loop() {
56  unsigned long now = millis();
57  handleLight(now);
58  handleClimate(now);
59  handleSafety(now);
60  handleDoor(now);
61  bool beep = (long)(beepUntil - now) > 0;
62  digitalWrite(BUZZER_PIN, beep || (alarmOn && (now / 250) % 2));   // alarmda kesik bip / pulsed beep on alarm
63  updateLcd(now);
64}
65
66// 1) Hareketle ışık / motion light
67void handleLight(unsigned long now) {
68  if (now < WARMUP_MS) return;                   // PIR ısınıyor / PIR warming up
69  if (digitalRead(PIR_PIN) == HIGH) {
70    lastMotion = now;
71    if (analogRead(LDR_PIN) < DARK_LIMIT) lightOn = true;   // yalnız karanlıkta yak / only when dark
72  }
73  if (lightOn && now - lastMotion > LIGHT_MS) lightOn = false;
74  digitalWrite(LAMP_RELAY, lightOn ? RELAY_ON : RELAY_OFF);
75}
76
77// 2) Sıcaklık ve fan / temperature and fan
78void handleClimate(unsigned long now) {
79  if (now - lastDht < 2000) return;              // DHT11'i sık okuma / don't read DHT11 too often
80  lastDht = now;
81  float t = dht.readTemperature();
82  float h = dht.readHumidity();
83  if (isnan(t) || isnan(h)) return;              // okuma hatası / read error
84  tempC = t;
85  hum = h;
86  if (tempC >= FAN_ON) fanOn = true;
87  if (tempC <= FAN_OFF) fanOn = false;
88  digitalWrite(FAN_RELAY, fanOn ? RELAY_ON : RELAY_OFF);
89}
90
91// 3) Gaz ve yangın / gas and fire
92void handleSafety(unsigned long now) {
93  gas = analogRead(GAS_PIN);
94  bool gasAlarm = now > WARMUP_MS && gas > GAS_LIMIT;
95  bool fire = digitalRead(FLAME_PIN) == FLAME_ACTIVE;
96  alarmOn = gasAlarm || fire;
97  window.write(gasAlarm && !fire ? 90 : 0);      // gazda aç, yangında kapalı tut / open on gas, shut on fire
98}
99
100// 4) RFID kapı / RFID door
101void handleDoor(unsigned long now) {
102  if (doorOpen && now - doorAt > DOOR_MS) {
103    door.write(0);                               // süre dolunca kapat / close when time is up
104    doorOpen = false;
105  }
106  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;
107  Serial.print(F("UID:"));                       // yeni kartın UID'sini öğren / learn a new card's UID
108  for (byte i = 0; i < rfid.uid.size; i++) {
109    Serial.print(' ');
110    Serial.print(rfid.uid.uidByte[i], HEX);
111  }
112  Serial.println();
113  if (isAllowed(rfid.uid.uidByte)) {
114    door.write(90);
115    doorOpen = true;
116    doorAt = now;
117    beepUntil = now + 100;                       // kısa bip: hoş geldin / short beep: welcome
118  } else {
119    beepUntil = now + 800;                       // uzun bip: yetkisiz kart / long beep: unknown card
120  }
121  rfid.PICC_HaltA();
122}
123
124bool isAllowed(const byte *uid) {
125  for (byte i = 0; i < sizeof(CARDS) / 4; i++) {
126    if (memcmp(uid, CARDS[i], 4) == 0) return true;
127  }
128  return false;
129}
130
131// 5) Ekran / display
132void updateLcd(unsigned long now) {
133  if (now - lastLcd < 1000) return;
134  lastLcd = now;
135  lcd.setCursor(0, 0);
136  lcd.print(F("T:"));
137  lcd.print(tempC, 0);
138  lcd.print(F("C Nem:%"));
139  lcd.print(hum, 0);
140  lcd.print(F("   "));
141  lcd.setCursor(0, 1);
142  if (alarmOn) {
143    lcd.print(F("!! ALARM !!     "));
144  } else if (doorOpen) {
145    lcd.print(F("Hos geldin!     "));
146  } else {
147    lcd.print(F("Gaz:"));
148    lcd.print(gas);
149    lcd.print(F("        "));
150  }
151}
FonksiyonGöreviNe sıklıkla?
handleLight()PIR ve LDR'ye göre lamba rölesini açar, 20 saniye hareket yoksa kapatırHer döngüde (ilk 60 saniye hariç)
handleClimate()DHT11'i okur, fanı 28/26 °C histerezisle sürer2 saniyede bir
handleSafety()MQ-2 ve alev sensörünü okur, alarmı ve pencereyi yönetirHer döngüde
handleDoor()Kartı okur, UID'yi Seri Monitör'e yazar, kapıyı açıp kapatırHer döngüde
updateLcd()Sıcaklık, nem, gaz değeri ya da durum mesajını gösterirSaniyede bir
loop() içindeki buzzer satırıKart bip sesini ve kesik alarm sesini üretirHer döngüde

Bu kod derlendiğinde Uno'nun program belleğinin yaklaşık %38'ini, RAM'in ise %28'ini kullanır; yani bellekte yer var, ama pinlerden yalnızca A3 boş kaldı. A3'e bir buton ya da yağmur sensörü bağlayabilirsin; daha fazlası için Arduino Mega'ya ya da ESP32'ye geçmek gerekir. Sabit metinleri F() içine yazmak, RAM kullanımını düşük tutmanın en kolay yoludur.

Telefondan kontrol: ESP32 web sunucusu

ESP32 geliştirme kartı
ESP32: Wi-Fi ve Bluetooth'u içinde barındırır; akıllı evi telefondan kontrol etmek için ek bir modül gerekmez.

Uno'nun Wi-Fi'si yoktur; akıllı evi telefondan yönetmenin en kolay yolu beyni bir ESP32 ile değiştirmektir. Aşağıdaki kod ESP32'yi ev ağına bağlar ve küçük bir web sunucusu başlatır. Telefonun aynı Wi-Fi ağındayken Seri Monitör'de görünen IP adresini tarayıcıda açtığında lamba, fan, kapı ve pencere için dört büyük düğme ile güncel sıcaklık, nem ve gaz değerini görürsün; sayfa her 10 saniyede kendini yeniler. Her düğme ESP32'ye hangi cihazın açılıp kapanacağını söyleyen kısa bir istek gönderir; ESP32 durumu değiştirir ve seni ana sayfaya geri yönlendirir. Servolar için Kütüphane Yöneticisi'nden ESP32Servo kütüphanesini kur, çünkü standart Servo kütüphanesi ESP32'de çalışmaz.

Arduino (C++)
1#include <WiFi.h>
2#include <WebServer.h>
3#include <ESP32Servo.h>
4#include <DHT.h>
5
6const char* ssid = "AgAdi";                 // Wi-Fi adın / your Wi-Fi name
7const char* password = "Sifre123";          // Wi-Fi şifren / your Wi-Fi password
8
9const int LAMP_RELAY = 26, FAN_RELAY = 27;
10const int DOOR_PIN = 32, WINDOW_PIN = 33;
11const int DHT_PIN = 13, GAS_PIN = 34;       // GPIO 34: ADC1, bölücüyle / ADC1, through a divider
12const int RELAY_ON = LOW, RELAY_OFF = HIGH; // aktif LOW röle / active-LOW relay
13
14WebServer server(80);
15Servo door, window;
16DHT dht(DHT_PIN, DHT11);
17
18bool lamp = false, fan = false, doorOpen = false, windowOpen = false;
19float tempC = NAN, hum = NAN;
20unsigned long lastDht = 0;
21
22void apply() {                              // durumu donanıma uygula / push the state to the hardware
23  digitalWrite(LAMP_RELAY, lamp ? RELAY_ON : RELAY_OFF);
24  digitalWrite(FAN_RELAY, fan ? RELAY_ON : RELAY_OFF);
25  door.write(doorOpen ? 90 : 0);
26  window.write(windowOpen ? 90 : 0);
27}
28
29String button(const char* id, const char* label, bool on) {
30  return String("<a class='b ") + (on ? "on" : "off") + "' href='/set?d=" + id +
31         "&v=" + (on ? "0" : "1") + "'>" + label + (on ? ": ON" : ": OFF") + "</a>";
32}
33
34void handleRoot() {
35  String html = "<!DOCTYPE html><html><head><meta charset='utf-8'>"
36                "<meta name='viewport' content='width=device-width,initial-scale=1'>"
37                "<meta http-equiv='refresh' content='10'><title>BlueGrays Ev</title>"
38                "<style>body{font-family:sans-serif;text-align:center}"
39                ".b{display:block;margin:12px auto;padding:18px;max-width:320px;border-radius:10px;"
40                "color:#fff;text-decoration:none;font-size:20px}"
41                ".on{background:#2e7d32}.off{background:#607d8b}</style></head><body>"
42                "<h2>BlueGrays Akıllı Ev</h2>";
43  html += "<p>" + String(tempC, 1) + " °C | %" + String(hum, 0) +
44          " | Gaz/Gas: " + String(analogRead(GAS_PIN)) + "</p>";
45  html += button("lamp", "Lamba / Lamp", lamp);
46  html += button("fan", "Fan", fan);
47  html += button("door", "Kapı / Door", doorOpen);
48  html += button("window", "Pencere / Window", windowOpen);
49  html += "</body></html>";
50  server.send(200, "text/html", html);
51}
52
53void handleSet() {                          // /set?d=lamp&v=1
54  String d = server.arg("d");
55  bool v = server.arg("v") == "1";
56  if (d == "lamp") lamp = v;
57  else if (d == "fan") fan = v;
58  else if (d == "door") doorOpen = v;
59  else if (d == "window") windowOpen = v;
60  apply();
61  server.sendHeader("Location", "/");       // ana sayfaya dön / back to the main page
62  server.send(303);
63}
64
65void setup() {
66  Serial.begin(115200);
67  door.attach(DOOR_PIN, 500, 2400);
68  window.attach(WINDOW_PIN, 500, 2400);
69  pinMode(LAMP_RELAY, OUTPUT);
70  pinMode(FAN_RELAY, OUTPUT);
71  apply();                                  // her şey kapalı başlar / everything starts off
72  dht.begin();
73  WiFi.begin(ssid, password);
74  while (WiFi.status() != WL_CONNECTED) {
75    delay(500);
76    Serial.print('.');
77  }
78  Serial.println();
79  Serial.println(WiFi.localIP());           // bu adresi telefonda aç / open this address on your phone
80  server.on("/", handleRoot);
81  server.on("/set", handleSet);
82  server.begin();
83}
84
85void loop() {
86  server.handleClient();
87  if (millis() - lastDht > 2000) {          // 2 sn'de bir ölç / measure every 2 s
88    lastDht = millis();
89    float t = dht.readTemperature();
90    float h = dht.readHumidity();
91    if (!isnan(t) && !isnan(h)) {
92      tempC = t;
93      hum = h;
94    }
95  }
96}

Bu kod yalnızca uzaktan kontrol edilen parçaları içerir. Uno kodundaki handleLight(), handleSafety() ve handleDoor() fonksiyonlarını da buraya taşıyabilirsin: pin numaralarını tablodaki ESP32 sütununa göre değiştir, Servo yerine ESP32Servo kullan ve ESP32'nin ADC'si 0–4095 arasında değer verdiği için GAS_LIMIT ile DARK_LIMIT eşiklerini yeniden ölç. Sayfa şifresizdir, yani ev ağındaki herkes kapıyı açabilir; WebServer kütüphanesinin authenticate() fonksiyonuyla basit bir parola eklemek iyi bir alışkanlıktır. Gerçek zamanlı güncellenen bir panel için ESP32 WebSocket yazısına göz at.

ESP32'nin pinleri 3,3 V verir. Aktif LOW ve optokuplörlü bir 5 V röle modülünde 3,3 V'luk HIGH sinyali röleyi her zaman tam bırakamayabilir; röle hiç kapanmıyorsa 3,3 V ile tetiklenebilen bir modül seç ya da JD-VCC jumper'ı olan modüllerde jumper'ı çıkarıp VCC'yi 3,3 V'tan, JD-VCC'yi 5 V'tan besle. Okulda Wi-Fi yoksa bağlantı satırları yerine WiFi.softAP("BlueGrays-Ev", "12345678") yazarak ESP32'nin kendi ağını kurabilirsin; telefon bu ağa bağlanıp 192.168.4.1 adresini açar.

Blynk ile her yerden kontrol

ESP32 web sunucusuna yalnızca aynı ağdan erişilebilir. Evin dışından, mobil veriyle de kontrol etmek istiyorsan Blynk IoT gibi bir bulut platformu işini kolaylaştırır: arayüzü telefondaki uygulamada sürükle-bırak ile kurarsın, ESP32 de Blynk sunucusuna bağlanır. Blynk.Cloud'da bir şablon (template) oluştur; V0 (tam sayı, 0–1, lamba), V1 (ondalıklı, sıcaklık) ve V2 (ondalıklı, nem) adlı üç datastream ekle, bir cihaz tanımla ve sana verilen Template ID, Template Name ve Auth Token değerlerini kodun en üstüne yapıştır. Uygulamada V0'a bir Switch, V1 ve V2'ye birer Gauge bağlaman yeterlidir. Ücretsiz planda cihaz, datastream ve aylık mesaj sayısı sınırlıdır; bu yüzden sensör verisini her saniye değil beş saniyede bir gönderiyoruz. Ayrıntılı kurulum ESP32 ile Blynk IoT rehberinde.

Arduino (C++)
1#define BLYNK_TEMPLATE_ID "TMPLxxxxxxx"     // Blynk konsolundan kopyala / copy from the Blynk console
2#define BLYNK_TEMPLATE_NAME "Akilli Ev"
3#define BLYNK_AUTH_TOKEN "TokenBuraya"
4
5#include <WiFi.h>
6#include <BlynkSimpleEsp32.h>
7#include <DHT.h>
8
9const int LAMP_RELAY = 26;                  // aktif LOW röle / active-LOW relay
10DHT dht(13, DHT11);
11BlynkTimer timer;
12
13BLYNK_WRITE(V0) {                           // uygulamadaki anahtar / switch widget in the app
14  digitalWrite(LAMP_RELAY, param.asInt() ? LOW : HIGH);
15}
16
17BLYNK_CONNECTED() {
18  Blynk.syncVirtual(V0);                    // bağlanınca son durumu al / restore the last state
19}
20
21void sendSensors() {
22  float t = dht.readTemperature();
23  float h = dht.readHumidity();
24  if (isnan(t) || isnan(h)) return;
25  Blynk.virtualWrite(V1, t);                // sıcaklık / temperature
26  Blynk.virtualWrite(V2, h);                // nem / humidity
27}
28
29void setup() {
30  pinMode(LAMP_RELAY, OUTPUT);
31  digitalWrite(LAMP_RELAY, HIGH);           // açılışta kapalı / off at boot
32  dht.begin();
33  Blynk.begin(BLYNK_AUTH_TOKEN, "AgAdi", "Sifre123");
34  timer.setInterval(5000L, sendSensors);    // 5 sn'de bir: mesaj kotasını korur / every 5 s saves quota
35}
36
37void loop() {
38  Blynk.run();
39  timer.run();
40}

Hangi kontrol yöntemini seçmelisin?

YöntemGerekenlerEvin dışındanZorlukEn uygun durum
ESP32 web sunucusuESP32 ve ev Wi-Fi'siHayır, yalnızca aynı ağOrtaOkul sunumu, internetsiz gösteri, tamamen kendi kodun
Blynk IoTESP32, internet ve Blynk hesabıEvetKolayHazır arayüz, grafik ve bildirim
Bluetooth (HC-05)Uno, HC-05 ve bir Android uygulamasıHayır, yaklaşık 10 mKolayUno ile kalmak isteyenler (iPhone ile çalışmaz)
Telegram botuESP32 ve internetEvetOrtaAlarm bildirimi ve kısa komutlar
MQTT + Home AssistantESP32 ve yerel bir sunucu (ör. Raspberry Pi)Evet, ayar gerekirİleriGerçek ev otomasyonu

Okul sunumu için ESP32 web sunucusu en güvenli seçimdir: internete ya da bir buluta bağımlı değildir ve salonda Wi-Fi olmasa bile kendi ağıyla çalışır. Uno ile kalıp yalnızca Bluetooth eklemek istersen kendi Android uygulamanı App Inventor ile yapabilirsin; ancak Uno'da pin kalmadığı için HC-05'e yer açmak adına LCD'den ya da pencere servosundan vazgeçmen gerekir. Alarm anında telefona mesaj almak ESP32 Telegram botu ile, evi gerçek cihazlarla birleştirmek ise MQTT ve Home Assistant ile mümkündür.

Raspberry Pi Pico ile akıllı ev

Aynı sistemi Raspberry Pi Pico ile MicroPython'da da kurabilirsin; Wi-Fi'li Pico W ise ESP32 gibi telefondan kontrol edilebilir (bkz. Pico W web sunucusu). Pico 3,3 V ile çalıştığı için ESP32'deki kurallar burada da geçerlidir: LDR bölücüsünü 3V3'ten besle, 5 V'luk analog çıkışları bölücüyle düşür ve 3,3 V ile tetiklenebilen bir röle modülü seç. Analog girişler yalnızca GP26, GP27 ve GP28'dir. Aşağıdaki kod, hareketle yanan ışık modülünün MicroPython karşılığıdır:

MicroPython
1from machine import Pin, ADC
2import time
3
4pir = Pin(15, Pin.IN)                  # PIR OUT (3,3 V çıkış / 3.3 V output)
5ldr = ADC(26)                          # GP26: bölücü 3V3'ten / divider fed from 3V3
6relay = Pin(14, Pin.OUT, value=1)      # aktif LOW röle, kapalı başla / active-LOW relay, start off
7
8LIGHT_MS = 20000                       # son hareketten sonra ışık / light after last motion
9DARK = 20000                           # bunun altı karanlık / below this is dark
10last = time.ticks_ms()
11on = False
12
13while True:
14    now = time.ticks_ms()
15    if pir.value():
16        last = now
17        if ldr.read_u16() < DARK:      # yalnız karanlıkta yak / only when dark
18            on = True
19    if on and time.ticks_diff(now, last) > LIGHT_MS:
20        on = False
21    relay.value(0 if on else 1)
22    time.sleep_ms(50)

Okul sunumu için ipuçları

  • Bir problemle başla: "Ev boşken unutulan ışıklar, fark edilmeyen gaz kaçağı, anahtarını kaybeden yaşlılar" gibi gerçek bir sorunu tek cümleyle anlat, sonra maketinin bu sorunlara nasıl cevap verdiğini göster.
  • Blok diyagram hazırla: Solda sensörler, ortada Arduino, sağda eylemciler olsun; okları kural cümleleriyle etiketle ("karanlık + hareket → lamba"). Jüri kodu okumaz ama bu diyagramı hatırlar.
  • Canlı gösteri senaryosu yaz: Kartı okut ve kapının açılmasını göster, elini PIR'in önünde salla, kolonyalı bir pamuğu MQ-2'ye yaklaştır (alkol de sensörü tetikler), DHT11'i parmaklarınla ısıt. Her gösteri 10–20 saniye sürsün.
  • Açık ateş yok: Karton maketin içinde çakmak ya da mum yakma. Çoğu alev sensörü yakından tutulan bir TV kumandasının kızılötesi ışığına da tepki verir; önceden dene ve gösteride bunu kullan.
  • Eşikleri salona göre ayarla: Gösteri günü salon 22 °C ise fanın 28 °C'yi beklemesi gösteriyi bozar; FAN_ON değerini ortamın 2–3 derece üstüne çek ki parmaklarınla ısıttığında fan çalışsın.
  • Ölç ve sayıyla anlat: Örneğin bir gün boyunca lambanın PIR'li ve PIR'siz kaç dakika yandığını kaydet ve tasarrufu yüzde olarak ver. Sayı içeren bir sonuç, "çalışıyor" demekten çok daha güçlüdür.
  • Yedek plan hazırla: Çalışan sistemin videosunu çek; yedek kablo, servo ve adaptör götür; kart numaralarını ve Wi-Fi ayarlarını bir kâğıda yaz.
  • Jüri sorularına hazırlan: "Gerçek evde nasıl olurdu?" sorusu için 220 V güvenliği, sertifikalı dedektörler, RFID güvenliği ve elektrik kesildiğinde kapının ne yapacağı üzerine kısa cevaplar hazırla.
Projeyi TÜBİTAK 4006 ya da 2204 gibi bir yarışmaya hazırlıyorsan "akıllı ev yaptım" demek yerine ölçülebilir bir araştırma sorusu kur; örneğin "PIR ve LDR'li aydınlatma, sürekli yanan lambaya göre ne kadar enerji tasarrufu sağlar?" Fikirler ve değerlendirme ölçütleri için TÜBİTAK Arduino proje fikirleri yazısına göz at.

Sık yapılan hatalar ve çözümleri

BelirtiOlası sebepÇözüm
Servo hareket edince Arduino resetleniyor ya da LCD bozuluyorServolar ve röleler Arduino'nun 5V pininden besleniyorAyrı 5 V 2–3 A adaptör, ortak GND, servo hattına 470–1000 µF kondansatör
Röle ters çalışıyor, açılışta hep çekiliModül aktif LOWRELAY_ON ve RELAY_OFF değerlerini yer değiştir
Her açılışta alarm çalıyorMQ-2 ısınıyor, PIR ortamı öğreniyorWARMUP_MS süresini koru; MQ-2'yi ilk kullanımda uzun süre açık bırak
Lamba gündüz yanıyor ya da sönüp hemen yeniden yanıyorDARK_LIMIT yanlış ya da LDR lambanın ışığını görüyorEşiği Seri Monitör'deki değerlere göre ayarla, LDR'yi dış duvara taşı
Kart okunmuyorRC522 kablolaması hatalı ya da modül 5 V'a bağlanmışSPI pinlerini kontrol et, modülü DumpInfo örneğiyle test et
DHT11 nan değeri veriyorDATA kablosu yanlış pinde ya da çıplak sensörde pull-up direnci yokPini kontrol et, modül kullan ya da DATA ile VCC arasına 10 kΩ ekle
Servo ara sıra titriyorZayıf besleme; DHT11 okunurken kesmeler kısa süre dururBeslemeyi güçlendir; gerekirse servo hareketini bitirince detach() et
ESP32'de gaz değeri hep 0 ya da 4095ADC2 pini Wi-Fi ile çakışıyor ya da bölücü yokGPIO 34 ya da 35 gibi bir ADC1 pini ve gerilim bölücü kullan
Telefon ESP32'nin sayfasını açmıyorTelefon misafir ağında ya da mobil veride, ağ 5 GHzAynı 2,4 GHz ağa bağlan, IP adresini Seri Monitör'den al

Arduino akıllı ev projesi; sensör okumayı, karar vermeyi, motor ve röle sürmeyi, güç planlamayı ve kablosuz kontrolü tek bir çalışmada birleştirdiği için hem öğrenmek hem de sunmak için mükemmel bir konudur. Tek modülle başla, her adımı test et ve sistemi yavaş yavaş büyüt. BlueGrays uygulamasında akıllı merdiven aydınlatması, PIR ve LDR'li akıllı aydınlatma, alev ve gaz alarmı, RFID kapı kilidi ve ESP32 web sunucusu projelerini devre şemaları ve kodlarıyla adım adım bulabilirsin.

Sıkça sorulan sorular

Arduino ile akıllı ev projesi yapmak için hangi malzemeler gerekir?

Temel bir maket için Arduino Uno ya da ESP32, PIR hareket sensörü, LDR, MQ-2 gaz sensörü, alev sensörü, DHT11, RC522 RFID modülü, iki SG90 servo, iki kanallı röle modülü, buzzer ve I2C LCD yeterlidir. Bunlara breadboard, jumper kablolar, 5 V 2–3 A'lik bir adaptör ve maket malzemesi eklenir. Modüllerin çoğu ucuzdur; bütçenin büyük kısmını kart, ekran, adaptör ve maket gövdesi oluşturur.

Akıllı ev projesi için Arduino mu ESP32 mi daha iyi?

Telefondan kontrol istemiyorsan Arduino Uno daha kolaydır: 5 V'luk modüllerle doğrudan çalışır ve örneklerin çoğu ona göre yazılmıştır. Wi-Fi ile telefondan kontrol, bildirim ya da daha fazla pin gerekiyorsa ESP32 seç; ancak pinleri 3,3 V olduğu için röle modülünde ve 5 V'luk analog sensörlerde ek önlem alman gerekir.

Arduino akıllı evi telefondan nasıl kontrol ederim?

En kolay yol ESP32 kullanıp bir web sunucusu kurmaktır; aynı Wi-Fi ağındaki telefonun tarayıcısından düğmelerle lambayı, fanı ve kapıyı yönetirsin. Evin dışından erişmek için Blynk IoT gibi bir bulut uygulaması, Arduino Uno ile kalmak istersen HC-05 Bluetooth modülü ve bir Android uygulaması kullanabilirsin.

Akıllı ev maketi neyle yapılır?

En pratik malzeme 5 mm'lik dekota ya da maket kartonudur (foam board); maket bıçağıyla kesilir ve sıcak silikonla yapıştırılır. Daha sağlam bir gövde için 3–4 mm'lik MDF kullanabilirsin. Yaklaşık 50×40 cm'lik bir taban, çıkarılabilir bir çatı ve elektronik için ayrı bir teknik bölme işini çok kolaylaştırır.

Arduino ile 220 V lamba açılıp kapatılabilir mi?

Evet, 5 V'luk bir röle modülüyle mümkündür; röle 220 V'luk devreyi Arduino'dan elektriksel olarak ayırır. Ancak şebeke gerilimi öldürücüdür: bağlantıyı fiş prizden çekiliyken yap, devreyi kapalı ve yalıtkan bir kutuya koy ve öğrenci projelerinde bir yetişkinin gözetimi olmadan çalışma. Maket için 5 V ya da 12 V'luk lambalar yeterlidir.

Arduino akıllı ev projesi TÜBİTAK için yeterli mi?

Akıllı ev çok yaygın bir konu olduğu için yalnızca çalışan bir maket çoğu zaman yeterli olmaz. Projeyi ölçülebilir bir araştırma sorusuna bağlarsan, örneğin hareketle yanan aydınlatmanın enerji tasarrufunu ya da gaz alarmının tepki süresini ölçersen, jürinin gözünde çok daha güçlü olur.

Tüm projeleri gör
DHT11 İle Sıcaklık Ve Nem
#55Orta

DHT11 İle Sıcaklık Ve Nem

Odan kaç derece, hava nemli mi, kuru mu? DHT11 sensörü sıcaklığı ve nemi ölçer, Arduino da bu değerleri iki satırlık LCD ekrana yazar ve birkaç saniyede bir yeniler. Sensöre bir şey olursa ekranda hat

4.7(47)
64
Akıllı Merdiven ve Koridor Aydınlatması
#82Orta
Premium

Akıllı Merdiven ve Koridor Aydınlatması

Merdivene ya da koridora adım attığında ışıklar senin gittiğin yönde, basamak basamak yanar. Girişte ve çıkışta birer mesafe sensörü vardır; hangisinin önünden geçersen sekiz LED o uçtan başlayarak ya

5.0(35)
51
ESP32 Akıllı Aydınlatma (PIR + LDR + Röle + OLED)
#141İleri
Premium

ESP32 Akıllı Aydınlatma (PIR + LDR + Röle + OLED)

ESP32, PIR hareket sensörü, LDR ışık sensörü ve röle modülü ile evinin koridorunu, tuvaletini veya kilerini akıllı aydınlatmaya dönüştürüyoruz. Klasik "karanlıkta hareket algılanınca ışık yansın" senaryosunu inşa ediyoruz — ortam aydınlıksa hareket olsa bile ışık yanmaz, böylece gündüz gereksiz yere yanmaz ve enerji tasarrufu sağlanır. Işık 30 saniye yanık kalır; hareket devam ederse timer otomatik sıfırlanır ve süre uzar. SSD1306 OLED ekranda büyük fontlarla durum (AÇIK / GÜNDÜZ / BEKLE), geri

4.3(6)
11
Hareket Sensörü İle Kapı Zili ve Işık
#25Orta
Premium

Hareket Sensörü İle Kapı Zili ve Işık

Kapına biri yaklaştığında, daha zile basmadan haberin olur. Hareket sensörü birini fark edince LED yanar ve buzzer inceden kalına üç notalık bir zil sesi çalar; melodi bitince ışık söner ve sensör yen

4.7(54)
71
Alev ve Gaz Sensörü Alarm
#52İleri
Premium

Alev ve Gaz Sensörü Alarm

Gaz kaçtığında ya da bir yerde alev çıktığında seni hemen uyaran küçük bir bekçi. Gaz sensörü havadaki gazı, alev sensörü ateşin ışığını izler; her şey yolundayken yeşil LED yanar, biri tehlike sezinc

4.8(52)
67
ESP32 RFID Kapı Kilidi (RC522 + Servo + OLED + Buzzer + LED)
#137İleri
Premium

ESP32 RFID Kapı Kilidi (RC522 + Servo + OLED + Buzzer + LED)

ESP32 ile RC522 RFID modülü, SG90 servo motoru, SSD1306 OLED ekran, aktif buzzer ve 2 LED kullanarak akıllı bir kapı kilidi yapıyoruz. Kart okutulduğunda, UID kod içinde tanımlı yetkili kartlar listesiyle karşılaştırılır — yetkiliyse servo motoru döndürerek kilit açılır (yeşil LED + 2 kısa bip), 5 saniye sonra otomatik kilitler. Yetkisiz kartta kırmızı LED yanar, 3 hızlı bip ile uyarı verir ve OLED'de yakalanan UID gösterilir. Gerçek IoT güvenlik senaryosu için pratik ve öğretici — SPI protokolü

4.8(9)
15
220V Ampülü Uzaktan Kumanda İle Yakma
#21İleri
Premium

220V Ampülü Uzaktan Kumanda İle Yakma

Kanepeden kalkmadan, televizyon kumandasıyla evdeki gerçek bir ampulü yakıp söndür. Arduino kumandadan gelen görünmez ışık sinyalini okur; açma tuşuna basınca röleyi çekip ampulü yakar, sessiz tuşuna

4.4(22)
30
ESP32 Async Web Server (LCD'de IP Göstergeli)
#129İleri
Premium

ESP32 Async Web Server (LCD'de IP Göstergeli)

Bu projede ESP32'yi aynı Wi-Fi ağındaki telefonunuzdan veya bilgisayarınızdan kontrol edebileceğiniz **asenkron bir web sunucusuna** dönüştürüyoruz. ESPAsyncWebServer kütüphanesi sayesinde sunucu birden fazla isteği aynı anda işleyebiliyor (klasik `WebServer.h` gibi tek istekte bloklamıyor). Tarayıcıdan ESP32'nin IP adresine bağlanıp ON/OFF butonlarına basarak (`/on` ve `/off` adresleri) GPIO 5'e bağlı LED'i açıp kapatabileceksiniz.

4.8(16)
26