Erzurum Teknik Üniversitesi RobETÜ Kulübü Robot Eğitimleri ARDUİNO EĞİTİMLERİ I Arş. Gör. Nurullah Gülmüş 29.11.2016
İÇERİK Arduino Nedir? Arduino IDE Yazılımı Arduino Donanım Yapısı Elektronik Bilgisi Arduino Programlama Yapısı
ARDUİNO NEDİR? Arduino, çok çeşitli uygulamalar için tasarlanmış, tekrar tekrar programlanabilen ve açık kaynak (open-source) yazılımlarla desteklenen bir fiziksel programlama (donanım + yazılım) platformudur. Arduino uygulamalarındaki genel amaç, bu platform ile kurulan bir sistemin giriş sinyalini (input), mikrodenetleyicideki yazılımla değerlendirerek bir çıkış sinyali (output) oluşturmaktır.
Arduino IDE Yazılımı Arduino IDE (Integrated Development Environment / Bütünleşik Geliştirme Ortamı), programcının bilgisayar ortamında oluşturacağı programı yazmasına, programda değişiklik yapmasına, programı derlemesine ve donanıma yüklemesine yardımcı olur.
ARDUİNO DONANIM YAPISI Arduino Mega2560 5 V giriş gerilimiyle çalışır. Bilgisayar USB bağlantısı, priz ya da harici bir DC kaynakla gerilim beslemesi yapılabilir. 54 adet dijital (14 adet PWM için), 16 adet analog giriş/çıkış ucu, 4 adet de seri haberleşme bağlantı ucu vardır 16 MHz kristal osilatör devresi bulunur (devre kartı üzerindeki her bir elemanın çalışması için gerekli türde ve sayıda sinyal üretmek için kullanılır). Ayrıca güç besleme ünitesi ve USB seri haberleşme dönüştürücü devresi bulunur.
ARDUİNO GİRİŞ/ÇIKIŞ UÇLARI 54 adet dijital uç, önceden belirlenmiş fonksiyonlarla giriş ya da çıkış olarak kullanılabilir. Her bir uç 5V ile çalışır ve maksimum 40 ma üretebilir. Özel amaçlı olarak kullanılan bazı dijital giriş çıkış uçları şunlardır:
ARDUİNO GİRİŞ/ÇIKIŞ UÇLARI RX TX Uçları Seri veri haberleşmesi için kullanılır. RX (Receive X), veri alan uç, TX (Transmit X) ise veriyi ileten uç olarak adlandırılır. Bu uçlar kart üzerinde sırasyıla 0. ve 1. pin (RX0 - TX0); 19. ve 18. pin (RX1 - TX1); 17. ve 16. pin (RX2 - TX2); 15. ve 14. pin (RX3 - TX3) üzerinde bulunmaktadır. Aynı zamanda USB-seri haberleşme dönüştürücü devresinde karşılık gelen uçlara da bağlıdır.
ARDUİNO GİRİŞ/ÇIKIŞ UÇLARI Harici Kesme (Interrupt) Kesme (interrupt), mikroişlemcinin, sistemin girişinde anden oluşabilecek bir değişiklikte vermesi gereken tepkiyi belirleyen program kesitidir. Kesme 0-5 uçları sırasıyla 2,3,21,20,19 ve 18, uçlarda bulunmaktadır.
ARDUİNO GİRİŞ/ÇIKIŞ UÇLARI PWM Uçları PWM (Pulse Width Modulation - Darbe Genişlik Modülasyonu) sinyali, periyodik bir kare dalga sinyalin bir periyot içerisinde 1 ve 0 olma sürelerinin (duty cycle görev döngüsü / doluluk oranı) değiştirilmesi tekniğiyle elde edilen bir sinyaldir. PWM uçları devre üzerinde 0 13 pinleri üzerinde bulunmaktadır.
ARDUİNO GİRİŞ/ÇIKIŞ UÇLARI Diğer Dijital Giriş/Çıkış Uçları Devre kartı üzerinde ayrıca, devrenin bir ya da daha fazla çevresel aygıtla en kısa yoldan seri haberleşmesini sağlayan SPI uçları, 13 numaralı pine bağlı bir LED ucu ve bir den fazla çevresel aygıtın (LCD ekran, hafıza kartı, sensörler vb.) devre kartına tek bir kanaldan paralel olarak bağlanmasını sağlayan bir de I2C uçları bulunmaktadır.
ARDUİNO GİRİŞ/ÇIKIŞ UÇLARI Analog Giriş/Çıkış Uçları Mega 2560'ın her biri 10 bitlik (2^10 = 1024 adet veri) kapasitesinde olan 16 adet analog giriş/çıkış ucu vardır. Bu pinler genellikle dış ortamdaki sensör bilgisini ölçmek için kullanılır. Her bir uç girişindeki 0 5V arası gerilim değerini ölçer (her bir bit 5/1024 ~= 4,88 mv değerine karşılık gelir).
ELEKTRONİK BİLGİSİ Devre Bağlantı Şemaları LED Bağlantısı
ELEKTRONİK BİLGİSİ Devre Bağlantı Şemaları Buton Bağlantısı
ELEKTRONİK BİLGİSİ Devre Bağlantı Şemaları Potansiyometre Bağlantısı
ARDUİNO PROGRAMLAMA YAPISI Program Ana Yapısı C tabanlıdır ve birçok özelliğiyle bu programlama diline benzerlik gösterir. Arduino'nun programlama dili oldukça basit ve kullanımı kolaydır. Program yapısı, temel olarak setup ve loop adında iki zorunlu kısımdan oluşur. Bu iki fonsiyon olmadan Arduino IDE ile programlama yapılamaz.
ARDUİNO PROGRAMLAMA YAPISI void setup() { //Kodu buraya yazınız } void loop() { //Kodu buraya yazınız }
ARDUİNO PROGRAMLAMA YAPISI setup() fonksiyonu Döngüye girecek program için gerekli hazırlıkların yapıldığı kısımdır ve program yürütüldüğü süre boyunca bir defa çalıştırılır. Uç ataması, seri haberleşmenin başlatılması veya kütüphanelerin kullanılmaya başlanması bu kısımda gerçekleştirilir.
ARDUİNO PROGRAMLAMA YAPISI setup() fonksiyonu Bu fonksiyon içinde hiçbirşey yazılmasa bile programda bulundurulması zorunludur. Örneğin aşağıdaki satırlar 13 numaralı pini çıkış olarak belirler ve program çalıştırıldığı andan itibaren bir defa çalıştırılır. } void setup() { pinmode(13, OUTPUT); //13 numaralı pini çıkış olarak atar
ARDUİNO PROGRAMLAMA YAPISI loop() fonksiyonu Program işlevinin asıl yürütüldüğü kısımdır ve setup() fonksiyonunu aksine bir döngü içerisinde sürekli çalıştırılır. Örneğin analog giriş olarak atanmış bir uçtaki sinyal girişinin beklenmesi ve okunması veya dijital çıkış olarak atanmış bir uçta, okunan analog sinyale göre bir çıkış oluşturulması loop() fonksiyonu içinde gerçekleştirilir.
ARDUİNO PROGRAMLAMA YAPISI loop() fonksiyonu Aşağıdaki program satırları bir önceki örnekte atanan çıkış ucuna 1 (HIGH) ve 0 (LOW) değerlerini yazdırır. int ledpini = 13; void loop() { } digitalwrite(ledpini, HIGH); // LED'i yakar delay(1000); // 1 sn bekler digitalwrite(ledpini, HIGH); // LED'i söndürür delay(1000); // 1 sn bekler
ARDUİNO PROGRAMLAMA YAPISI Bazı Fonksiyonlar Dijital G/Ç Fonksiyonları Dijital çıkışları atama, okuma ve çıkışlara yazma işlevlerinin yapıldığı Arduino fonksiyonlarıdır. Bazı fonksiyonlar şunlardır; pinmode() fonksiyonu: Parantez içinde belirtilen pini, giriş (INPUT), pull-up dirençli giriş (INPUT_PULLUP) ya da çıkış (OUTPUT) olarak atamak için kullanılır. pinmode(pin, durum);
ARDUİNO PROGRAMLAMA YAPISI Bazı Fonksiyonlar digitalread() fonksiyonu: Parantez içinde belirtilen pinin değerini okur. HIGH ya da LOW sonucunu verir. digitalread(pin); digitalwrite() fonksiyonu: Parantez içinde belirtilen dijital pine HIGH ya da LOW değerini yazar. digitalwrite(pin, deger);
ARDUİNO PROGRAMLAMA YAPISI Bazı Fonksiyonlar Analog G/Ç Fonksiyonları Analog pinlerden değer okuma, pinlere değer yazma ya da referans analog değer oluşturma işlevlerinin yapıldığı Arduino fonksiyonlarıdır. Bazı fonksiyonlar şunlardır; analogread() fonksiyonu: Parantez içinde belirtilen pindeki gerilimi okur. analogread(pin);
ARDUİNO PROGRAMLAMA YAPISI Bazı Fonksiyonlar NOT: Mega2560'da 16 adet analog giriş ve bir adet 10 bitlik ADC bulunur. ADC sayesinde 0-5V arası gerilim değerleri ikilik değerlere dönüştürülür. ADC 10 bitlik olduğu için değer aralığı 0 ile 2^10 1 arasındadır. İki değer arası 4,88 mv dir. ADC hesaplaması şu şekildedir: Dijital_deger ~= (Analog/5)*1023
ARDUİNO PROGRAMLAMA YAPISI - İşlemler
ARDUİNO PROGRAMLAMA YAPISI - İşlemler
ARDUİNO PROGRAMLAMA YAPISI - İşlemler
ARDUİNO PROGRAMLAMA YAPISI - İşlemler
ARDUİNO PROGRAMLAMA YAPISI - İşlemler
KONTROL YAPILARI Arduino'da kullanılan bazı kontrol yapıları şu şekildedir; if (koşul) Yapısı Bu yapı, programcılıkta sıklıkla kullanılır. Parantez içindeki ifadenin doğruluğunu kontrol eder ve bu ifadenin doğruluğuna göre sonuç oluşturur. Kullanımı aşağıdaki gibidir; if(kosul ifadesi) { } //ifadenin dogru olmasi durumunda calistirilacak kisim
KONTROL YAPILARI İf yapısı birden fazla koşul ifadeleriyle birlikte de kullanılır; if(birinci kosul ifadesi) { //birinci ifadenin dogru olma durumu } else if(ikinci kosul ifadesi) { //ikinci ifadenin dogru olma durumu } Else{ } //yukaridaki iki ifadenin de dogru olmadigi tum durumlar
KONTROL YAPILARI for Döngüsü Programcılıkta sıklıkla kullanılan diğer bir yapıdır. for döngüsü belli bir algoritmayı (iki küme parantezi ({}) içinde kalan kod bloğu) parantez içinde belirtilen ifadeye göre tekrar eden bir döngü türüdür. Kullanımı şöyledir; for (sayac_baslangic_degeri; kosul ifadesi; artma/azalma_miktari) { //kod blogu }
KONTROL YAPILARI Örneğin aşağıdaki programda for döngüsü kullanılarak 10 numaralı PWM girişine bağlı bir LED'in parklaklığını kademeli olarak değiştirilmektedir. int PWMpin = 10; void setup() { //bu ornek icin setup fonksiyonuna gerek yoktur } void loop() { for (int i=0; i <= 255; i++){ analogwrite(pwmpin, i); delay(10); } }
KONTROL YAPILARI while Döngüsü Yaygın olarak kullanılan diğer bir döngü türüdür. Parantez içindeki parantez içinde belirlenen koşullu ifadenin doğruluğu müddetince kodlanan algoritma çalışmaya devam eder. Kullanımı şöyledir; while (kosul_ifadesi) { //kosul_ifadesini dogrulugu aninda calistiracak kisim }