adım adım arduino dersleri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Merhabalar arkadaşlar,
Önceki yazılarımızda lcd konularına girmiş, örnekler vermiş ve lcd kütüphane fonksiyonları üzerinde durmuştuk.Bu yazımıza ise grafik lcd ler üzerinde duracağız.
Daha önce kullanmış olduğumuz lcd ekranlar 2 satır içerirken grafik lcd ekran ise daha fazla piksel ile bize hizmet sunmaktadır.Üzerinde barındırdığı her bir piksel ile bize kullanıcı arayüzümüz için bir tuval olmaktadır.
Bu projemizde samsungun KS0108 GLCD sini kullanacağız.
Arduino ide tarafında yapmamız gereken arduino sitesine giderek GLCDks0108 kütüphanesini ide mize eklemek.
Peki bu kütüphane bizlere hangi fonksiyonları sağlar ?
Init(bool inverted): kütüphanemizi başlamaya hazır hale getirir.
ClearScreen() : grafik lcd ekranı tamamen temizler
DrawBitmap(bitmap,int x,int y,color) : x ve y koordinatları ile belirtilen noktaya bitmap uzantılı resmi ekler
SelectFont(font) : önceden tanımlı olan fontlar arasından seçim yapmamıza olanak tanır
PutChar(char c) : işaretçinin son kaldığı noktaya karakter yazdırır
GotoXY(int x, int y) : işaretçiyi x ve y ile belirtilen koordinata çeker
PrintNumber(long n) : ekranda son kalınan noktaya sayı yazdırır.
Puts(string t) : ekranda son kalınan noktaya string yazılmasını sağlar
DrawLine(int x1,int y1,int x2, int y2, color) : x1 y1 ve x2 y2 koordinatları başlangıç ve bitiş noktaları olacak şekilde ekrana çizgi çeker
DrawVertLine(int x,int y,long length , color) : x ve y koordinatıdan başlayarak length kadar uzunlukta bir dikey çizgi çeker
DrawHoriLine(int x,int y,long length , color) : x ve y koordinatıdan başlayarak lenght kadar uzunlukta yatay bir çizgi çeker
DrawRect(int x, int y, int width, int height) : x ve y koordinatlarından başlayarak width ile verilen genişlik ve height ile verilen yükseklikte bir dikdörtgen çizer
InvertRect(int x, int y, int width,int radius, int height) : x ve y koordinatlarından başlayarak widht ile verilen genişlik ve height ile verilen yükseklik kadar dikdörtgen alanın piksellerini tersine çevirir.
DrawRoundRect(int x, int y, int width, int height, color) : x ve y koordinatlarından başlayarak width ile verilen genişlik ile height ile verilen yükseklik kadar bir dikdörtgen çizer.Ancak verilen radius kadar dikdörtgenin köşelerini ovalleştirir.
FillRect(int x, int y, int width, int height, color) : x ve y koordinatlarından başlayarak width ile verilen genişlik ve height ile verilen yükseklik kadar alanı dikdörtgen şeklinde doldurur.
DrawCircle(int x, int y, int radius, color) : Dairenin merkezi x ve y ile verilen koordinatlarda yer alacak şekilde ve radius ile belirtilen yarıçapta bir daire çizer
SetDot(int x, int y, color) : x ve y koordinatları ile verilen tek bir pikseli doldurur
Bu devrede kullanacağımız malzeme listesi :
1 adet arduinı mega
1 adet glcd
1 adet parlaklık ayarı için potansiyometre
1 adet 10k ohm direnç fazla akımı engellemek için
Gelelim devre şemamıza
Gelelim Ardunino kodlarımıza
#include <ks0108.h>
int x=0; // x eksen koordinatımızı sıfırladık
int y=0; // y eksen koordinatımızı sıfırladık
void setup ()
{
GLCD.Init(NON_INVERTED); // grafik lcd mizi beyaz bir şekilde başlattık
GLCD.ClearScreen(); // başlamak için lcd mizi önce temizledik
}
void loop()
{
GLCD.DrawCircle(63,31,5,BLACK); // 63-31 merkezli 5 yarıçaplı siyah bir daire çizdik
delay(1000); // 1 sn kadar gecikme
GLCD.ClearScreen(); // ekranı temizledik
GLCD.DrawRoundRect(30,30,20,20,5,BLACK); //sol alt köşesi 30-30 koordinatında 20 genişlik ve 20 uzunlukta ve herbir köşesi 5 birimlik ovalleştirilmiş bir siyah dikdörtgen çizdirdik
delay(1000); // 1 sn lik gecikme
GLCD.ClearScreen(); // ekranı temizledik
GLCD.FillRect(30,30,30,10,BLACK); // 30-30 koordinatına 30 genişlik 10 yüksekliğe sahip içi siyah dikdörtgen çizdirdik
delay(1000); // 1 snlik gecikme
GLCD.ClearScreen();// ekranı temizledik
}
Yukarıdaki örnekte sırası ile ekrana daire ,oval köşeli dörtgen ve içi siyah diktörgen sırası ile 1 er sn aralıkla çizdirelecek ve her sekil arasındaki 1 sn lik zaman aralığından sonra ekran temizlenecektir.
Önceki yazılarımızda lcd konularına girmiş, örnekler vermiş ve lcd kütüphane fonksiyonları üzerinde durmuştuk.Bu yazımıza ise grafik lcd ler üzerinde duracağız.
Daha önce kullanmış olduğumuz lcd ekranlar 2 satır içerirken grafik lcd ekran ise daha fazla piksel ile bize hizmet sunmaktadır.Üzerinde barındırdığı her bir piksel ile bize kullanıcı arayüzümüz için bir tuval olmaktadır.
Bu projemizde samsungun KS0108 GLCD sini kullanacağız.
Arduino ide tarafında yapmamız gereken arduino sitesine giderek GLCDks0108 kütüphanesini ide mize eklemek.
Init(bool inverted): kütüphanemizi başlamaya hazır hale getirir.
ClearScreen() : grafik lcd ekranı tamamen temizler
DrawBitmap(bitmap,int x,int y,color) : x ve y koordinatları ile belirtilen noktaya bitmap uzantılı resmi ekler
SelectFont(font) : önceden tanımlı olan fontlar arasından seçim yapmamıza olanak tanır
PutChar(char c) : işaretçinin son kaldığı noktaya karakter yazdırır
GotoXY(int x, int y) : işaretçiyi x ve y ile belirtilen koordinata çeker
PrintNumber(long n) : ekranda son kalınan noktaya sayı yazdırır.
Puts(string t) : ekranda son kalınan noktaya string yazılmasını sağlar
DrawLine(int x1,int y1,int x2, int y2, color) : x1 y1 ve x2 y2 koordinatları başlangıç ve bitiş noktaları olacak şekilde ekrana çizgi çeker
DrawVertLine(int x,int y,long length , color) : x ve y koordinatıdan başlayarak length kadar uzunlukta bir dikey çizgi çeker
DrawHoriLine(int x,int y,long length , color) : x ve y koordinatıdan başlayarak lenght kadar uzunlukta yatay bir çizgi çeker
DrawRect(int x, int y, int width, int height) : x ve y koordinatlarından başlayarak width ile verilen genişlik ve height ile verilen yükseklikte bir dikdörtgen çizer
InvertRect(int x, int y, int width,int radius, int height) : x ve y koordinatlarından başlayarak widht ile verilen genişlik ve height ile verilen yükseklik kadar dikdörtgen alanın piksellerini tersine çevirir.
DrawRoundRect(int x, int y, int width, int height, color) : x ve y koordinatlarından başlayarak width ile verilen genişlik ile height ile verilen yükseklik kadar bir dikdörtgen çizer.Ancak verilen radius kadar dikdörtgenin köşelerini ovalleştirir.
FillRect(int x, int y, int width, int height, color) : x ve y koordinatlarından başlayarak width ile verilen genişlik ve height ile verilen yükseklik kadar alanı dikdörtgen şeklinde doldurur.
DrawCircle(int x, int y, int radius, color) : Dairenin merkezi x ve y ile verilen koordinatlarda yer alacak şekilde ve radius ile belirtilen yarıçapta bir daire çizer
SetDot(int x, int y, color) : x ve y koordinatları ile verilen tek bir pikseli doldurur
Bu devrede kullanacağımız malzeme listesi :
1 adet arduinı mega
1 adet glcd
1 adet parlaklık ayarı için potansiyometre
1 adet 10k ohm direnç fazla akımı engellemek için
Gelelim devre şemamıza
Gelelim Ardunino kodlarımıza
#include <ks0108.h>
int x=0; // x eksen koordinatımızı sıfırladık
int y=0; // y eksen koordinatımızı sıfırladık
void setup ()
{
GLCD.Init(NON_INVERTED); // grafik lcd mizi beyaz bir şekilde başlattık
GLCD.ClearScreen(); // başlamak için lcd mizi önce temizledik
}
void loop()
{
GLCD.DrawCircle(63,31,5,BLACK); // 63-31 merkezli 5 yarıçaplı siyah bir daire çizdik
delay(1000); // 1 sn kadar gecikme
GLCD.ClearScreen(); // ekranı temizledik
GLCD.DrawRoundRect(30,30,20,20,5,BLACK); //sol alt köşesi 30-30 koordinatında 20 genişlik ve 20 uzunlukta ve herbir köşesi 5 birimlik ovalleştirilmiş bir siyah dikdörtgen çizdirdik
delay(1000); // 1 sn lik gecikme
GLCD.ClearScreen(); // ekranı temizledik
GLCD.FillRect(30,30,30,10,BLACK); // 30-30 koordinatına 30 genişlik 10 yüksekliğe sahip içi siyah dikdörtgen çizdirdik
delay(1000); // 1 snlik gecikme
GLCD.ClearScreen();// ekranı temizledik
}
Yukarıdaki örnekte sırası ile ekrana daire ,oval köşeli dörtgen ve içi siyah diktörgen sırası ile 1 er sn aralıkla çizdirelecek ve her sekil arasındaki 1 sn lik zaman aralığından sonra ekran temizlenecektir.
Merhabalar,
Bir önceki yazımızda arduino ile paralel olarak lcd kontrolü ve kütüphanesinden bahsetmiştik.
Bu yazımızda ise seri ve paralel kontrolün farkından ve seri olarak lcd ekranın kontrol edilmesinden bahsedeceğiz.
Nedir paralel ve seri lcd kontrol arasındaki farklılıklar ?
Paralel olarak lcd ekran kontrolünde hatırlarsanız lcd ekrana veri gönderimi için 4 adet pin kullanmıştık ve bu 4 adet pin üzerinden verilerimizi ekrana göndermiştik.Seri ekran kontrolü sırasında ise arduino ile seri haberleşebilen lcd ekran arasında aynı hat üzerinde bitlik seriler halinde haberleşme sağlanır.Böylece arduino pinlerinden tasarruf sağlanmış olur.
Arduino ide bize serLcd kütüphanesi ile seri olarak lcd ekran kontrolü sağlamamızı sağlamaktadır.İsterseniz bu kütüphanenin bize sunduğu fonksiyonları ele alalım.
serLCD(int pin) : pin ile tx pinini tanımlıyoruz ve seri ekranı bu pin ile birlikte belirtiyoruz.
clear() : ekran üzerindeki tüm verileri temizler
clearLine(int satır) : int ile belirtilen satırı temizler
selectLine(int satır) : işaretçimizi satır ile belirliediğimiz konuma getirir
setBrightness(int deger): lcd ekranın kontrast değerini deger ile int olarak vermemizi sağlar
home(): işaretçinin lcd ekran üzerinde sol en üst köşeye gelmesini sağlar
print(data): Verinin ekrana bastırılmasını sağlamaktadır
setSplash(): ilk 2 satırı ekranın başlangıç ekranı olarak atar.
toggleSplash(): splash ekranı aktif ya da deaktif etmemize olanak tanır
leftToRight(): ekranda veri akışının soldan sağa doğru olacağını belirtmeye yarar
rightToLeft(): ekranda veri akışının sağdan sola doğru olacağını belirtmeye yarar
blink(): işaretçinin ve üzerinde olduğu karakterin yanıp sönmesine olanak tanır
noBlink(): işaretçinin yanıp sönmesini engeller
cursor(): işaretçinin yerini belirtir.İşaretçinin üzerinde bulunan karakter altında alt çizgi belirir
noCursor(): işaretçinin gizlenmesine olanak tanır
display(): ekranı açar.Son olarak kalan veri tekrar ekrana gelir
noDisplay(): ekranı kapatır ve ekranda son olarak kalan veri display fonksiyonu için kayıt altına alınır
setCursor(int satır,int sütun): işaretçiyi satır ve sütun numarasına götürür
Örnek uygulamamızda seri olarak lcd ekran kullanımın yanı sıra lcd ekran üzerinde sıcaklık sensöründen almış olduğumuz verileri ekrana yazdıracağız.
DS18B20 sıcaklık sensörü üzerinde dijital olarak alacağımız sıcaklık verisini lcd ekran üzerine bastıracağız.
Gelelim kodlarımıza :
#include <SoftwareSerial.h>// yazılımsal olarak seri pin kütüphanemizi ekliyoruz
#include <serLCD.h>// seri lcd ekran kütüphanemizi ekliyoruz
#include <OneWire.h>// Sıcaklık sensörü ile tek hat üzerinden haberleşeceğiz
#include <DallasTemperature.h>// kullanacağımız sıcaklık sensörü kütüphanesi
serLCD ekran(12); // lcd ekranı tanımladık ve bunu 12 nolu pin üzerinden haberleşeceğimizi belirttik
OneWire oneWire(ONE_WIRE_BUS); // tek hat haberleşme belirttik
DallasTemperature sensor(&oneWire);// sıcaklık sensörünü belirledik ve bunu tek hat haberleşmeye bağladık
void setup(void)
{
Serial.begin(9600);// 9600 baudrate ile seri haberleşme başlattık
sensor.begin();//tek hat üzerinden haberleşeceğimiz sensörü başlattık
ekran.clear(); // ekranımızı temizledik
}
void ekrana_sıcaklık_bastır() // tek hat üzerinden sıcaklık bilgisi almak için fonksiyon tanımladık
{
ekran.clear();// lcd ekranı temizledik
float sıcaklık=sensor.getTempCByIndex(0);// float küsürlü olarak santigrat değeri olarak sıcaklığı aldık
ekran.setCursor(0,0);// işaretçiyi 0. satır ve 0. sütuna yani sol en üst köşeye aldık
ekran.print("sıcaklık =");// ekranın başına sıcaklık= stringini bastırdık
ekran.print(sıcaklık,1);//aldıgımız sıcaklık degerini ekrana ekledik
}
void loop()
{
sensor.requestTemperatures();// sensörden sıcaklık verisi talep ettik
ekrana_sıcaklık_bastır();// aldığımız sıcaklık verisini ekrana yazdırdık
delay(2000);// her sıcaklık yazdırmamız arasına 2 sn lik gecikme verdik
}
Bir sonraki yazımızda grafik lcd kontrolü ile yeniden karşınızda olacağız.
Bir önceki yazımızda arduino ile paralel olarak lcd kontrolü ve kütüphanesinden bahsetmiştik.
Bu yazımızda ise seri ve paralel kontrolün farkından ve seri olarak lcd ekranın kontrol edilmesinden bahsedeceğiz.
Nedir paralel ve seri lcd kontrol arasındaki farklılıklar ?
Paralel olarak lcd ekran kontrolünde hatırlarsanız lcd ekrana veri gönderimi için 4 adet pin kullanmıştık ve bu 4 adet pin üzerinden verilerimizi ekrana göndermiştik.Seri ekran kontrolü sırasında ise arduino ile seri haberleşebilen lcd ekran arasında aynı hat üzerinde bitlik seriler halinde haberleşme sağlanır.Böylece arduino pinlerinden tasarruf sağlanmış olur.
Arduino ide bize serLcd kütüphanesi ile seri olarak lcd ekran kontrolü sağlamamızı sağlamaktadır.İsterseniz bu kütüphanenin bize sunduğu fonksiyonları ele alalım.
serLCD(int pin) : pin ile tx pinini tanımlıyoruz ve seri ekranı bu pin ile birlikte belirtiyoruz.
clear() : ekran üzerindeki tüm verileri temizler
clearLine(int satır) : int ile belirtilen satırı temizler
selectLine(int satır) : işaretçimizi satır ile belirliediğimiz konuma getirir
setBrightness(int deger): lcd ekranın kontrast değerini deger ile int olarak vermemizi sağlar
home(): işaretçinin lcd ekran üzerinde sol en üst köşeye gelmesini sağlar
print(data): Verinin ekrana bastırılmasını sağlamaktadır
setSplash(): ilk 2 satırı ekranın başlangıç ekranı olarak atar.
toggleSplash(): splash ekranı aktif ya da deaktif etmemize olanak tanır
leftToRight(): ekranda veri akışının soldan sağa doğru olacağını belirtmeye yarar
rightToLeft(): ekranda veri akışının sağdan sola doğru olacağını belirtmeye yarar
blink(): işaretçinin ve üzerinde olduğu karakterin yanıp sönmesine olanak tanır
noBlink(): işaretçinin yanıp sönmesini engeller
cursor(): işaretçinin yerini belirtir.İşaretçinin üzerinde bulunan karakter altında alt çizgi belirir
noCursor(): işaretçinin gizlenmesine olanak tanır
display(): ekranı açar.Son olarak kalan veri tekrar ekrana gelir
noDisplay(): ekranı kapatır ve ekranda son olarak kalan veri display fonksiyonu için kayıt altına alınır
setCursor(int satır,int sütun): işaretçiyi satır ve sütun numarasına götürür
DS18B20 sıcaklık sensörü üzerinde dijital olarak alacağımız sıcaklık verisini lcd ekran üzerine bastıracağız.
Gelelim kodlarımıza :
#include <SoftwareSerial.h>// yazılımsal olarak seri pin kütüphanemizi ekliyoruz
#include <serLCD.h>// seri lcd ekran kütüphanemizi ekliyoruz
#include <OneWire.h>// Sıcaklık sensörü ile tek hat üzerinden haberleşeceğiz
#include <DallasTemperature.h>// kullanacağımız sıcaklık sensörü kütüphanesi
serLCD ekran(12); // lcd ekranı tanımladık ve bunu 12 nolu pin üzerinden haberleşeceğimizi belirttik
OneWire oneWire(ONE_WIRE_BUS); // tek hat haberleşme belirttik
DallasTemperature sensor(&oneWire);// sıcaklık sensörünü belirledik ve bunu tek hat haberleşmeye bağladık
void setup(void)
{
Serial.begin(9600);// 9600 baudrate ile seri haberleşme başlattık
sensor.begin();//tek hat üzerinden haberleşeceğimiz sensörü başlattık
ekran.clear(); // ekranımızı temizledik
}
void ekrana_sıcaklık_bastır() // tek hat üzerinden sıcaklık bilgisi almak için fonksiyon tanımladık
{
ekran.clear();// lcd ekranı temizledik
float sıcaklık=sensor.getTempCByIndex(0);// float küsürlü olarak santigrat değeri olarak sıcaklığı aldık
ekran.setCursor(0,0);// işaretçiyi 0. satır ve 0. sütuna yani sol en üst köşeye aldık
ekran.print("sıcaklık =");// ekranın başına sıcaklık= stringini bastırdık
ekran.print(sıcaklık,1);//aldıgımız sıcaklık degerini ekrana ekledik
}
void loop()
{
sensor.requestTemperatures();// sensörden sıcaklık verisi talep ettik
ekrana_sıcaklık_bastır();// aldığımız sıcaklık verisini ekrana yazdırdık
delay(2000);// her sıcaklık yazdırmamız arasına 2 sn lik gecikme verdik
}
Bir sonraki yazımızda grafik lcd kontrolü ile yeniden karşınızda olacağız.
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.
Merhabalar arkadaşlar,
Projemizde parallax ping sensörü üzerinden cisimlerin mesafe bilgilerini alacağız.Bunun için 7 numaralı pinimizi hem input hemde output olarak kullanacağız.Parallax ultrasonik sensör üzerinden veri okuyabilmemiz için, sensöre 5 mikrosaniye kadar dijital 1 yani HIGH değeri göndermemiz gerekiyor.Akabinde 7 numaralı pinimizi input pini olarak tanımlayacağız ve pulseIn() fonksiyonu dönen pulse süresi ile sensörün geribildirimi mesafe olarak alacağız.
Bu yazımızda ultrasonik sensörlerden ve bu sensörlerin arduino ile kullanılmasından bahsedeceğiz.
Ultrasonik sensörleri alarm sistemi olarak,engelden kaçan robot yapımında,mesafe uzaklığı ölçmede kullanabilirsiniz.
Nedir bu ultrasonik sensör ve nasıl çalışır ?
Ultrasonik sensörler, ultrasonik ses dalgaları göndererek bu dalgaların geri döünşleri yani eko yapmalarını beklerler.Bekleme süreleri sırasında eğer ki bir cisimden ses dalgası geri dönüyorsa bize geri bildirimde bulunurlar.Ultrasonic sensör içerisinde bulunan işlemci ile sesin ne kadar sürede geri döndüğü bilgisi tutulur ve bu bilgi bize pwm yani pulse olarak geri döndürülür.
const int sinyal=7; // sinyalimizin bize geleceği pini seçtik
void setup()
{
}
unsigned long ping()// sensörden dönen bilgiyi bize mesafe olarak döndürecek olan fonksiyonumuzu tanımladık
{
pinMode(sinyal,OUTPUT);//sinyal pinimizi çıkış olarak atadık
digitalWrite(sinyal,LOW);// 7 numaralı pinimize dijital 0 gönderdik
delayMicroseconds(2);// 2 mikro saniye gecikme
digitalWrite(sinyal,HIGH);// 7 numaralı pinimize dijital 1 gönderdik
delayMicroseconds(5);
digitalWrite(sinyal,LOW);//5 mikrosaniye boyunca sensöre dijital 1 verdik ve ölçüm yapmasını istedik.
pinMode(sinyal,INPUT);//7 numaralı pinimizi giriş olarak değiştirdik
digitalWrite(sinyal,LOW);// pinimizi dijital 0 yaptık ve pulse bekliyoruz
return pulseIn(sinyal,HIGH);//7 numaralı pinin lowdan high olana kadar olan zaman yani sensör değeri
}
void loop()
{
int range =ping() / 29;// sensörden dönen pulse süresini aldık
delay(50);//50 ms gecikme
}
Yukarıdaki koddar 29 ile neden böldüğümüz aklınıza gelebilir.Parallax sensörün bizen döndürdüğü her pulse 29 microsaniyesi 1 cm ye denk gelmektedir.Bizde gelen süreyi cm ye çevirmek için gelen değeri 29 ile bölmekteyiz.
Bu yazımızda servo motoru arduino üzerinden sürme projesinden bahsedeceğiz.
Servo motorlarının üzerinde 1 adet power,1 adet ground ve 1 adette kontrol ya da sinyal ucu olmak üzere toplamda 3 adet pin bulunmaktadır.
Yandaki resimde tipik bir servo motor görülmektedir.Peki servo motor nasıl çalışır ?
Servo motorlar sinyal uçlarına gönderilen pulse ile çalışırlar ve bu pulse ile servo motorun 0 ile 180 derece arasında açıda dönmesini sağlar.Arduino tarafından gönderilecek olan pulse her 20 mili saniyede bir tekrarlanmalıdır aksi halde step motorumuz başlangıç değerine geri dönecektir.
Servo motoru 1ms ile 2ms pulse değerlerimizle 0-180 derece aralığında kontrol etmeye çalışacağız ve bunun içinde arduino servo motor kontrol kütüphanesini kullanacağız.
Arduino Servo motor kütüphanesi nasıl çalışır ? (<Servo.h>)
Servo kütüphanesini bir derleyici ile açtığınızda karşınıza kütüphane içerisinde tanımlı fonksiyonlar çıkacaktır ki bu fonksiyonları arduino ide içerisinde kullanacağız.İsterseni gelin bu fonksiyonlara bir göz atalım :
Servo : arduino ide içerisinde servo ile değişken tanımlayarak bir servo motor objesi oluşturmaya yarar.
attach(): bu fonksiyon servo motorumuzun bağlı olduğu pine servo motor kontrolünü bağlamamızı sağlayacak.
write(): tanımladığımız servo motora istediğimiz açı değerini göndermemizi sağlayacak olan fonksiyonumuz.
writeMicroseconds(): Servo motorumuza göndereceğimiz pulse değerimizin sıklığını ayarlayacak olan fonksiyonumuz.
read(): En son gönderilen açı değerini bize döndürecek olan fonksiyonumuz.
readMicroseconds():Servo motora gönderilen pulse değerinin sıklığını bize geri döndüren fonksiyonumuz.
attached(): Yukarıda belirtmiş olduğumuz attach fonksiyonun işlevini yerine getirmesi sonucu true ya da servo motorun yazılımsal olarak bağlı olmadığı durumda ise false döndüren fonksiyonumuz.
detach(): Yazılımsal olarak servo motoru programımızdan çıkaran yani attach foknsiyonu ile servo motoru bağladığımız pini yazılımsal olarak boşa çıkaran fonksiyonumuz.
Gelelim kodlarımıza :
#include<Servo.h>// servo kütüphanemizi ekledik
Servo motor;// motor adında bir servo objesi oluşturduk
int poz=0;//motorumuzun pozisyonunu içerisinde tutacağımız değişkenimiz.
void setup()
{
motor.attach(9);// servo motorumuzu 9 numaralı pwm pini üzerinden kontrol edeceğimizi belirttik
}
void loop()
{
for(poz=0;poz<180;poz++)//motorumuzun açısını sıfırdan başlatarak for içerisinde 180e kadar arttıracağız
{
motor.write(poz);//servo motora açısını gönderiyoruz.
delay(15);//15ms gecikme gönderiyoruz
}
for(poz=180;poz>0;poz--)//motorumuzun açısından 180 dereceden 0 dereceye indiriyoruz
{
motor.write(poz);// motorumuza açısını gönderiyoruz
delay(15);//15 ms bir gecikme gönderiyoruz
}
}
Programı çalıştırdığınızda servo motorun önce 0 dan 180 dereceye, sonrasında ise 180 dereceden 0 dereceye doğru hareket ettiğini göreceksiniz.
Servo motorlarının üzerinde 1 adet power,1 adet ground ve 1 adette kontrol ya da sinyal ucu olmak üzere toplamda 3 adet pin bulunmaktadır.
Yandaki resimde tipik bir servo motor görülmektedir.Peki servo motor nasıl çalışır ?
Servo motorlar sinyal uçlarına gönderilen pulse ile çalışırlar ve bu pulse ile servo motorun 0 ile 180 derece arasında açıda dönmesini sağlar.Arduino tarafından gönderilecek olan pulse her 20 mili saniyede bir tekrarlanmalıdır aksi halde step motorumuz başlangıç değerine geri dönecektir.
Servo motoru 1ms ile 2ms pulse değerlerimizle 0-180 derece aralığında kontrol etmeye çalışacağız ve bunun içinde arduino servo motor kontrol kütüphanesini kullanacağız.
Servo kütüphanesini bir derleyici ile açtığınızda karşınıza kütüphane içerisinde tanımlı fonksiyonlar çıkacaktır ki bu fonksiyonları arduino ide içerisinde kullanacağız.İsterseni gelin bu fonksiyonlara bir göz atalım :
Servo : arduino ide içerisinde servo ile değişken tanımlayarak bir servo motor objesi oluşturmaya yarar.
attach(): bu fonksiyon servo motorumuzun bağlı olduğu pine servo motor kontrolünü bağlamamızı sağlayacak.
write(): tanımladığımız servo motora istediğimiz açı değerini göndermemizi sağlayacak olan fonksiyonumuz.
writeMicroseconds(): Servo motorumuza göndereceğimiz pulse değerimizin sıklığını ayarlayacak olan fonksiyonumuz.
read(): En son gönderilen açı değerini bize döndürecek olan fonksiyonumuz.
readMicroseconds():Servo motora gönderilen pulse değerinin sıklığını bize geri döndüren fonksiyonumuz.
attached(): Yukarıda belirtmiş olduğumuz attach fonksiyonun işlevini yerine getirmesi sonucu true ya da servo motorun yazılımsal olarak bağlı olmadığı durumda ise false döndüren fonksiyonumuz.
detach(): Yazılımsal olarak servo motoru programımızdan çıkaran yani attach foknsiyonu ile servo motoru bağladığımız pini yazılımsal olarak boşa çıkaran fonksiyonumuz.
Gelelim kodlarımıza :
#include<Servo.h>// servo kütüphanemizi ekledik
Servo motor;// motor adında bir servo objesi oluşturduk
int poz=0;//motorumuzun pozisyonunu içerisinde tutacağımız değişkenimiz.
void setup()
{
motor.attach(9);// servo motorumuzu 9 numaralı pwm pini üzerinden kontrol edeceğimizi belirttik
}
void loop()
{
for(poz=0;poz<180;poz++)//motorumuzun açısını sıfırdan başlatarak for içerisinde 180e kadar arttıracağız
{
motor.write(poz);//servo motora açısını gönderiyoruz.
delay(15);//15ms gecikme gönderiyoruz
}
for(poz=180;poz>0;poz--)//motorumuzun açısından 180 dereceden 0 dereceye indiriyoruz
{
motor.write(poz);// motorumuza açısını gönderiyoruz
delay(15);//15 ms bir gecikme gönderiyoruz
}
}
Programı çalıştırdığınızda servo motorun önce 0 dan 180 dereceye, sonrasında ise 180 dereceden 0 dereceye doğru hareket ettiğini göreceksiniz.
Merhabalar arkadaşlar,
Bu yazımızda arduino ile basit bir dc motor kontrolü nasıl sağlanır ondan bahsedeceğiz.
Projemizde 1 adet npn transistör ile rölemizi sürerek motorumuzun hareket etmesini sağlayacağız.
Şemada da görüldüğü üzere 13 nolu dijital pin üzerinden npn transistörümüzün base ucuna bağlandık.13 numaralı pinimizi dijital 0 yaptığımız anda npn transistörü iletime geçecek ve rölemizin bobin ucuna 5V luk bir gerilim uygulanarak kontağının çekmesi sağlanacak burada D1 diyotu ters akımı engellemek amacı ile kullanılmaktadır.Sonrasında rölemizin kontağı üzerinden de VCC gerilimimiz motora uygulanmış olacaktır.
Burada dikkat edilmesi gereken bu devre standart arduino röle kartı ile de gerçekleştirilebilirdi zaten yapmış olduğumuz devre standart röle kartının iç mimarisinden bir parça konumunda ve motor sürmek için uygun bir elektronik devre.
Gelelim arduino kodları tarafına :
int transistor_pini 13; // 13 numaralı pine transistor_pini adını verdik
void setup()
{
pinMode(transistor_pini,OUTPUT);// 13 numaralı transistor pinini output yani çıkış olarak ayarladık
}
void loop()
{
digitalWrite(transistor_pini,LOW); // pinimize dijital 0 gönderdik
delay(5000);//5 sn lik bir gecikme verdik
digitalWrite(transistor_pini,HIGH);//pinimize dijital 1 gönderdik
delay(5000);//5sn lik bir gecikme verdik
}
Programımızı çalıştırdığımızda motorumuzun 5 sn çalışır durumda ve 5 sn ise durur konumda kalacağını göreceğiz.
Bu yazımızda arduino ile basit bir dc motor kontrolü nasıl sağlanır ondan bahsedeceğiz.
Projemizde 1 adet npn transistör ile rölemizi sürerek motorumuzun hareket etmesini sağlayacağız.
Burada dikkat edilmesi gereken bu devre standart arduino röle kartı ile de gerçekleştirilebilirdi zaten yapmış olduğumuz devre standart röle kartının iç mimarisinden bir parça konumunda ve motor sürmek için uygun bir elektronik devre.
Gelelim arduino kodları tarafına :
int transistor_pini 13; // 13 numaralı pine transistor_pini adını verdik
void setup()
{
pinMode(transistor_pini,OUTPUT);// 13 numaralı transistor pinini output yani çıkış olarak ayarladık
}
void loop()
{
digitalWrite(transistor_pini,LOW); // pinimize dijital 0 gönderdik
delay(5000);//5 sn lik bir gecikme verdik
digitalWrite(transistor_pini,HIGH);//pinimize dijital 1 gönderdik
delay(5000);//5sn lik bir gecikme verdik
}
Programımızı çalıştırdığımızda motorumuzun 5 sn çalışır durumda ve 5 sn ise durur konumda kalacağını göreceğiz.
Merhabalar,
Eski yazılarılarımızda arduino üzerinde dijital giriş ve çıkışlardan bahsetmiştik.Bu yazımızda ise artık analog dünyasına giriş yapacağız.
Analog nedir ?
Analog değer zamana bağlı olarak gerek voltaj ve akım olarak değişkenlik gösteren bir veridir.Bir sıcaklık sensörü ele alalım bu sensör bize çıkışında analog veri olarak 0-10V aralığında veri veriyor ve sıcaklık sensörümüzün çalışma aralığı da 0 - 80 derece olsun.Bu durumda bu sıcaklık sensörü bize 0 derecede 0 voltaj ve 80 derecede ise 10 V değerini verecektir.Yani bize analog değerlerini gönderecektir.
Elinizde bir arduino var ise modeline göre sayısı değişebilir A0 dan başlayarak devam eden pinleriniz sizin analog değer okuma amacı ile kullanabileceğiniz pinlerdir(bu pinler aynı zaman dijital giriş çıkış birimi olarak da kullanılabilmektedir.)
Gelelim can alıcı soruya ?
Bize analog değer geldi peki bunu arduino nasıl algılar ve bize nasıl iletir?
Bu noktada ADC ler devreye girer.Analog to digital converter yani analog dijital çeviriciler, girişlerine gelen analog değerleri çözünürlükleri doğrultusunda dijital veriye çevirerek bizim kullanabileceğimiz hale getirirler.Burada dikkat edilmesi gereken husus çözünürlükleri doğrultusunda lakin birçok çözünürlüke ADC entegreleri bulunmakta ve arduino uno üzerinde 10 bit çözünürlüğe sahip bir ADC bulunmaktadır.
Peki nedir bu 10 bit olayı ?
Sıcaklık sensörü örneğimizi tekrar ele alaım :)
0-80 derece aralığında bize 0-10V veren sensörümüz adc tarafında okunduğunda 10V olarak 80 derecenin adc nin girişine gelmesi ile birlikte adc bunu 10 bitlik veri düzeninde 1024 olarak bize sunacaktır.Bit değeri ne kadar artar ise analog verinin dijitale çevrimi o kadar hassaslaşır.
Bugun örneğimizde ise bir potansiyometre üzerinden analog girişimize gelen veriyi nasıl işleriz konusunu ele alacağız.
Yukarıdaki şekilde potansiyometre çeşitleri görülmektedir.Potansiyometre ayarlanabilir probu ile direnci değiştirilebilen bir elemandır.Kendisinin bir maksimum değeri vardır ve bu değer ile satın alınılır.Ayarlanabilir probu ile de kedisinin maksimum değerine kadar direnci arttırabilir ya da minimum değere kadar azaltabilirsiniz.
Biz potansiyometre üzeriden 5V değerimizi geçireceğiz ve prob üzerinden verdiğimiz her değişimde analog girişte farklı bir voltaj ve dolayısı ile adc üzerinden farklı dijital değerler okumayı ve yorumlamayı amaçlayacağız.
Yukarıdaki şemada görüldüğü üzere 5V potansiyometre üzerinden geçirildi ve arduinomuzun A0 analog pinine bağlandı.
Arduino Ide analog pine gelen değeri okuyabilmemiz için analogRead() fonksiyonunu bulundurmaktadır.Bu fonksiyon içerisinde okumak istediğimiz analog pin tanımı yazarak, o analog pine gelen verinin dijital halini adc üzerinde 0-1024 değeri aralığında okuyabilir hale geliriz.
Biz bu örneke analogRead(A0); ile veriyi okumaya çalışacağız.
Gelelim kodlarımıza
int sensor_degeri=0;// sensörden gelen verimizi içinde tutacağımız değişken
void setup()
{
Serial.begin(9600);// aynı zamanda verileri seri ekrana bastırıp buradan da izlemeyi amaçlıyoruz.
}
void loop()
{
sensor_degeri=analogRead(A0);// adc üzerinden sensör değerini aldık ve sensor_degeri değişkenine atadık
Serial.print("sensor degeri:");// seri ekrana sensor degeri: yazdırdık
Serial.println(sensor_degeri);//seri ekrana okuduğumuz sensör değerini yazdırdık.
delay(100);//daha iyi görebilmek ve anlık değişimleri göz ardı etmek adına 100ms gecikme tanımladık.
}
Bir sonraki yazımızda piezoelektrik uygulaması ile yeniden karşınızda olacağız.
Eski yazılarılarımızda arduino üzerinde dijital giriş ve çıkışlardan bahsetmiştik.Bu yazımızda ise artık analog dünyasına giriş yapacağız.
Analog nedir ?
Analog değer zamana bağlı olarak gerek voltaj ve akım olarak değişkenlik gösteren bir veridir.Bir sıcaklık sensörü ele alalım bu sensör bize çıkışında analog veri olarak 0-10V aralığında veri veriyor ve sıcaklık sensörümüzün çalışma aralığı da 0 - 80 derece olsun.Bu durumda bu sıcaklık sensörü bize 0 derecede 0 voltaj ve 80 derecede ise 10 V değerini verecektir.Yani bize analog değerlerini gönderecektir.
Elinizde bir arduino var ise modeline göre sayısı değişebilir A0 dan başlayarak devam eden pinleriniz sizin analog değer okuma amacı ile kullanabileceğiniz pinlerdir(bu pinler aynı zaman dijital giriş çıkış birimi olarak da kullanılabilmektedir.)
Gelelim can alıcı soruya ?
Bize analog değer geldi peki bunu arduino nasıl algılar ve bize nasıl iletir?
Bu noktada ADC ler devreye girer.Analog to digital converter yani analog dijital çeviriciler, girişlerine gelen analog değerleri çözünürlükleri doğrultusunda dijital veriye çevirerek bizim kullanabileceğimiz hale getirirler.Burada dikkat edilmesi gereken husus çözünürlükleri doğrultusunda lakin birçok çözünürlüke ADC entegreleri bulunmakta ve arduino uno üzerinde 10 bit çözünürlüğe sahip bir ADC bulunmaktadır.
Peki nedir bu 10 bit olayı ?
Sıcaklık sensörü örneğimizi tekrar ele alaım :)
0-80 derece aralığında bize 0-10V veren sensörümüz adc tarafında okunduğunda 10V olarak 80 derecenin adc nin girişine gelmesi ile birlikte adc bunu 10 bitlik veri düzeninde 1024 olarak bize sunacaktır.Bit değeri ne kadar artar ise analog verinin dijitale çevrimi o kadar hassaslaşır.
Bugun örneğimizde ise bir potansiyometre üzerinden analog girişimize gelen veriyi nasıl işleriz konusunu ele alacağız.
Biz potansiyometre üzeriden 5V değerimizi geçireceğiz ve prob üzerinden verdiğimiz her değişimde analog girişte farklı bir voltaj ve dolayısı ile adc üzerinden farklı dijital değerler okumayı ve yorumlamayı amaçlayacağız.
Yukarıdaki şemada görüldüğü üzere 5V potansiyometre üzerinden geçirildi ve arduinomuzun A0 analog pinine bağlandı.
Arduino Ide analog pine gelen değeri okuyabilmemiz için analogRead() fonksiyonunu bulundurmaktadır.Bu fonksiyon içerisinde okumak istediğimiz analog pin tanımı yazarak, o analog pine gelen verinin dijital halini adc üzerinde 0-1024 değeri aralığında okuyabilir hale geliriz.
Biz bu örneke analogRead(A0); ile veriyi okumaya çalışacağız.
Gelelim kodlarımıza
int sensor_degeri=0;// sensörden gelen verimizi içinde tutacağımız değişken
void setup()
{
Serial.begin(9600);// aynı zamanda verileri seri ekrana bastırıp buradan da izlemeyi amaçlıyoruz.
}
void loop()
{
sensor_degeri=analogRead(A0);// adc üzerinden sensör değerini aldık ve sensor_degeri değişkenine atadık
Serial.print("sensor degeri:");// seri ekrana sensor degeri: yazdırdık
Serial.println(sensor_degeri);//seri ekrana okuduğumuz sensör değerini yazdırdık.
delay(100);//daha iyi görebilmek ve anlık değişimleri göz ardı etmek adına 100ms gecikme tanımladık.
}
Bir sonraki yazımızda piezoelektrik uygulaması ile yeniden karşınızda olacağız.