Merhaba genç mucitler! Bugün hep birlikte odanızın ne kadar sıcak veya nemli olduğunu ölçebilen, üstelik üzerinde adınızın yazdığı harika bir "Akıllı Hava İstasyonu" yapacağız. Sensörleri, ekranları ve butonları kullanarak kendi teknolojimizi üreteceğiz. Üstelik LCD ekranların normalde tanımadığı Türkçe karakterleri (ş, ğ, ç gibi) onlara nasıl kodlarla çizebileceğimizi de öğreneceğiz. Hazırsanız kollarınızı sıvayın, laboratuvara giriyoruz!
Gerekli malzemeler
- 1 adet Arduino Uno
- 1 adet Breadboard (Devre tahtası)
- 1 adet DHT11 Sıcaklık ve Nem Sensörü
- 1 adet 16x2 I2C modüllü LCD Ekran (Kablo karmaşasından kurtulmak için ICQ değil, 4 pinli I2C modelini kullanıyoruz!)
- 3 adet Push Buton (Düğme)
- Yeteri kadar Jumper Kablo (Erkek-Erkek ve Erkek-Dişi)
Adım adım yapım
1. 1. Bölüm
Öncelikle ekranımızı bağlamakla başlayalım. I2C modüllü LCD ekranımızın arkasında 4 pin bulunur. GND pinini Arduino'daki GND'ye, VCC pinini 5V'a bağlayın. SDA pinini Arduino'nun A4 pinine, SCL pinini ise A5 pinine takın.
2. 2. Bölüm
Şimdi havayı koklayacak olan DHT11 sensörümüzü bağlayalım. Sensörün VCC (veya +) ucunu 5V'a, GND (veya -) ucunu GND'ye bağlayın. Ortadaki Data (sinyal) ucunu ise Arduino'nun 2 numaralı dijital pinine bağlayın.
3. 3. Bölüm
Sıra geldi kontrol tuşlarımıza! 3 adet butonu breadboard üzerine yerleştirin. Her butonun bir bacağını ortak olarak GND'ye (eksi hatta) bağlayın.
4. 4. Bölüm
Butonların diğer bacaklarını ise sırasıyla Arduino'nun 3, 4 ve 5 numaralı pinlerine bağlayın. (Kodlama kısmında Arduino'nun içindeki gizli dirençleri kullanacağımız için dışarıdan ekstra direnç takmamıza gerek kalmayacak, bu çok havalı bir pratik yöntem!)
5. 5. Bölüm
Bağlantılarımız tamam! Gelelim en gizemli ve eğlenceli kısma: LCD ekranda Türkçe karakter yazmak. LCD ekranlar genellikle yabancı üretim olduğu için hafızalarında "ş, ğ, ç" gibi harfler yoktur. Ama biz createChar komutu ile ekranın piksellerini nokta nokta boyayarak kendi harfimizi çizebiliriz! Kod bölümünde örnek olarak "Ş" harfini nasıl tasarladığımızı görebilirsiniz.
6. 6. Bölüm
Her şey hazırsa aşağıdaki kodu kopyalayıp Arduino programına yapıştırın, kartınıza yükleyin ve düğmelerle oynamanın tadını çıkarın!
Proje kodu
Kodu Arduino IDE'ye aktarın. Pin numaralarını kendi devrenize göre kontrol ettikten sonra karta yükleyin.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPIN 2 // DHT11 Data pini
#define DHTTYPE DHT11 // Sensörümüzün tipi
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD adresi (Ekran çalışmazsa 0x3F olarak değiştirmeyi deneyin)
// Butonlarımızı hangi pinlere taktığımızı belirliyoruz
int sicaklikButon = 3;
int nemButon = 4;
int ozelButon = 5;
// TÜRKÇE KARAKTER OLUŞTURMA BÖLÜMÜ
// LCD için kendi çizdiğimiz "Ş" harfi (1 olan yerler pikseli yakar, 0 olan yerler söndürür)
byte buyuk_S[8] = {
B01110,
B10001,
B10000,
B01110,
B00001,
B10001,
B01110,
B00100 // Ş harfinin altındaki minik kuyruk!
};
void setup() {
// Butonları giriş olarak ayarlıyoruz ve Arduino'nun iç dirençlerini açıyoruz (PULLUP)
// Bu sayede butona basılmadığında sistem güvende kalır.
pinMode(sicaklikButon, INPUT_PULLUP);
pinMode(nemButon, INPUT_PULLUP);
pinMode(ozelButon, INPUT_PULLUP);
dht.begin(); // Sensörü uyandır
lcd.init(); // LCD'yi başlat
lcd.backlight(); // Ekranın arka ışığını yak
// Çizdiğimiz "Ş" harfini ekranın hafızasına 0 numarası ile kaydediyoruz
lcd.createChar(0, buyuk_S);
// Karşılama mesajı
lcd.setCursor(0, 0);
lcd.print("Sisteme Hosgeldin");
lcd.setCursor(0, 1);
lcd.print("Bir butona bas!");
}
void loop() {
// DHT11 sensöründen ortam değerlerini okuyalım
float sicaklik = dht.readTemperature();
float nem = dht.readHumidity();
// 1. Butona basıldıysa (Sıcaklık Butonu) - LOW demek butona basıldı demektir
if (digitalRead(sicaklikButon) == LOW) {
lcd.clear(); // Ekranı temizle
lcd.setCursor(0, 0);
lcd.print("Oda Sicakligi:");
lcd.setCursor(0, 1);
lcd.print(sicaklik);
lcd.print(" C");
delay(500); // Butona basarken ekranın titremesini önler
}
// 2. Butona basıldıysa (Nem Butonu)
else if (digitalRead(nemButon) == LOW) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Oda Nemi:");
lcd.setCursor(0, 1);
lcd.print("% ");
lcd.print(nem);
delay(500);
}
// 3. Butona basıldıysa (Özel İsim + Nem + Sıcaklık Butonu)
else if (digitalRead(ozelButon) == LOW) {
lcd.clear();
lcd.setCursor(0, 0);
// İsmimiz BARIŞ olsun.
// Normal BARI yazdık, sonuna kendi ürettiğimiz Ş harfini ekliyoruz!
lcd.print("BARI");
lcd.write(0); // 0 numaralı hafızadaki "Ş" harfini ekrana bas
lcd.print(" Yapimi"); // Ekranda "BARIŞ Yapimi" yazacak
lcd.setCursor(0, 1);
lcd.print("S:");
lcd.print((int)sicaklik); // Küsuratları atıp tam sayı yazdırıyoruz
lcd.print(" N:%");
lcd.print((int)nem);
delay(500);
}
}

Yorumlar
İlk yorumu siz yazın.