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.

Kullanılacak Malzemeler
- Arduino yada Atmel İşlemci
- LCD Modülü (Tercihen I2CP Entegreli)
- DHT11 Isı Sensörü, Kullandığım Metal Probe
- 10K ohm direnç x4
- Breadboard
- Buton x2
- Kablo / Jumper
- Opsiyonel Potensiyometre 1K/10K
Devre Şeması

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.

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



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.
Çok teşekkürler sonunda türkçe kaynakta çalışan bir menü buldum, daha fazla seçenek henüz ekleyemedim ama şuan gayet iyi çalışıyor, butona saniye saydrama tek butona düşürmeyi çalışacağım
İşinize yaraması harika, yapamadığınız veya anlamadığınız yerler için iletişimden de yazabilirsiniz. Teşekkürler!
Merhaba.
Acaba linki yenileme sansiniz varmidir?
Tesekkurler, iyi calismalar.
Merhaba,
isteğiniz üzere proje kodu link yenilenmesi yerine doğrudan yazıda paylaşılmıştır.
Supersiniz cok tesekkur ederim.
Hemen denemeye basliyorum.
Biz teşekkür ederiz, her hangi bir durumda sorunu belirtirseniz hemen yardımcı olabiliriz:).
Merhaba emeğinize sağlık. Anlayamadığım iki nokta var;
if (sicaklik hedef)
{
digitalWrite(2, LOW);
}
buradagi kodda sıcaklık düşükse değer HIGH olması gerekmiyor mu?
İkinci olarak;
VCC: Collector Collector Voltage yani devreye bağlanacak olan güç kaynağının eksi bağlantısı yapılacak bölümdür.
Burada artıya bağlanır olmayacak mı?
Bilgilendirirseniz sevinirim.
merhaba bazı kartlar ters logic tir yani HIGH lar LOW ,LOW lar ise HIGH olarak geçer kendinize göre ayarlamalısınız.
GND: ortak/eksi
VCC: güç/artı
İyi akşamlar dileriz 🙂