Arduino ve LCD İle Menü Yapımı

Merhaba! Bu yazımızda Arduino ve LCD kullanarak fonksiyonel bir menü oluşturacağız, kullanım açısından bir çok yere entegre edebilirsiniz, ben süreli ısıtma gibi bir konsept ile kodları yazdım, küçük değiştirmeler ile istediğiniz yönde geliştirebilirsiniz, birkaç bilgi ile yazımıza başlıyorum.

LCD Nedir?

LCD, Liquid Crystal Display yani Sıvı Kristal Ekran elektrikle kutuplanan sıvının ışığı tek fazlı geçirmesi ve önüne eklenen bir kutuplanma filtresi ile gözle görülebilmesi ilkesine dayanan bir görüntü teknolojisidir. LCD katmanları bir araya geldiklerinde paneller meydana gelir. Panellerin çalışma mantığı en basit haliyle, üzerindeki özelleşmiş hücrelerin iyon katmanı tarafından şekillendirilmesi ve elektrik akımıyla görüntü oluşturulması şeklindedir.

Arduino lcd menü, Arduino ve LCD İle Menü Yapımı

Kullanılacak Malzemeler

Devre Şeması

Arduino lcd menü, Arduino ve LCD İle Menü Yapımı

Bağlantı Listesi

LCD

Arduino

A

5V VCC

K

GND

D4

9

D5

10

D6

11

D7

12

RS

7

RW

GND

VSS

GND

VDD

5V VCC

E

8

Eğer ekran parlaklığı için potensiyometre kullanacaksanız, V0 pinini potensiyometrenin orta bacağına bağlamanız gerekiyor, kullanmak istemiyorsanız eğer, Arduino PWM yardımı ile önceden belirleyebilirisinz, yada doğrudan VCC bağlayarak sabit parlaklık elde edebilirsiniz, fakat en kullanışlı durum, önceden pwm ile voltaj/parlaklık belirlemek. Ayrıca butonlar pull down direnç olarak kullanıldı, daha önce pull down hakkında bir yazı paylaşmıştık buradan okuyabilirsiniz. Kodun içinde DHT11 pinin görebilirsiniz.

Breadboard Yerleştirmesi

Görüntü kirliliği olmaması için en uygun şekilde yerleştirmeye çalıştım, ortadan geçen sarı kablo, LCD’nin V0 pinine gidiyor yani parlaklık için kullanılıyor

Butonların dirence giden bacağına, giriş pinlerine takıyoruz. Diğer bacak ise VCC’ye gidiyor.

Solda görülen tek teller ise LCD’nin GND ve VCC girişleri için.

Arduino lcd menü, Arduino ve LCD İle Menü Yapımı

Devre Yazılımı

#include <Pushbutton.h>
#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 5
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal lcd(7,8,9,10,11,12);
const int buttonPin = 2;
const int okPin = 3;
char ch;
int a = 0, e1 = 0, e2 = 0, ufo = 0, e3 = 0, saat = 0, daak = 0, cas = 0, count = 0,sicaklik,cont = 100;
int hedef = 53;
Pushbutton pbutton1(buttonPin);
Pushbutton pbutton2(okPin);

void setup() {
  cas = 0;
  pinMode(buttonPin, INPUT);
  pinMode(okPin, INPUT);
  //eğer potansiyemetre yoksa bununla parlaklık ayarlıyorum analogWrite(6, cont);
  pinMode(2, OUTPUT);
  digitalWrite(2, HIGH);
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0); lcd.print("devreyakan.com");
  lcd.setCursor(2, 2); lcd.print("arduino menu");
  delay(10000);
  lcd.clear();
  lcd.setCursor(5, 0); lcd.print("Versiyon");
  lcd.setCursor(5, 2); lcd.print("A0.1");
  delay(1000);
  lcd.clear();

}

void loop() {
  updateDisplay();
  if (pbutton1.getSingleDebouncedPress()) {
    cas++;
    if (cas > 3)
    {
      cas = cas * 0;
    }
  }

  if (cas == 0)
  {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("HAZIR PROGRAMLAR");
    lcd.setCursor(0, 1);
    lcd.print("60C'de 60 dakika");

  }
  else if (cas == 1)
  {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("HAZIR PROGRAMLAR");
    lcd.setCursor(0, 1);
    lcd.print("10C'de 10 dakika");
  }
  else if (cas == 2)
  {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("HAZIR PROGRAMLAR");
    lcd.setCursor(0, 1);
    lcd.print("20C'de 30 dakika");
  }
  else if (cas == 3)
  {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Manuel PROGRAMLA");
    lcd.setCursor(0, 1);
    lcd.print("Deger giriniz...");
  }

  if (pbutton2.getSingleDebouncedPress()) {

    if (cas == 0) {
      saat = 1;
      hedef = 60;
      saatci();
    }
    if (cas == 1) {
      saat == 1;
      hedef == 60;
      saatci();

    }
    if (cas == 2) {
      saat == 1;
      hedef == 60;
      saatci();

    }
    if (cas == 3) {
      saat == 1;
      hedef == 60;
      saatci();

    }

  }


  delay(100);

}

void saatci()
{
  delay(1000);
  e2 = daak;
  e3 = 0;

  for (e1 = saat; e1 >= 0; e1--)
  {
    for (e2; e2 >= 0; e2--)
    {
      for (e3; e3 >= 0; e3--)
      {
        lcd.clear();
        lcd.print("");
        lcd.print("Sure:");
        lcd.print(" ");
        lcd.print("Hedef:");
        lcd.print(hedef);
        lcd.print("C");
        lcd.setCursor(0, 1);
        lcd.print("");
        lcd.print(e1);
        lcd.print(":");
        lcd.print(e2);
        lcd.print(":");
        lcd.print(e3);
        lcd.setCursor(13, 1);
        sensors.requestTemperatures();
        sicaklik = sensors.getTempCByIndex(0);
        lcd.print(sicaklik);
        lcd.print("C");
        delay(1000);

        if (sicaklik < hedef)
        {
          digitalWrite(2, LOW);
        }
        else if (sicaklik > hedef)
        {
          digitalWrite(2, LOW);
        }


        if (e1 + e2 + e3 <= 0)
        {
          lcd.clear();
          lcd.print("Kaynatma Bitti");
          daak = saat = 0;
          hedef = 30;
        }

      }
      e3 = 59;
    }
    e2 = 59;
  }
}
void termo()
{
  while ( a <= 50)
  {
    a = a + 1; 
    delay(200); 
    lcd.setCursor(13, 1);
    sensors.requestTemperatures();
    sicaklik = sensors.getTempCByIndex(0);
    lcd.print(sicaklik);
    lcd.print("C");
  }
}
void updateDisplay() {
  lcd.setCursor(0, 0);
}

Açıklamalar

I2C modüllü bir LCD modülü olursa daha kaliteli ve kolay bir işlem yapılabilir, bu şekildeyken gereksiz sayıda kablo kullanılıyor, haliyle kartın işlem yeteneği kısıtlanıyor, ayrıa görüntü olarakta hoş durmuyor. Eğer pull-down kullanmak istemezseniz arduino’da doğrudan bulunan pull-downı kullanabilirsiniz, bu yüzden bir kütüphane daha ekledim, butonları kod içinde atıyarak sorunsuz kullanılabilir.

Son Hal

Arduino lcd menü, Arduino ve LCD İle Menü Yapımı
Arduino lcd menü, Arduino ve LCD İle Menü Yapımı
Arduino lcd menü, Arduino ve LCD İle Menü Yapımı

Terimler ve Sayfa Sözlüğü

PWM: Açılımı Pulse Width Modulation yani Sinyal Genişlik Modülasyonu olan bu teknik, sinyal işleme veya sinyal aktarma gibi daha çok elektronik devrelerin yanı sıra Arduino veya elektrik makineleri gibi özel uygulama alanlarında da yer alan bir tekniktir.

GND: Eksi bağlantısının yapılacağı bölümdür, Türkçeye şaşe, toprak olarak çevirilir. 

VCC: Collector Collector Voltage yani devreye bağlanacak olan güç kaynağının eksi bağlantısı yapılacak bölümdür.

I2C(IIC): I2C 2 adet pin üzerinden iletişim kurmayı sağlayan bir yazılım protokolüdür. Philips ( NXP ) firması tarafından oluşturulmuştur.