Arduino ders notları

PDF olarak indirmek için tıklayınız...

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.

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:
= 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:
·         Breadboard
·         3 adet 220 Ω direnç
·         İki ucu erkek jumper kablo

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.