Arduino ile Özel Karakterli DHT11 Sıcaklık-Nem Ölçer (I2C LCD)
Bu uygulamada Arduino kullanarak DHT11 sensöründen nem ve sıcaklık verisi okuyan ve sonuçları I2C 16x2 LCD ekranda özel karakter (° derece simgesi) ile gösteren bir sistem geliştiriyoruz.
Bu proje; akıllı sera, ortam izleme ve IoT tabanlı veri toplama projelerinin temelini oluşturur.
📦 Kullanılan Donanımlar
-
Arduino Uno / Nano
-
DHT11 Sıcaklık-Nem Sensörü
-
16x2 I2C LCD
-
Jumper kablo
🔌 Bağlantılar
DHT11
| Pin | Arduino |
|---|---|
| VCC | 5V |
| GND | GND |
| DATA | D7 |
I2C LCD
| LCD | Arduino Uno |
|---|---|
| SDA | A4 |
| SCL | A5 |
| VCC | 5V |
| GND | GND |
💻 Proje Kodu
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
DHT sensor(7, DHT11);
LiquidCrystal_I2C lcd(0x27, 16, 2);
byte ozel[8] = {
B01110, B01010, B01110, B00100, B00100, B00000, B00000, B00000
};
void setup() {
Wire.begin();
lcd.init();
lcd.backlight();
lcd.createChar(0, ozel);
sensor.begin();
}
void loop() {
float nem = sensor.readHumidity();
float sicaklik = sensor.readTemperature();
lcd.setCursor(0, 0);
lcd.print("Nem:");
lcd.setCursor(5, 0);
lcd.print("%");
lcd.setCursor(6, 0);
lcd.print(nem);
lcd.setCursor(0, 1);
lcd.print("Sic:");
lcd.setCursor(5, 1);
lcd.print(sicaklik);
lcd.setCursor(10, 1);
lcd.write((byte)0);
lcd.setCursor(11, 1);
lcd.print("C");
delay(2000);
}
📚 Kodun Detaylı Açıklaması
1️⃣ Kütüphaneler
Projede üç kütüphane kullanılır:
-
DHT.h → Sensör verisini okumak için
-
Wire.h → I2C haberleşme için
-
LiquidCrystal_I2C.h → LCD kontrolü için
2️⃣ Sensör ve LCD Tanımlama
DHT sensor(7, DHT11);
-
Sensör DATA pini → D7
-
Sensör modeli → DHT11
LiquidCrystal_I2C lcd(0x27, 16, 2);
-
I2C adres → 0x27
-
LCD boyutu → 16 sütun, 2 satır
3️⃣ Özel Karakter Tanımlama
byte ozel[8] = {
B01110,
B01010,
B01110,
B00100,
B00100,
B00000,
B00000,
B00000
};
LCD’ler maksimum 8 adet özel karakter saklayabilir.
Her satır:
-
5x8 dot matrix piksel yapısını temsil eder.
Bu desen → derece (°) simgesi oluşturur.
4️⃣ setup() Fonksiyonu
Wire.begin();
I2C iletişimi başlatılır.
lcd.init();
LCD başlatılır.
lcd.backlight();
Arka ışık açılır.
lcd.createChar(0, ozel);
-
0 numaralı hafıza slotuna özel karakter yüklenir.
-
Artık
(byte)0ile çağrılabilir.
sensor.begin();
Sensör çalışmaya hazır hale getirilir.
🔁 loop() Çalışma Mantığı
🌫️ Nem Okuma
float nem = sensor.readHumidity();
Nem değeri % olarak okunur.
🌡️ Sıcaklık Okuma
float sicaklik = sensor.readTemperature();
Sıcaklık °C cinsinden okunur.
🖥️ LCD’ye Yazdırma
1️⃣ Nem Satırı
lcd.setCursor(0, 0);
lcd.print("Nem:");
-
satıra başlık yazılır.
lcd.setCursor(5, 0);
lcd.print("%");
Nem birimi eklenir.
lcd.setCursor(6, 0);
lcd.print(nem);
Nem değeri yazdırılır.
LCD Görünüm
Nem:%45.3
2️⃣ Sıcaklık Satırı
lcd.setCursor(0, 1);
lcd.print("Sic:");
-
satıra sıcaklık başlığı.
lcd.setCursor(5, 1);
lcd.print(sicaklik);
Sıcaklık değeri yazdırılır.
🌡️ Derece Sembolü Yazdırma
lcd.setCursor(10, 1);
lcd.write((byte)0);
-
0 numaralı özel karakter çağrılır.
-
Bu → derece simgesi.
lcd.setCursor(11, 1);
lcd.print("C");
Santigrat birimi eklenir.
LCD Nihai Görünüm
Nem:%45.3
Sic:24.7°C
⏱️ Ölçüm Gecikmesi
delay(2000);
-
2 saniyede bir ölçüm yapılır.
-
DHT11 için güvenli okuma aralığıdır.
🧠 Teknik Notlar
🔹 Özel Karakter Sınırı
-
LCD → max 8 karakter saklar.
-
Slotlar: 0–7
🔹 Derece İşareti Alternatif
Bazı LCD’lerde hazır vardır:
lcd.print((char)223);
yada kodda kullandığımız gibi özel karaktet tanımlanabilir.
Bunun için Lcd Custom Char sayfasını kullanabilirsiniz.
🚀 Geliştirme Fikirleri
Projeyi büyütmek için:
-
Min / Max sıcaklık kaydı
-
Fan röle kontrolü
-
SD karta veri kaydı
-
ESP32 ile web panel
-
Grafiksel bar gösterimi
🧾 Sonuç
Bu projede:
-
DHT11 ile ortam verisi okundu
-
I2C LCD’de gösterildi
-
Özel karakter ile derece simgesi üretildi
-
LCD koordinat yönetimi uygulandı
Bu yapı; gerçek zamanlı izleme sistemlerinin temelini oluşturur ve ileri seviye otomasyon projelerine kolayca entegre edilebilir.