Merhaba arkadaşlar! Ders, iş güç derken uzun zamandır buralara uğrayamıyordum. Tabi bu aralar da oyun oynamak, inceleme yazmak için vaktim yok, bu yüzden bitirme projemde kullandığım Arduino isimli kartı anlatmaya ve başlangıç rehberi yazmaya karar verdim.

Nedir bu Arduino?

Her şey İtalya’da, İvera Etkileşim ve Dizayn Enstütüsü öğrencilerinin ihtiyaçlarını karşılayacak mikrodenetleyicilerin fiyatlarından şikayet etmesi ile başladı. Hem açık kaynak kodlu hem de ucuz bir mikrodenetleyici geliştirme fikri ile 2005 yılında işe koyuldular. Kısa zamanda sonuç alıp kartı 30$ civarındaki fiyatı ile piyasa çıkardılar (GittiGidiyor gibi sitelerden 35 - 40 tl gibi bir fiyata bulabilirsiniz). Bu kartların en önemli özelliği tamamen açık olması. Gerek yazılımını gerekse donanımını ihtiyacınız doğrultusunda değiştirebilirsiniz, üreticinin son kullanıcından gizlediği, sakladığı bir şey yok. Bunun yanı sıra piyasada wi-fi portundan lcd ekranlara kadar resmi genişletme / geliştirme parçası bulabilirsiniz.

Peki neden PIC değil?

Tabi ki son ürününüzün mümkün olduğu kadar portatif olmasını istiyorsanız PIC kullanmanız daha mantıklı bir seçim olabilir, ancak prototip yapma aşamasında kullanım kolaylığı açısından Arduino kullanmanızı şiddet ile tavsiye ederim. Öyle ki PIC ile uğraşıp birkaç günde bitiremediğim projeyi yapmak Arduino ile kırk dakika sürdü.

Bu aralar Arduino’nun hemen hemen her ihtiyacı karşılayabilecek birçok modeli mevcut. Bu yazıda en basit ve ucuz modeli olan Arduino Uno’dan bahsedeceğim ve basınç sensörü ile ufak bir uygulama yapacağım.

Başlangıç için tabi ki kartı almış olmanız gerekiyor, elektronikçilerden veya GittiGidiyor’dan rahatlıkla bulabilirsiniz. Alacağınız paketin içinden bir adet kart ve USB kablosu çıkacaktır. Sürücü Windows Vista, 7 ve 8’de otomatik olarak yüklenecektir. Bu işlem bittikten sonra http://arduino.cc/en/Main/Software adresinden IDE’yi indirip kurun.

Linux için iş biraz daha karışık. Öncelikle terminale uname -a yazarak kernell sürümünüzün 2.6’dan daha yüksek olduğundan emin olun. Daha sonra sisteminizde brltty (görme engellilerin bilgisayar kullanmasını kolaylaştıran cihazlar için sürücü) yüklü ise silmeniz gerekiyor. Olup olmadığını bilmiyorsanız terminale sudo apt-get remove brltty yazıp silmeyi deneyin, yoksa zaten sistem bunu size söyleyecektir.

Artık sisteminiz yükleme işlemi için hazır. Arduino kartınızı usb’ye taktıktan sonra bilgisayarın kartı görüp görmediğini anlamak için ls /dev/ttyACM* yazın (/dev/ttyUBS* de olabilir, dağıtımdan dağıtıma değişebilir). Eğer sisteminiz Arduino’yu görüyorsa sudo apt-get install arduino arduino-core. Bu işlemleri yaptıktan sonra “Programming” menüsünden Arduino IDE’yi açın. Burada da yapmanız greken Tools > Board menüsünden kartınızın modelini seçmek ve Tools > Serial Port menüsünden uygun portu seçmek (ls /dev/ttyACM* yazarak portu öğrenebilirsiniz). Tebrikler, artık kod yazmaya hazırsınız!

Hello World

Arduino avg-g++ derleyicisini kulanıyor. Bu da demek oluyor ki C/C++ ile kolaylıkla kartınızı programlayabilirsinz. Tabi kendi kütüphanesi de mevcut ve bu aşamada çoğunlukla onu kullanacağız.

IDE’nin kodunuzu derleyebilmesi için en az iki fonksiyonun bulunması lazım:

void setup()
{}
void loop()
{}

Tahmin edebileceğiniz gibi setup() fonksiyonu program başladığı anda bir kere çağırılıyor, loop() döngüsü de while(1) gibi çalışıyor, kodunuz çalıştığı sürece loop() dönmeye devam edecektir.

Şimdi âdet yerini bulsun diyerek Hello World yazdıralım.

void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println("Hello World!");
}

Bu kodu yazdıktan sonra sol üstteki tike tıklayıp kodunuzu derleyebilirsiniz, her şeyi doğru yazdıysanız altta “Done compiling” yazısı çıkacaktır. Daha sonra tikin sağındaki oka tıklayarak kodunuzu karta yükleyin. Şimdi tikin olduğu satırda, en sağdaki “Serial Monitor” düğmesine basarsanız yeni bir pencerede alt alta bir sürü “Hello World!” yazısı bastırılacaktır.

Şimdi, bu kodda ne yaptık? Öncelikle setup() içerisinde seri portun veri iletişimini başlattık, bu satırı yazmazsanız programınız çalışacaktır ancak USB üzerinden herhangi bir çıktı alamazsınız. Daha sonra “Serial.println()” komutu ile yazacaklarımızı bastırdık ve yeni satıra geçtik. “Serial.print()” yazarsanız yeni satıra geçmeyecektir.

Temeli oturttuğumuza göre artık daha anlamlı bir uygulamaya geçebiliriz. Önce bir LEDi yakabileceğimiz bir devre yapalım. Bunun için bir adet LED (valla bak :P ) gerekiyor. Kartın üzerindekini de kullanabilirsiniz tabi.

Devreyi resimdeki gibi kurduktan sonra bir saniye yanıp bir saniye sönmesi için bir kod yazalım:

int led = 13;
void setup() {               
pinMode(led, OUTPUT);    
}
void loop() {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}

Not: bu kodu File > Examples > Basics > Blink ‘e giderek bulabilirsiniz.

En başta hangi pini kullanacağımızı seçtik. Bu herhangi bir pin olabilirdi ancak hem kartın üzerindeki LED üç LEDlerden birisi 13. pinin çıktısını veriyor hem de kendiniz bir LED takacaksanız 13. pinin “Ground” pininin yanında olması size kolaylık sağlayacaktır. USB’den herhangi bir çıktı almayacağımız için “Serial.begin(9600)” yazmadık. Onun yerine “pinMode(led, OUTPUT)” yazarak pinimizi OUTPUT, yani “çıktı” moduna ayarladık. Bu demek oluyor ki 13. pine 0 volt ya da 5 volt bağladığımızda hiçbir şey değişmeyecek, pin 5 volta ayarlıysa 5 volt vermeye, 0 volta ayarlıysa 0 volt vermeye devam edecektir.

“loop()” çalışmaya başladığında ise ilk yaptığımız şey 13. pine HIGH yani “yüksek”, yani 5 volt çıktısını “yazdık”. Bunun sonucu olarak LEDimiz yanacaktır. Bir sonraki satırda delay(1000) ile bir saniye durakladık, daha sonra 13. pine LOW değeri atadık ve kodumuz bu şekilde çalışmaya devam edecek.

Evet bu ay Arduino nasıl kurulur, kodu nasıl yazılır giriş seviyesinde anlattım. Önümüzdeki ay devre kurup bir iki farklı uygulama anlatabilirim, o zamana kadar Examples’taki kodları kurcalayın, http://arduino.cc/en/Reference/HomePage adresinden kod referansını okuyun ve en önemlisi kendinize iyi bakın.

Referanslar