arduino ile lcd ekran kontrolü etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Merhabalar,
Adım adım arduino derslerimizde bu yazımızda arduino ile lcd ekran sürme işleminden bahsedeceğiz.
Arduino Ide içerisinde lcd ekranları sürmemizi sağlayan liquidcrystal lcd kütüphanesi bulunmakadır.
Peki bu kütüphane bize neleri sağlamakta ve hangi fonksiyonları barındırmaktadır? isterseniz buna bir gözatalım
begin(int kolon,int sıra) : begin fonksiyonu bizim ne kadarlık bir lcd kullanacağımızı programsal olarak tanımlamamıza olanak tanır.Kullandığımız lcd kaç satır ve sütunu destekliyorsa kolon ve sıra ile bunu belirtmemiz gerekmektedir.
clear() : ingilizcesinden de kolayca anlaşılabileceği üzere lcd ekran üzerinde herşeyi temizleyen fonksiyonumuz
home() : lcd ekran üzerinde işaretçinin lcd ekranın başlangıç noktası yani en yukarı ve sol köşesine gitmesi sağlar
setCursor(int kolon,int sıra): işaretçimizin fonksiyon içerisinde girilmiş olan kolon ve sıra numarasına ilerlemesini sağlar
write(byte değer): işaretçini lcd ekran üzerinde bulunduğu yere değeri yazdırmaktadır.Burada değer 1 adet karakteri yani char belirmektedir.
print(veri): ekrana string olarak veri değerini yazdırmaya yarayan fonksiyonumuz
cursor(): işaretçinin altında çizginin belirlemesini sağlamaktadır.
noCursor(): işaretçinin ekran üzerinde görünmemesini sağlar.
blink(): işaretçinin yanıp sönmesine olanak tanır.
noBlink(): işaretçinin yanıp sönmesini iptal eder
display(): ekranın kapanmasını sağlayan noDisplay fonksiyonun tersini sağlayarak ekrana verilen son verinin geri getirilmesini sağlar
noDisplay(): ekranı kapatma fonksiyonudur.
scrollDisplayLeft(): ekrandaki veriyi bir karakter boşluk ile sola kaydırır
scrollDisplayRight(): ekrandaki veriyi bir karakter boşluk ile sağa kaydırır
autoscroll():her karakter girildiğinde otomatik olarak önceki karakteri sola ya da sağa kaydırır
noAutoscroll(): otomatik scroll komutunu devre dışı bırakır.
leftToRight(): verinin ekrana soldan sağa doğru akacak şekilde yazılmasını sağlar
rightToLeft():verinin ekrana sağdan sola doğru akacak şekilde yazılmasını sağlar
Fonksiyonlarımızı inceledikten sonra gelelim lcd ekranımızı nasıl arduinomuza bağlayacağımıza
şemada 68 ohm değerindeki direnç lcd ekranımızın arduino üzerinden çekilen akımını sınırlamak için kullanılmıştır.
Yukarıda arduino ile lcd ekran arasındaki bağlatı noktaları listenmiştir.Burada dikkatinizi çekeceği üzere arduino üzerinden veriler 4 bit olarak ekrana gönderilmektedir ve db4-7 üzerinde arduinonun d2-5 arasında bağlantı sağlanmıştır.Potansiyometre lcd ekranımızın kontrast yani netleğini ayarlamak amacı ile devreye eklenmiştir.
Gelelim arduino kodlarımıza
#include <LiquidCrystal.h> // lcd kütüphanemizi ekledik
LiquidCrsytal lcd(12,11,5,4,3,2); // lcd ekranımızın bağlantı noktalarını tanımladık 12,11 register ve enable pinleri iken 5-2 pinleri ise data pinlerimiz
void setup()
{
lcd.begin(16,2);// lcd ekranımızın 2 satırlık ve 16 sütunluk olduğu programa belirtiyoruz
lcd.print("Arduino");// lcd ekranın en üst sol köşesinden başlayarak arduino yazdırdık.
lcd.setCursor(0,1);// lcd ekran üzerinde işaretçimizi 2. satır ve 0. sütuna yani 2. satır başlangıcına çekiyoruz
lcd.print("LCD display");// 2. satırımıza verimizi yazdırdık.
}
void loop()
{
}
Bu yazımızda sizlerle paralel bağlantılı lcd ekranların arduino ile kullanımından bahsettik.Bir sonraki yazımızda seri olarak haberleşen lcd ekran ile uygulama üzerine sizlerle birlikte olacağız.
Adım adım arduino derslerimizde bu yazımızda arduino ile lcd ekran sürme işleminden bahsedeceğiz.
Arduino Ide içerisinde lcd ekranları sürmemizi sağlayan liquidcrystal lcd kütüphanesi bulunmakadır.
Peki bu kütüphane bize neleri sağlamakta ve hangi fonksiyonları barındırmaktadır? isterseniz buna bir gözatalım
begin(int kolon,int sıra) : begin fonksiyonu bizim ne kadarlık bir lcd kullanacağımızı programsal olarak tanımlamamıza olanak tanır.Kullandığımız lcd kaç satır ve sütunu destekliyorsa kolon ve sıra ile bunu belirtmemiz gerekmektedir.
clear() : ingilizcesinden de kolayca anlaşılabileceği üzere lcd ekran üzerinde herşeyi temizleyen fonksiyonumuz
home() : lcd ekran üzerinde işaretçinin lcd ekranın başlangıç noktası yani en yukarı ve sol köşesine gitmesi sağlar
setCursor(int kolon,int sıra): işaretçimizin fonksiyon içerisinde girilmiş olan kolon ve sıra numarasına ilerlemesini sağlar
write(byte değer): işaretçini lcd ekran üzerinde bulunduğu yere değeri yazdırmaktadır.Burada değer 1 adet karakteri yani char belirmektedir.
print(veri): ekrana string olarak veri değerini yazdırmaya yarayan fonksiyonumuz
cursor(): işaretçinin altında çizginin belirlemesini sağlamaktadır.
noCursor(): işaretçinin ekran üzerinde görünmemesini sağlar.
blink(): işaretçinin yanıp sönmesine olanak tanır.
noBlink(): işaretçinin yanıp sönmesini iptal eder
display(): ekranın kapanmasını sağlayan noDisplay fonksiyonun tersini sağlayarak ekrana verilen son verinin geri getirilmesini sağlar
noDisplay(): ekranı kapatma fonksiyonudur.
scrollDisplayLeft(): ekrandaki veriyi bir karakter boşluk ile sola kaydırır
scrollDisplayRight(): ekrandaki veriyi bir karakter boşluk ile sağa kaydırır
autoscroll():her karakter girildiğinde otomatik olarak önceki karakteri sola ya da sağa kaydırır
noAutoscroll(): otomatik scroll komutunu devre dışı bırakır.
leftToRight(): verinin ekrana soldan sağa doğru akacak şekilde yazılmasını sağlar
rightToLeft():verinin ekrana sağdan sola doğru akacak şekilde yazılmasını sağlar
Fonksiyonlarımızı inceledikten sonra gelelim lcd ekranımızı nasıl arduinomuza bağlayacağımıza
şemada 68 ohm değerindeki direnç lcd ekranımızın arduino üzerinden çekilen akımını sınırlamak için kullanılmıştır.
Gelelim arduino kodlarımıza
#include <LiquidCrystal.h> // lcd kütüphanemizi ekledik
LiquidCrsytal lcd(12,11,5,4,3,2); // lcd ekranımızın bağlantı noktalarını tanımladık 12,11 register ve enable pinleri iken 5-2 pinleri ise data pinlerimiz
void setup()
{
lcd.begin(16,2);// lcd ekranımızın 2 satırlık ve 16 sütunluk olduğu programa belirtiyoruz
lcd.print("Arduino");// lcd ekranın en üst sol köşesinden başlayarak arduino yazdırdık.
lcd.setCursor(0,1);// lcd ekran üzerinde işaretçimizi 2. satır ve 0. sütuna yani 2. satır başlangıcına çekiyoruz
lcd.print("LCD display");// 2. satırımıza verimizi yazdırdık.
}
void loop()
{
}
Bu yazımızda sizlerle paralel bağlantılı lcd ekranların arduino ile kullanımından bahsettik.Bir sonraki yazımızda seri olarak haberleşen lcd ekran ile uygulama üzerine sizlerle birlikte olacağız.
Yine yaratıcı bir fikir arduino ile birleşince karşımıza vücut bulmuş bir şekilde çıkıyor.Nedir bu?
Şema
Su seviye kontrolünden başlayalım isterseniz.Dikkatinizi çektiyse su haznesinin üzerinden arduinonun 5 volt çıkışı suya daldırılmış vaziyette ve haznenin sağ tarafından ise 3 noktadan düşük seviye,orta seviye ve yüksek seviye olmak üzere 3 adet prop yerleştirilimiş.
Herbir su seviye switchi nasıl çalışır?
Yerleştirilmiş ilgili proba su teması olması halinde o prob ile 5 volt kaynağımız kısa devre olacağından transistörün base ine düşük bir miktar akım akar ve trasistörün emitter ve collector kısımları kısa devre olur ve arduinomuza o bolgeden dijital input olarak bilgi gider.
Peki sistemde su seviyesine nasıl karar verilir?
High,medium ve low olmak üzere 3 adet proba su teması halinde yüksek seviyede su var demek anlamını taşır ve su pompasını kapatırız.Medium ve low a teması halinde ise orta seviye bir su var anlamını taşıyacağından ya pompamıza düşük devirde çalışma bilgisi göndeririz ya da zamanlayıcı yardımı ile belirli süre çalıştırırız.Sadece düşük seviyesi görülmesi durumunda ise tam güç çalıştırır ve haznemizi doldururuz.
Motor nasıl sürülüyor?
Su seviye devrelerinde transistörün anahtarlama elamanı olarak kullanıldığı gibi arduinonun bir digital pini output olarak ayarlanmış ve pompayı aktif hale getirecek transistörün base ine bağlanmış.Çıkışımızın 1 olması durumunda base e bir miktar akım gidecek ve motorun çıkışı ile toprak kısa devre olacağından motorumuz çalışmaya başlayacak.
Sistemin görünüşü
Gelelim sistemin kodlarına :)
#include <LiquidCrystal.h> // lcd kütüphanesi eklenmiş
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // lcd bacakları kütüphaneye göre ayarlanmış
byte sensorPin[] = {8, 9, 10}; // su seviye sensör dijital adresleri 8-9-10 olarak ayarlandı
byte ledPin[] = {11, 12, 13}; // led pinleri ayarlandı
const byte sensors = 3;
int level = 0;
int motor = A4; // motor pini ayarlandı
void setup() {
for(int i = 0; i < sensors; i++) {
pinMode(sensorPin[i], INPUT); //sensör pinleri input haline geldi
pinMode(ledPin[i], OUTPUT); // led pinleri output haline geldi
}
pinMode(motor, OUTPUT); //motor pini output haline geldi
lcd.begin(16, 2); //lcd başlatıldı
}
void loop() {
level = 0; // su seviyesi sıfırlandı
for(int i = 0; i < sensors; i++) {
if(digitalRead(sensorPin[i]) == LOW) { // düşük su seviyesi kontrolü
digitalWrite(ledPin[i], HIGH); // düşük ledi yakıldı
level = sensors - i; // su seviyesi dusuruldu
} else {
digitalWrite(ledPin[i], LOW); // normale döndüğünde söndürüldü
}
}
lcd.clear(); // lcd temizlendi
lcd.print("Water level");
lcd.setCursor(0,1);
switch(level) { // su seviyesi ekrana yazdırılıyor switch her seviye için kontrol ediyor.
case 1:
lcd.print("HIGH");
digitalWrite(motor, HIGH);
break;
case 2:
lcd.print("AVERAGE");
digitalWrite(motor, LOW);
break;
case 3:
lcd.print("LOW");
digitalWrite(motor, LOW);
break;
default:
lcd.print("NO WATER");
digitalWrite(motor, LOW);
break;
}
delay(50);
}
Gelilim sonuç cümlemize :)
Bu devre tabiiki profesyonel amaçlarla kullanılamaz.Gidip büyük bir su kuyusu otomasyonu yapmanız devrenin bu hali ile imkansız ancak aklıma ilk gelen :) otomatik bir kahve makinesinde su haznesi otomasyonu bu şekilde gayet rahatlıkla yapılabilir.
Bir sonraki yazımda görüşmek dileği ile :)
Caner ÇAKAR