Şub 22

Yazar: MURAT OFLEZER

Kaynak: http://hasbisevinc.com

Neden Arduino?
Arduino Atmel marka işlemcilerin kullanıldığı hazır bir devre kartıdır. Açık kaynak kodludur ve isteyen kişi kendi Arduino’sunu yapabilir. Arduino projelerde kullanım kolaylığı sağlar ve projelerin daha hızlı ve stabil olarak yapılmasını sağlar. Arduino yapı ve özelliklerine göre çeşitli türlerden oluşmaktadır. Biz projemizde Arduino Uno modelini kullanacağız. Arduino Üzerinde USB bağlantısı, güç bağlantısı ve giriş çıkış pinleri bulunmaktadır. USB bağlantısı karta program yollama, bilgisayar ile kart arasındaki bilgi aktarımına ve kartı beslemek için kullanılır. Güç bağlantısı da aynı şekilde harici beslemeler için kullanılır. 9 Voltluk besleme önerilir. USB’den beslemek bu besleme türüne göre daha risklidir. Çünkü bilgisayarın USB çıkışı yeterli akım vermeyebilir Arduino için (motor ile ilgili uygulamalarda özellikle).

Arduino Modelleri

Arduino Uno: Genel olarak en yaygın olan modelidir. Bunun nedeni hem kolay bulunabilmesi ve fiyatının da uygun olmasıdır. 6 adet analog girişi ve 13 adet digital çıkış bulunmaktadır. Bunlardan 6 tanesi pwm çıkıştır.

1

Arduino Mega: Genel olarak yaygın bir şekilde kullanılan bir diğer arduino modelidir. Bu modelde 16 analog giriş ve 54 digital çıkış vardır ve bunlardan 12 tanesi pwm dir.

2

Diğer modeller üzerinde çok durmayacağım bununla ilgili değişik kaynaklarda bilgiler mevcut şimdilik bu iki modeli bilmemiz yeterli olacaktır.

Şimdi de biraz elektronik konusuna değinelim.

Temel Elektronik

Breadboard
Resimde görüldüğü gibi breadboard’umuzun iki kenarında aşağıya doğru uzanan delikler vardır. Bu delikler besleme kanalımızdır. Aşağıya doğru inen çizgilere karşılık gelen delikler kısa devre durumundadır. Yani sol üstteki kırmızıdan bağlanan bir kablo aynı çizgi üzerinden bağlanacak kablolar ile birleşiktir. Ayı şekilde orta kısımdaki yatay çizgilere karşılık gelen delikler de birbirleri ile bağlantılıdır. Fark ettiyseniz yatay çizgilerin ortasından bir yarık geçmektedir. Bu yarığın amacı entegrelerimizi kolaylıkla takabilmemizi sağlamasıdır.

3

Direnç
Hemen hemen herkesin bildiği bilgilerimizi de gözden geçirelim. V=I*R formülünü inceleyelim; bu formüle göre sabit bir voltaj altında direncimizi arttırırsak Akımımız azalmaktadır. Bu özellik ile fazla akım çekmemesini istediğimiz elemanların önüne direnç koymalıyız.

4

Voltaj Bölücü
Giriş voltajının istenilen voltaja düşürülmesini sağlayan devredir. Şekildeki gibi kurulur. Çıkış voltajı R1 ve R2 dirençlerine bağlıdır. Vout = Vgiriş*R2/(R1+R2) şeklinde yazılır. Örneğin R1=10k R2= 10k ohm olarak seçilir ve giriş voltajımız da 5 volt olursa, çıkış voltajımız =  5*10K/(10K+10K) = 2.5 Volt olarak bulunur.

Diyotlar
Kullanım alanlarına göre çeşitli diyotlar bulunmaktadır. Led, fotosel, zener diyotlar bunlara örnek olarak verilebilir. Lise bilgilerimizden de bildiğimiz gibi diyotlar tek yönde geçirgendir. Şekildeki resimde akım geçirme yönü belirtilmiştir. Fakat ne yazık ki gerçek dünyada diyotlar kağıt üzerindeki gibi ideal davranmazlar. Diyot akım geçirme yönünde kullanılsa bile bir voltaj farkına neden olmaktadır. Bu voltaj farkı diyotun yapısına göre değişmekle beraber genellikle 0,6 – 0,7 Volt arasında olmaktadır.

5

Zener Diyotlar
Genellikle devreye diğer diyotlardan farklı olarak ters bağlanırlar. Ters (tıkama) yönünde oluşturdukları gerilim farkı sayesinde kol üzerindeki gerilim sabitlenmektedir. Devre üzerinde kullanımı şekildeki gibi gösterilmiştir. Voltaj farkı diyotun yapısına göre değişmektedir. Genellikle 5.1 Voltluk diyotlar kullanacağız. Bu diyotlar ile devre üzerindeki fazla gerilimi ve olası dalgalanmaları engellemeyi umuyoruz.

6

Transistör
Girişine uygulanan sinyali kuvvetlendiren devre elemanıdır. Aynı zamanda anahtarlama elemanı olarak da kullanılmaktadır.

7

Temel Yazılım Bilgileri
Arduino programlamaya geçmeden önce temel yazılım kodlarına bakalım. Projelerimizde kullanacağımız bazı fonksiyon ve kod yapılarını tanıtacağım.

Koşullar (if-else-elseif)
Yazılım dillerinin en temel komutlarından birisidir. Elinizde bir durum var ve bu durum doğru ise a işini yapmasını eğer yanlış ise b işini yapmasını istiyorsanız, bu kod sistemi tam bu işe uygun. Kısaca kod şemasına bakalım.

 
If( a == 5 ){
//Buraya doğru durumda çalışması istenilen kodlar
}else{
A’nın 5 olmadığı durumda çalışacak kodlar.
}
a == 5

burada bizim koşulumuzu oluşturmaktadır. Dikkat edilmelidir ki iki tane eşittir kullanılmaktadır. Yani denk midir anlamına gelmektedir.

Koşul alanında kullanabileceğimiz ifadeler,

== Eşit ise != Eşit değilse
> Büyüktür < Küçüktür
<= Küçük eşittir >= Büyük eşittir
Koşul 1 && Koşul 2 Ve Koşul 1 || Koşul 2 Veya

Koşullarımıza else kullanımı zorunlu değildir. Sadece if kullanımı yapılabilir, böylece koşul doğru değilse extradan bir kod çalışmaz. Birden fazla koşulumuz var ise else if ile yeni koşullar ekleyebiliriz.

 
If( a == 1 ){
// a = 1 durumunda burası çalışır
}
else if (a == 2 ) {
// a = 2 durumunda burası çalışır
}
else if (a == 3 ) {
// a = 3 durumunda burası çalışır
}

For döngüsü: Yazdığımız kodların belli bir süre tekrar etmesini isteyebiliriz. Bunun için döngüler kullanmalıyız.

 
for(int i =0; i < 10; i ++){
// burası 10 kere okunacak
// program buraya her uğradığında i değeri bir arttırılacak
// i değeri 10’a ulaşana kadar döngü devam edecek
}

While döngüsü: For gibi while kodları da döngü amacıyla kullanılır.

 
b = 20;
while( b > 10){
// b değişkeninin 10’dan büyük olduğu durumlarda döngü devam eder
b = b – 1 ; // her döngüde b’nin değerini bir azalttık
// dikkat edilmelidir ki eğer b’nin değerini değiştirmeseydik
// döngü koşulu hep doğru olacağından program burada takılı kalacaktı
}

Arduino Programlama
İki ayrı bölümden oluşuyor void setup kısmında genel ayarları yapıyoruz ve void loop kısmı ise asıl kodları yazdığımız bölümdür.

8

İlerde projelerimizde kullanacağımız kütüphanelere resimdeki gibi ulaşacağız;

9

Bu segmeden dışarıdan kütüphane de ekleyebiliriz. Bizim giriş seviyesindeki projelerimiz için kütüphane kullanmayacağız kodlarımızı yazdığımız zaman tanımlı olacaktır.

Proje 1- Arduino ile Yanıp Sönen Led Yapımı

Öncelikle LED bağlamayı öğrenelim. LED’in ayaklarına bakıldığında birinin uzun birinin kısa olduğu görülmektedir. Buradan anlamamız gereken şey, uzun ayağın + uca kısa ayağında da – uca bağlanması gerektiğidir. Yani uzun ayağımızı arduinoya bağlayacağız.

Fakat  ayaklar arasında bir bağlantı yoksa, LED’in içindeki kısa olan yere bağlı ayak + ucu, diğer ayak – ucu göstermektedir. LED’imizin çalışma akımı vardır. Bunu sağlaması ve fazla akım çekmemesi için LED’in artı ucu ile arduino(yada +5 volt besleme) arasına 220 ohm’luk bir direnç bağlamalıyız. Aksi taktirde LED’imiz patlayabilir. İçerisinden çıkan gaz sağlık için zararlı olabilir. Şimdi programlamaya giriş yapabiliriz.

Arduino programları iki ana fonksiyondan oluşur;

void setup() fonksiyonu: Bu fonksiyon program ilk açıldığında bir kere çalışır ve gerekli kalibrasyon, setup komutlarını buraya yazarız.

void loop() fonksiyonu: diğer programlama dillerinden alışık olduğumuz main() fonksiyonu gibidir. Farklı olarak loop fonksiyonu işlevi bitince tekrar baştan başlar yani sonsuz bir döngüdür aslında.

Arduino Programlama Şeması:

 
// İlk başta kütüphaneleri ekleyebiliriz
// Global cinsteki değişkenlerimizi tanımlayabiliriz
// Fonksiyonlarımızı burada yazabiliriz
void setup(){
// ilk başta çalışmasını istediğimiz kodlar buraya yazılır
}
void loop(){
// sonsuz döngü şeklindeki main fonksiyonumuz
// programı buraya yazıyoruz
}

Arduino’yu test etmek ve ilk programımızı yazmak için bu projeyi yapabiliriz. 1 Saniye aralıklar ile LED’imiz yanıp sönecektir.

 
int LED = 9; // burada arduinonun 9. Ayağına ledimizi bağladığımızı söylüyoruz
void setup(){

pinMode(LED, OUTPUT); // LED pini yani Arduino’nun 9. Ayağı çıkış yapıldı
}
void loop(){

digitalWrite(LED,HIGH); // LED’in bağlı olduğu pinden 5 volt gerilim sağlandı
delay(1000); // 1000 ms yani 1 saniye program duruyor
digitalWrite(LED,LOW); // LED söndürülüyor
delay(1000); // bir saniye bekliyoruz
}

Fritzing Çizimi

Adsız7

Proje 2-Arduino ile Kara Şimşek Devre
Arduino’ya pratik olarak kara şimşek diye tabir edilen, paralel bağlı ledlerden oluşan örnek devremizle başlayalım. Devremizi istediğimiz kadar ledle oluşturabiliriz. Biz bu örnekte 5 adet led ile kurulum yapmış gibi davranacağız.

 
void setup(){
pinMode (13, OUTPUT);
pinMode (12, OUTPUT);
pinMode (11,OUTPUT);
pinMode (10, OUTPUT);
pinMode (9, OUTPUT);
}
void loop(){
digitalWrite (9, HIGH);
delay (10);
digitalWrite (9, LOW);
digitalWrite (10, HIGH);
delay(10);
digitalWrite (10, LOW);
digitalWrite (11 , HIGH);
delay(10);
digitalWrite (11, LOW);
digitalWrite (12, HIGH);
delay(10);
digitalWrite (12, LOW);
digitalWrite (13, HIGH);
delay(10);
digitalWrite (13, LOW);
}

Kara şimşek uygulamasının çalışma mantığının kavranması için yukarıda verilen kodların açıklayıcı olduğunu düşünmekteyim. Fakat bu kodlar başlangıç düzeyindedir ve gereksiz olarak her led tek tek kontrol edilmiştir. Bir sonraki aşama olarak yukarıdaki uygulamayı yapan fakat daha profesyonel olan bir program yazalım.

 
const int ledPini [] = {9,10,11,12,13};
void setup () {
for(int i=0; i<5;i++)
{
pinMode(ledPini [i], OUTPUT); // LED pinlerini çıkış olarak tanımladık
} }
void loop() {
for(int i=0; i<5; i){
digitalWrite(ledPini[i],HIGH);
delay(50);
digitalWrite(ledPini[i],LOW);
}
for(int j=4;j>-1; j--)
{
digitalWrite(ledPini[j],HIGH);
delay(50);
digitalWrite(ledPini[j], LOW);
}
}

Fritzing Çizimi

led

Arduino ile Buton Kullanımı
Uygulamalarımızda çeşitli görevler için butonlar kullanacağız. İlk olarak butonun çalışma mantığını inceleyelim. Kullanıcı butona tıkladığında butonun iki ucu kısa devre olur ve böylece akım akmaya başlar. Kullanıcı butondan elini çektiğinde devrenin önceki durumuna dönmesi için pull-up/pull-down direnç sistemi kullanılır. Kullanılan bu dirençler ile buton elektriksel olarak basılı kalmaktan kurtarılır.

10

Pull-Down Direnç
Butona basıldığında 5 Volt arduinonun input ayağına ulaşır. Fakat butondan elimizi kaldırdığımızda arduinoun pininde 5 volt gerilimi kalmaktadır. Bu durumdan kurtulmak için genellikle 10K ohm değerinde bir direnç arduinoun input ayağından toprağa bağlanır.

Pull-up Direnç
Butona basılmadığı durumlarda arduinonun input ayağı 5 volttadır. Butona basıldığında akım arduinonun input ayağı yerine toprağa ulaşmaktadır. Pull-Down direnç sisteminin tam tersi şeklinde çalışmaktadır. Direncin konulma nedeni butona basıldığında 5 Voltun doğrudan toprağa (- uça) ulaşmasını engellemektir. Genellikle 10K değerinde direnç kullanılmaktadır.

 

 

 

Proje 3-Butonla Led Kontrolü

 
const int buttonPin = 9; // Butonun pin numarası
const int ledPin = 8; // Ledin bağlandığı pin numarası
int buttonState = 0; // Butonun durumu
void setup() {
pinMode(ledPin, OUTPUT); // Ledin bağlı olduğu pini çıkış olarak ayarlıyoruz.
pinMode(buttonPin, INPUT); // Butonun bağlı olduğu pini çıkış olarak ayarlıyoruz.
}
void loop(){
buttonState = digitalRead(buttonPin); // butonun basılı olup olmadığını kontrol ediyoruz.
// Buton basılı ise bize HIGH değil ise LOW olarak geri dönmektedir (1 veya 0)
if (buttonState == HIGH) { //buton basılı mı?
digitalWrite(ledPin, HIGH); // ledi yak
}
else {
digitalWrite(ledPin, LOW); // buton basılı değil ledi söndür
}
}

Ark olaylarını engellemek için digitalWrite kodlarından sonra az bir bekleme verilebilir, delay(100) şeklinde. Buton kontrol etmeyi öğrendiğimize göre bir adım daha ileriye gidelim ve sayaç yapalım. Fakat bunun için öncelikle bilgisayar ile arduinomuzu nasıl haberleştireceğimize bakalım.

Fritzing Çizimi

Adsız7

Yorum Yaz