🚗 Akıllı Şehir Projesi: Kablosuz Akıllı Park Sensörü
- Tuncay liman
- 14 Kas 2025
- 3 dakikada okunur

💡 Projenin Amacı
Belirlenen bir park yerinin (örneğin bir otoparkın tek bir bölmesi) dolu mu yoksa boş mu olduğunu tespit etmek ve bu durumu Wi-Fi üzerinden merkezi bir sunucuya (buluta) anlık olarak bildirmektir.
🛠️ Gerekli Malzemeler
Mikrodenetleyici: ESP32 Geliştirme Kartı (Wi-Fi bağlantısı için).
Sensör: HC-SR04 Ultrasonik Mesafe Sensörü (Park yerinin üzerindeki bir cismin (arabanın) varlığını tespit etmek için).
Güç Kaynağı: USB kablosu veya küçük bir pil/güç bankası.
Bağlantı Elemanları: Jumper Kabloları.
Ağ Geçidi: Wi-Fi ağı (Ev/ofis Wi-Fi'si test için yeterlidir).
🔌 Donanım Bağlantı Şeması (HC-SR04 Kullanarak)
Ultrasonik sensörler, ses dalgaları gönderip geri dönüş süresini ölçerek mesafeyi hesaplar.
ESP32 Pini | HC-SR04 Pini | Açıklama |
3.3V / VCC | VCC | Güç Girişi (5V sensör olsa da 3.3V ile çalışabilir) |
GND | GND | Toprak Bağlantısı |
GPIO 22 | Trig (Tetik) | Ultrasonik sinyali göndermek için kullanılır. |
GPIO 23 | Echo (Yankı) | Geri dönen sinyali almak için kullanılır. |
👨💻 Yazılım ve Kodlama Mantığı
Mesafe Ölçümü: ESP32, Trig pininden bir sinyal gönderir. Echo pininden geri dönüş süresini ölçer. Bu süre, sesin havadaki hızı kullanılarak mesafeye çevrilir ($Mesafe = Hız \times Süre / 2$).
Durum Tespiti:
Boş Durum: Sensörden ölçülen mesafe, belirli bir eşik değerden (örneğin 50 cm) büyükse park yeri BOŞ kabul edilir.
Dolu Durum: Ölçülen mesafe eşik değerden küçükse (bir araba sensörün altındadır) park yeri DOLU kabul edilir.
Kablosuz İletim: Tespit edilen durum ("DOLU" veya "BOŞ"), Wi-Fi üzerinden MQTT veya HTTP POST protokolü kullanılarak bir bulut platformuna (Thingspeak, Blynk, vb.) gönderilir.
📶 İleri Adım: Akıllı Şehir Entegrasyonu
Veri Görselleştirme: Bulut platformunda, gelen veriler anlık olarak bir harita üzerinde gösterilebilir. Park yerleri yeşil (boş) veya kırmızı (dolu) renkle işaretlenir.
Mobil Uygulama: Sürücüler, bu haritaya mobil bir uygulama veya web sitesi üzerinden erişerek en yakın boş park yerini anında görebilir.
Bu proje, bir akıllı şehrin temel hizmetlerinden biri olan akıllı park yönetimini küçük ölçekte simüle etmenizi sağlar.
#include <WiFi.h>
// Wi-Fi Bilgileri
const char* ssid = "WIFI_ADINIZ"; // Kendi Wi-Fi adınızı yazın
const char* password = "WIFI_ŞİFRENİZ"; // Kendi Wi-Fi şifrenizi yazın
// HC-SR04 Sensör Pinleri
const int trigPin = 22; // ESP32 GPIO 22'ye bağlı
const int echoPin = 23; // ESP32 GPIO 23'e bağlı
// Park Yeri Eşik Değerleri (cm cinsinden)
// Bu değerleri, sensörün monte edildiği yüksekliğe ve arabanın altına göre ayarlamanız gerekebilir.
const int BOS_PARK_MESAFESI = 50; // Bu mesafeden büyükse "BOŞ" kabul edilsin
const int DOLU_PARK_MESAFESI = 30; // Bu mesafeden küçükse "DOLU" kabul edilsin (araba var)
// Gecikme süresini (mikrosaniye cinsinden) saklamak için değişken
long duration;
// Mesafe bilgisini (cm cinsinden) saklamak için değişken
int distance;
void setup() {
Serial.begin(115200);
// HC-SR04 pinlerini ayarla
pinMode(trigPin, OUTPUT); // Trig pinini çıkış olarak ayarla
pinMode(echoPin, INPUT); // Echo pinini giriş olarak ayarla
// Wi-Fi'ye bağlan
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi Bağlandı!");
Serial.print("IP Adresi: ");
Serial.println(WiFi.localIP());
}
void loop() {
// HC-SR04'ten mesafe oku
// Trig pinine 10 mikrosaniye boyunca HIGH sinyali gönder (tetikleme)
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Echo pinindeki HIGH sinyalinin süresini ölç
duration = pulseIn(echoPin, HIGH);
// Mesafeyi hesapla (ses hızı ~0.034 cm/mikrosaniye veya 340 m/s)
distance = duration * 0.034 / 2;
// Park durumunu belirle ve Seri Port'a yazdır
Serial.print("Mesafe: ");
Serial.print(distance);
Serial.println(" cm");
if (distance > BOS_PARK_MESAFESI) {
Serial.println("Park Yeri: BOŞ");
// *** BURAYA BULUTA "BOŞ" VERİSİ GÖNDERME KODU EKLENECEK ***
// sendParkStatusToCloud("BOŞ");
} else if (distance < DOLU_PARK_MESAFESI) {
Serial.println("Park Yeri: DOLU");
// *** BURAYA BULUTA "DOLU" VERİSİ GÖNDERME KODU EKLENECEK ***
// sendParkStatusToCloud("DOLU");
} else {
Serial.println("Park Yeri: BELİRSİZ (Ara değer)");
}
delay(2000); // Her 2 saniyede bir ölçüm yap
}
/*
// Örnek Buluta Veri Gönderme Fonksiyonu (HTTP POST ile)
// Kendi Bulut Servisi API'nize göre uyarlamanız gerekecektir.
void sendParkStatusToCloud(String status) {
// WiFiClient client;
// HTTPClient http;
// String serverPath = "http://your-cloud-api.com/park_status";
// http.begin(client, serverPath);
// http.addHeader("Content-Type", "application/json");
// String jsonPayload = "{\"status\":\"" + status + "\"}";
// int httpResponseCode = http.POST(jsonPayload);
// if (httpResponseCode > 0) {
// Serial.print("HTTP Yanıt Kodu: ");
// Serial.println(httpResponseCode);
// String response = http.getString();
// Serial.println(response);
// } else {
// Serial.print("HTTP İstek Hatası: ");
// Serial.println(httpResponseCode);
// }
// http.end();
}
*/




Yorumlar