Bölüm1
Arduino Kartın Tanıtımı
Görünüş
Arduino denilince akla ilk gelen kart UNO dur.
Kart beslemesi usb portu üzerinden veya dc
adaptör girişinden sağlanıyor. Çalışma gerilimi 5V tut. 16MHz saat hızına
sahiptir. Üzerinde bulunan sokete yerleştirilen 8-bit ATmega 328P
mikrodenetleyiciye sahiptir.
Teknik Özellikleri
Mikrodenetleyici
|
|
Çalışma Gerilimi
|
5V
|
Önerilen Adaptör Giriş
Gerilimi
|
7-12V
|
Adaptör Giriş Gerilim
Sınırı
|
6-20V
|
Dijital Pin Sayısı
|
14 (Bunlardan 6 sı PWM
özellikli)
|
PWM Pin Sayısı
|
6
|
Analog Pin Sayısı
|
6
|
Giriş Çıkış Pinleri İçin
Akım
|
20 mA
|
3.3V Pin İçin Akım
|
50 mA
|
Flash Hafıza
|
32 KB (ATmega328P)
0.5 KB bootloader tarafından kullanılır |
SRAM
|
2 KB (ATmega328P)
|
EEPROM
|
1 KB (ATmega328P)
|
Saat Hızı
|
16 MHz
|
Uzunluk
|
68.6 mm
|
Genişlik
|
53.4 mm
|
Ağırlık
|
25 g
|
Arduino Yazılımının İndirilmesi
Arduino
kartını bilgisayarımıza USB kablosu ile takmadan önce yazılımı yüklemeliyiz. Bu
sayede, yazılımla birlikte gelen Arduino sürücüleri bilgisayarımıza kurulmuş
oluyor ve böylece kartımızı kolaylıkla tanıtıp hemen kullanmaya başlayabiliyoruz.
Arduino
yazılımını indirmek için www.arduino.cc adresinden
“Software / Downloads” sekmesine gidiyoruz.
Downloads
sekmesini tıkladıktan sonra, karşımıza işletim sistemimize göre olan dosyayı
indireceğimiz ekran çıkıyor. Bu yazıyı hazırladığım sırada Arduino yazılımının
en güncel sürümü bu dökümanı hazırladığımda 1.8.5 idi. Windows kullananlar
“Windows Installer” seçeneğini tıklayabilirler. Daha sonra bize bağış yapmamızı
rica eden bir sayfa açılıyor. Tercihimize göre bağış yapabiliriz ya da “Just
Download” seçeneği ile bağış yapmadan yazılımı indirebiliriz.
Arduino Sürücülerinin Yüklenmesi
Bundan
sonra yazılım kurulum dosyamız inmeye başlıyor. İndirme işlemi bittikten sonra
dosyayı açarak kurulum işlemini başlatıyoruz. Kurulum sırasında çıkan “Install
USB driver” seçeneğinin seçili olduğundan emin oluyoruz.
Kurulum
işlemi bittikten sonra, kartımızı USB kablomuzla bilgisayarımıza bağlıyoruz.
Bilgisayarımızda “Yeni donanım bulundu” penceresi açılıyor. Eğer sürücüler
yazılımla birlikte kurulduysa, otomatik yükleme seçeneği Arduino’muzun
sürücülerini otomatik olarak yükleyecektir.
Yukarıda anlatılanlar "Orjinal" Arduino Kartları içindir. Ancak Ucuz olması nedeniyle okullarımızda "Klon" kartlar kullanılmaktadır. Bu durumda ch341ser.zip dosyası download edilip ardından install edilmelidir. Böylece PC miz Klon Arduino kartımızı tanıyabilecektir.
Yukarıda anlatılanlar "Orjinal" Arduino Kartları içindir. Ancak Ucuz olması nedeniyle okullarımızda "Klon" kartlar kullanılmaktadır. Bu durumda ch341ser.zip dosyası download edilip ardından install edilmelidir. Böylece PC miz Klon Arduino kartımızı tanıyabilecektir.
Arduino Programının Bilgisayarımızda İlk Çalıştırılması
Artık
Arduino programımızı açabiliriz. Programımızı açtıktan sonra ilk yapmamız
gereken şey, programın Arduino UNO kartımızla çalışacak şekilde ayarlanmasıdır.
Araçlar > Kart menüsünden Arduino UNO seçeneğini tıklıyoruz. Zaten
varsayılan UNO gelmektedir.
Daha
sonra, yine Araçlar menüsünden Port alt menüsü altında Arduino’muzun bağlı
göründüğü portu seçiyoruz. Bu port numarası, her bilgisayarda farklı
olabilmektedir.
Artık
her şeyiyle kullanıma hazır bir Arduino programımız (Sketch) var.
Arduino
için yazılan programlara sketch adı
verilir. Sketch, üç blok şeklinde yazılmalıdır. İlk blokta tanımlamalar,
değişkenler olmalıdır. Ancak tanımlamanın gerekmediği durumlar da olabilir.
Void setup() bloğu
içine yazacağımız fonksiyonlar; kart ilk enerji alıp çalıştığında sadece bir
kere çalışır. Kullanacağımız giriş/çıkış pinlerini, seri port konfigürasyonunu
vb. ayarları bu kısımda yapıyoruz.
Void loop() bloğuna program
yazımı için geçilir. Kartın enerjisi kesilene kadar sürekli çalışacak olan foknsiyonları
(kodları, programı) barındırır.
Programımızı
yazdıktan sonra kartımıza yüklemek istediğimizde, öncelikle “Kontrol Et”
seçeneğine tıklıyoruz. Program, yazdığımız kodu öncelikle bilgisayarımızda bir
klasöre kaydetmemizi istiyor, daha sonra da yazdığımız kodu derleyerek herhangi
bir hata varsa bu hatayı bize bildiriyor.
Örneğin,
bu kodda digitalWrite fonksiyonundan
bir önceki komut olan delay
komutunu yazdıktan sonra noktalı virgül (;) koymayı unuttuğumuz
için bize bu satırla ilgili bir hata mesajı görüyoruz.
Eğer
yazdığımız kodda bir hata yoksa ve Arduino kartımız bilgisayarımıza USB ile
bağlıysa, “Yükle” seçeceğine tıklayarak kodumuzu kartımıza yükleye biliyoruz.
Bölüm2 – Uygulamalar
Uygulama 1: Led yakma
İlk uygulamamızda LED yakıp söndürmeyi
öğreneceğiz.
Arduino Uno
Breadboard
LED
330 Ω direnç
İki ucu erkek jumper kablo
Breadboard nedir?
LED Nedir?
LED, ışık yayan diyot anlamına gelen
Light Emitting Diode sözcüğünün baş harflerinden oluşan bir kısaltmadır. Alışık
olduğumuz ve çoğu projemizde kullandığımız 6V ile çalışan ufak ampullerin
aksine LED’lerin anot ve katot olmak üzere iki farklı bacağı vardır. Bunlardan
anodu pozitif gerilime yani + uca, katot ise negatif gerilime yani – uca
ya da toprak hattına (GND, Ground) bağlanmalıdır.
Gerilim, Akım ve Ohm Yasası (George
Simon OHM)
Çeşitli devre elemanlarının farklı
gerilim yani voltajlarda çalıştığını biliyoruz. Arduino kartımız ise 5V
gerilimle çalışmaktadır. LED’imiz için ise bu durum biraz farklıdır. LED’in
üzerinden geçecek maksimum akımın 20 mA (miliamper = amperin 1000’de 1’i)
değerini geçmemesi gereklidir. Arduino’muz 5V ile çalışıyor demiştik. 5V değeri
bize kartın çıkış gerilimini ifade etmektedir. Fakat LED 20 mA akıma ihtiyaç
duymakta.
Eğer LED’imizi Arduino’ya doğrudan
bağlayacak olursak, LED üzerinden kartın sağlayabileceği maksimum değerde akım
geçecek ve LED’imiz veya kartımız bozulacaktır. Bunun için akım sınırlayıcı bir
direnci LED’imize seri olarak bağlamamız gerekmekte. Peki bu direncin değeri
nasıl belirlenecek? İşte burada Ohm Kanunu dediğimiz denklem devreye giriyor:
V = i x R
Bu denklemde V bize gerilimi, i akımı ve
R ise direnci temsil ediyor. Eğer 20 mA akıma ihtiyaç duyan LED’i,
Arduino’muzun 5V çıkış sağlayan pinlerinden birine bağlayacak olursak;
5V = 0,020A x R
Denklemini elde etmiş oluruz. Bu
denklemden R’yi çekecek olursak sonucu 250 buluruz. Bu demek oluyor
ki LED’imizi 5V gerilimle kullanmak için 250 Ω (ohm) değerinde bir dirence
ihtiyacımız var. Tam değeri doğru tutturmamız çok önemli değil, elimizde mevcut
olan 220 Ω’luk direnç veya 330 Ω’luk direnç kullanabiliriz.
Not : İlk
dersimizde Arduino’yu tanıtırken, kart üzerinde 13 numaralı pine bağlı bir LED
olduğundan bahsetmiştik. Bu LED’i yakıp söndürmek için herhangi bir ekstradan
dirence ihtiyaç duyulmaz; direnç zaten kart üzerinde mevcuttur. (Bülten led (Led_Builtin))
Bu kodu beraber inceleyelim:
pinMode(8, OUTPUT);
Bu satır, kart üzerindeki 8 numaralı
pini çıkış verecek şekilde ayarlıyor. Kullanacağımız pin çıkış veya giriş
olarak belirlenmez ise programın devamında yazacağımız giriş veya çıkış
fonksiyonları, o pini kullanamaz.
digitalWrite(8, HIGH);
delay(4000);
digitalWrite(8, LOW);
delay(4000);
Bu kısım ise öncelikle 8 numaralı pinden HIGH lojik sinyal gönderiliyor (yani 5V), 4000 milisaniye (4 saniyeye
eşittir) hiçbir işlem yapmadan bekliyor ve bu sefer 8 numaralı pini lojik LOW
yani 0V veya toprak hattı seviyesine ayarlıyor. Bu işlemi yaptıktan sonra
mikokontrolcü, delay fonksiyonu sayesinde tekrardan 4 saniye hiçbir işlem
yapmadan bekliyor.
Bu koddaki delay komutlarının sürelerini
değiştirerek LED’in açık ve kapalı kaldığı süreleri değiştirebiliriz. Eğer
başka bir pin kullanmak istersek tek yapmamız gereken pinMode ve digitalWrite fonksiyonlarında
bulunan pin numarasını kullanmak istediğimiz pin numarası ile değiştirmek.
LED’imize 220 Ω’luk bir direnci seri bağlamayı unutmuyoruz! Not : Mantar LED tipinde ürün kullanırsak dirence gerek kalmaz. Bu ürün 5V ile çalışacak şekilde üretilmiştir.
Uygulama 2: Karaşimşek (6 led)
Kullanılacak
Malzemeler:
Arduino Uno
§
Bread Board
§
6 adet Led
§
6 adet 330 veya 220 ohm direnç
Devre yi aşağıdaki kodlara göre siz tasarlayın.
// 6 ledli Karaşimşek
void setup() {
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
}
void loop() {
digitalWrite(3, 1);
// 1 yerine HIGH, 0 yerine LOW kullanılabilir.
delay(200);
digitalWrite(3, 0);
digitalWrite(4, 1);
delay(200);
digitalWrite(4, 0);
digitalWrite(5, 1);
delay(200);
digitalWrite(5, 0);
digitalWrite(6, 1);
delay(200);
digitalWrite(6, 0);
digitalWrite(7, 1);
delay(200);
digitalWrite(7, 0);
digitalWrite(8, 1);
delay(200);
digitalWrite(8, 0);
}
KARAŞİMŞEK- Knight Rider UYGULAMASI (8 LED))
Bu uygulamamızda kara şimşek yani
sırayla yanıp sönen LED'ler yapacağız. LED bağlantılarını resimdeki gibi
yapabilirsiniz. Her LED'in bağlantısına ayrı ayrı 220 Ohm'luk dirençler koymayı
unutmayın. LED'lerin Breadboard'a eşit uzaklıklarda takılması, projenin daha
güzel görünmesini sağlayacaktır.
Bu uygulamayı yapmak için ihtiyacınız
olan malzemeler:
- 1 x Arduino
- 8 x LED
- 8 x 220 Ohm Direnç
- 1 x Breadboard
Kara şimşek programı iki şekilde
yazılabilir. Birinci yöntemde her LED için ayrı bir değişken tanımlanmış olup,
bütün LED'ler tek tek kontrol edilir. Bu yöntem kod kalabalığı yarattığı için
pek tercih edilmemektedir. Bu yüzden projeyi daha profesyonelce olan ikinci
yöntem ile yazacağız.
İkinci yöntem için, LED'leri 2'den 9'a
pinlere sırası ile takalım. Bu pinleri bir diziye kaydederek LED'leri daha
kolay kontrol edeceğiz. Dizi kullanılmasının nedeni, program içerisinde for
döngüsünün kullanılacak olmasıdır. Her bir for döngüsünde bir sonraki LED'e
kolayca geçiş yapılabilir.
Not: LED
geçişlerinin daha yumuşak olması için her LED'in artı ve eksi pinlerine
kondansatör konulabilir.
const int LEDdizisi[] = {2,3,4,5,6,7,8,9}; //bu değerler değiştirilemez
void setup () {
for(int i=0; i<8 ;i++)
{ /* For dongusuyle LEDdizisi elemanlarina ulasiyoruz */
pinMode(LEDdizisi[i], OUTPUT); /* LED pinleri cikis
olarak ayarlandi */
}
}
void loop() {
for(int i=0; i<8; i++){ /* Tum LEDleri sirayla
50 milisaniye yakip sonduruyoruz */
digitalWrite(LEDdizisi[i],HIGH);
delay(50);
digitalWrite(LEDdizisi[i],LOW);
}
for(int j=7;j>-1; j--)
{ /* LEDleri geri yonde 50 milisaniye yakip sonduruyoruz */
digitalWrite(LEDdizisi[j],HIGH);
delay(50);
digitalWrite(LEDdizisi[j], LOW);
}
}
//by Ozcan GÜLER
Uygulama 3: RGB LED kontrolü
Gerekli malzemelerimiz:
RGB LED Nedir?
RGB LED’ler, normal LED’lerden farklı
olarak tek paket içerisinde 3 farklı renk (kırmızı, yeşil ve mavi) LED’i bir
arada bulundurur. LED yakıp söndürme dersimizden hatırlayacak olursak LED’lerin
anot ve katot uçları bulunuyordu. RGB LED’lerde ise LED’in üretim şekline göre
anot veya katot bağlantıları ortak olarak bulunmaktadır.
Bizim kullandığımız kitte bulunan RGB
LED’imiz ortak anoda sahip. Bu yüzden Arduino için hazırlayacağımız kod ortak
anoda göre çalışacak. Eğer ortak katot bir LED kullanmak istersek, kodumuzda
ufak bir değişiklik yapmamız gerekecek.
PWM ve Dijitalden Analog’a Dönüşüm
Bildiğimiz gibi Arduino’muzun giriş/çıkış
pinlerinde kullanılan voltaj 5V seviyesinde. Bir önceki uygulamada LED’imizi 5V
gerilimde 20 mA akım çekecek şekilde kartımıza bağlamıştık. Bu şekilde
bağladığımızda LED’imiz olabilecek en parlak şekilde yanmaktaydı. Peki
parlaklığı değiştirmek istersek ne yapmamız gerekir?
Sorunun cevabı aslında basit: gerilimi
düşürmek. Eğer 5V ile çalışan LED’imizi daha düşük bir gerilimle, örneğin 3V
ile çalıştırırsak parlaklığı azalacaktır. Fakat bu sefer de şunu
sorabilirsiniz: Arduino çıkış gerilimi 5V değil miydi? Nasıl 3V çıkış
alabiliriz?
Burada darbe genişliği modülasyonu (PWM
– pulse width modulation) tekniğini kullanmamız gerekiyor. Darbe genişliği
modülasyonu yerine kısaca PWM olarak bahsedilecek. PWM, çıkışta aldığımız 5V
gerilimi belirli bir zaman aralığında (Arduino’da genellikle saniyenin 1/500’ü)
açıp kapatarak 0 ile 5V arasında istediğimiz gerilimi Arduino’nun çıkış
pininden almamızı sağlar. Şu şekilde düşünelim: eğer bir LED çok hızlı bir
şekilde yanıp sönerse gözümüz bu yanıp sönmeyi tam olarak algılayamaz ve
parlaklığı daha düşük olarak algılar.
Yukarıdaki görselde gördüğümüz üzere,
5V’u 2 milisaniyelik sürenin sadece %5’lik kısmında açık olacak şekilde
verirsek, elde ettiğimiz değer 5V’un %5’i; yani 0,25V olacaktır. Aynı şekilde
eğer 2 ms sürenin yarısında (%50) açık kalacak şekilde ayarlarsak 2,5V elde
ederiz.
Arduino UNO kartımızın tüm pinleri PWM
çıkış yeteneğine sahip değildir. Kartımızın dijital pinlerinde pin numarasının
önünde ~ işareti
olan bazı pinler mevcuttur. Eğer PWM çıkış almak istiyorsak, bu pinleri
kullanmak zorundayız. Bu pinler Arduino UNO için 3, 5, 6, 9, 10 ve 11 numaralı pinlerdir.
RGB LED İçin Arduino Kodu
İlk dersimizde Arduino yazılımı içinde
mevcut olan örnek kodu değiştirmiştik. Bu sefer kodumuzu kendimiz yazıyoruz:
int kirmiziPin = 9;
int yesilPin = 10;
int maviPin = 11;
void setup()
{
pinMode(kirmiziPin, OUTPUT);
pinMode(yesilPin, OUTPUT);
pinMode(maviPin, OUTPUT);
}
void loop()
{
renkAyarla(255, 0, 0); //kirmizi
delay(1500);
renkAyarla(0, 255, 0); //yesil
delay(1500);
renkAyarla(0, 0, 255); //mavi
delay(1500);
renkAyarla(255, 255, 0); //sari
delay(1500);
renkAyarla(80, 0, 80); //mor
delay(1500);
renkAyarla(0, 255, 255); //acik mavi
delay(1500);
renkAyarla(255, 255, 255); //beyaz
delay(1500);
}
void renkAyarla(int kirmizi, int yesil, int mavi)
{
kirmizi = 255 - kirmizi;
yesil = 255 - yesil;
mavi = 255 - mavi;
analogWrite(kirmiziPin, kirmizi);
analogWrite(yesilPin, yesil);
analogWrite(maviPin, mavi);
}
RGB LED’imizin kırmızı bacağını 9
numaralı pine, yeşil bacağını 10 numaralı pine ve mavi pinini 11 numaralı pine
220 Ω’luk dirençler ile bağlıyoruz. Kullandığımız LED ortak anot yapıya sahip
olduğu için anot bacağını da kartımızın 5V pinine bağlıyoruz.
Kodumuzun setup fonksiyonunda
kullanacağımız pinleri çıkış olarak tanımlıyoruz. Ayrıca yazdığımız renkAyarla
isimli fonksiyondaki analogWrite komutu, bize her bir PWM çıkış pininden
alacağımız voltajın yüksekliğini ayarlamamızı sağlıyor. analogWrite komutu şu
şekilde kullanılıyor:
analogWrite(PWM çıkış pin numarası, 0-255 arası sayısal değer);
analogWrite komutunda 255 değeri
maksimum çıkış voltajını yani 5V’u temsil ediyor. 0 ile 255 arası tüm değerler
0 – 5V arası voltaj değerlerine denk düşüyor. Örneğin analogWrite(9 , 80)
komutu, 9 numaralı pinden 5V x (80/255) = 1,57V geriliminde
çıkış almamızı sağlıyor. Farklı parlaklıklardaki kırmızı mavi ve yeşil ışığı
karıştırarak istediğimiz renkte ışık elde etmemiz bu sayede mümkün oluyor.
Eğer kullandığımız LED ortak anot yerine
ortak katot yapıya sahipse, ortak bacağı +5V yerine GND pinlerine bağlamamız ve
koddaki renkAyarla fonksiyonundaki
kirmizi = 255 - kirmizi;
yesil = 255 - yesil;
mavi = 255 - mavi;
kısmını silmemiz gerekiyor.
loop fonksiyonunda ise kartımız,
oluşturduğumuz renkAyarla kodunu tekrar tekrar çağırarak çıkışlara istediğimiz
değerleri yazmamızı sağlıyor. delay fonksiyonu bildiğimiz üzere her komut
arasında kartımızın işlem yapmadan beklemesini sağlıyor. Bu fonksiyonun
değerini değiştirerek istediğimiz hızda renkler arası geçiş sağlayabiliriz.
Sizler de farklı parlaklık değerleriyle oynayarak farklı renkler elde
edebilirsiniz.
Uygulama 4 : LDR İle Karanlıkta Yanan Işık (Scratch with MBlock)
Scratch Nedir?
Scratch,
ABD’de bulunan MIT’nin geliştirdiği, 8-16 yaş arası çocukların kullanımına göre
tasarlanmış oldukça basit bir arayüze sahip programlama ortamıdır. Geleneksel
programlama dillerinin aksine kullanıcı, istediği fonksiyonları fare ile
tıklayıp sürükleyerek animasyonlar, oyunlar, ve hikayeler yaratabilirsiniz.
Scratch,
renkli bir arayüze sahiptir. Bu sayede çocukları birşeyler yaratmaya teşvik
eder. Programlama dillerinin aksine, hazır fonksiyonlar kategorilere ayrılarak
kolay bir biçimde kullanıma sunulmuştur. Bu sayede programlamaya yeni başlayan
kişi, algoritma yapısını if,else,while,for gibi görece karmaşık ve noktalama
işaretleri gibi özen isteyen yapıları kullanmadan kavrayabiliyor.
mBlock Nedir?
mBlock,
Makeblock firmasının üretmiş olduğu robot kitlerini programlamak için tasarlamış
olduğu, Scratch tabanlı bir geliştirme programıdır.
mBlock,
kodlama eğitimi amacıyla geliştirilmiş bir arayüz programıdır. Scratch tabanlı
bir dildir ve bloklar kullanılarak programlama yapılır. Scratch programında da
olduğu gibi sürükle bırak tekniği ile bloklar kodlama alanına sürüklenir ve
uygun bloklar yerlerine konularak program çalıştırılır. Programın ikonu ise
minik bir pandadır.
Daha
geniş kullanım imkanı sunan ve çeşitli kütüphane desteği ile modül çeşitliliği
de sağlayan mBlock programını tercih edeceğiz.
mBlock
programı ile Arduino programlayacağız. Bunun için Düzenle menüsünden iki işlem
yapmamız gerekmektedir.
Birincisi; Düzen menüsünü tıklayarak Arduino
kipi’ni seçmek.
İkincisi; (bu seçenek şart olmamakla beraber) kullanım kolaylığı
açısından faydalı olacaktır. Düzenle – Sahneyi gizle demeliyiz.
LDR İle Karanlıkta Yanan Işık Devresi
Analog değer okur. 0- 5 V aralığını 0 – 1023 arası değer
üreterek temsil eder. (Tam karanlıkta sıfır üretir)
Devredeki Malzemeler:
LDR
·
1k direnç
·
10k direnç
·
Led
·
Arduino Uno
Projenin Arduino Kaynak Kodu:
int ldrPin=A2;
int ldrDeger=0;
int esikDeger=500;
void setup(){
pinMode(12, OUTPUT);
}
void loop(){
ldrDeger=analogRead(ldrPin);
if(ldrDeger<esikDeger){
digitalWrite(12, HIGH);
}
else{
digitalWrite(12, LOW);
}
}
Uygulama 5 : Trafik Lambaları
Arduino pinlerinin kontrolünü pekiştirmek için her gün gördüğümüz trafik
lambalarını Arduino ile yapacağız. Arduino pinlerine bağlanan kırmızı, sarı ve
yeşil LED'ler trafik lambalarının sırasına göre kontrol edilecek. Buna göre
program ilk başta kırmızı ışığı yakacak. Kırmızı ışık 5 saniye yandıktan sonra
sönecek ve 1 saniye boyunca sarı ışık yanacak. Sarı ışık söndükten sonra da 3
saniye boyunca yeşil ışık yanacak.
Proje devresini kurmak için bağlantılarınızı aşağıdaki gibi yapınız:
Yukarıdaki devreyi kurduktan sonra Arduino'ya aşağıdaki kodu yükleyiniz.
/* LEDlerin bağlı
olduğu pinler tanımlandı */
const int kirmizi = 2, sari = 3, yesil = 4;
void setup()
{
/* LED pinleri çıkış
olarak ayarlandı */
pinMode(kirmizi,OUTPUT);
pinMode(sari,OUTPUT);
pinMode(yesil,OUTPUT);
}
/* Sadece kırmızı ışığı
yakan fonksiyon */
void kirmiziIsik(){
digitalWrite(kirmizi,HIGH);
digitalWrite(sari,LOW);
digitalWrite(yesil,LOW);
}
/* Sadece sarı ışığı
yakan fonksiyon */
void sariIsik(){
digitalWrite(kirmizi,LOW);
digitalWrite(sari,HIGH);
digitalWrite(yesil,LOW);
}
/* Sadece yeşil ışığı
yakan fonksiyon */
void yesilIsik(){
digitalWrite(kirmizi,LOW);
digitalWrite(sari,LOW);
digitalWrite(yesil,HIGH);
}
void loop()
{
kirmiziIsik();
delay(5000);
sariIsik();
delay(1000);
yesilIsik();
delay(3000);
}
Uygulama 6 : Seri Port Ekranı
void setup()
{
//Seri haberleşme hızını ayarlıyoruz
Serial.begin(9600);
}
int sayac = 0;
void loop()
{
Serial.print("Seri haberlesme: ");
Serial.println(sayac);
sayac++;
delay(1000);
}
Seri haberleşme ile Arduino’dan gönderilen verileri görüntülemek
için Serial Monitor eklentisini kullanabiliriz:
Programımızda setup()
fonksiyonu içerisinde Serial.begin(9600)
şeklinde çağırdığımız fonksiyon ile iletişim hızını ayarlaıyoruz. Seri
haberleşmede iletişim hızı “baud” adı
verilen bir değerle ifade edilir. Bu değer saniyede gönderilen bit sayısını
ifade eder (bits per second). Serial monitor’ün sağ alt köşesindeki değerle
programımızdaki değerin aynı olduğuna dikkat edin. Arduino’dan gönderdiğimiz
verileri düzgün görüntüleyebilmek için bu değerler aynı olmalıdır.
Serial.print() ve Serial.println()
fonksiyonları ile string’leri doğrudan yollayabiliyoruz. İki fonksiyon
arasındaki tek fark println() fonksiyonunun string sonuna bir de satır sonu karakteri
eklemesidir. Böylelikle veriler Serial monitor ile alt alta görüntülenebilir.
Bu fonksiyonlara string parametreler verilebildiği gibi int, float türünde
sayılar da verilebilir.
Serial Monitor seri
haberleşmeden ASCII formatında gelen verileri görüntülememizi sağlar. ASCII
tablosunda her bir karaktere karşılık gelen sayısal bir değer bulunur. Seri
haberleşmede bu değer gönderilir ve Serial Monitor (ya da benzeri başka
programlar) bu sayılara karşı gelen karakterleri görüntüler. Yani aslında gelen
veriler 0-255 arasında (8 bit) değerlerden ibarettir.
Uygulama 7 : Arduino ile Uzaklık Ölçümü
Uygulamalarda
uzaklık ölçümü için HC-SR04 ultrasonik uzaklık sensörü kullanılacaktır. Bu
sensör elektronik/robotik malzeme satan mağazalarda kolaylıkla
bulunabilir. Sensör üzerinde giriş ve çıkış olmak üzere iki yüzey
bulunmaktadır. Çıkış yüzeyinden ortama belirli bir frekansta ultrasonik ses
dalgası salınır. Giriş yüzeyi de çıkış yüzeyinin ortama saldığı belirli
frekanslardaki ses dalgalarını toplar. Uzaklık ölçümü için öncelikle çıkış
yüzeyinden ortama ses dalgası salınır. Salınan ses dalgası 15 derece açıyla
ortamda yayılır.
Yayılan
ses dalgası bu alanda bulunan bir cisme çarptığında, cisim yüzeyinden sensöre
geri yansır. Yansıyan dalganın giriş yüzeyine gelmesiyle işlem tamamlanır.
Dalganın çıkış yüzeyinden çıkmasıyla giriş yüzeyine ulaşması arasında geçen
süre ölçülerek, cismin uzaklığı hesaplanır. Bu basit mantıkla çalışan sensör, 2
cm ile 200 cm arasındaki uzaklıkları 1 cm hassasiyetle ölçebilmektedir. Sensör
bu aralık dışındaki uzaklıkları istikrarlı olarak ölçememektedir.
Sensör
üzerinde VCC, Trig, Echo, GND olmak üzere 4 adet pin bulunmaktadır. Bunlardan
VCC pini besleme (5 volt), GND pini toprak hattıdır. Trig pini çıkış yüzeyinden
dalganın salınmasını sağlayan pindir. Echo pini ise giriş yüzeyine yansıyan
dalganın ulaştığını Arduino'ya haber veren pindir. Açıklamalardan da
anlaşıldığı gibi Arduino'da trig pini çıkış, echo pini ise giriş olarak
ayarlanmalıdır.
Aşağıdaki
resimde sensörün Arduino bağlantılarını görebilirsiniz.
Arduino
ve uzaklık sensörünün bağlantıları resimdeki gibi yapıldıysa, kodlama kısmına
başlayabiliriz.
İlk
olarak setup fonksiyonu içerisinde sensörün trig ve echo pinleri
ayarlanmalıdır. Sensör önündeki cismin uzaklığını ölçmesi için trig pini aktif
yapılmalıdır. Daha önceden bu pinin aktif kalma ihtimalinden dolayı öncelikle
pin LOW durumuna getirilmelidir. Kısa bir süre bekledikten sonra trig pini 10
mikro saniye boyunca HIGH konumuna tutulmalıdır. 10 mikro saniye sonunda pin,
tekrardan LOW konumuna getirilmelidir. Böylece çıkış yüzeyinden ses dalgası
salınmış oldu. Salınan dalga sensörün önündeki bir cisme çarptığında giriş
yüzeyine yansıyacaktır. Dalga giriş yüzeyine ulaştığında sensör otomatik olarak
echo pinini HIGH konumuna getirecektir. Echo pininin HIGH konumuna gelme süresi
pulseIn fonksiyonuyla ölçülür. Ölçülen süre 14,55'e bölünerek cismin uzaklığı
ölçülür. Uygulamada sensör yardımıyla ölçülen uzaklığın kullanıcı tarafından
görülmesi için, uzaklık bilgisi seri haberleşmeyle bilgisayara aktarılmaktadır.
int trigPin = 8; /* Sensorun trig pini Arduinonun 8 numaralı ayağına bağlandı */
int echoPin = 7; /* Sensorun echo pini
Arduinonun 7 numaralı ayağına bağlandı */
long sure;
long uzaklik;
void setup(){
pinMode(trigPin, OUTPUT); /* trig pini çıkış olarak ayarlandı */
pinMode(echoPin,INPUT); /* echo pini giriş olarak ayarlandı */
Serial.begin(9600); /* Seri haberlesme baslatildi */
}
void loop()
{
digitalWrite(trigPin, LOW); /* sensör pasif hale getirildi */
delayMicroseconds(5);
digitalWrite(trigPin, HIGH); /* Sensore ses dalgasının üretmesi için emir verildi */
delayMicroseconds(10);
digitalWrite(trigPin, LOW); /* Yeni dalgaların
üretilmemesi için trig pini LOW konumuna getirildi */
sure = pulseIn(echoPin, HIGH); /* ses dalgasının geri dönmesi için geçen sure ölçülüyor */
uzaklik= sure /29.1/2; /* ölçülen sure uzaklığa çevriliyor */
if(uzaklik > 200)
uzaklik = 200;
Serial.print("Uzaklik ");
Serial.print(uzaklik); /* hesaplanan uzaklık bilgisayara aktarılıyor */
Serial.println(" CM olarak olculmustur.");
delay(500);
}
Örnek : 3
kademeli Park Sensörü
Kodlar :
const int trigger_pin = 12;
const int echo_pin = 13;
const int aled = 2;
const int bled = 3;
const int cled = 4;
const int dled = 5;
const int buzzer = 6; // Buzzer : + ve – uçları olan minik
hoparlördür
long sure, mesafe; // sure ve mesafe adında 2 ad. değişken.
Long tipinde
void setup() {
pinMode(aled , OUTPUT);
pinMode(bled , OUTPUT);
pinMode(cled , OUTPUT);
pinMode(dled , OUTPUT);
pinMode(buzzer , OUTPUT);
pinMode(trigger_pin , OUTPUT);
pinMode(echo_pin ,INPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(trigger_pin , HIGH);
delayMicroseconds(1000);
digitalWrite(trigger_pin , LOW);
sure = pulseIn(echo_pin , HIGH);
mesafe = (sure/2) / 29.1;
if (mesafe <= 10)
{
digitalWrite(aled , HIGH);
digitalWrite(buzzer , HIGH);
delay(250);
digitalWrite(aled , LOW);
digitalWrite(buzzer , LOW);
}
else if (mesafe <=25)
{
digitalWrite(bled , HIGH);
digitalWrite(buzzer , HIGH);
delay(500);
digitalWrite(bled , LOW);
digitalWrite(buzzer , LOW);
}
else if ( mesafe <=50)
{
digitalWrite(cled , HIGH);
digitalWrite(buzzer , HIGH);
delay(750);
digitalWrite(cled , LOW);
digitalWrite(buzzer , LOW);
}
else
{
digitalWrite(dled , HIGH);
delay(1000);
digitalWrite(dled , LOW);
}
}
Uygulama 8: Dijital Girişler
Gerekli malzemelerimiz:
Arduino UNO
Arduino kartımızın dijital
pinlerini şimdiye kadar sadece çıkış fonksiyonunda kullanmıştık. Fakat dijital
pinler giriş özelliği sayesinde sensörler ve butonlar gibi diğer çevre birimleriyle
de kullanılmakta. Bu dersimizde iki adet push buton kullarak LED yakıp
söndürmeyi öğreneceğiz.
Kartımızın bağlantı şeması şu
şekilde:
Kodumuz ise şu şekilde:
int ledPin = 5;
int buttonApin = 9;
int buttonBpin = 8;
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(buttonApin, INPUT_PULLUP);
pinMode(buttonBpin, INPUT_PULLUP);
}
void loop()
{
if (digitalRead(buttonApin) == LOW)
{
digitalWrite(ledPin, HIGH);
}
if (digitalRead(buttonBpin) == LOW)
{
digitalWrite(ledPin, LOW);
}
}
Dikkat ettiyseniz butonları
bağladığımız pinleri tanımlarken sadece INPUT kullanmak yerine INPUT_PULLUP
şeklinde bir tanımlama kullandık. Bu sayede Arduino kartımızın dijital pinlerine entegre olan pull-up
direncini aktifleştirmiş oluyoruz.
·
pull-up direnci ne işe yarar?
Pull-up direnci, dijital pinleri
giriş olarak kullandığımızda sinyalin bozulmamasını sağlar. Bu projemizde buton
basılı değilken dijital pinden okunan değer 5V yani lojik HIGH seviyesidir.
Pull-up direnci, buton basılıp değer LOW’a çekilmediği sürece bu pindeki
gerilimin 5V’ta sabit kalmasını sağlar.
Hiç yorum yok:
Yorum Gönder
Katkılarınız için şimdiden teşekkür ederim.