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.






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üm | Modül | Ne yapar? |
|---|---|---|
| Giriş kapısı | RC522 RFID + SG90 servo | Yetkili kart okutulunca kapıyı açar, 5 saniye sonra kapatır |
| Koridor / salon | HC-SR501 PIR + LDR + röle | Karanlıkta hareket algılayınca lambayı yakar, 20 saniye hareket olmazsa söndürür |
| Mutfak | MQ-2 gaz sensörü + alev sensörü + buzzer | Gaz ya da alev algılayınca kesik kesik alarm çalar |
| Pencere | SG90 servo | Gaz algılanınca havalandırmak için pencereyi açar |
| Yatak odası | DHT11 + röle + fan | Sıcaklık 28 °C'ye ulaşınca fanı çalıştırır, 26 °C'de durdurur |
| Teknik oda | Arduino, 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.
Malzeme listesi ve maliyet
| Parça | Adet | Görevi | Fiyat seviyesi |
|---|---|---|---|
| Arduino Uno R3 (klon olabilir) ya da ESP32 DevKit | 1 | Evin beyni | Orta |
| Breadboard ve jumper kablo seti (erkek-erkek, erkek-dişi) | 1 set | Bağlantılar | Düşük |
| HC-SR501 PIR hareket sensörü | 1 | Koridor ışığı | Düşük |
| LDR ve 10 kΩ direnç | 1 + 1 | Karanlığı algılama | Çok düşük |
| MQ-2 gaz sensörü modülü | 1 | Gaz ve duman alarmı | Düşük |
| Alev sensörü modülü (LM393) | 1 | Yangın alarmı | Düşük |
| DHT11 sıcaklık ve nem modülü | 1 | Fan kontrolü | Düşük |
| RC522 RFID modülü (kart ve anahtarlıkla) | 1 | Kartlı kapı | Düşük |
| SG90 servo motor | 2 | Kapı ve pencere | Düşük |
| 2 kanallı 5 V röle modülü | 1 | Lamba ve fan | Düşük |
| Aktif buzzer | 1 | Alarm sesi | Çok düşük |
| I2C 16x2 LCD ekran | 1 | Durum ekranı | Düşük – orta |
| 5 V mini fan ve 5 V LED lamba ya da LED şerit | 1 + 1 | Rölelerin yükleri | Düşük |
| 5 V 2–3 A adaptör ve DC jak ya da klemens | 1 | Servo, röle ve sensör beslemesi | Orta |
| Dekota ya da maket kartonu, maket bıçağı, sıcak silikon | – | Evin gövdesi | Orta |
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ça | 5 V'ta yaklaşık akım |
|---|---|
| Arduino Uno | 45–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 lamba | Modele göre 100–400 mA |
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 pini | Arduino Uno | ESP32 |
|---|---|---|
| PIR OUT | D2 | GPIO 16 |
| Alev sensörü DO | D3 | GPIO 17 |
| DHT11 DATA | D4 | GPIO 13 |
| Aktif buzzer (+) | D5 | GPIO 25 |
| Kapı servosu (sinyal) | D6 | GPIO 32 |
| Röle IN1 (lamba) | D7 | GPIO 26 |
| Röle IN2 (fan) | D8 | GPIO 27 |
| RC522 RST | D9 | GPIO 4 |
| RC522 SDA (SS) | D10 | GPIO 5 |
| RC522 MOSI / MISO / SCK | D11 / D12 / D13 | GPIO 23 / 19 / 18 |
| MQ-2 AO | A0 | GPIO 34 (gerilim bölücüyle) |
| LDR bölücüsünün orta noktası | A1 | GPIO 35 (bölücü 3V3'ten) |
| Pencere servosu (sinyal) | A2 | GPIO 33 |
| I2C LCD SDA / SCL | A4 / A5 | GPIO 21 / 22 |
Adım adım birleştirme
- Maketin gövdesini kur, modüllerin yerlerini ve kablo deliklerini hazırla; elektronik parçaları en son yerleştir.
- 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ç.
- I2C LCD'yi bağla ve ekrana bir yazı yazdır. Ekran adresini bulamazsan I2C LCD yazısındaki tarayıcı kodunu kullan.
- 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.
- 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.
- Ana kodu yükle ve notlarındaki değerlere göre GAS_LIMIT, DARK_LIMIT ve FAN_ON eşiklerini ayarla.
- 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.
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.
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

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.
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.
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}| Fonksiyon | Görevi | Ne sıklıkla? |
|---|---|---|
| handleLight() | PIR ve LDR'ye göre lamba rölesini açar, 20 saniye hareket yoksa kapatır | Her döngüde (ilk 60 saniye hariç) |
| handleClimate() | DHT11'i okur, fanı 28/26 °C histerezisle sürer | 2 saniyede bir |
| handleSafety() | MQ-2 ve alev sensörünü okur, alarmı ve pencereyi yönetir | Her döngüde |
| handleDoor() | Kartı okur, UID'yi Seri Monitör'e yazar, kapıyı açıp kapatır | Her döngüde |
| updateLcd() | Sıcaklık, nem, gaz değeri ya da durum mesajını gösterir | Saniyede bir |
| loop() içindeki buzzer satırı | Kart bip sesini ve kesik alarm sesini üretir | Her 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

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.
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.
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.
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öntem | Gerekenler | Evin dışından | Zorluk | En uygun durum |
|---|---|---|---|---|
| ESP32 web sunucusu | ESP32 ve ev Wi-Fi'si | Hayır, yalnızca aynı ağ | Orta | Okul sunumu, internetsiz gösteri, tamamen kendi kodun |
| Blynk IoT | ESP32, internet ve Blynk hesabı | Evet | Kolay | Hazır arayüz, grafik ve bildirim |
| Bluetooth (HC-05) | Uno, HC-05 ve bir Android uygulaması | Hayır, yaklaşık 10 m | Kolay | Uno ile kalmak isteyenler (iPhone ile çalışmaz) |
| Telegram botu | ESP32 ve internet | Evet | Orta | Alarm bildirimi ve kısa komutlar |
| MQTT + Home Assistant | ESP32 ve yerel bir sunucu (ör. Raspberry Pi) | Evet, ayar gerekir | İleri | Gerç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:
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.
Sık yapılan hatalar ve çözümleri
| Belirti | Olası sebep | Çözüm |
|---|---|---|
| Servo hareket edince Arduino resetleniyor ya da LCD bozuluyor | Servolar ve röleler Arduino'nun 5V pininden besleniyor | Ayrı 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 çekili | Modül aktif LOW | RELAY_ON ve RELAY_OFF değerlerini yer değiştir |
| Her açılışta alarm çalıyor | MQ-2 ısınıyor, PIR ortamı öğreniyor | WARMUP_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ıyor | DARK_LIMIT yanlış ya da LDR lambanın ışığını görüyor | Eşiği Seri Monitör'deki değerlere göre ayarla, LDR'yi dış duvara taşı |
| Kart okunmuyor | RC522 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 veriyor | DATA kablosu yanlış pinde ya da çıplak sensörde pull-up direnci yok | Pini kontrol et, modül kullan ya da DATA ile VCC arasına 10 kΩ ekle |
| Servo ara sıra titriyor | Zayıf besleme; DHT11 okunurken kesmeler kısa süre durur | Beslemeyi güçlendir; gerekirse servo hareketini bitirince detach() et |
| ESP32'de gaz değeri hep 0 ya da 4095 | ADC2 pini Wi-Fi ile çakışıyor ya da bölücü yok | GPIO 34 ya da 35 gibi bir ADC1 pini ve gerilim bölücü kullan |
| Telefon ESP32'nin sayfasını açmıyor | Telefon misafir ağında ya da mobil veride, ağ 5 GHz | Aynı 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.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
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

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

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

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

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

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ü

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

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.
Diğer yazılar
BlueGrays uygulaması
Bu devreyi telefonunda adım adım kur
Devre şeması, kod ve parça listesi tek ekranda. 160'tan fazla Arduino, ESP32 ve Pico projesi seni bekliyor.
Telefonunla tara
Kamerayı koda tut; telefonunun uygulama mağazası açılır.
ya da mağazada aç

