ARDUINO
ARDUINO NEDİR? Arduino GPIO (General Purpose Input/Output) pinleri sayesinde çevre aygıtları ile etkileşime girebilen, proje prototipleme sürecinde kolaylık sağlayan açık kaynak kodlu geliştirme platformudur. Processing/Wiring dilinin bir uygulamasına sahip IDE'si sayesinde elektroniğe merak saran her yaştan insanın kolaylıkla kullanabileceği bir elektronik karttır. Arduinolar, kafasındaki projeyi hayata geçirmek isteyenlerin genellikle ilk durağıdır. Çevre birimleriyle kolay bağlantı kurabilmesi, esnek yapıya sahip olması ve kolayca programlanabilmesi büyük kolaylık sağlar. Uygun fiyatlı olmaları ve projenin içeriğine bağlı olarak farklı kart modelleri sunması Arduino'yu diğer geliştirme platformlarından bir adım öne çıkartır. Nasıl Kullanılır? Arduino kullanımı çok kolay bir karttır. Yapmanız gereken tek şey www.arduino.cc internet sitesine girerek kendi ücretsiz yazılımını indirmek ve Arduino kartını USB kablosu ile bilgisayara bağlamak. O andan itibaren bilgisayarınız kartı tanıyacak ve kart kullanıma hazır hale gelecektir. Windows7 ve üst sürüm işletim sistemleri ile gelen programlar sayesinde sizin harici bir yazılım yüklemeniz veya cihaz tanıtımı yapmanız gerekmemektedir. Nasıl Programlanır? Arduino, C++ tabanlı çok basit bir programlama diline sahiptir. Arduino programlamaya başlamadan önce algoritmanın mantığını ve C/C++ dilinin temel yazıp kurallarını bilmeniz başlangıç seviyesi projeleriniz için yeterli olacaktır. Arduino nun dünya çapında büyük bir hayran kitlesinin olması akla gelmeyecek uygulamalar da bile yazılı ve görsel doküman bulmanızda kolaylık sağlayacaktır. Bu geliştiricilerin yazdığı kodları inceleyerek kendinizi daha da geliştirebilir ve yaşadığınız en ufak bir sorunda rahatlıkla destek bulabilirsiniz. Arduino Community ile yakın takip içinde olmanız kendinizi geliştirmenizde büyük destek olacaktır. 1
ARDUINO IDE Arduino IDE programın yazıldığı ve derlenip karta yüklendiği ücretsiz bir yazılımdır. Kartı USB kablosu ile bilgisayara bağladıktan sonra yazılım kart türünü kendisi seçip derleme ve yükleme işlemini kartın bulunduğu porta yönlendirecektir. Programın kartı tanımaması durumunda sırasıyla; seçilip ardından (Örn:COM5) seçilerek gerekli ayarlamalar yapılır. Kontrol Et: Bu buton yazılan kodun der lenme işlemini yapmaktadır. Yazılan kod derlenme işlemine yönlendirilerek yüklenmeye hazır hale getirilir. Eğer programda bir hata tespit edilirse en alttaki siyah pencerede hata gösterilerek geliştiricinin kodu düzeltmesi gerektiğini bildirir. Yükle: Derlenen kodu karta yükler. NOT: Arduino kartlarında önceden yüklenmiş bootload yazılımı bulunduğundan harici bir programlayıcı karta ihtiyaç duyulmaz. Seri Port Ekranı: Bu buton çoğu projenin olmazsa olmazlarındandır. Seri port ekranı bilgisayar ile kart arasındaki iletişimi gösterir, alınan ve gönderilen bilgileri anlık olarak kullanıcıya sunar. Örneğin bir sıcaklık ölçüm devresi hazırladık. Ölçülen sıcaklığı gözlemleyebilmemiz için bir aygıta (LCD) ihtiyacımız olacak. Fakat yazılımı, bilgileri bilgisayara gönderecek şekilde düzenlersek LCD ye ihtiyaç duymadan Seri Port ekranından sıcaklığı bilgisayar ortamında anlık olarak takip edebiliriz. 2
Arduino Programlama Arduino nun C++ tabanlı kolay bir geliştirme dili olduğundan daha önce bahsetmiştik. Şimdi ise kart üzerindeki GPIO pinlerini nasıl programlayıp çevre birimlerle nasıl iletişime geçtiğini göstereceğiz. Hatırlatmamızda tekrar fayda var bu dersler algoritmanın mantığını tam olarak kavramış ve giriş seviyesi elektronik bilgisine sahip olduğunuz varsayılarak hazırlanmıştır. Eğer elektronik bilginiz yok ise led, direnç, kondansatör, breadboard, güç kaynakları hakkında bilgi sahibi olmanız; pullup - pulldown dirençlerini ve Kirchhoff un Akım ve Gerilim yasalarını öğrenmeniz gerekmektedir. Aksi taktirde devre elemanlarına zarar verebilir veya Arduino kartınızı yakabilirsiniz. Gerekli malzemeler Bu eğitim boyunca bize gerekli olacak malzemeler: * Arduino kart ( Uno veya Leonardo başlangıç için yeterli olacaktır) * USB Kablo (Uno ve Leonardo nun kablo türleri farklıdır. Alırken dikkat ediniz!) * 5V Güç kaynağı adaptör (Akıllı telefonların şarj cihazları kullanılabilir.) * Breadboard (Orta boy) * Jumper kablo (Erkek-Erkek / M-M) * Led * Dirençler (100-220-330-470-1K-10K Ohm) * Buton * Potansiyometre (5K Ohm) * Motor ve Motor Shield * Hc-Sr 04 * 2*16 LCD Ekran * LM35 Sıcaklık sensörü 3
Programlamaya Giriş Arduino IDE geliştirme ortamını açtığınızda void setup() ve void loop() isimli iki bölüm karşılayacaktır. Void setup() kısmı, karta ilk enerji verildiğinde çalıştırılan bölümdür. Burada yazan kodlar işlenerek projede hangi pinlerin kullanılacağı ve pinler giriş mi yoksa çıkış mı olacağı tanımlanır. Void setup() kısmı karta enerji verildiğinde bir defa çalıştırılır ve kartın restart tuşuna basılmadığı sürece bir daha da geri dönülüp çalıştırılmaz. Void loop() kısmı, projede izlenmesi gereken algoritmanın bulunduğu kısımdır. Tüm işlemler burada gerçekleşir. Void setup() kısmının aksine sonsuz bir döngü şeklinde gerçekleşir. Algoritmanın sonuna gelindiğinde başa dönerek olayların sürekli tekrarlanmasını sağlar. Döngüyü istediğiniz bir zaman başa almak için kart üzerindeki restart tuşuna basmanız yeterlidir. 4
LED Yakıp Söndürmek 1 Hangi geliştirme kartı üzerinde çalışırsak çalışalım öğrenme aşamasında yapacağımız ilk uygulama genellikle LED yakıp söndürmektir. Kart üzerindeki pinleri kontrol etmenin en kolay yolu budur. Bizde şimdi ilk ledimizi yakıp söndürerek Arduino programlamaya giriş yapmış olacağız. Öncelikle kodlarımıza bir bakalım ve kodları inceleyerek gidelim. Kodlama öğrenmenin genellikle en pratik yolu budur. Kodları incelediğimizde ; İlk olarak void setup() bölümüne pinmode(13, OUTPUT); komutunu yazdık. Bu komutun anlamı 13 No lu pini kullanacağımızı ve bu pinin çıkış durumunda olacağını belirtir. Bu, LED e veri yollayacağımızı ondan veri almayacağımızı anlamına gelir. Setup() kısmında tanımlamalarımızı yaptıktan sonra loop() kısmına girip algoritmamızı yazıyoruz. Öncelikle digitalwrite() fonksiyonu ile 13 No lu pine dijital veri yazacağımızı ve bu verinin HIGH yani Lojik 1 (5V) konumunda olacağını belirtiyoruz. delay(1000); komutu ile LED e enerji verdikten sonra 1 saniye beklemesini sağlıyoruz. Ve ardından tekrar digitalwrite(); komutunu kullanarak LED i LOW yani Lojik 0 (0V) konumuna çekiyoruz. Ardından tekrar 1 saniye beklemesini sağlıyoruz ve programı bitiriyoruz. Void loop() kısmı sonsuz döngüye karşılık geldiğinden kodlar enerji kesilene veya restart tuşuna basılana kadar sürekli tekrarlanacaktır ve LED 1 saniye aralıklarla sürekli yanıp sönecektir. NOT: Kartın üzerinde 13 No lu pine bağlı bir LED bulunmaktadır. Bu uygulamada devre hazırlamanıza gerek yoktur. Ama yine de harici bir LED kullanmak isterseniz yandaki devre modeline göre kendi devrenizi hazırlayabilirsiniz. 5
LED Yakıp Söndürmek 2 (Buton Uygulaması) Bu uygulamamızda buton ile LED kontrol edeceğiz. Kullanıcıdan karta bağladığımız butona basmasını istediğimizde Led yanacak, elini çektiğinde ise Led sönecektir. Öncelikle devre şemasını hazırlıyoruz ve ardından kodlarımızı yazıyoruz. İlk olarak kartımızın 9 nolu pinine LED imizi bağlıyoruz. Ardından 7 nolu pine de butonumuzu bağlıyoruz. Butonu bağladıktan sonra 10K Ohm direnci toprak (GND) hattına bağlayarak pull- Down direncimizi hazırlıyoruz (butona basılmadığında pinin kararsız durumda kalmasını önlemiş oluyoruz). butondurumu adında bir değişken oluşturuyoruz ve bu değişkenin durumunu başlangıç değerini 0 olarak tanımlıyoruz. Ardından digitalread(7); komutu ile 7 nolu pininden gelen dijital veriyi okuyarak butondurumu adlı değişkene tanımlıyoruz. Butona bastığımızda 7. pinden HIGH yani lojik 1 komutu okunuyor. Bu şekilde if () komutu içindeki eşitlik sağlanmış oluyor ve LED yanıyor. Kullanıcı elini butondan çekene kadar eşitlik devam ediyor ve LED yanmaya devam ediyor. Kullanıcı elini butondan çektiğinde butona bağladığımız 10K ohm luk pull-down direnci yüzünden 7 nolu pin LOW konumuna düşüyor, butondurum adlı değişken tekrardan 0 oluyor ve LED sönüyor. Bu şekilde LED buton aracılığıyla kontrol edilebiliyor. Sizde LED ve buton sayısını arttırarak veya farklı algoritmalar kullanarak daha eğlenceli uygulamalar yapabilirsiniz. 6
ADC (Analog to Digital Converter) Sıradaki uygulamaya geçmeden önce Analog sinyal nedir, ADC nedir ve bunların kullanım alanları hakkında bilgi sahibi olmamız gerekiyor. Analog veriyi teknik detaya girmeden basit örneklerle anlatalım. Elimizde bir fincan kahve olduğunu düşünelim ve arkadaşımızın kahve sıcak mı? diye sorduğunu varsayalım. Kahve sıcak mı? sorusuna vereceğimiz cevap ya Evet (1) yada Hayır (0) şeklinde olacaktır. Bu dijital veri olarak kabul edilir. Fakat arkadaşımızın kahvenin sıcaklığı ne kadar? diye bir sorusu olursa ona verebileceğimiz sonsuz cevabımız olacaktır. İşte bu Analog veri sınıfındadır. Bizim de uygulamalarda kullandığımız çoğu sensör bize analog sinyal olarak cevap vermektedir. Bu sensörlerden gelen veriyi işlenebilmesi için kullandığımız kartın ADC (analogdan dijitale çevirici) modülünün bulunması gerekir. Bir önceki buton projesinde butondan dijital veri okuduğumuz için butonu istediğimiz herhangi bir pine bağladık. Fakat kartın üzerindeki tüm pinlerin ADC desteği bulunmadığından Analog veriyi okuyabilmek için kartı üzerinde ANALOG IN olarak işaretlenen pinleri kullanmamız gerekmektedir. Şimdi ise uygulamamıza geri dönelim. Bu uygulamada kartımıza potansiyometre bağlayacağız ve okunan analog veriyi bilgisayar ortamından inceleyeceğiz. Daha önceden de bahsettiğimiz gibi karttan anlık olarak veri okuyabilmemiz için Seri Port Ekranını açmamız gerekmektedir. Açtığımız Seri Port penceresinden veri takip edebilmemiz için yazdığımız kod üzerinden seri haberleşmeyi aktif etmemiz gerekmekte. Bunu yapabilmemiz için void setup() bölümüne Serial.begin(9600); komutunu yazmamız yeterlidir. Komut içerisine yazdığımız 9600 ise baud değeridir ve haberleşmenin hızını belirler. Gerekli ayarlamaları yaptıktan sonra algoritmamıza Serial.println(); komutunu yazmamız yeterlidir. Komut içine yazacağımız değişkenin değeri anlık olarak bilgisayar ekranından okunabilecektir. 7
Potansiyometre Uygulaması Bu uygulamasında karta bağlayacağımız bir potansiyometre ile karta analog veriler yollayacağız. Yolladığımız bu bilgiyi Seri Port Ekranını kullanarak anlık olarak takip edeceğiz. Kodlarımızı ve devremizi aşağıdaki örneklere göre hazırlayalım. Ardiuno UNO kartının üzerinde 8 kanallı 10 bitlik ADC modülü bulunduğundan 0 ile 5 volt arasını 1024 adıma bölecektir. (2^n=> 2^10=1024). Uygulamada potansiyometre ile yapacağımız her değişiklik 0 ile 1023 arasında (0 ile 1023 dahil) bir değer alıp ekrana yazılacaktır. 8
PWM LED Bu uygulama da analog veriyi okuduğumuz gibi bu seferde yazmayı göreceğiz. Bu işlemi gerçekleştirirken PWM metodunu kullanacağız. Öncelikle PWM in mantığını öğrenelim. PWM (pulse width modulation), sinyali belli aralıklarla high ve low yaparak analog sinyal üretme yöntemidir. Bu olay o kadar kısa sürede gerçekleşmektedir ki osiloskop olmadan göz fark edilemez. Bu da bize donanımların gücünü ayarlamamızı sağlar. Bu yöntemi kullanmak için analogwrite(pin_numarası, 0 ile 255 arasında değer); komutunu yazmanız yeterlidir. Yavaşça yanıp sönen led uygulaması Her adımda programın 10ms bekleyeceğini düşünürsek 10*255=2550ms yani yaklaşık 2.5 saniyede tam parlaklığa ulaşıp yine aynı sürede Led yavaşça sönecektir. Bu mantığı kullanarak sisteminizdeki motorlara da rahatlıkla hız kontrolü yapabilirsiniz. 9
Hc Sr-04 Ultrasonik Mesafe Sensörü Uygulaması HcSr-04, ses dalgalarını kullanarak nesnelerin uzaklığını ölçebilen bir sensördür. Sensörden gönderilen ses dalgaları cisme çarpıp geri dönme süresini ölçerek cismin uzaklığı hesaplanır. Bu uygulamada da sensörden gelen veri nasıl uzaklığa dönüştürülür onu göreceğiz. Öncelikle sensörün trig yazan pinini 2 ye, echo yazan pini de kartta 3 nolu pine bağlıyoruz. VCC pinine 5 volt, GND pinine de toprak bağlayarak sensörü çalışır hale getiriyoruz. ECHO pininden veri alacağımız için pini giriş (Input) olarak tanımlıyoruz. Trig pinini çıkış (Output) olarak ayarlayarak 1000 mikro saniye süreyle enerji veriyoruz. Sensör düzenli olarak cisme ultrasonik dalgalar yollamaya başlar. pulsein(); komutu ile echo pininin High olma ve Low olma süreleri ölçülür. Ölçülen süre dalganın cisme ulaşması ve geri dönmesini kapsar. Fakat bu şekilde işlem yaparsak 2 kat fazla mesafe ölçmüş oluruz. Bu yüzden ses dalgasının sadece cisme gidiş süresini bulmak için süreyi 2 ye böleriz. Ardından bulunan süreyi sesin ortamdaki yayılma hızı olan 29.1 microsaniye/santimetre değerine böleriz. Bu şekilde uzaklığı tam olarak ölçmüş oluruz. Bu sensörü kullanarak kendinize engelden kaçan robot veya araçlar için park sensörü yapabilirsiniz. 10
MOTOR SHIELD Arduino kartına bağladığımız her donanımın kendi özelliklerine bağlı olarak harcadığı bir güç vardır. Bu güç genellikle Arduino karının gücüden az ise (Örn:/ LED ) direkt direnç kullanarak karta bağlanabilmektedir. Fakat donanım motor gibi güçlü bir yapı ise bunun çalışması için gerekli gücü sağlayan bir ek yapıya ihtiyaç duyulur. Arduinolara takılan bu harici kartların tümüne SHIELD adı verilir. Arduino ların her pini 5V, 40mA çıkış vermektedir. Bu da karta bağlayacağımız donanımları sınırlamaktadır. 5V 40mA den fazla enerji çeken her aygıt için ya sürücü devresi hazırlamanız gerekmekte yada bu hazır kartların sizin projenize en uygun olan SHIELD i seçip Arduino nuza takmanız gerekmektedir. Piyasada DC, Step ve Servo motorlar için farklı modellerde ve farklı güçlerde kat mevcuttur. SHIELD alırken kullanacağımız motor sayısı kadar kanal sayısına sahip olup olmadığına dikkat ediniz. 11
LM35 Ve 16*2 LCD Display İle Sıcaklık Ölçümü Bu deneyde en sık yapılan uygulamalardan biri olan LM35 sıcaklık sensörü ile ortam sıcaklığını ölçeceğiz. Fakat bu sefer diğer uygulamalardan farklı olarak okuduğumuz değeri seri port ekranı yerine 16*2 boyutundaki LCD ekrana yazdıracağız. Öncelikle bu uygulamada kullanacağımız ekipmanları yakından tanıyalım. Projede kullandığımız LCD ekran, 2 satır 16 sütuna sahiptir. Yeşil veya mavi renklerde olabilmektedir. Bu LCD modüllerinin Shield leride mevcuttur. Fakat henüz başlangıç seviyesinde olduğumuz içi ekranı jumper kablo kullanarak sıfırdan hazırlayacağız. LM35 sıcaklık sensörü, -50 ile +150 santigrat dereceler arasında ölçüm yapabilmektedir. +2 ile +150 dereceler arasında sensör her sıcaklık artışında 10mV gerilim üretmektedir. Bu da oda sıcaklığında ölçüm yapmamıza olanak sağlamaktadır. Sensörün Vc bacağına 4V ile 30V arasında gerilim verilebilmektedir. Fakat projelerimizde genellikle 5V gerilim ile besleyeceğiz. Projemiz için önce breadboard üzerine LCD ve LM35 kurulumunu Arduino kart ile yapıyoruz. *Bu proje Fritzing.org sitesinden alınmıştır. LCD nin bağlanışı konusunda sorun yaşarsanız siteden devre şemasını daha detaylı inceleyebilirsiniz. 12
Devre şemamız; LCD ekranı 2,3,4,5,11,12 nolu dijital pinlere bağladıktan sonra LM35 sensörümüzü de A0 nolu analog pine bağlıyoruz. Ardından A0 pininden aldığımız veriyi işleyerek LCD display üzerinden kullanıcıya gösteriyoruz. 13
OKULU BİTİRECEKSİN YA SONRA? İletişim Umut KUTLU (Yönetim Kurulu Başkanı) ktl.umut@gmail.com Fırat Üniversitesi Mühendislik kampusü, Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği Binası 3. Kat Fırat IEEE Öğrenci Kulübü Odası Emre ULUŞAN (RAS Koordinatör) emre.ulusan@hotmail.com firatieee.com firatieee@gmail.com theulusan@gmail.com /firatieee /firatieee /ieeefirat