LCD etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

LCD Ekranlı Mini Oyun: Tahmin Etmece (Buton Kontrollü)

LCD Ekranlı Mini Oyun: Tahmin Etmece (Buton Kontrollü)

LCD Ekranlı Mini Oyun: Tahmin Etmece (Buton Kontrollü)

Herkese merhaba Arduino severler! Bugün, hem eğlenceli hem de öğretici bir projeye imza atacağız: LCD ekran ve butonlar kullanarak tahmin etmece oyunu geliştireceğiz. Bu proje sayesinde hem LCD ekran kullanımını, hem buton okumayı, hem de temel programlama mantığını pekiştireceğiz. Hazırsanız, malzemeleri hazırlayın ve kodlamaya başlayalım!

Gerekli Malzemeler

  • Arduino Uno (veya benzeri bir Arduino kartı)
  • 16x2 LCD Ekran
  • 3 adet Buton
  • 10K Ohm Direnç (3 adet)
  • 10K Ohm Potansiyometre
  • Breadboard
  • Jumper Kablolar

Devre Şeması

Devremizi kurarken aşağıdaki bağlantıları dikkatlice yapalım:

  • LCD Ekran Bağlantıları:
    • LCD VSS pin -> Arduino GND
    • LCD VDD pin -> Arduino 5V
    • LCD VO (Contrast) pin -> Potansiyometrenin orta bacağı (Potansiyometrenin diğer iki bacağı 5V ve GND'ye bağlanacak)
    • LCD RS pin -> Arduino Pin 12
    • LCD Enable pin -> Arduino Pin 11
    • LCD D4 pin -> Arduino Pin 5
    • LCD D5 pin -> Arduino Pin 4
    • LCD D6 pin -> Arduino Pin 3
    • LCD D7 pin -> Arduino Pin 2
    • LCD A (Anode) pin -> Arduino 5V (direnç üzerinden bağlanabilir)
    • LCD K (Cathode) pin -> Arduino GND
  • Buton Bağlantıları:
    • Her bir butonun bir bacağı -> Arduino Dijital Pin 8, 9 ve 10 (sırasıyla)
    • Her bir butonun diğer bacağı -> GND (ve 10K Ohm direnç ile Arduino 5V'a pull-up yapılarak)

Açıklama: Butonlar, pull-up dirençler sayesinde normalde HIGH durumunda olacaklar. Butona basıldığında ise LOW sinyali Arduino'ya iletilecek.

Arduino Kodu

Şimdi de kod kısmına geçelim. Aşağıdaki kodu Arduino IDE'sine kopyalayın ve kartınıza yükleyin.


 #include <LiquidCrystal.h>

 // LCD pinleri
 const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
 LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

 // Buton pinleri
 const int buttonUpPin = 8;
 const int buttonDownPin = 9;
 const int buttonEnterPin = 10;

 int randomNumber;
 int guess;
 bool gameStarted = false;

 void setup() {
  lcd.begin(16, 2);
  pinMode(buttonUpPin, INPUT_PULLUP);
  pinMode(buttonDownPin, INPUT_PULLUP);
  pinMode(buttonEnterPin, INPUT_PULLUP);

  lcd.print("Tahmin Etmece!");
  lcd.setCursor(0, 1);
  lcd.print("Baslamak icin OK");
  randomSeed(analogRead(A0)); // Rastgele sayı üretimi için seed
 }

 void loop() {
  if (!gameStarted) {
   if (digitalRead(buttonEnterPin) == LOW) {
    startGame();
   }
  } else {
   checkButtons();
   displayGuess();
  }
 }

 void startGame() {
  gameStarted = true;
  randomNumber = random(1, 101); // 1 ile 100 arasında rastgele sayı
  guess = 50; // Başlangıç tahmini
  lcd.clear();
  lcd.print("Tahmin: ");
 }

 void checkButtons() {
  if (digitalRead(buttonUpPin) == LOW) {
   delay(100); // Buton debounce
   if (guess < 100) {
    guess++;
   }
  }
  if (digitalRead(buttonDownPin) == LOW) {
   delay(100); // Buton debounce
   if (guess > 1) {
    guess--;
   }
  }
  if (digitalRead(buttonEnterPin) == LOW) {
   delay(100); // Buton debounce
   checkGuess();
  }
 }

 void displayGuess() {
  lcd.setCursor(8, 0);
  lcd.print(guess);
  lcd.print("  "); // Sayıyı temizlemek için
 }

 void checkGuess() {
  if (guess == randomNumber) {
   lcd.clear();
   lcd.print("Tebrikler!");
   lcd.setCursor(0, 1);
   lcd.print("Bildiniz!");
   delay(2000);
   gameStarted = false;
   lcd.clear();
   lcd.print("Tekrar icin OK");
   lcd.setCursor(0, 1);
   lcd.print("Basin");


  } else if (guess < randomNumber) {
   lcd.clear();
   lcd.print("Daha Yuksek!");
   delay(1000);
   lcd.clear();
   lcd.print("Tahmin: ");
  } else {
   lcd.clear();
   lcd.print("Daha Dusuk!");
   delay(1000);
   lcd.clear();
   lcd.print("Tahmin: ");
  }
 }
 

Kodun Açıklaması

  • LiquidCrystal Kütüphanesi: LCD ekranı kullanabilmek için gerekli olan kütüphane.
  • Pin Tanımlamaları: LCD ve butonların bağlı olduğu pinler tanımlanıyor.
  • setup() Fonksiyonu: LCD ekran başlatılıyor, buton pinleri giriş olarak ayarlanıyor ve rastgele sayı üretimi için bir başlangıç değeri (seed) belirleniyor.
  • loop() Fonksiyonu: Oyunun ana döngüsü. Oyun başlamadıysa, "OK" butonuna basılmasını bekliyor. Oyun başladıysa, butonları kontrol ediyor ve tahmini ekrana yazdırıyor.
  • startGame() Fonksiyonu: Oyunu başlatıyor, rastgele bir sayı üretiyor ve ilk tahmini ayarlıyor.
  • checkButtons() Fonksiyonu: Butonlara basılıp basılmadığını kontrol ediyor.
  • displayGuess() Fonksiyonu: Mevcut tahmini LCD ekrana yazdırıyor.
  • checkGuess() Fonksiyonu: Tahminin doğru olup olmadığını kontrol ediyor ve kullanıcıya geri bildirim veriyor.

Oyunun Oynanışı

  1. Arduino'yu bilgisayarınıza bağlayın ve kodu yükleyin.
  2. LCD ekranda "Tahmin Etmece!" yazısı belirecek.
  3. Oyunu başlatmak için "OK" butonuna basın.
  4. Yukarı ve aşağı butonlarını kullanarak tahmininizi ayarlayın.
  5. Tahmininizden eminseniz, "OK" butonuna basın.
  6. Eğer tahmininiz doğruysa, "Tebrikler!" yazısı belirecek. Değilse, "Daha Yüksek!" veya "Daha Düşük!" uyarıları alacaksınız.
  7. Tekrar oynamak için "OK" butonuna basın.

İpuçları ve Geliştirme Fikirleri

  • Oyuna bir zorluk seviyesi ekleyebilirsiniz (örneğin, daha geniş bir sayı aralığı).
  • Oyuna bir can sayısı ekleyebilirsiniz (örneğin, kullanıcı 5 hakkı olduğunda kaybedecek).
  • LCD ekranda kalan can sayısını gösterebilirsiniz.
  • Skor tablosu ekleyerek en iyi skorları saklayabilirsiniz.

Umarım bu proje sizin için faydalı olmuştur. İyi eğlenceler ve kodlamalar!

Etiketler: Arduino, LCD, Buton, Tahmin Etmece, Oyun, Proje, Elektronik, Kodlama, Hobi, Öğrenme

```

Arduino ile Akıllı Geri Sayım Sayacı: Sınavlar ve Egzersizler için İdeal

Arduino ile Akıllı Geri Sayım Sayacı: Sınavlar ve Egzersizler için İdeal

Arduino ile Akıllı Geri Sayım Sayacı: Sınavlar ve Egzersizler için İdeal

Merhaba sevgili Arduino severler!

Bugün sizlere, özellikle sınavlara hazırlanan öğrenciler ve düzenli egzersiz yapmak isteyenler için hayat kurtarıcı olabilecek bir projeyi tanıtacağım: Arduino ile Akıllı Geri Sayım Sayacı. Bu proje sayesinde, sınav sürelerinizi hassas bir şekilde takip edebilir, egzersiz aralıklarınızı kolayca kontrol edebilir ve zamanı daha verimli kullanabilirsiniz. Gelin, bu projeyi adım adım nasıl oluşturacağımıza birlikte bakalım.

Neden Akıllı Bir Geri Sayım Sayacına İhtiyacımız Var?

Geri sayım sayaçları, odaklanmayı ve zamanı yönetmeyi kolaylaştıran basit ama etkili araçlardır. Özellikle:

  • Sınavlara hazırlıkta: Deneme sınavlarını çözerken gerçek sınav süresini simüle etmek, sınav stresini azaltmaya yardımcı olur.
  • Egzersizlerde: Isınma, setler arası dinlenme ve soğuma sürelerini kontrol etmek, antrenman verimliliğini artırır.
  • Sunumlarda: Konuşma süresini aşmamak için.
  • Yemek pişirirken: Pişirme sürelerini hassas bir şekilde takip etmek için.

İşte bu akıllı sayaç tam da bu ihtiyaçları karşılamak için tasarlandı!

Gerekli Malzemeler

Bu projeyi gerçekleştirmek için aşağıdaki malzemelere ihtiyacınız olacak:

  • 1 adet Arduino Uno (veya benzeri bir Arduino kartı)
  • 1 adet 16x2 LCD Ekran
  • 1 adet Potansiyometre (LCD ekran kontrastını ayarlamak için)
  • 3 adet Buton (Başlat/Durdur, Arttır, Azalt)
  • 3 adet 10k Ohm Direnç (Butonlar için)
  • Jumper Kablolar
  • Breadboard

Devre Şeması ve Bağlantılar

Devreyi kurarken aşağıdaki bağlantıları dikkatlice yapın:

  • LCD Ekran Bağlantıları:
    • LCD RS pini -> Arduino Dijital Pin 12
    • LCD Enable pini -> Arduino Dijital Pin 11
    • LCD D4 pini -> Arduino Dijital Pin 5
    • LCD D5 pini -> Arduino Dijital Pin 4
    • LCD D6 pini -> Arduino Dijital Pin 3
    • LCD D7 pini -> Arduino Dijital Pin 2
    • LCD RW pini -> GND (Toprak)
    • LCD VSS pini -> GND (Toprak)
    • LCD VDD pini -> Arduino 5V
    • LCD A pini (Arka Işık Anot) -> Arduino 5V (100-220 Ohm direnç ile)
    • LCD K pini (Arka Işık Katot) -> GND (Toprak)
  • Potansiyometre Bağlantısı:
    • Potansiyometrenin bir ucu -> Arduino 5V
    • Potansiyometrenin diğer ucu -> GND (Toprak)
    • Potansiyometrenin orta ucu -> LCD VO (Kontrast) pini
  • Buton Bağlantıları:
    • Başlat/Durdur Butonu -> Arduino Dijital Pin 8 (10k Ohm direnç ile GND'ye)
    • Arttır Butonu -> Arduino Dijital Pin 9 (10k Ohm direnç ile GND'ye)
    • Azalt Butonu -> Arduino Dijital Pin 10 (10k Ohm direnç ile GND'ye)

Arduino Kodu

Aşağıdaki Arduino kodunu kullanarak geri sayım sayacımızı programlayabiliriz:


 #include <LiquidCrystal.h>

 // LCD pinlerini tanımla
 const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
 LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

 // Buton pinlerini tanımla
 const int startStopButton = 8;
 const int increaseButton = 9;
 const int decreaseButton = 10;

 // Değişkenler
 int seconds = 0;
 int minutes = 0;
 bool isRunning = false;

 void setup() {
  // LCD'yi başlat
  lcd.begin(16, 2);
  lcd.print("Geri Sayim");
  lcd.setCursor(0, 1);
  lcd.print("Baslamak Icin");
  delay(2000);
  lcd.clear();

  // Buton pinlerini giriş olarak ayarla ve dahili pull-up dirençlerini etkinleştir
  pinMode(startStopButton, INPUT_PULLUP);
  pinMode(increaseButton, INPUT_PULLUP);
  pinMode(decreaseButton, INPUT_PULLUP);

  // Seri iletişimi başlat (isteğe bağlı, hata ayıklama için)
  Serial.begin(9600);
 }

 void loop() {
  // Buton durumlarını oku
  int startStopState = digitalRead(startStopButton);
  int increaseState = digitalRead(increaseButton);
  int decreaseState = digitalRead(decreaseButton);

  // Başlat/Durdur butonu
  if (startStopState == LOW) {
   isRunning = !isRunning;
   delay(200); // Buton sekmelerini engellemek için kısa bir gecikme
  }

  // Arttır butonu
  if (increaseState == LOW) {
   if (minutes < 59) {
     minutes++;
   } else {
    minutes = 0;
   }
   delay(200);
  }

  // Azalt butonu
  if (decreaseState == LOW) {
   if(minutes > 0) {
      minutes--;
   } else {
      minutes = 59;
   }

   delay(200);
  }

  // Geri sayım işlemi
  if (isRunning) {
   displayTime();
   delay(1000); // 1 saniye bekle
   seconds--;

   if (seconds < 0) {
    seconds = 59;
    minutes--;

    if (minutes < 0) {
     minutes = 0;
     seconds = 0;
     isRunning = false;
     lcd.clear();
     lcd.print("Sure Bitti!");
     delay(2000);
     lcd.clear();
    }
   }
  } else {
   // Sayaç durduğunda saati göster
   displayTime();
  }
 }

 // Zamanı LCD'ye yazdıran fonksiyon
 void displayTime() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Kalan Sure:");
  lcd.setCursor(0, 1);
  if (minutes < 10) {
   lcd.print("0");
  }
  lcd.print(minutes);
  lcd.print(":");
  if (seconds < 10) {
   lcd.print("0");
  }
  lcd.print(seconds);
 }
 

Kodu Açıklayalım

  • #include <LiquidCrystal.h>: LCD kütüphanesini projeye dahil eder.
  • Pin tanımlamaları: LCD ekran ve butonların Arduino üzerindeki pin bağlantılarını belirtir.
  • LiquidCrystal lcd(...): LCD ekran nesnesini oluşturur.
  • setup() fonksiyonu: LCD'yi başlatır, buton pinlerini giriş olarak ayarlar ve seri iletişimi başlatır (isteğe bağlı).
  • loop() fonksiyonu: Sürekli olarak buton durumlarını okur, geri sayım işlemini gerçekleştirir ve zamanı LCD ekrana yazdırır.
  • displayTime() fonksiyonu: Kalan süreyi LCD ekrana yazdırmak için kullanılır.

Projenin Kullanımı

  1. Devreyi kurun ve kodu Arduino'ya yükleyin.
  2. Potansiyometreyi kullanarak LCD ekranın kontrastını ayarlayın.
  3. Arttır ve Azalt butonlarını kullanarak başlangıç süresini belirleyin.
  4. Başlat/Durdur butonuna basarak geri sayımı başlatın veya durdurun.
  5. Geri sayım bittiğinde LCD ekranda "Süre Bitti!" mesajı görünecektir.

Geliştirme İpuçları

  • Sesli Alarm: Geri sayım bittiğinde bir buzzer ile sesli alarm çalabilirsiniz.
  • Farklı Modlar: Sınav modu, egzersiz modu gibi farklı modlar ekleyebilirsiniz.
  • Bluetooth Kontrolü: Bluetooth modülü ile sayacı akıllı telefonunuzdan kontrol edebilirsiniz.
  • Daha Büyük Ekran: Daha büyük bir LCD ekran veya bir LED matris kullanarak daha görünür bir sayaç yapabilirsiniz.

Umarım bu proje size ilham verir ve Arduino dünyasına keyifli bir adım atmanızı sağlar. Unutmayın, elektronik projeler deneme yanılma yoluyla öğrenilir. Başarılar dilerim!

Etiketler: arduino, geri sayım sayacı, sınav, egzersiz, lcd, proje, elektronik, kod, eğitim

```

Arduino ile Hava Durumu İstasyonu: Sıcaklık, Nem ve Basınç Ölçümü

Arduino ile Hava Durumu İstasyonu: Sıcaklık, Nem ve Basınç Ölçümü

Arduino ile Hava Durumu İstasyonu: Sıcaklık, Nem ve Basınç Ölçümü

Merhaba sevgili Arduino severler!

Bu yazımızda, Arduino kullanarak basit ama etkili bir hava durumu istasyonu kurmayı öğreneceğiz. Bu istasyon sayesinde ortam sıcaklığını, nemini ve basıncını ölçebilecek ve bu verileri bir LCD ekranda görüntüleyebileceğiz. Projemiz özellikle hava durumuyla ilgilenen öğrenciler ve hobi amaçlı projeler geliştirmek isteyenler için ideal. Hadi başlayalım!

Gerekli Malzemeler

  • Arduino Uno (veya uyumlu bir kart)
  • BMP180 veya BMP280 Barometrik Basınç Sensörü (sıcaklık da ölçer)
  • DHT11 veya DHT22 Sıcaklık ve Nem Sensörü
  • 16x2 LCD Ekran
  • I2C LCD Adaptörü (isteğe bağlı, kablolamayı kolaylaştırır)
  • Jumper Kabloları
  • Breadboard (isteğe bağlı, prototip için kullanışlı)

Kablolama

Sensörleri ve LCD ekranı Arduino'ya nasıl bağlayacağımızı adım adım inceleyelim:

DHT11/DHT22 Bağlantısı:

  • DHT11/DHT22 VCC pini -> Arduino 5V
  • DHT11/DHT22 DATA pini -> Arduino Dijital Pin 2 (veya istediğiniz bir dijital pin)
  • DHT11/DHT22 GND pini -> Arduino GND

BMP180/BMP280 Bağlantısı:

Eğer I2C kullanıyorsanız (önerilir):

  • BMP180/BMP280 VIN pini -> Arduino 3.3V veya 5V (sensörün spesifikasyonuna bakın)
  • BMP180/BMP280 GND pini -> Arduino GND
  • BMP180/BMP280 SDA pini -> Arduino A4 (SDA)
  • BMP180/BMP280 SCL pini -> Arduino A5 (SCL)

Eğer SPI kullanıyorsanız, sensörün dökümantasyonuna göre bağlantıları yapın.

LCD Ekran Bağlantısı (I2C ile):

  • LCD VCC pini -> Arduino 5V
  • LCD GND pini -> Arduino GND
  • LCD SDA pini -> Arduino A4 (SDA)
  • LCD SCL pini -> Arduino A5 (SCL)

Arduino Kodu

Şimdi de Arduino kodunu inceleyelim. Bu kod, sensörlerden verileri okuyacak ve LCD ekrana yazdıracak:


 #include <Wire.h>
 #include <LiquidCrystal_I2C.h>
 #include <DHT.h>
 #include <Adafruit_BMP280.h>

 #define DHTPIN 2     // DHT veri pini
 #define DHTTYPE DHT11   // DHT modeli (DHT11, DHT22, DHT21)

 DHT dht(DHTPIN, DHTTYPE);
 Adafruit_BMP280 bmp; // I2C

 LiquidCrystal_I2C lcd(0x27, 16, 2);  // LCD adresini kontrol edin, gerekirse değiştirin.

 void setup() {
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  dht.begin();
  if (!bmp.begin(0x76)) { // BMP280 adresini kontrol edin, gerekirse değiştirin.
    Serial.println(F("BMP280 bulunamadı, bağlantıları kontrol edin!"));
    while (1) delay(10);
  }
  Serial.println(F("BMP280 bulundu!"));
}

 void loop() {
  // Sensörlerden veri okuma
  float sicaklik = dht.readTemperature();
  float nem = dht.readHumidity();
  float basin = bmp.readPressure() / 100.0F;  // HPa cinsinden basınç

  // Veri kontrolü
  if (isnan(sicaklik) || isnan(nem) || isnan(basin)) {
    Serial.println(F("Sensör okuma hatası!"));
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Hata!");
    delay(2000);
    return;
  }

  // LCD ekrana yazdırma
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Sicaklik: ");
  lcd.print(sicaklik);
  lcd.print(" C");

  lcd.setCursor(0, 1);
  lcd.print("Nem: ");
  lcd.print(nem);
  lcd.print(" %  Basin: ");
  lcd.print(basin);
  lcd.print(" hPa");

  // Seri port'a yazdırma (isteğe bağlı)
  Serial.print("Sicaklik: ");
  Serial.print(sicaklik);
  Serial.print(" C, Nem: ");
  Serial.print(nem);
  Serial.print(" %, Basin: ");
  Serial.print(basin);
  Serial.println(" hPa");

  delay(2000); // 2 saniyede bir ölçüm yap
 }
 

Kod Açıklaması

  • Kütüphaneler: Gerekli kütüphaneler (`Wire.h`, `LiquidCrystal_I2C.h`, `DHT.h`, `Adafruit_BMP280.h`) eklenir.
  • Pin Tanımları: DHT sensörünün bağlı olduğu pin numarası ve DHT sensörünün modeli tanımlanır.
  • Nesne Oluşturma: DHT, BMP280 ve LCD nesneleri oluşturulur. LCD adresini kontrol etmeyi unutmayın (genellikle 0x27 veya 0x3F).
  • `setup()` Fonksiyonu: Seri port başlatılır, LCD başlatılır ve arka ışığı açılır, DHT sensörü başlatılır ve BMP280 sensörü başlatılır. BMP280 sensörünün bulunup bulunmadığı kontrol edilir.
  • `loop()` Fonksiyonu:
    • Sensörlerden sıcaklık, nem ve basınç değerleri okunur.
    • Okunan verilerin geçerli olup olmadığı kontrol edilir (`isnan()`).
    • Veriler LCD ekrana yazdırılır.
    • Veriler seri porta (isteğe bağlı) yazdırılır.
    • 2 saniye beklenir.

Ek Bilgiler ve İpuçları

  • LCD Adresi: LCD ekranınızın adresini bulmak için I2C tarayıcı kodu kullanabilirsiniz.
  • Sensör Seçimi: DHT11 daha ucuzdur ancak DHT22 daha hassas ölçümler yapar. BMP180 ve BMP280 de benzer şekilde farklı hassasiyetlere sahiptir.
  • Kalibrasyon: Daha doğru sonuçlar için sensörleri kalibre edebilirsiniz.
  • Geliştirme: Bu projeyi daha da geliştirmek için, verileri bir SD karta kaydedebilir, bir web sunucusuna gönderebilir veya bir grafik arayüzü oluşturabilirsiniz.

Umarım bu proje size ilham verir ve Arduino ile hava durumu istasyonu kurma konusunda yardımcı olur. Herhangi bir sorunuz olursa, yorumlarda sormaktan çekinmeyin!

Bol projeli günler!

Etiketler: arduino, hava durumu istasyonu, sıcaklık, nem, basınç, bmp180, bmp280, dht11, dht22, lcd, i2c, sensör, proje, elektronik, hobi

```

LCD Ekranlı Mini Oyun: Tahmin Etmece (Buton Kontrollü)

LCD Ekranlı Mini Oyun: Tahmin Etmece (Buton Kontrollü)

LCD Ekranlı Mini Oyun: Tahmin Etmece (Buton Kontrollü)

Merhaba sevgili Arduino severler!

Bugünkü projemizde, hem eğlenceli hem de öğretici bir uygulamaya imza atıyoruz: LCD ekranlı, buton kontrollü bir tahmin etmece oyunu! Bu proje, Arduino'nun basitliğini, LCD ekranların görsel gücünü ve butonların interaktifliğini bir araya getirerek keyifli bir deneyim sunacak. Hem elektronik bilginizi pekiştirecek hem de programlama becerilerinizi geliştireceksiniz. Hazırsanız, haydi başlayalım!

Projenin Amacı

Projemizin amacı, Arduino kullanarak rastgele bir sayı üretmek ve kullanıcının bu sayıyı butonlar aracılığıyla tahmin etmesini sağlamak. LCD ekran, kullanıcıya gerekli bilgileri (tahmin, ipucu, sonuç vb.) göstermek için kullanılacak. Böylece hem temel Arduino kavramlarını öğrenecek hem de basit bir oyun geliştirmenin keyfini çıkaracaksınız.

Gerekli Malzemeler

Bu projeyi gerçekleştirmek için aşağıdaki malzemelere ihtiyacınız olacak:

  • Arduino Uno (veya uyumlu bir kart)
  • 16x2 LCD Ekran
  • 3 adet Buton
  • 10K Ohm Potansiyometre (LCD kontrast ayarı için)
  • 220 Ohm Direnç (LCD backlight için)
  • 10K Ohm Direnç (Her bir buton için, pull-down direnci olarak)
  • Jumper Kablolar
  • Breadboard (tercihen)

Devre Şeması ve Bağlantılar

Devremizi kurarken aşağıdaki bağlantıları dikkatlice yapmanız gerekmektedir:

  • LCD Ekran Bağlantıları:
    • LCD VSS pini -> Arduino GND
    • LCD VDD pini -> Arduino 5V
    • LCD VO pini -> 10K Potansiyometre orta ucu (Potansiyometrenin diğer uçları GND ve 5V'a bağlanacak)
    • LCD RS pini -> Arduino Dijital Pin 12
    • LCD Enable pini -> Arduino Dijital Pin 11
    • LCD D4 pini -> Arduino Dijital Pin 5
    • LCD D5 pini -> Arduino Dijital Pin 4
    • LCD D6 pini -> Arduino Dijital Pin 3
    • LCD D7 pini -> Arduino Dijital Pin 2
    • LCD A (Backlight Anot) pini -> 220 Ohm Direnç üzerinden Arduino 5V
    • LCD K (Backlight Katot) pini -> Arduino GND
  • Buton Bağlantıları:
    • Buton 1 (Artış) -> Bir bacağı Arduino Dijital Pin 8'e, diğer bacağı 10K Ohm direnç üzerinden GND'ye ve aynı bacak 5V'a bağlanır.
    • Buton 2 (Azalış) -> Bir bacağı Arduino Dijital Pin 9'a, diğer bacağı 10K Ohm direnç üzerinden GND'ye ve aynı bacak 5V'a bağlanır.
    • Buton 3 (Onayla) -> Bir bacağı Arduino Dijital Pin 10'a, diğer bacağı 10K Ohm direnç üzerinden GND'ye ve aynı bacak 5V'a bağlanır.

Bağlantıları yaparken kabloların doğru pinlere takıldığından emin olun. Yanlış bağlantılar donanımınıza zarar verebilir.

Arduino Kodu

Şimdi de projemizin beyni olan Arduino koduna geçelim. Aşağıdaki kodu Arduino IDE'sine kopyalayın ve Arduino'nuza yükleyin.


#include <LiquidCrystal.h>

// LCD pinlerini tanımla
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

// Buton pinlerini tanımla
const int buttonUp = 8;
const int buttonDown = 9;
const int buttonEnter = 10;

int randomNumber;
int guess = 1;
int attempts = 0;
bool gameStarted = false;

void setup() {
  // LCD ekranı başlat
  lcd.begin(16, 2);
  lcd.print("Tahmin Etmece!");

  // Buton pinlerini giriş olarak ayarla
  pinMode(buttonUp, INPUT_PULLUP);
  pinMode(buttonDown, INPUT_PULLUP);
  pinMode(buttonEnter, INPUT_PULLUP);

  randomSeed(analogRead(A0)); // Rastgele sayı üretimi için
}

void loop() {
  if (!gameStarted) {
    lcd.setCursor(0, 1);
    lcd.print("Basla icin ONAY");
    if (digitalRead(buttonEnter) == LOW) {
      startGame();
      delay(200);
    }
  } else {
    // Tahmini ekrana yazdır
    lcd.setCursor(0, 0);
    lcd.print("Tahmin: ");
    lcd.print(guess);
    lcd.print("  ");

    // Kalan hakkı ekrana yazdır
    lcd.setCursor(0, 1);
    lcd.print("Hakkınız: ");
    lcd.print(5 - attempts);
    lcd.print("  ");

    // Butonları oku
    if (digitalRead(buttonUp) == LOW) {
      guess++;
      if (guess > 100) guess = 1;
      delay(200);
    }
    if (digitalRead(buttonDown) == LOW) {
      guess--;
      if (guess < 1) guess = 100;
      delay(200);
    }
    if (digitalRead(buttonEnter) == LOW) {
      attempts++;
      checkGuess();
      delay(200);
    }
  }
}

void startGame() {
  randomNumber = random(1, 101); // 1-100 arasında rastgele sayı üret
  guess = 1;
  attempts = 0;
  gameStarted = true;
  lcd.clear();
}

void checkGuess() {
  if (guess == randomNumber) {
    lcd.clear();
    lcd.print("Tebrikler!");
    lcd.setCursor(0, 1);
    lcd.print("Bildiniz!");
    delay(2000);
    endGame(true);
  } else if (attempts >= 5) {
    lcd.clear();
    lcd.print("Kaybettiniz!");
    lcd.setCursor(0, 1);
    lcd.print("Sayi: ");
    lcd.print(randomNumber);
    delay(2000);
    endGame(false);
  } else {
    lcd.clear();
    if (guess < randomNumber) {
      lcd.print("Yukari!");
    } else {
      lcd.print("Asagi!");
    }
    delay(1000);
  }
}

void endGame(bool won) {
  gameStarted = false;
  lcd.clear();
  lcd.print("Tekrar?");
  lcd.setCursor(0, 1);
  lcd.print("ONAY ile BASLA");
  delay(1000);
}

Kodun Açıklaması

Yukarıdaki kodda şunları yaptık:

  • İlk olarak, LCD ekran ve butonlar için pinleri tanımladık.
  • `LiquidCrystal` kütüphanesini kullanarak LCD ekranı başlattık.
  • Buton pinlerini giriş olarak ayarladık ve pull-up dirençlerini etkinleştirdik.
  • `randomSeed()` fonksiyonu ile rastgele sayı üretimi için bir başlangıç değeri belirledik.
  • `loop()` fonksiyonunda, sürekli olarak butonları okuyarak kullanıcının tahminini aldık ve LCD ekranda güncelledik.
  • `checkGuess()` fonksiyonu ile kullanıcının tahminini kontrol ettik ve sonuca göre LCD ekranda mesajlar gösterdik.
  • `startGame()` ve `endGame()` fonksiyonları ile oyunu başlatıp bitirdik.

Sonuç

Tebrikler! Artık LCD ekranlı, buton kontrollü bir tahmin etmece oyununa sahipsiniz. Bu proje, Arduino'nun temellerini öğrenmek ve elektronik projeler geliştirmek için harika bir başlangıç noktasıdır. Kodu inceleyerek ve değiştirerek projenizi daha da geliştirebilirsiniz. Örneğin, zorluk seviyesini ayarlayabilir, farklı mesajlar gösterebilir veya oyuna yeni özellikler ekleyebilirsiniz.

Umarım bu proje size ilham vermiştir ve Arduino dünyasına adım atmanıza yardımcı olmuştur. Bir sonraki projede görüşmek üzere!

Etiketler: Arduino, LCD, Buton, Oyun, Tahmin Etmece, Elektronik, Proje, Kodlama

```

Arduino ile Hava Durumu İstasyonu: Sıcaklık, Nem ve Basınç Ölçümü

Arduino ile Hava Durumu İstasyonu: Sıcaklık, Nem ve Basınç Ölçümü

Arduino ile Kendi Hava Durumu İstasyonunuzu Kurun!

Merhaba sevgili Arduino severler!

Bugün, hepimizin merak ettiği hava durumunu kendi imkanlarımızla ölçebileceğimiz bir proje üzerinde çalışacağız: Arduino ile Hava Durumu İstasyonu! Bu proje sayesinde ortam sıcaklığını, nemini ve hatta hava basıncını ölçebilecek, elde ettiğiniz verileri bir LCD ekranda görüntüleyebileceksiniz. Hem eğlenceli, hem de öğretici bu projeye gelin birlikte göz atalım.

Gerekli Malzemeler

* Arduino UNO (veya benzeri bir Arduino kartı) * BMP180 Barometrik Basınç Sensörü (Sıcaklık ölçümü de yapabilir) * DHT11 veya DHT22 Sıcaklık ve Nem Sensörü * 16x2 LCD Ekran * 10k Potansiyometre (LCD kontrast ayarı için) * Jumper Kablolar * Breadboard

Devre Şeması ve Bağlantılar

Bağlantıları doğru yapmak, projenin sağlıklı çalışması için çok önemli. İşte dikkat etmeniz gerekenler:

  • BMP180 Sensörü Bağlantıları:
    • VCC pini -> Arduino 3.3V pinine
    • GND pini -> Arduino GND pinine
    • SDA pini -> Arduino A4 pinine (SDA)
    • SCL pini -> Arduino A5 pinine (SCL)
  • DHT11 Sensörü Bağlantıları:
    • VCC pini -> Arduino 5V pinine
    • DATA pini -> Arduino Dijital 2 numaralı pinine (Örneğin)
    • GND pini -> Arduino GND pinine
  • LCD Ekran Bağlantıları:
    • VSS pini -> Arduino GND pinine
    • VDD pini -> Arduino 5V pinine
    • VO pini -> 10k Potansiyometrenin orta ucuna
    • RS pini -> Arduino Dijital 12 numaralı pinine (Örneğin)
    • RW pini -> Arduino GND pinine
    • E pini -> Arduino Dijital 11 numaralı pinine (Örneğin)
    • D4 pini -> Arduino Dijital 5 numaralı pinine (Örneğin)
    • D5 pini -> Arduino Dijital 4 numaralı pinine (Örneğin)
    • D6 pini -> Arduino Dijital 3 numaralı pinine (Örneğin)
    • D7 pini -> Arduino Dijital 2 numaralı pinine (Örneğin)
    • A pini (Arka Işık Anot) -> Arduino 5V pinine (100-220 Ohm direnç ile)
    • K pini (Arka Işık Katot) -> Arduino GND pinine

Bu bağlantıları bir breadboard üzerinde kurmak, işinizi oldukça kolaylaştıracaktır. Potansiyometreyi LCD ekranın kontrastını ayarlamak için kullanacağız. Bağlantıları tamamladıktan sonra kod kısmına geçebiliriz.

Arduino Kodu

Aşağıdaki Arduino kodunu kullanarak sensörlerden verileri okuyabilir ve LCD ekranda görüntüleyebilirsiniz. Kod, BMP180 ve DHT11 sensörleri için gerekli kütüphaneleri içermektedir. Bu kütüphaneleri Arduino IDE'nize yüklemeyi unutmayın.


#include <Wire.h>
#include <LiquidCrystal.h> // LCD kütüphanesi
#include <DHT.h>        // DHT sensörü kütüphanesi
#include <BMP180.h>   // BMP180 sensörü kütüphanesi

// LCD pin tanımlamaları
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

// DHT11 pin tanımlaması
#define DHTPIN 7    // DHT11 sensörünün bağlı olduğu pin
#define DHTTYPE DHT11   // DHT11 sensör tipi (DHT22 kullanıyorsanız DHT22 olarak değiştirin)
DHT dht(DHTPIN, DHTTYPE);

// BMP180 nesnesi oluşturma
BMP180 bmp180;

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2); // LCD'yi başlat
  lcd.print("Hava Durumu");
  delay(2000);
  lcd.clear();

  // BMP180 başlatma
  if (!bmp180.begin()) {
    Serial.println("BMP180 başlatılamadı!");
    lcd.print("BMP180 Hatasi");
    while (1);
  }

  dht.begin(); // DHT sensörünü başlat
}

void loop() {
  // DHT11'den sıcaklık ve nem okuma
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  // BMP180'den basınç okuma
  double pressure = bmp180.readPressure();
  double altitude = bmp180.readAltitude(); // deniz seviyesinden yükseklik (isteğe bağlı)

  // Hata kontrolü
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("DHT sensöründen veri okunamadı!");
    lcd.clear();
    lcd.print("DHT Hatasi");
  } else {
      // LCD'ye verileri yazdırma
      lcd.setCursor(0, 0); // İlk satır, ilk sütun
      lcd.print("Sicaklik: ");
      lcd.print(temperature);
      lcd.print(" C");

      lcd.setCursor(0, 1); // İkinci satır, ilk sütun
      lcd.print("Nem: ");
      lcd.print(humidity);
      lcd.print(" %");
  }

  Serial.print("Sicaklik: ");
  Serial.print(temperature);
  Serial.print(" *C, Nem: ");
  Serial.print(humidity);
  Serial.print(" %, Basinc: ");
  Serial.print(pressure / 100, 2);  // Basıncı hPa cinsinden göster
  Serial.println(" hPa");

  delay(2000);
  lcd.clear();

  lcd.setCursor(0,0);
  lcd.print("Basinc: ");
  lcd.print(pressure / 100, 2);
  lcd.print(" hPa");

  lcd.setCursor(0,1);
  lcd.print("Yukseklik: ");
  lcd.print(altitude);
  lcd.print(" m");
  delay(2000);
  lcd.clear();
}

Bu kodu Arduino IDE'nize kopyalayıp yükleyin. LCD ekranda sıcaklık, nem ve basınç değerlerini görmeye başlayacaksınız.

Sonuç

Tebrikler! Arduino ile kendi hava durumu istasyonunuzu başarıyla kurdunuz. Bu proje, sensörler hakkında bilgi edinmek ve Arduino programlama becerilerinizi geliştirmek için harika bir başlangıç. Daha da ileri gitmek isterseniz, bu verileri bir SD karta kaydedebilir, internete yükleyebilir veya daha gelişmiş bir arayüz oluşturabilirsiniz.

Unutmayın, bu sadece bir başlangıç! Arduino dünyası keşfedilmeyi bekleyen sayısız proje ile dolu. Bir sonraki projede görüşmek üzere!

Etiketler: Arduino, Hava Durumu İstasyonu, Sıcaklık, Nem, Basınç, BMP180, DHT11, LCD, Proje, Elektronik, Kendin Yap

```