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.

Arduino / C++
#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);
  }
}
11görüntülenme
0beğeni
0yorum
Atölyeye katıl →
Topluluk

Yorumlar

0

İlk yorumu siz yazın.

Yorum yap