arduino İle programlama - ki??isel sayfalarkisi.deu.edu.tr/asli.ergun/arduinoileprogramlama.pdf ·...

125
Arduino İle Programlama Aslı Ergün

Upload: truongcong

Post on 20-Jul-2018

260 views

Category:

Documents


2 download

TRANSCRIPT

Arduino İle Programlama

Aslı Ergün

Bölüm 1: MİKRODENETLEYİCİ VE ELEMANLARI

Konu 1.1: MİKRODENETLEYİCİ NEDİR?

• Genel olarak mikrodenetleyici giriş portlarından aldığı veriyi kendisine verilen komutlar dahilinde işleyerek çıkış portlarına ileten, bir çok defa programlanabilen bir mikroişlemcidir. Mikrodenetleyiciler çalışmak için kendilerine yüklenen program haricinde bilgisayarlar gibi bir işletim sistemine ihtiyaç duymazlar.

• Günümüzde çok çeşitli mikrodenetleyici marka ve modelleri mevcuttur, fakat bu dersin konusu Arduino mikrodenetleyicilerin özellikleri ve programlamasını kapsamaktadır.

Bölüm 1: MİKRODENETLEYİCİ VE

ELEMANLARI

Konu 1.1.1: ARDUINO NEDİR?

• Arduino, kullanımı kolay, açık kaynak kodlu yazılım ve donanıma sahip bir mikrodenetleyici prototipleme platformudur. Açık kaynak ifadesi, yazılımın kaynak koduna ve donanım bilgilerine erişiminin serbest olması ve isteğe göre değiştirilebilmesi anlamındadır.

• Baskılı devresi, şematik tasarımı, PC üzerinde çalışan derleyicisi, kütüphaneleri ve tüm detayları ile internet ortamında paylaşılmaktadır.

• Arduino platformunda Atmega ailesinden mikrodenetleyiciler kullanılır.

Bölüm 1: MİKRODENETLEYİCİ VE ELEMANLARI

Konu 1.1.1: ARDUINO NEDİR?

• Arduino platformu, alt seviye mikroişlemci bilgisi gerektirmemesi ve zengin bir kütüphane desteği olması sebebiyle kolaylık sağlar.

• http://arduino.cc/ Arduino platformunun resmi web sitesidir.

• Arduino programlamada C/C++/ Java tabanlı bir dil kullanmaktadır.

• Baş tasarımcılarının (Massimo Banzi ve David Cuartielles) İtalyan olmaları nedeniyle cihazın adı da doğal olarak İtalyancadan seçilmiş. Kelime “Sıkı arkadaş” anlamına gelen bir erkek ismidir. Wikipedia kaynağına göre Arduino'ya ilham veren Wiring platformu, Ivrea Tasarım Enstitüsü'nde Hernando Barragan tarafından geliştrilmiş. Ivrea'lı Arduin ise bu enstitünün bulunduğu kasabaya ait tarihi bir karakterdir.

Bölüm 1: MİKRODENETLEYİCİ VE ELEMANLARI

Konu 1.2: ARDUINO İLE NE YAPABİLİRSİNİZ?

Giyilebilir Uygulamalar(Bisikletçinin arkasındaki

dönüş sinyalleri.

Robotik Uygulamalar

Medikal Uygulamalar(Kalp sinyali izleme)

Askeri Uygulamalar(Mini drone’lar)

Ev Güvenliği ve Otomasyonu

Uygulamaları

Tarımsal Uygulamalar

Mobil Uygulamalar

RFID Uygulamalar(Kimlik Giriş Sistemleri)

3 Boyutlu Yazıcı

Uygulamaları

Bölüm 1: MİKRODENETLEYİCİ VE ELEMANLARI

Konu 1.3: NEDEN ARDUINO KULLANMALIYIZ?

• Hem donanımı, hem de yazılımı açıkkaynaklıdır, bu sebeple ucuzdur veerişilebilirdir, deneysel amaçlı yapılacakişler için uygun fiyatlı geliştirme ortamısunar.

• Zengin kütüphane desteği sayesinde ileriteknolojileri Arduino Boarda kolaycaentegre edebilirsiniz. USB ve Bluetooth gibi evrensel iletişim haberleşme sistemlerini kullanabilir.

• İşlemci ile veri giriş çıkışları kolaylıkla sağlanabilir. Bu ise, serigrafi ile kart yapma ihtiyacını ortadan kaldırmıştır.

• Alt seviye mikroişlemci bilgisi gerektirmez.

Bölüm 1: MİKRODENETLEYİCİ VE ELEMANLARI

Konu 1.4: ÇEŞİTLİ ARDUINO KARTLARI

Arduino DiecimilaArduino Duemilanove

Arduino Mega

Arduino Nano

Arduino Uno

Arduino LilyPad

Revize edilen bu kartların özellikleri Arduino https://www.arduino.cc/en/Main/Boards ve

http://arduinoturkiye.com/kategori/arduino-cesitleri/ websayfasında verilmiştir. Her ne kadar Arduino kartlar çok çeşitli

görünse de, yapısal mantığı ve programlama yaklaşımları aynıdır..

Arduino Mini

Arduino Primo

Bölüm 1: MİKRODENETLEYİCİ VE ELEMANLARI Konu 1.4: ÇEŞİTLİ ARDUINO KARTLARI

Arduino Uno

• 14 adet dijital giriş / çıkış, bu çıkışlardan 6 tanesi PWM çıkışı olarak kullanılır. Bunun yanı sıra, 6 adet analog giriş vardır.

• ATMega328 işlemcisi kullanır. USB-seri iletişim dönüştürücü olarak FTDI entegre kullanmaz, onun yerine dönüştürme işini ATmega8U2 yapar. Bu durum, daha hızlı aktarım olanak sağlar.

• FTDI chipi kullanılmamış olmasının verdiği başka bir özellik de Arduino Uno”yuklavye, mouse, joystick vs. olarak tanıtabilme ve sistemde bu şekilde kullanabilme kolaylığıdır.

• Çok popüler ve uygun fiyatlı olmasından dolayı Arduino Uno ile yapılmış proje örnekleri çokça bulunabilir.

Arduino Uno

Bölüm 1: MİKRODENETLEYİCİ VE ELEMANLARI

Konu 1.4: ÇEŞİTLİ ARDUINO KARTLARIArduino Duemilanove

• ATMega328 işlemcisini kullanır. Donanım özellikleri olarak Arduino Uno”nun neredeyse aynısıdır, Uno”dan farkı USB-seri iletişim dönüştürücü olarak FTDI entegresinin olmasıdır.

• Duemilanove”da yeni bir özellik olarak otomatik güç algılama sistemi bulunur. Bu sistem gücü USB”den veya adaptör girişinden kendisi seçer.

Arduino Duemilanove

Bölüm 1: MİKRODENETLEYİCİ VE ELEMANLARI

Konu 1.4: ÇEŞİTLİ ARDUINO KARTLARIArduino Diecimila

• Temel Arduino USB kartının bir önceki versiyonudur.

• Diğerlerine göre daha yavaş, ATmega168 işlemcisini kullanır.

• 14 adet dijital giriş / çıkış, bu çıkışlardan 6 tanesi PWM çıkışı olarak kullanılır. Bunun yanı sıra, 6 adet analog giriş vardır

Arduino Diecimila

Bölüm 1: MİKRODENETLEYİCİ VE ELEMANLARI

Konu 1.4: ÇEŞİTLİ ARDUINO KARTLARIArduino Mega

• Atmega2560 işlemcisini kullanır.

• Daha fazla dijital çıkışı (54 adet) ve bunlar içinde 14 PWM çıkışı vardır.

• USB-seri iletişim dönüştürücü olarak ATmega8U2 veya ATmega16U2 kullanır. Bu daha hızlı aktarıma olanak sağlar.

• Bellek olarak daha yüksektir. ATmega2560 “ya yükseltilmesi sayesinde 256k flash memory”ye yükselmiştir.

Arduino Mega

Bölüm 1: MİKRODENETLEYİCİ VE ELEMANLARI

Konu 1.4: ÇEŞİTLİ ARDUINO KARTLARIArduino LilyPad

• Giyilebilir uygulamalar için geliştirilmiş. Kumaş üzerine dikilebilir.

• Aynı zamanda yıkanabilir.

• Kendine has aksesuar sınıfı vardır. Yani sadece LilyPad için tasarlanmış Arduino eklentileri, switchleri, kabloları vardır.

• Dahili USB girişi var.

Arduino LilyPad

Bölüm 1: MİKRODENETLEYİCİ VE ELEMANLARI

Konu 1.4: ÇEŞİTLİ ARDUINO KARTLARIArduino Nano

• Breadboard üzerinde kullanılmak üzere tasarlanmış bir kompakt bir karttır. DC güç girişi yoktur ve USB Mini-B kablosuyla bilgisayara bağlanır.

• Arduino Nano, Atmega328 işlemcisi kullanır.

• 14 adet dijital giriş / çıkış, bu çıkışlardan 6 tanesi PWM çıkışı olarak kullanılır. Bunun yanı sıra, 8 adet analog giriş vardır.

• Boyutları 1.8cm x 4.3cm olması sebebiyle küçük boyutlu prototiplemede kullanılır.

Arduino Nano

Bölüm 1: MİKRODENETLEYİCİ VE ELEMANLARI

Konu 1.4: ÇEŞİTLİ ARDUINO KARTLARIArduino Mini

• Sadece 1.8cm x 3.3cm boyutlarındaen küçük Arduino kartıdır. Kullanım boyutunun küçük olması istenen yerlerde tercih edilir.

• Dahili USB girişi yok, bu yüzden bilgisayara harici USB-TTL arabirimi -Mini USB Adaptör ile bağlanabilir.

• ATmega328 çipi kullanır.

• Düşük voltajla çalıştığından, özellikle pil ile çalışması gereken uygulamalarda düşük güç tüketimi sayesinde tercih edilir.

Arduino Mini

Bölüm 1: MİKRODENETLEYİCİ VE ELEMANLARI

Konu 1.4: ÇEŞİTLİ ARDUINO KARTLARIArduino Primo

• Nordic nRF52 işlemcisi kullanır.

• Espressif ESP8266 for WiFi modülü içerir.

• İçerisinde bluetooth modülü içerir.

• Az enerji harcadığından düşük güçtüketimi isteyen uygulamalardakullanılır.

Arduino Primo

Bölüm 1: MİKRODENETLEYİCİ VE ELEMANLARI

Konu 1.5a: ARDUINO UNO DONANIM YAPISI

• 1 : USB jakı• 2 : Power jakı (7-12 V DC)• 3 : Mikrodenetleyici ATmega328• 4 : Haberleşme çipi• 5 : 16 MHz kristal• 6 : Reset butonu• 7 : Power ledi• 8 : TX / NX ledleri• 9 : Led• 10 : Power pinleri• 11 : Analog girişleri• 12 : TX / RX pinleri• 13 : Dijital giriş / çıkış pinleri (yanında ~ işareti

olan pinler PWM çıkışı olarak kullanılabilir.)• 14 : Ground ve AREF pinleri• 15 : ATmega328 için ICSP• 16 : USB arayüzü için ICSP

Yukarıdaki şekilde görülen ATmega328 mikrodenetleyicisi kullanan Arduino Uno Kartı çeşididir. 14 dijital giriş/çıkış pini bulunur, bunlardan 6’sı PWM çıkışı olarak kullanılabilir ve dijital dalga genişliği ayarlanarak analog değerler elde edilebilir. 6 analog giriş pinine sahiptir. 16 MHz kristal osilatörü, USB bağlantısı, 2.1mm güç girişi, ICSP başlığı ve reset butonu vardır. Mikroişlemciyi destekleyecek herşeye sahiptir. Çalıştırmak için DC 7~12V güç kaynağına bağlamak yeterlidir

İşlemci Özellikleri:Flash: 32KB (0.5KB bootloader için kullanılır)SRAM: 2KBEEPROM: 1KBSaat frekansı: 16MHz

Bölüm 1: MİKRODENETLEYİCİ VE ELEMANLARI

Konu 1.5b: ARDUINO MEGA DONANIM YAPISI

Bölüm 1: ARDUINO PROJE GELİŞTİRME ADIMLARI

Konu 1.6: ARDUINO GÜÇ BESLEME KAYNAKLARI

Arduino UNO’nun pille çalıştırılması

Arduino harici besleme kaynaklarıyla da çalıştırılabilir. Bunun için Arduino üzerinde birbirine bağlı iki farklı giriş bulunmaktadır.

Bu girişlerden ilki, yukarıdaki şekilde 2 numara ile gösterilen jak girişidir. Bu girişe 7 ile 12 Volt arasındaki gerilimler

uygulanabilir.

Arduino üzerinde bulunan 'Vin' pini, Arduino'nun jak girişine bağlı bir pindir. Bu pine uygulanan gerilim, Arduino'ya ulaşmadan

önce bu pine bağlı regülatör yardımıyla Arduino için uygun gerilime düşürülür. 'Vin' girişine 7 ile 12 Volt arasındaki gerilimler

uygulanmalıdır. Pilin artı (+) ucu 'Vin' pinine bağlandıktan sonra, pilin eksi (-) ucu Arduino'nun 'GND' yani toprak ucuna

bağlanmalıdır. 'Vin' pini önceki slayttaki şekilde 3 numara ile gösterilmiştir.

Eğer bu girişlere 12 Volt üzerinde bir gerilim uygulanırsa Arduino zarar görebilir.

Arduino UNO’nun 5 Volt pininden beslenmesi

Arduino üzerinde bulunan 5 Volt pini de Arduino'yu beslemek için kullanılabilir. Bu pine 5 Volt geriliminden fazla bir gerilim

uygulanması, Arduino'nun bozulmasına neden olabilir. 5 Volt gerilim veren bir kaynağın artı (+) ucunu Arduino'nun 5 Volt, eksi

(-) ucunu da Arduino'nun 'GND' pinine bağlanabilir.

Bu pin önceki slattaki şekilde 4 numara olarak gösterilmiştir.

Bölüm 1: MİKRODENETLEYİCİ VE ELEMANLARI

Konu 1.6: SHIELDS (Katman veya Zırh)

• Shield (Zırh) : Arduino kartı üzerindeki devre eklentileridir. Bu eklentiler ile kartın kapasitesi veya işlevselliğini arttırılabilirsiniz.

• Çok sayıda ucuz maliyetli katmanlar ve bunların kütüphaneleri mevcuttur.

http://arduino.cc/en/Main/ArduinoShields

http://shieldlist.org

Motor kontrolü için kullanılan Arduino Motor Shield R3 un ön ve arka görünüşü.

Bölüm 1: MİKRODENETLEYİCİ VE ELEMANLARI

Konu 1.4: ÇEŞİTLİ ARDUINO KARTLARI

Arduino katmanlarının üst üste montajlanması

-Arduino mikrodenetleyicilerin işlevselliğini

arttıran giriş ve çıkış portlarının gelen bilgiyi

işleme kapasitesini arttıran modüller

mikrodenetleyici kartının üzerine katman olarak

ilgili bağlantı jaklarından bağlanarak eklenebilir.

Böylelikle kompakt yapıda ve hem işlevselliği

hem de kapasitesi arttırılmış modüller elde

edilebilir.

-Örneğin Arduino mikrodenetleyici kartı

üzerindeki dijital çıkışların akım kapasiteleri

genellikle bir servo veya step motor sürmeye

yetmez dolayısıyla bir sürücü katmanı

mikrodenetleyiciye eklenebilir.

Bölüm 1: MİKRODENETLEYİCİ VE ELEMANLARI

Konu 1.7: ARDUINO DONANIMI NASIL TEMİN EDİLİR?

Aşağıda Arduino donanımlarını satın alabileceğiniz sitelerin listesi verilmiştir.

http://www.robotistan.com/

http://www.robotshop.com/arduino-2.html

http://direnc.net

http://arduino.cc/en/Main/Buy

http://dx.com/s/Arduino

http://www.ebay.com

http://tr.aliexpress.com/promotion/electronic_arduino-uno-promotion.html

http://gittigidiyor.com

http://www.robitshop.com/

Bölüm 1: MİKRODENETLEYİCİ VE ELEMANLARI

Konu 1.8: ARDUINO REFERANS KAYNAKLARI

http://blog.robomore.com/?cat=6&paged=2

https://labitat.dk/wiki/Arduino_beginners_workshop

http://coopermaa2nd.blogspot.com/

http://arduino.cc/en/Tutorial/HomePage

http://shieldlist.org/

Fritzing- Çizim programı: Fritzing- Çizim programı: http://fritzing.org/download/

http://www.123dapp.com/circuits

Bölüm 2: ARDUINO PROJE GELİŞTİRME ADIMLARI

Konu 2.2: ARDUINO PROGRAMININ

KURULMASI(WINDOWS)

Arduino yazılımı ile Arduino boardınızı programlamak için, Windows, Mac ve

Linux işletim sistemleri kullanılabilir. Yükleme işlemi, her üç platform için de farklıdır.

Yazılımı yüklemek için bir takım ayarlamalar yapmak gereklidir. Herhangi bir yükleyici

(setup) programı yoktur. Arduino programı klasör içinde sıkıştırılmış durumdadır.

Kullanıcı herhangi bir yere Arduino klasörü oluşturabilir. Bu dosyaları bir

sıkıştırma programı ile istenilen yere açabilir.

Ayrı bir adımda, Arduino UNO board için gerekli olan USB sürücülerini

yüklemeniz gerekir. Bu adıma Arduino.cc web sitesini ziyaret ederek başlayın. Arduino

UNO boardın USB sürücüsü için bu yazıyı okuduğunuz zaman, en son sürümünü

yükleyebilirsiniz.

https://www.arduino.cc/en/Main/Software

Yukarıdaki linkten, Windows için ZIP dosyasını bilgisayarınıza indirin. Yazılım

yalnızca Windows XP den Windows 10‘ a kadar bütün Windows yazılımlarında

kullanılabilir.

Bölüm 2: ARDUINO PROJE GELİŞTİRME ADIMLARI

Konu 2.2: ARDUINO PROGRAMININ

KURULMASI(WINDOWS)

Zip dosyası indirildiğinde,

dosya üzerinde sağ tıklayınız. Açılan

menüden 'Extract All...' komutunu

çalıştırınız.

Bölüm 2: ARDUINO PROJE GELİŞTİRME ADIMLARI

Konu 2.2: ARDUINO PROGRAMININ

KURULMASI(WINDOWS)

Açılmış olan klasörü, istediğiniz yere taşıyabilirsiniz. Ancak; şu

anda masaüstünde tutun. Arduino klasörü içinde, hem programın kendisi,

hem de Arduino Board için sürücüler(drivers) vardır. Bu sürücüler(drivers)

Arduino kartınızın, USB kablosu ile bilgisayarınıza bağlanmasını sağlar.

Arduino yazılımını çalıştırmadan önce, USB sürücülerini yüklemeniz

gereklidir.

USB kablosunun ucunu Arduino kartınıza, diğer ucunu

bilgisayarınızdaki bir USB soketine takın. LED güç ışığı yanar ve

Windows işletim sisteminde, 'Yeni Donanım Bulundu' mesajı ekranda

görünür. Bu mesajı iptal tuşuna basarak yok sayınız. Windows’ un

sürücüleri otomatik olarak sürücüleri yüklemesini engelleyiniz. Sürücüler

manuel olarak yüklenecektir.

USB sürücüleri yükleyerek en güvenilir yöntem Aygıt Yöneticisi

kullanmaktır. Aygıt yöneticisine Windows’ un sürümüne bağlı olarak farklı

şekillerde erişilir. Windows 7’de , ilk önce Denetim Masası'nı açın, sonra

simgeleri görüntüleyin ve listede Aygıt Yöneticisini bulunuz.

'Diğer Aygıtlar' bölümünün altında, küçük sarı uyarı üçgeni ile

'bilinmeyen aygıt' isimli bir simge göreceksiniz. Bu; sizin Arduino

kartınızdır.

Bölüm 2: ARDUINO PROJE GELİŞTİRME ADIMLARI

Konu 2.2: ARDUINO PROGRAMININ

KURULMASI(WINDOWS)

Uptade Driver Software (...

Sürücü Yazılımını

Güncelleştir) sol tıklayın ve

üst menü seçeneği seçin.

Daha sonra ya

'güncelleştirilmiş sürücü

yazılımı için otomatik arama'

veya 'Sürücü yazılımı için

bilgisayarıma gözat' istenir.

Sürücüler \ arduino-

1.0.2-windows \ arduino1.0.2

içindedir.

Bölüm 2: ARDUINO PROJE GELİŞTİRME ADIMLARI

Konu 2.2: ARDUINO PROGRAMININ

KURULMASI(WINDOWS)

'İleri' tıklayın ve bir güvenlik uyarısı

alabilirsiniz. Eğer bu güvenlik mesajı çıkarsa,

yazılım yüklenmesine izin verin. Yazılım

kurulduktan sonra, bir onay mesajı alırsınız.

Bölüm 2: ARDUINO PROJE GELİŞTİRME ADIMLARI

Konu 2.2: ARDUINO PROGRAMININ

KURULMASI(WINDOWS)

Artık Arduino UNO board’ı kullanmak için

hazırsınız.

Bölüm 2: ARDUINO PROJE GELİŞTİRME ADIMLARI

Konu 2.3: ARDUINO PROGRAMININ KURULMASI(MAC ve

LINUX)

Arduino.cc web sitesini ziyaret ediniz ve işletim sisteminiz için uygun IDE indirerek başlayın. Mart

2016 itibariyle v1.6.8 olarak bulabilirsiniz. Bu yazıyı okuduğunuz zaman bu versiyon artık yoksa yeni

versiyonu deneyebilirsiniz.

Yükleme yazılımını masaüstüne veya herhangi bir yere kaydediniz.

MAC Arduino yazılımı yüklemek, PC'ye yüklemekten çok daha

kolaydır. Daha önce olduğu gibi, ilk adım ZIP dosyasını indirmektir. Yukarıda

MAC zip dosyası görülüyor

Bölüm 2: ARDUINO PROJE GELİŞTİRME ADIMLARI

Konu 2.3: ARDUINO PROGRAMININ KURULMASI(MAC ve

LINUX)

Bir kere indirildikten sonra, zip dosyasını

çift tıklayın. Bu durumda 'Arduino.app'

adında tek bir dosya oluşacaktır. Bu

dosyayı Uygulamalar Klasörünün içine

sürükleyin. Bu sizin Arduino

uygulamanızdır.

Bölüm 2: ARDUINO PROJE GELİŞTİRME ADIMLARI

Konu 2.3: ARDUINO PROGRAMININ KURULMASI(MAC ve

LINUX)

Bölüm 2: ARDUINO PROJE GELİŞTİRME ADIMLARI

Konu 2.4: ARDUINO KARTININ TESTİ

Arduino kartınızı, USB kablosu ile bilgisayarınızın USB

girişine takın ve 'Arduino Kart Tipi' ve 'Seri Portun' doğru

ayarlanmış olup olmadığını kontrol edin. Eğer sorun çıkarsa, 2.

Dersin ilk konusuna geri dönmeniz gerekebilir.

Arduino IDE penceresinin alt kısmındaki pano, sizin için

geçerli ayarları gösterir.

Bilgisayarınız ile Arduino kartınız iletişim kurduğu anda, sağ alt köşedeki Arduino Uno on COM4 ifadesine

dikkat ediniz.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİ

Konu: GİRİŞ

• Arduino Programlama dili basitleştirilmiş

C++ veya C kullanır. Burada genel olarak tüm

Arduino komutları ve operatörleri ele

alınmayacaktır. Daha ziyade yeni başlayanlar

için en çok kullanılan fonksiyonlar ve

operatörler ele alınacaktır.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.1: C PROGRAMLAMA DİLİNİN GENEL YAPISI

• Programdaki açıklamalar // veya /* */ işaretleri kullanılarak belirtilir.

• Program başında sistem tanımlı komutların bulunduğu kütüphaneler ve kullanıcıların sonradan tanımlayabileceği komutların bulunduğu kütüphaneler #include komutuyla eklenir.

• Tüm komutlar ; ile biter. Komutlar bloklar içine alınmak istenirse {} içene yazılırlar.

• Ana program içinden çağrılacak fonksiyonlar yazılabilir. Bu fonksiyonların fonksiyon prototip tanımları ana programdan önce, fonksiyonların kendisi ana programdan sonra yazılır. Fonksiyonlara parametre gönderilecekse () arasına yazılır.

• Programdaki sabit değerler #define ve const tanımlarıyla belirtilir, değişeken değerler ise değişken veri türleri ile belirtilirler.

// Program tanim ve aciklamasi

#include <stdio.h> /* sistem tanımlı kütüphane dosyalari */#include "mystuff.h" /* kullanıcı tanımlı kütüphane dosyalari */#define CONST 2000 /* macro ve sabit tanımları */

int m,n; float x,y; /* global değişken tanımları */

double fn1(double x, int y); /* fonksiyon prototipleri */

int main(argv, char **argc) { /* ana program baslangici */

int i,j; char str[128]; /* lokal değişkenler */const int ci = 123; /* sabit tanımları */

j = 17; /* ana program */for (i=0; i<j; i++) {

.....} ...return 0;

}double fn1(double x, int y) /* kullanıcı tanımlı fonksiyonlar */

{ float u; //program ...return x*u;

}

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.2: Arduino Programlama Taslağı (Sketch)

• Arduino programlarına ‘sketch’ adı verilir.

• Bir Arduino taslağı (programı) genel olarak üç bölümden oluşur:

-Tanımlamalar (defines),

-Kurulum( setup) ve

-Ana program bloğu (loop).

• Tanımlamalar en başta yapılırsa global tanımlamalar, setup veya loop veya kullanıcı tanımlı başkafonksiyon içinde yapılırsa lokal tanımlamalar denir.

• Setup fonksiyonu, program çalışmaya başladığını ilk kısımdır. Bu kısım sadece bir kere okunur ve program esnasında yeniden okunmaz. Bu alanda, pinlerin çalışma modları, seri iletişim başlatılması gibi önemli ve bir kere yapılması yeterli olacak ayarlamalar yapılır.

• Loop fonksiyonu, setup fonksiyonu okunduktan sonra başlar. Buraya yapılmasını istenengörevler yazılır. Loop fonksiyonu, sonsuz döngü şeklindedir, yani buradaki görevler tamamlandığında, program tekrar başa dönerek işlemleri yeniden yapar. Bu döngü, Arduino çalıştığı sürece devam eder.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.3: SABİT TANIMLAMALAR(DEFINES)

Sabit tanımlamalarında kullanılan «define» komutu, bazı değerleri sabitlemek, pin ayarlarını yapabilmek için

kullanılır. #define tanımlamalara örnek verecek olursak; örneğin dijital bir çıkış numarasına isim verebiliriz.

Böylece Her seferinde çıkış numarasını hatırlamak zorunda kalmayız. Bunun haricinde sabit sayılara da

tanımlama yapılabilir. Her tanımlamanın başında # işaretini kullanmalısınız.

#define ledPin 3 // Bu şekilde kullanılırsa derleyici program her ledPin deyimini görünce bunu 3 sayısı ile

eşleştirir.

#define ledPin 3 ; // kullanılırsa hata mesajı alınır. Çünkü define dan sonra ; kullanıldı.

#define ledPin = 3 // Bu da hatalı bir tanımlamadır.

Veya Sabit Tanımlama

const float pi = 3.14; // Dikkat edilirse const tanımlamasından sonra ; kullanılmıştır. Const tan sonra ;

kullanılır.

#define BENIM_LEDIM 8 // Bu da doğru bir tanımlamadır. 8 sayısı ile BENIM_LEDIM deyimi eşleştirilir. Derleyici

BENIM_LEDIM olarak yazılan bütün ifadeleri 8 sayısı olarak algılar.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.4:DEĞİŞKENLER (VARIABLES) ÇEŞİTLERİ

Fonksiyonlar Konusunu işlemeden önce, uygulamalarımızda çok sık kullanacağımız değişkenler

konusundan burada bahsedilecektir.

C dilinde çok önem arzeden değişkenler konusu aynı önemi Arduino ile program yazılımı konusunda da

göstermektedir.

Bir değeri veya karakteri daha sonra tekrardan kullanmak/değiştirmek için hafızada tutabilirsiniz. Bu

değerler değişkenlerde tutulur. Hafızada tutacağınız değerin türüne göre değişken tanımlanması

gerekir.

Aşağıdaki tabloda, Arduino'da kullanılan değişken türlerini ve tutabilecekleri değerleri görebilirsiniz.

Değişken Boyut Açıklama

byte 1 byte 0 – 255 arası işaretsiz sayılar.

boolean 1 byte 0 (FALSE) veya 1 (TRUE) değerini alır.

char 1 byte -128 ile 127 arasındaki değerleri alır. Tek bir karakterin saklanması için kullanılır.

string 1 byte Metin işlemleri için kullanılır (char dizisi)

int 2 byteİşaretli sayılar için -32.768 – 32.767

İşaretsiz sayıları için 0 – 65,535

long 4 byteİşaretli sayılar için -2.147.483.648 – 2.147.483.647

İşaretsiz sayılar için 0 – 4.294.967.295

float 4 byte İşaretli ondalıklı sayılar -3,4028235E – 3,4028235E

double 4 byte3,4028235E+38 ile -3,4028235E+38 arasında

hassasiyeti yüksek kesirli sayılar barındırır

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.5: İLK PROGRAM:

LED YAKIP SÖNDÜRME (BLINK) UYGULAMASI

Bu derste, program Arduino kartınızda, yerleşik bulunan LED’i yakıp

söndürme uygulamasını öğreneceğiz.

Arduino Uno R3- 1 Adet USB Kablosu Tip A to B – 1 Adet

Arduino kartının, elektronik elemanlara bağlanması için, her iki tarafında dizi halinde

konnektörler mevcuttur. Aynı zamanda, bu konnektörlere ‘kalkan’ (shield) adı verilen uyumlu

elektronik cihazlar takılabilir.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.5: LED YAKIP SÖNDÜRME (BLINK) UYGULAMASI

MALZEME LİSTESİ

MALZEME LİSTESİ

Ayrıca, Arduino’da sizin

programlarınızda kullanmanız için devre içi

bir Led bulunuyor. Bu LED Arduino UNO

kartın üzerinde bulunmaktadır. Genellikle

bu LED, 'L' harfi ile devre üzerinde

işaretlenmiştir.

Arduino Kartınızı bilgisayarın USB

çıkışına bağladığınızda 'L' LED’ inin,

yanıp söndüğünü görebilirsiniz. Arduino

Boardları genellikle, örnek 'Blink' taslağı

(sketch) ile önceden yüklenmiş olarak

gelir.

Bu derste, kendi Blink programınız

ile Arduino’ yu programlayıp ve daha sonra

'L' LED’ inin yanma sönme hızını

değiştireceksiniz

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.5: LED YAKIP SÖNDÜRME (BLINK) UYGULAMASI

Arduino IDE kurulumunu yaptınız ve Arduino

kartına bağlanmak için doğru seri bağlantı

noktası kullandığınızdan emin oldunuz.

Arduino taslağınızı (Sketch) mikrodenetleyiciye

gönderme zamanı geldi.

Arduino IDE’ de, Dosya→ Örnekler→

Basics menüsü altında, Blink isimli taslağı

editör alanına yükleyin.

Taslak (Sketch) penceresi açıldığında bütün

programı görebilecek şekilde, pencereyi

ekran boyutuna büyütünüz.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.5: LED YAKIP SÖNDÜRME (BLINK) UYGULAMASI

UYGULAMANIN ARDUINO IDE ORTAMINA ÇAĞRILMASI

Arduino IDE ile birlikte gelen örnek taslaklar (sketch) 'salt okunur' dosyalardır. Yani bir

Arduino örnek taslağını yukarıdaki gibi yükleyebilirsiniz , ancak bu dosyalarda değişiklik

yaparsanız, farklı bir dosya olarak kaydetmeniz gerekir. Arduino örnek dosyalarının salt okunur

özelliğinden dolayı, aynı dosya üzerine kayıt yapamazsınız.

Arduino IDE’nin Dosya menüsünden 'Farklı Kaydet..' seçeneğini seçin ve ardından

'MyBlink' adı ile yeni çalışmanızı kaydedin.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.5: LED YAKIP SÖNDÜRME (BLINK) UYGULAMASI

UYGULAMANIN KAYIT EDİLMESİ

Taslak defterine 'Blink' dosyasının bir kopyasını kaydettiniz. Bu çalışmayı tekrar yüklemek için

Dosya → Taslak Defteri(Sketchbook) menü seçeneğinden MyBlink üzerine tıklayınız.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.5: LED YAKIP SÖNDÜRME (BLINK) UYGULAMASI

UYGULAMANIN KAYIT EDİLMESİ

Arduino kartınızı, USB kablosu

ile bilgisayarınızın USB girişine takın

ve 'Arduino Kart Tipi' ve 'Seri Portun'

doğru ayarlanmış olup olmadığını

kontrol edin.

Eğer sorun çıkarsa, 2. Derse tekrar

geri dönmeniz gerekebilir.

Arduino IDE penceresinin alt

kısmındaki pano, sizin için geçerli

ayarları gösterir.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.5: LED YAKIP SÖNDÜRME (BLINK) UYGULAMASI

UYGULAMANIN ARDUINO KARTINA YÜKLENMESİ

Bir programı makine diline çevirmek için «Derle» butonuna tıklayın, eğer derleme hataları varsa düzeltin. Daha sonra, makine diline çevrilen kodu Arduinoortamına göndermek için, 'Yükle' butonuna tıklayın.

Araç çubuğunda derleme ve yükleme butonları yandaki şekilde gösterilmiştir.

Eğer IDE programlama ortamının altt bulunan durum alanını izlerseniz, bir ilerleme çubuğu ve bir dizi mesaj göreceksiniz.

İlk başta 'Taslak Derleniyor ..'('Compiling Sketch..') diyecektir. Bu aşamada taslak çalışmanız, Arduino kartınıza yüklemesi için uygun formata dönüşmektedir.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.5: LED YAKIP SÖNDÜRME (BLINK) UYGULAMASI

UYGULAMANIN ARDUINO KARTINA YÜKLENMESİ

Sonraki durumda IDE üzerindejki yazı 'Yükleniyor'-('Uploading') olarak değişecektir. Bu

noktada, Arduino LED'ler, taslak çalışmanızın yüklenmesi esnasında, yanıp sönmeye

başlayacaktır.

Son olarak, yükleme durumu 'Bitti'

olarak değişecektir.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.5: LED YAKIP SÖNDÜRME (BLINK) UYGULAMASI

ARDUINO KARTA YÜKLEME

Taslak çalışmamızda 32256 byte kullanılabilir alan olduğu ve 1084 byte alan kullanıldığı

görülmektedir. Taslağınızın derlenmesinden sonra aşağıdaki hata iletisini alabilirsiniz.

Yukarıdaki pencerede ipucu pencerenin üst kısmındadır.

Muhtemelen Arduino Kartınız hiç bağlı değildir, ya da sürücüleri

yüklü değildir. Ya da yanlış seri port seçili olduğundan anlamına

gelir.

Bu iletiyi alırsanız, Arduino Kart kurulumunu kontrol edin.

Yükleme tamamlandıktan sonra, Arduino Kartınız yeniden

başlar ve port 13’e bağlı L’LED’inin yanıp sönmeye başlaması

gerekir.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.5: LED YAKIP SÖNDÜRME (BLINK) UYGULAMASI

ARDUINO KARTA YÜKLEME

Bu kısımda BLINK program parçasının çalışması incelenecektir./*

LED yakma söndürme (Blink)

Bir saniye boyunca bir LED i yakma ve söndürme işlemini tekrarlayarak yapar

Aşağıdaki kod açık erişimdedir.

*/

// Pin 13 Arduino uno kartında bir LED e bağlıdır.

// bir isim verin:

int led = 13;

// reset butonuna bastığınızda setup döngüsü çalışır:

void setup() {

// Dijital pin i çıkış olarak tanımla

pinMode(led, OUTPUT);

}

// döngü sonsuza kadar çalışır:

void loop() {

digitalWrite(led, HIGH); // LED yanar (HIGH gerilim seviyesidir)

delay(1000); // bir saniye bekle

digitalWrite(led, LOW); // gerilimi LOW yaparak LED i söndür

delay(1000); // bir saniye bekle

}

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.5: LED YAKIP SÖNDÜRME (BLINK) TASLAĞI NASIL

ÇALIŞIR?

// döngü sonsuza kadar çalışır:

void loop() {

digitalWrite(led, HIGH); // LED yanar (HIGH gerilim seviyesidir)

delay(1000); // bir saniye bekle

digitalWrite(led, LOW); // gerilimi LOW yaparak LED i söndür

delay(1000); // bir saniye bekle

}

Döngü (Loop) işlevi şöyle işlemektedir. İlk komutta LED pini dijital 1-(HIGH) yapılır, sonra 1000

milisaniyelik (1 saniye) 'gecikme' yapılır, daha sonra LED pinini dijital 0-(LOW) yapılır ve son

olarak tekrar 1000 milisaniyelik (1 saniye) 'gecikme' yapılır.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.5: LED YAKIP SÖNDÜRME (BLINK) TASLAĞI NASIL

ÇALIŞIR?

Programda / * ve * / sembolleri arasındaki arasında karakterler açıklama, Arduino IDE

tarafından derlenmez. // ile başlayan satırlar, satır sonuna kadar yorum olarak kabul edilir.

Sonrasında , 'setup' fonksiyonu vardır. Yorumların açıkladığı gibi reset düğmesine

basıldığında kod, buradan çalıştırılır. Kartınız herhangi bir nedenle resetlenirse program yine

ilk satırdan çalışmaya başlayacaktır. Örneğin kartın enerjilenmesi veya taslak çalışmanızın

yeniden yüklenmesi RESET durumuna yol açacaktır.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.6: GECİKME VE ZAMAN FONKSİYONLARI

Delay() : milisaniye cinsinden gecikme sağlar

delayMicroseconds(us_gecikme) : Microsaniye cinsinden gecikme sağlar.

millis() fonksiyonu Arduino’nun çalışmasından itibaren geçen süreyi ms cinsinden döndürür. Dönüş değeri

yüksek bir değer olabileceğinden “unsigned long” tipi kullanılmalıdır. ( unsigned long –işaretsiz long tipindeki

sayıdır. Alabileceği değerler 0 – 4.294.967.295 arasındadır)

Aşağıda gecikme ile ilgili örnek program parçacıkları görülüyor.

delay(1000); // 1000 Ms (1 Saniyelik) gecikme sağlar.

Serial.print("Time: "); // Bilgisayar ekranında “Time:” yazısını göster.

time = millis(); //Arduino programının çalışmasından itibaren geçen süreyi miliSaniye

Serial.println(time); // mS cinsinden geçen zamanı gösterir.

delayMicroseconds(50); // 50 microsaniyelik gecikme sağlar.

LED’i daha hızlı yakıp söndüreceğiz. Tahmin edebileceğiniz gibi, anahtar komut delay() dir.

'delay' komutu içindeki (1000) parametresi değiştirilmelidir.

Gecikme süresi milisaniye cinsindendir. LED’ in iki kat daha hızlı yanıp sönmesini

istiyorsanız 1000 değerini 500 olarak değiştiriniz.

Tekrar taslak çalışmanızı (programınızı) Arduino kartınıza yükleyiniz. LED’ iniz daha

hızlı yanıp sönmeye başlayacaktır.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.6: LEDİ DAHA HIZLI YAKIP SÖNDÜRME

Bu uygulama için gereken malzemeler aşağıda

listelenmiştir:

Arduino UNO R3 board -1 adet Yarı-boyutlu Breadboard- 1 adet

Led – 1 adet

470 Ω Direnç (Sarı, mor, kahverengi )- 1 Adet

Bağlantı kabloları – 2 Adet

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.7: HARİCİ LED YAKIP SÖNDÜRME UYGULAMASI

MALZEME LİSTESİ

Breadboard, elektronik devreleri pratik olarak kurmak

ve test etmek için kullanılan kullanışlı bir

ekipmandır. Breadboard üzerinde devre kurarken

bağlantı kablolarını ve komponentleri birbirine

lehimlemek zorunda kalmazsınız. Komponentleri

birbirine ve iletkenlere bağlamak oldukça kolaydır.

Lehimleme gerekmediği için komponenetleri rahatça

sökebilir ve tekrar bağlayabilirsiniz, bu sayede

elemanlar ve breadboard hiçbir zarar görmez.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.7.1: DENEY MALZEMELERİNİN TANITILMASI

-BREADBOARD

Yandaki resimde breadboard'un iç yapısı açıkça görülüyor. Metal iletken dizileri için genellikle iletkenliği, korozyona karşı dayanıklılığı ve esnekliği sayesinde nikel-gümüş tercih edilir.

Breadboard, plastik bir kasanın içine dizilmiş ve birbirilerinden yalıtılmış iletkenler dizisidir. Breadboard'un üzerinde belirli sayıda delikler vardır ve komponentler bu delikler aracılığıyla iletkenlere temas ederler.

Breadboard tipik olarak iki çeşit iletken dizimi içerir. Bus dizisi ve soket dizisi. Bus dizisi genellikle devreye gerilim sağlamak için kullanılır. Yatay olarak sıralanmış iki adet bus dizisi vardır. Bunlardan birisi devreye gerilim bağlamak (Kırmızı hat) için kullanılır, diğeri ise güç kaynağının şasesi (Mavi hat) içindir.

Soket dizisi breadboard'un üzerinde dikey olarak sıralanmıştır. Uygulamaya göre değişmekle beraber tipik bir breadboard'da 5 ayrı delikten oluşan, 32 soket sütunu bulunur. 5'li sütundaki soketler birbirine bağlıdır ancak farklı sütunlar birbirinden izoledir.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.7.1: DENEY MALZEMELERİNİN TANITILMASI

-BREADBOARD

LED'lerden gösterge ışıkları yapabilirsiniz. Elektrik tüketimleri çok azdır ve ömürleri

çok uzundur.

Bu derste, muhtemelen en çok en yaygın olan 5mm kırmızı LED kullanacaksınız.

5mm., LED’ in dış çapını ifade eder. 5mm’lik LED’lerin yanı sıra, 3 mm ve 10 mm. çaplarında

LED’ler de mevcuttur.

LED’ inizi, doğrudan bir pil veya gerilim kaynağına bir bağlayamazsınız.. LED’ in Anod

ve Katod uçları vardır ve Anot ucuna (+) ve Katod ucuna (-) bağlanmalıdır. Aksi durumda LED

ışık yaymaz. Kırmızı LED’ in çalışma gerilimi 1.5 Volttur. LED’in çalışma gerilimini

sınırlandırmak için, ön direnç takılmalıdır. Aksi takdirde LED hasar görebilir.

Eğer bir LED ile bir direnç kullanmazsanız, LED

üzerinden çok fazla akım akacaktır. Doğal olarak, LED

üzerinde aşırı ısı üretilir. LED; hemen tahrip olabilir.

LED’ in, Anot(+) ve Katod(-) uçlarını bulmak için,

iki yol vardır. İlk olarak, Anot(+) ucu daha uzundur.

Katod(-) ucu kısadır.

İkincisi; Katod(-) ucuna LED’ in şeffaf tarafından

bakarsak, düz ve geniş bir kısım görürüz.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.7.1: DENEY MALZEMELERİNİN TANITILMASI

-LED

Led’in katod ucunu Arduino una kartının GND

portuna bağlantı kablosu ile bağlayalım.

Led’in anot ucunu 470 Ω direnç ve bağlantı

kablosu ile Arduüno uno kartının digital 3

portuna bağlayalım.

Dirençler elektrik akımını sınırlar. Daha yüksek

bir değerli bir direnç, daha az elektrik akımı

akacaktır. LED’ in ne kadar parlaklık vereceği

LED’ e takılan seri direncin değerine bağlıdır.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.7.2: BREADBOARD DÜZENİ

Direnç değeri neyi değiştirir?

270 Ω’luk direnç ile LED oldukça parlak ışık verir. Eğer 270 Ω’ luk

direnci 470 Ω’luk direnç ile değiştirirsek, o zaman LED biraz

sönük görünür. 2.2kΩ direnci LED ile seri bağlarsak LED

oldukça sönük ışık verir. Son olarak, yerinde 10 kΩ direnç ile

deneme yaparsak LED sadece görünür şekilde çok az ışık verir.

Kırmızı kabloyu Breadboard’dan çıkartıp boş bir deliğe takarsak,

tıpkı bir anahtar gibi davranır ve LED söner.

Yüksek dirençten daha az akım geçer. (OHM KANUNU)

Kırmızı renkli LED için LED gerilimi 1,5 volt alınır.

I1=(U-ULED)/R1= (5-1,5)/270= 13 miliAmper

I2=(U-ULED)/R2= (5-1,5)/470= 7 miliAmper

I3=(U-ULED)/R3= (5-1,5)/2200= 1,5 miliAmper

I4=(U-ULED)/R4= (5-1,5)/10000= 0,3 miliAmper

I4 < I3 < I2 < I1

I1 Akımı en yüksektir. Akım ne kadar yüksekse; LED o derece

parlak yanacaktır.

Bu durumda LED’ e seri bağlanacak en uygun direnç 270 ohm olarak görülmektedir.

Arduino IDE ile «MyBlink» adı ile kaydettiğimiz taslağı açalım ve aşağıda görüldüğü

şekilde düzeltelim:

int led=3; // değişken tanımlama: led

değişkenine ledin anodunun bağlı olduğu

3 nolu port değeri atanır.

Setup bloğunda:

pinMode (led, OUTPUT); // ledin bağlı

olduğu 3 nolu port çıkış olarak ayarlanır.

Loop bloğunda:

digitalWrite (led,HIGH); // 3 nolu porta

+5V değeri atanır. Böylece Led yanar.

delay(500); //500 milisaniye beklenir.

digitalWrite (led,LOW); // 3 nolu porta 0V

değeri atanır. Böylece Led söner.

delay(500); //500 milisaniye beklenir.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.7.3: «Blink» Taslağının Uyarlanması

Tekrar taslak çalışmanızı (programınızı) Arduino

kartınıza yükleyiniz. Harici LED’ iniz yanıp sönmeye

başlayacaktır.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.7.3: «Blink» Taslağının Karta Yüklenmesi

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.8.1:ANALOG GİRİŞ/ÇIKIŞ FONKSİYONLARIBu bölümde başlıca fonksiyonlara yer verilecektir. Daha ayrıntılı bilgi için

https://www.arduino.cc/en/Reference/HomePage

ANALOG I/O FONKSİYONLARI

analogReference()

Analog giriş için referans gerilimini ayarlar.

analogRead()

Belirtilen analog pin değerini okur.

analogWrite()

Ayarlanan pinden analog çıkış almayı sağlar. 0 ile 255 arasında değer

kabul eder. LED parlaklığı, motor hızı ayarlama gibi işlemlerde kullanılır.

Bu uygulama için gereken malzemeler aşağıda

listelenmiştir:

Arduino UNO R3 board -1 adet Yarı-boyutlu Breadboard- 1 adet

Led – 1 adet

470 Ω Direnç (Sarı, mor, kahverengi )- 1 Adet

Bağlantı kabloları – 2 Adet

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.8.2: HARİCİ LEDİN PARLAKLIĞINI AYARLAMA

UYGULAMASI MALZEME LİSTESİ

Led’in katod ucunu Arduino una kartının GND

portuna bağlantı kablosu ile bağlayalım.

Led’in anot ucunu 470 Ω direnç ve bağlantı

kablosu ile Arduüno uno kartının digital 3

portuna bağlayalım.

Dirençler elektrik akımını sınırlar. Daha yüksek

bir değerli bir direnç, daha az elektrik akımı

akacaktır. LED’ in ne kadar parlaklık vereceği

LED’ e takılan seri direncin değerine bağlıdır.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.8.3: BREADBOARD DÜZENİ

PWM TEORİSİ : Darbe Genişlik Modülasyonu (PWM), elektrik gücünü kontrol etmek için

kullanılan bir tekniktir. Biz LED'lerin parlaklığını kontrol etmek için, Arduino Uno kartının 3 nolu

PWM portunu kullandık.

Aşağıdaki diyagram, Arduino PWM çıkışlarından birinin sinyalini göstermektedir.

Kabaca her 1/500 saniyede, PWM çıkışı bir darbe

üretecektir. Bu darbenin uzunluğu 'analogWrite' fonksiyonu ile

kontrol edilir. Yani 'analogWrite(0)' kodu herhangi bir darbe

üretmeyecektir. 'analogWrite (255)' komutu ise yeni darbe

gelene kadar çıkışı 5 Volt seviyesinde tutacaktır.

Eğer ‘analogWrite’ komutuna, 0 ile 255 arasında bir

değer ataması yaparsak, atadığımız değere göre bir darbe

üretilecektir. Arduino çıkışımızın 5 Voltta kalma süresini, bir

PWM peryodunun %5’ i olarak ayarlarsak, çıkışımıza sadece

% 5 oranında elektriki güç aktarmış oluruz.

PWM peryodunun %90’ ı süresince çıkışımızı

enerjilendirirsek, bu durumda çıkışa bağlı yükümüz elektriki

gücün %90’ ını alacaktır. Biz LED’ in bu kısa süre içerisinde

yanıp söndüğünü göremeyiz. Bize göre; sadece LED’in

parlaklığı değişiyormuş şeklinde görülür

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.8.4: HARİCİ LEDİN PARLAKLIĞINI AYARLAMA

Arduino IDE ile «MyBlink» adı ile kaydettiğimiz taslağı açalım ve aşağıda görüldüğü

şekilde düzeltelim: int led=3; // değişken tanımlama: led değişkenine ledin

anodunun bağlı olduğu 3 nolu port değeri atanır.

Setup bloğunda:

pinMode (led, OUTPUT); // ledin bağlı olduğu 3 nolu port

çıkış olarak ayarlanır.

Loop bloğunda:

analogWrite (led,0); // 3 nolu porta 0 değeri atanır. Böylece

Led söner.

delay(500); //500 milisaniye beklenir.

analogWrite (led,80); // 3 nolu porta 80 değeri atanır.

Böylece Led yanar.

delay(500); //500 milisaniye beklenir.

analogWrite (led,160); // 3 nolu porta 160 değeri atanır.

Böylece Led daha parlak yanar.

delay(500); //500 milisaniye beklenir.

analogWrite (led,255); // 3 nolu porta 255 değeri atanır.

Böylece Led en parlak durumda yanar.

delay(500); //500 milisaniye beklenir.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.8.5: «Blink» Taslağının Uyarlanması

Tekrar taslak çalışmanızı (programınızı) Arduino

kartınıza yükleyiniz. Harici LED’ in parlaklığının 3

kademeli olarak değiştiğini göreceksiniz.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.8.6: HARİCİ LEDİN PARLAKLIĞINI AYARLAMA

UYGULAMASININ ARDUINO UNO KARTINA YÜKLENMESİ

Aynı breadboard düzenini kullanarak devam

ediyoruz.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.9.1: BREADBOARD DÜZENİ

Arduino IDE ile «MyBlink» adı ile kaydettiğimiz taslağı açalım ve aşağıda görüldüğü

şekilde düzeltelim:

int led=3; // değişken tanımlama: led değişkenine

ledin anodunun bağlı olduğu 3 nolu port değeri

atanır.

İnt i=0; // değişken tanımlama: i isminde tam sayı

(integer) türünde bir değişken tanımlanıp ilk

değeri 0 olarak atanır.

Setup bloğunda:

pinMode (led, OUTPUT); // ledin bağlı olduğu 3

nolu port çıkış olarak ayarlanır.

Loop bloğunda:

for (i=0;i<256;i++){ //i değişkeni 0’dan 255’e

kadar birer birer arttırılır.

analogWrite(led, i); //her i değişkeni ledin bağlı

olduğu 3 nolu porta atanır. Böylece ledin

parlaklığı ayarlanır.

delay(20); // 20 milisaniye beklenir.

}

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.9.1: «Blink» Taslağının Uyarlanması

Tekrar taslak çalışmanızı (programınızı) Arduino

kartınıza yükleyiniz. Harici LED’ in parlaklığının düzgün

bir şekilde arttığını göreceksiniz.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.9.1: HARİCİ LEDİN PARLAKLIĞINI AYARLAMA

UYGULAMASININ ARDUINO UNO KARTINA YÜKLENMESİ

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.10:DEĞİŞKENLER (VARIABLES) ÇEŞİTLERİ

Fonksiyonlar Konusunu işlemeden önce, uygulamalarımızda çok sık kullanacağımız değişkenler

konusundan burada bahsedilecektir.

C dilinde çok önem arzeden değişkenler konusu aynı önemi Arduino ile program yazılımı konusunda da

göstermektedir.

Bir değeri veya karakteri daha sonra tekrardan kullanmak/değiştirmek için hafızada tutabilirsiniz. Bu

değerler değişkenlerde tutulur. Hafızada tutacağınız değerin türüne göre değişken tanımlanması

gerekir.

Aşağıdaki tabloda, Arduino'da kullanılan değişken türlerini ve tutabilecekleri değerleri görebilirsiniz.

Değişken Boyut Açıklama

byte 1 byte 0 – 255 arası işaretsiz sayılar.

boolean 1 byte 0 (FALSE) veya 1 (TRUE) değerini alır.

char 1 byte -128 ile 127 arasındaki değerleri alır. Tek bir karakterin saklanması için kullanılır.

string 1 byte Metin işlemleri için kullanılır (char dizisi)

int 2 byteİşaretli sayılar için -32.768 – 32.767

İşaretsiz sayıları için 0 – 65,535

long 4 byteİşaretli sayılar için -2.147.483.648 – 2.147.483.647

İşaretsiz sayılar için 0 – 4.294.967.295

float 4 byte İşaretli ondalıklı sayılar -3,4028235E – 3,4028235E

double 4 byte3,4028235E+38 ile -3,4028235E+38 arasında

hassasiyeti yüksek kesirli sayılar barındırır

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.11: KONTROL YAPILARI- KARAR YAPILARI

Bu fonksiyonlar C dilinde kullanıldığı şekli ile kullanılır.

IF/ELSE YAPISI

Arduino Programlama temel karar komutudur. “IF” ‘ten sonra verilen koşul doğru ise IF

bloğundaki işlemler çalıştırılır, yanlış ise “ELSE” bloğundaki işlemler çalıştırılır.

if (X < 500)

{ // X sayısı eger 500’den küçük ise LEDpin1= HIGH

digitalWrite(LEDpin1, HIGH);

}

else if (X > 1000)

{ // X sayısı eger 1000’ den büyük ise LEDPIN2= HIGH

digitalWrite(LEDpin2, HIGH);

}

else

{ // if ve else if’ deki şart sağlanmadı ise o halde

//aşağıdaki işlemi yürüt.LEDPIN3= HIGH

digitalWrite(LEDpin3, HIGH);

}

if (koşul)

{

// Koşul sağlanıyor

//ise yapılacak işlem

}

else if (koşul)

{// Koşul sağlanıyor

//ise yapılacak işlem}

else

{

// Koşullar

//sağlanmıyor

//ise yapılacak işlem

}

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.11: KONTROL YAPILARI – KARAR YAPILARI

SWITCH/CASE YAPISI

Seçim yapılarak, program akışının

istenilen bloklara atlamasını sağlar.

“SWITCH” ‘teki değişken, “CASE”

teki hangi değeri alırsa,

karşılığındaki işlem yapılır.

switch (seçim değişkeni) {

case 1:

// Seçim değişkeni 1 olduğunda yapılacak

işlem

break;

case 2:

// Seçim değişkeni 2 olduğunda yapılacak

işlem

break;

default:

// Varsayılan bağımsız işlem (isteğe bağlı)

}

BREAK, bir döngüyü veya switch komutunu sonlandırmak için kullanılır.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.12: KONTROL YAPILARI –DÖNGÜ YAPILARI

SWITCH/CASE YAPISI ÖRNEĞİ

switch (degisken) {

case 1:

// degisken=1 ise o halde 1. pindeki ledi enerjilendir.

digitalWrite(LEDpin1, HIGH);

break;

case 2:

// degisken=2 ise o halde 2. pindeki ledi enerjilendir.

digitalWrite(LEDpin2, HIGH);

break;

case 3:

// degisken=3 ise o halde 3. pindeki ledi enerjilendir.

digitalWrite(LEDpin3, HIGH);

default:

// Eger değişken yukarıdaki 1, 2 ve 3 değerleri ile

// eşlenmez ise

// o halde default’dan sonraki satırları işlet. 4.

pindeki // ledi enerjilendir.

digitalWrite(LEDpin4, HIGH);

break;

}

!! Switch case fonsiyonunda her case’

den sonra mutlaka break deyimi

kullanılmalıdır. Aksi takdirde diğer

case durumları ve default durumu

işletilir. Bu da programınızda

istenmeyen durumlara ve hatalara

sebebiyet verir. !!

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.12: KONTROL YAPILARI-DÖNGÜ YAPILARI

FOR YAPISI

Arduino Programlama dilinde temel döngü komutudur. “FOR” içinde yer alan koşul doğru olduğu

sürece, döngüdeki işlemler gerçekleştirilir.

for (başlangıç değeri; koşul; artım) {

//işlemler

}

void setup()

{ int i;

Serial.begin(9600); // seri haberleşme için ayarlama fonksiyonu

}

loop() {

for (i = 0; i < 10; i++) // FOR döngüsü için başlangıç değeri 1’

//dir. İ sayısının değeri 10 olana kadar i’ nin değerini 1 artır.

{

Serial.print("i = "); // i= yazısını ekrana yazdır.

Serial.println(i); // Değerleri bilgisayar ekranına yazdır yeni

// satıra geç.

delay(1000);// 1 saniye aralıklarla yazdır.

}

}

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.12: KONTROL YAPILARI – DÖNGÜ YAPILARI

WHILE YAPISI

“While” ile belirtilen koşul doğru olduğu sürece, döngü içindeki işlemler gerçekleştirilir.

while(koşul){

// Koşul doğru olduğu sürece yapılacak işlemler

}

DO-WHILE YAPISI

“while” ile belirtilen koşul doğru olduğu sürece, döngüdeki işlemler yapılır.

do

{

// Koşul doğru olduğu sürece yapılacak işlemler

} while (test koşulu);

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.12: KONTROL YAPILARI – DÖNGÜ YAPILARI

WHILE ve DO-WHILE YAPISI İLE ÖRNEKLER

var = 0;

while(var < 200){

// buraya yazacağınız kodlar 200 kez işletilir.

var++; // var’ ın değerini her seferinde 1

artır.

}

do

{ delay(50); // wait for sensors to stabilize

x = readSensors(); // readSensors fonksiyonundan gelen

değeri // x’ e yazdır.

}

while (x < 100); //x değeri 100’ den küçük olduğu sürece “do”

//içindeki deyimleri işlet.

DO - WHILE

WHILE

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.13: OPERATÖRLER

C dilinde kullanılan operatörler kullanılır.

Matematiksel Karşılaştırma Mantıksal

= Eşitlik = = İki değişkeni karşılaştırır. && VE

+ Toplama != İki değişkenin eşit olmama

durumunu karşılaştırır.

|| VEYA

– Çıkarma < Küçüktür karşılaştırması ! DEĞİL

* Çarpma > Büyüktür karşılaştırması

/ Bölme <= Küçük eşit

% Yüzde >= Büyük eşit

İşlemleri belirten sembollere, bilgisayar dilinde “operatör” denir. Tabloda temel

operatörler ve tooltip gösterimli olarak karşılıkları verilmiştir.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.14:FONKSİYONLARBu bölümde başlıca fonksiyonlara yer verilecektir. Daha ayrıntılı bilgi için

https://www.arduino.cc/en/Reference/HomePage

DİJİTAL I/O FONKSİYONLARI

pinMode()

Pinleri giriş veya çıkış olarak yapılandırma işlemi yapar.

digitalWrite()

Çıkış olarak ayarlanan pinlerin değerlerini, HIGH veya LOW olarak ayarlar.

digitalRead()

Belirtilen digital pin değerini okur.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.14:FONKSİYONLARBu bölümde başlıca fonksiyonlara yer verilecektir. Daha ayrıntılı bilgi için

https://www.arduino.cc/en/Reference/HomePage

ANALOG I/O FONKSİYONLARI

analogReference()

Analog giriş için referans gerilimini ayarlar.

analogRead()

Belirtilen analog pin değerini okur.

analogWrite()

Ayarlanan pinden analog çıkış almayı sağlar. LED parlaklığı, motor hızı

ayarlama gibi işlemlerde kullanılır.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.14:FONKSİYONLAR – GIRDI ÇIKTI KOMUTLARI

Seri Monitör I/O FONKSİYONLARI

Serial.begin(9600)

Monitörü seri iletişimle bağlantıya açar.

Serial.print() , Serial.println()

Seri monitöre değer yazar.

Serial.read(), Serial.readBytes(),

Serial.readString(), Serial.readBytesUntil(),

Serial.parseInt(), Serial.parseFloat(),

Seri monitörden değer okur.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.14:FONKSİYONLAR

ARDUINO FONKSIYONLARINA DAHA DETAYLI BAKIŞ

Arduino Fonksiyonlarının işletilmesi C dilindeki fonksiyon yapısı ile çok benzerlik gösterir.

Arduino programlarımızı tek bir fonksiyon (loop()) içerisinde yazabileceğimiz gibi onları küçük

birimlere de ayırabiliriz. Örneğin Delay() fonksiyonu parametre alan ama değer döndürmeyen

bir fonksiyondur.

Bölüm 14: ARDUINO PROGRAMLAMA DİLİ

Konu: FONKSIYON PARAMETRELERİ

• Arduino Programlama dili c,c++ yapısında

fonksiyonlar kullanır. Burada fonksiyon

parametre alabilir, ve çağrıldığı yere değer

döndürebilir.

Değer döndürmeyen fonksiyonların dönüş değer tipi “void” dir. Void kelime anlamı olarak hükümsüz

anlamına gelir. Fonksiyonların parametre almaları ve değer döndürmeleri zorunlu değildir.

Fonksiyonlar parametre alıp almadıklarına veya değer döndürüp döndürmemelerine göre gruplanabilir:

1- Parametre alan ve dönüş değeri olan

2- Parametre almayan ve dönüş değeri olan

3- Parametre alan ve dönüş değeri olmayan

4- Parametre almayan ve dönüş değeri olmayan

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.14:FONKSİYONLAR PARAMETRELER

Fonksiyonlar tanımlanırken hangi tip parametre alacakları belirtilir. Fonksiyonlara verdiğimiz

girişlere “parametre” denilir. Fonksiyonları tekrar edilen işlemler için kullanabiliriz.

!! VOID: Fonksiyonun başındaki void ifadesi bunun bir değer döndürmeyeceğini belirtir.

!! INT: Fonksiyonun başındaki int ifadesi bunun bir tamsayı değeri döndüreceğini belirtir.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.14:FONKSİYONLARFONKSİYON ÇAĞIRMA

/* Seri haberleşme üzerinden “Arduino”

yazdıran fonksiyon saniyede 1 kez çağırılıyor. Bilgisayar

Ekranindan Arduino IDE monitorunu açınız. Arduino yazısı 1 Sn

aralıklarla gorulebilir.Seri Haberleşme örneği (UART)

Baud rate = 9600 olarak ayarlandi. IDE ortamındaki Seri monitor’

un de default değeri 9600’ dur. */

void setup()

{

Serial.begin(9600);

}

void loop()

{

ArduinoYazdir(); // Fonksiyon çağrısı

delay(1000); // Bir saniye bekle

}

Void ArduinoYazdir() ; // Bizim tanımladığımız fonksiyon

{

/* Aşağıdaki fonksiyon Arduino IDE de mevcuttur */

Serial.println (“Arduino”); // Bir saniye bekle

}

Yukarıda ArduinoYazdir isimli fonksiyon bizim tarafımızdan yazılmış olup Loop fonksiyonu

içerisinden çağrılmaktadır.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.14:FONKSİYONLAR- Fonksiyon yazma işleminde, fonksiyonda kullanılacak değişken tanımlamalarına ve fonksiyonda yapılacak işlem

sonucunun hangi türde olacağına dikkat edilmelidir.

- Fonksiyonun türü, işlem sonucunda döndürülecek değişken ile aynı tipte olmalıdır.

- Eğer fonksiyon, hiçbir değer döndürmeyecekse 'void' olarak tanımlanmalıdır.

Örneğin toplama işlemi yapan ve sonucu “int” geri döndüren bir fonksiyon yazalım. Fonksiyon a ve b adında “int” tanımlı iki

sayı almaktadır. a ve b’ yi toplayıp sonucu geri döndürmektedir.

int toplama(int a, int b)

{ int sonuc;

sonuc = a + b;

return sonuc; }

Burada oluşturulan sonuç değişkeni sadece fonksiyon içerisinde geçerlidir. Fonksiyonun görevi bittikten sonra sonuç

değişkeni kaybolur. Bu fonksiyonu programınızın gerekli yerinde kullanmak için;

int islemSonucu;

islemSonucu = toplama(2 + 3);

şeklinde fonksiyonu çağırmanız yeterli olacaktır.

YUKARIDAKİ FONKSİYON BU NOKTADA ÇAĞRILIYOR.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.14:FONKSİYONLAR

ARDUINO DİLİ MATEMATİK FONKSİYONLARI

Temel matematik işlemleri matematik operatörleriyle gerçekleştirebiliyoruz. Karekök alma,

trigonometrik hesaplamalar gibi işlemler için matematik kütüphanesi fonksiyonlarını

kullanabiliriz.

https://www.arduino.cc/en/Reference/HomePage

Matematik kütüphanesi fonksiyonlarından belli başlıcaları aşağıda sıralanmıştır.

min(x, y): İki sayıdan küçük olanını bulur. Fonksiyon değeri olarak küçük sayının değerini

döndürür.

max(x, y): ): İki sayıdan büyük olanını bulur. Fonksiyon değeri olarak büyük sayının değerini

döndürür.

abs(x) : Sayının mutlak değerini hesaplar.

pow(base, exponent): Üs alma fonksiyonudur. (Base= sayının tabanı, exponent = sayının

üssü)

sqrt(x): Sayının karekökünü hesaplar.

Val = min(Val, 100); // Val değeri ile 100 sayısını karşılaştırır hangisi

// küçükse Val Değerine atama yapar.

// Sonuç Hiç bir zaman 100 değerinden büyük olamaz.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.14:FONKSİYONLAR

MATEMATİK FONKSİYONLARI İLE BAZI ÖRNEKLER

Val = max(Val, 20); // Val değeri ile 20 sayısını karşılaştırır. hangisi

büyükse // Val Değerine atama yapar.

// Sonuç hiç bir zaman 20 değerinden küçük olamaz.

abs(a); // a değişkeninin mutlak değerini hesaplar.

a++; // Sonra a’ nın değerini “1” artır.

sqrt(val); // Sayının karekökünü hesaplar. Dönen değer Double sayı

// tipindedir.

https://www.arduino.cc/en/Reference/HomePage

Daha fazla Bilgi için aşağıdaki linke bakınız.

Bölüm 3: ARDUINO PROGRAMLAMA DİLİKonu 3.15:ARDUINO’ DA KÜTÜPHANE (LIBRARY) KULLANIMI

Arduino platformunda diğer programlama platformları gibi, kütüphanelerin kullanımı mevcuttur.

Kütüphaneler, taslaklarınıza ekstra işlevsellik kazandırabilir. Bir taslağınızda kütüphane kullanmak için,

Sketch> Import Library komutunu seçiniz.

IDE ile yüklü gelen Kütüphaneler vardır, ama aynı zamanda kendi kütüphanelerizi oluşturabilirsiniz.

Aşağıdaki listede bir kısım Arduino kütüphanlerinin kullanımını göreceksiniz.

Standart Arduino Kütüphaneleri

EEPROM – EEPROM entegreden veri okuma ve veri yazma

Ethernet - Arduino Ethernet Shield aracılığıyla internete bağlanmak

Firmata – Standart seri bağlantı aracılığıyla bilgisayar uygulama

GSM - GSM shield ile GSM/GRPS networkunu kullanmak.

LiquidCrystal – LCD ekran kullanımı.

SD - SD kartlara okumak ve yazmak.

Servo - Servo motor kullanımı.

SPI - Serial Peripheral Interface (SPI) cihazlarla haberleşme.

SoftwareSerial – Herhangi bir dijital pinden seri iletişim gerçekleştirme.

Stepper – Step motor kontrolü.

TFT - Arduino TFT ekran ile şekiller ve resimler oluşturmak.

WiFi - Arduino WiFi shield ile internete bağlanmak.

Wire – (TWI/I2C) I2C cihazlarla bağlantı.

Daha fazla bilgi için aşağıdaki linke bakınız.

https://www.arduino.cc/en/Reference/Libraries

Arduino kartın dijital girişlerine buton bağlayacağız ve butonlar ile LED’ i yakıp söndüreceğiz.

Breadboardın üst kenarındaki butona basıldığı zaman;

LED yanacak, alttaki butona bastığımızda, LED

sönecektir.

Bölüm 3: ARDUINO PROJELERİ

Konu 4.1: BUTON İLE LED YAKIP SÖNDÜRME

Jumper tel paketi - 1 Adet

Arduino Uno R3 – 1 Adet

Yarım boy BreadBoard – 1 Adet

Baskı devre tipi buton – 2 Adet

270 Ω Direnç (kırmızı, mor,

kahverengi çizgili) – 1 Adet5mm Kırmızı LED – 1 Adet

Bölüm 3: ARDUINO PROJELERİ

Konu 4.1.1: BUTON İLE LED YAKIP SÖNDÜRME MALZEME LİSTESİ

Butonlar gerçekten basit elektriki elemanlardır. Düğmesine bastığınızda iki kontak

birbirine birleşir ve elektrik akımı akmaya başlar. Bıraktığınız da ise kontaklar arası bağlantı

kesilir dolayısıyla elektrik akımı da kesilir.

Bu derste kullanılan baskı devre tipi butonlar, biraz kafa karıştırıcı olabilir, dört adet

bağlantı noktası vardır.

Şekilde görüldüğü gibi A ve D uçları ile B ve C uçları buton içinde birbirine bağlıdır.

Bölüm 3: ARDUINO PROJELERİ

Konu 4.1.1.1: BUTONLAR

Butonların şekli kare olmasına rağmen, butonlardaki kontaklar çapraz bir şekilde

bulunur. Aşağıdaki şekilde görüldüğü gibi birbirine çapraz pinler normalde açık buton olarak

kullanılmıştır.

Bölüm 3: ARDUINO PROJELERİ

Konu 4.1.2: BUTON İLE LED YAKIP SÖNDÜRME BREADBOARD

DÜZENİ

Arduino kartınıza aşağıdaki programı yükleyiniz. A butonuna basınca LED ışık verecektir, B

butonuna basınca ise LED sönecektir.

/*

Inputs

*/

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);

}

}

Bu program ise üç kısımdan oluşmaktadır. İlk kısım

tahmin edileceği gibi tanımlamalar (Defines) kısmıdır.

Burada kolaylık olması bakımından Arduino Uno

kartının çıkışı ve girişi için tanımlama yapılmıştır.

int ledPin = 5; // LedPin’i 5 değerine atama yapar.

// buttonApin’i 9 değerine atama yapar.

int buttonApin = 9;

// buttonBpin’i 8 değerine atama yapar.

int buttonBpin = 8;

// Bu durumda artık rakamlar yerine

// isimleri kullanabilirsiniz. Bu rakamlar giriş ve

// çıkış pinlerini belirtir. Rakamları

// aklınızda tutmak zorunda değilsiniz.

Bölüm 3: ARDUINO PROJELERİ

Konu 4.1.3: BUTON İLE LED YAKIP SÖNDÜRME ARDUINO

TASLAĞI

Programın ilk bölümü kullanılacak üç pin için, üç değişkeni tanımlar. 'LedPin' çıkış pini,

'buttonApin' A butonu ve 'buttonBpin' ise B butonunun olduğu giriş pinidir.

'Setup' fonksiyonunda, ledPin çıkış (OUTPUT) olarak tanımlanmıştır. Buna karşın, iki

adet pin de giriş olarak tanımlanacaktır. Bu durumda, pinMode komutu ile girişleri

'INPUT_PULLUP' olarak ayarlayalım.

pinMode(ledPin, OUTPUT);

pinMode(buttonApin, INPUT_PULLUP);

pinMode(buttonBpin, INPUT_PULLUP);

INPUT_PULLUP direktifi ile buttonApin ve buttonBpin, PULL-UP giriş olarak

tanımlanmıştır. Bunun anlamı girişe herhangi bir seviyedeki gerilim bağlı değil ise, girişin

durumu dijital olarak 1-HIGH seviyesinde kalacaktır. Bu butona basılınca, girişin durumu GND

seviyesine çekilir. Bu durumda girişin durumu dijital olarak 0-LOW seviyesine çekilmiş olur.

INPUT_PULLUP direktifi ile mikrodenetleyici içerisindeki PULL-UP dirençleri aktif

yapılmaktadır. Bu dirençler mikrodenetleyici içerisinde +5V hattına otomatik bağlanmaktadır.

Giriş; PULLUP komutundan dolayı, normal durumda HIGH konumunda kalacaktır.

Sadece butona basıldığında LOW durumuna düşebilir. Bu durumu 'loop' fonksiyonu içinde ele

alacağız.

Bölüm 3: ARDUINO PROJELERİ

Konu 4.1.3: BUTON İLE LED YAKIP SÖNDÜRME ARDUINO

TASLAĞI

void loop()

{

if (digitalRead(buttonApin) == LOW)

{

digitalWrite(ledPin, HIGH);

}

if (digitalRead(buttonBpin) == LOW)

{

digitalWrite(ledPin, LOW);

}

} 'Loop' fonksiyonunda, her butona

ait bir 'if' ifadesi vardır. Hangi giriş GND

hattına bağlanırsa, girişle alakalı

'digitalWrite' komutu çalıştırılır.

Eğer A butonuna basılırsa, ledPin

HIGH yapılmaktadır. B butonuna basılırsa,

ledPin LOW yapılmaktadır.

Bölüm 3: ARDUINO PROJELERİ

Konu 4.1.3: BUTON İLE LED YAKIP SÖNDÜRME ARDUINO

TASLAĞI

Bölüm 3: ARDUINO PROJELERİ

Konu 4.2.1:ARDUINO UNO ISI KONTROL UYGULAMASI MALZEME

LİSTESİBu bölümde Arduino Uno kartı ile basit bit Isı Kontrol Uygulaması yapılacaktır.

Yukarıdaki bilgilerimize dayanıp, aşağıdaki elemanları sırası ile çalışma ekranımıza taşıyalım.

Arduino UNO R3 bir – 1 Adet

TMP36 sıcaklık sensörü -1 Adet

LED (Kırmızı-Sarı Yeşil) – Her birinden 1’er Adet olmak üzere toplamda 3 adet

Bölüm 3: ARDUINO PROJELERİ

Konu 4.2.1.1:TMP35/36/37 SICAKLIK SENSÖRLERİ

Bu veriler TMP veya LM kodlu sıcaklık sensörleri içindir. TMP36 kodlu sensör bu

uygulamada seçilmiştir. (-40 dan 150 CO’ ye kadar ölçüm yapabilir.)

LM35 / TMP35 (Celsius çıkış) ve LM37 / TMP 37 (Fahrenheit çıkış) TMP36’ya çok

benzer. TMP36 kullanmamızın ana nedeni sıcaklık ölçme aralığının yüksek olması ve 0 CO’ nin

altındaki sıcaklıklarda, negatif gerilim kaynağına ihtiyaç duymamasıdır.

Yukarıdaki farklılıklar hariç, TMP 35/36/37 ve LM 35/36/37’ nın işlevleri aynıdır.

TMP36 sıcaklık sensörü verileri aşağıda listelenmiştir.

Boyutu: TO-92 paket

Sıcaklık aralığı: -40 ° C ila 150 ° C

Çıkış aralığı: 0,1V (-40 ° C), 2.0V (150 ° C), fakat doğruluk 125 ° C

sonra azalır

Güç kaynağı: 2.7V-5.5V çalışma geriliminde sadece 0,05 mA’lik bir

akım çeker.

Daha detaylı bilgiler için TMP36 veri yapraklarına bakınız. (TMP36

Datasheet)

TMP36 ile 34 ve 35 serisini daha iyi karşılaştırmak için aşağıdaki şekli inceleyiniz.

Şekilde görüldüğü üzere X ekseni ısıyı ve Y ekseni ise ısı sensörlerinin çıkış gerilimini

göstermektedir. “b” eğrisi, TMP36 sensörüne aittir.

Gerilimi sıcaklığa dönüştürmek için aşağıdaki formülü

kullanacağız. (LM36 veya TMP36 sensörü için geçerli.)

SICAKLIK(°C ) = [(Çıkış Gerilimi Volt) – 0.5] * 10

Örneğin Çıkış Gerilimi 1V ise sıcaklık şu şekilde hesaplanır.

((1V -0.5) * 10) = 50 ° C

Görüldüğü gibi 1V=1000 mV’ luk gerilim için ölçülen sıcaklık 50

°C’ dir.

Eğer LM35 veya TMP35 kullanıyorsanız, yukarıdaki şekilde “a”

eğrisine denk gelir. Bu durumda formül:

SICAKLIK(°C ) = (Çıkış Gerilimi Volt) * 10

olacaktır.

Bu uygulamada Arduino UNO R3 ve TMP36 sıcaklık sensorü

kullanılarak sıcaklık ölçümü yapılıp, Arduino'nun serial monitor

kısmında görüntülenmiştir. BreadBoard’daki LED’ ler ise aşağıdaki

durumlarda ışık verecektir.

Sarı LED: 0 OC’ nin altındaki sıcaklıklar

Yeşil LED: 0 ile 40 OC arasındaki sıcaklıklar

Kırmızı LED: 40 OC nin üzerindeki sıcaklıklar

Bölüm 3: ARDUINO PROJELERİ

Konu 4.2.1.1:TMP35/36/37 SICAKLIK SENSÖRLERİ

TMP36 sıcaklık sensorunun 3 adet bağlantı pini vardır,

Soldaki: +5V

Ortadaki :Sinyal ucu Arduino'nun analog 0. pine bağlanacaktır.

Sağdaki :GND

TMP36 sıcaklık sensoru çalışma voltajı 2,7-5,5V arasındadır, Arduino üzerinden

rahatlıkla beslenebilir. TMP36'nın sinyal pini Arduino'nun analog 0. bitine bağlanacaktır. Program

yazma esnasında ölçümler için yukarıdaki formül kullanılacaktır.

LED’ leri sırası (SARI-YEŞİL-KIRMIZI) ile 13, 12, 11 nolu dijital çıkış pinlerine

bağlayınız. Şimdi New Electronics Lab çalışma alanına dönüp aşağıdaki bağlantıları yapınız.

Bölüm 3: ARDUINO PROJELERİ

Konu 4.2.2: BREADBOARD DÜZENİ

Devrenin şemasını görmek için Schematic View Butonuna tıklayınız. Aşağıdaki gibi bir görüntü

ile karşılaşacaksınız.

Bölüm 3: ARDUINO PROJELERİ

Konu 4.2.2: BREADBOARD BAĞLANTISI

Bölüm 3: ARDUINO PROJELERİ

Konu 4.2.3: TASLAK (SKETCH) YAZIMI ve ARDUINO KARTINA YÜKLENMESİ

Code Editor butonuna tıklayınız. Aşağıdaki taslak çalışmasını “Code Editor” penceresine yazınız. Her yaptığınız işlem “New Electronics Lab”

tarafından otomatik olarak internette kayıtlı hesabınıza kayıt edilecektir. Bir dahaki New Electronics Lab oturumunda çalışmanızın en son halini

göreceksiniz.

//Çıkış Pin Değişkenleri

int ledYellow = 13;

int ledGreen = 12;

int ledRed = 11;

//TMP36 Pin Değişkenleri

int sensorPin = 0; // Analog pin 0’ a TMP36'nın Vout (sense) ucu //bağlanmalıdır.

/*

Bilgisayarla seri iletişim yapabilmek için Setup’ da aşağıdaki tanımlama yapılır.

*/

void setup()

{

pinMode(ledYellow, OUTPUT); // Ledlerin bağlanacağı

pinMode(ledGreen, OUTPUT); // çıkışları ayarla

pinMode(ledRed, OUTPUT); //

Serial.begin(8600); //Bilgisayarla seri iletişimi başlat.

//sonuçları görmek için serial monitoru açınız.

}

void loop() // Loop fonksiyonuna giriş

{

//Sıcaklık sensöründen alınan ham değer

int reading = analogRead(sensorPin);

// Bu noktada Oran-Orantı yöntemi ile A0 analog girişine uygulanan gerilimin değerini

//hesaplıyoruz.

float voltage = reading * 5.0;

voltage = voltage / 1024.0;

// ilk önce ham reading değeri gönderilir.

Serial.print("Ham deger="); Serial.println(reading);

// TMP36'nın sinyal ucundaki gerilim

Serial.print(voltage); Serial.println(" volt");

// Şimdi de sıcaklığı gösterelim.

float temperatureC = (voltage - 0.5) * 100 ;

// MiliVolt cinsinden gerilimi sıcaklık değerine çevirmek için bu// formül kullanılır.

//500 mVolt 0 C için offset değeridir.

Serial.print(temperatureC); Serial.println(" derece C");

// Sıcaklık değerine bağlı olarak ilgili LED' in yakılması

if (temperatureC < 0) // Sıcaklığın 0' ın altında olması durumu

{digitalWrite(ledYellow, HIGH);digitalWrite(ledGreen, LOW);digitalWrite(ledRed, LOW);}

else if (temperatureC >= 0 && temperatureC <= 40 ) // Sıcaklığın 0 ila 40 derece arasında

olması

{digitalWrite(ledYellow, LOW);digitalWrite(ledGreen, HIGH);digitalWrite(ledRed, LOW); }

else if (temperatureC > 40 ) // Sıcaklığın 40 Derecenin üstünde olması durumu

{digitalWrite(ledYellow, LOW);digitalWrite(ledGreen, LOW);digitalWrite(ledRed, HIGH); }

delay(200); //200 mS bekle

}

Bölüm 3: ARDUINO PROJELERİ

Konu 4.2.3: TASLAK (SKETCH) YAZIMI ve ARDUINO KARTINA YÜKLENMESİ

Bölüm 3: ARDUINO PROJELERİ

Konu 4.2.4: SİMULASYONUN ÇALIŞTIRILMASI

Bu aşamada yaptığınız devreyi ve yazdığınız taslak programı çalıştırınız. Sağ üst köşedeki

“Start Simulation” butonuna basarak simulasyonu başlatın ve çalışmanızı test ediniz. TMP36

sensörünün üzerindeki Sıcaklık Değiştirme çubuğunu 0 ila 125 OC arasında değiştirerek hangi

LED’ in yandığını gözlemleyiniz. Yukarıdaki taslakta Ayrıca Serial monitörden sırası ile Analog

Giriş 0’ ın Ham Değeri (reading), Ham Değerin gerilime (voltage) dönüştürülmüş hali ve son

olarak Sıcaklık Değeri(temperatureC) gözlemlenebilir.

24 C0 deki ham Analog

değer ve gerçek gerilim

değeri (serial monitor

aracılığı ile)

Bölüm 4: ARDUINO PROJELERİ

Konu 4.3: LED YAKIP SÖNDÜRME (BLINK) UYGULAMASI

Bu derste, direncin farklı değerleri kullanılarak, bir LED’in parlaklığını

değiştirmeyi öğreneceksiniz.

Bölüm 4: ARDUINO PROJELERİ

Konu 4.3.1: MALZEME LİSTESİ

Bu derste anlatılan deneyleri uygulamak için, aşağıdaki parçalar gereklidir.

Parça-Adet

5mm Kırmızı LED- 1 Adet 270 Ω Direnç (kırmızı, mor, kahverengi çizgili) – 1 Adet

470 Ω Direnç (sarı, mor, kahverengi çizgili) -1 Adet 2.2 kΩ Direnç (kırmızı, kırmızı, kırmızı çizgili) -1 Adet

10 kΩ Direnç (kahverengi, siyah, turuncu çizgili) 1 Adet

Bölüm 4: ARDUINO PROJELERİ

Konu 4.3.1: MALZEME LİSTESİ

Yarı-Boy Breadboard – 1 Adet Arduino Uno R3 - 1 Adet

Bağlantı kabloları – 1 Adet

Bölüm 4: ARDUINO PROJELERİ

Konu 4.3.2: LED’LER

LED'lerden gösterge ışıkları yapabilirsiniz. Elektrik tüketimleri çok azdır ve ömürleri

çok uzundur.

Bu derste, muhtemelen en çok en yaygın olan 5mm kırmızı LED kullanacaksınız.

5mm., LED’ in dış çapını ifade eder. 5mm’lik LED’lerin yanı sıra, 3 mm ve 10 mm. çaplarında

LED’ler de mevcuttur.

LED’ inizi, doğrudan bir pil veya gerilim kaynağına bir bağlayamazsınız.. LED’ in Anod

ve Katod uçları vardır ve Anot ucuna (+) ve Katod ucuna (-) bağlanmalıdır. Aksi durumda LED

ışık yaymaz. Kırmızı LED’ in çalışma gerilimi 1.5 Volttur. LED’in çalışma gerilimini

sınırlandırmak için, ön direnç takılmalıdır. Aksi takdirde LED hasar görebilir.

Eğer bir LED ile bir direnç kullanmazsanız, LED

üzerinden çok fazla akım akacaktır. Doğal olarak, LED

üzerinde aşırı ısı üretilir. LED; hemen tahrip olabilir.

LED’ in, Anot(+) ve Katod(-) uçlarını bulmak için,

iki yol vardır. İlk olarak, Anot(+) ucu daha uzundur.

Katod(-) ucu kısadır.

İkincisi; Katod(-) ucuna LED’ in şeffaf tarafından

bakarsak, düz ve geniş bir kısım görürüz.

Bölüm 4: ARDUINO PROJELERİ

Konu 4.3.3: DİRENÇLER

Adından da anlaşılacağı gibi, dirençler elektrik akımını

sınırlar. Daha yüksek bir değerli bir direnç, daha az elektrik akımı

akacaktır. Biz LED’ den geçecek olan akımı direnç ile

sınırlandıracağız. LED’ in ne kadar parlaklık vereceği LED’ e

takılan seri direncin değerine bağlıdır.

Direnç birimi, genellikle Yunancada Omega-Ω harfi ile

kısaltılır. Ohm şeklinde okunur. Bir Ohm’un as katları çok fazla

kullanılmaz. Genelde Kilo ohm (1000 Ω) ve Mega ohm (1000.000

Ω) gibi üst katları kullanılır.

Bu derste, direnç, 270Ω, 470Ω, 2.2kΩ ve 10kΩ dört farklı

değerleri kullanacağız. Üzerlerinde farklı renkli şeritler olması

dışında bu dirençleri hepsi aynı görünüyor. Bu şeritler size

direncin değerini söyler.

Direnç üzerinde üç renkli çizgili renk kodu ve ve

devamında altın şerit bulunur. Aşağıdaki gibi her renge ait bir

numara vardır:

Bölüm 4: ARDUINO PROJELERİ

Konu 4.3.3: DİRENÇLER

RENKLER

KATSAYI değeri

Çarpan ToleransSıcaklıkkatsayısı1. band 2. band 3. band

Siyah 0 0 1

Kahverengi 1 1 1 10 ± %1 100 ppm

Kırmızı 2 2 2 100 ± %2 50 ppm

Turuncu 3 3 3 1k 15 ppm

Sarı 4 4 4 10k 25 ppm

Yeşil 5 5 5 100k ± %0.5

Mavi 6 6 6 1M ± %0.25

Mor 7 7 7 10M ± %0.10

Gri 8 8 8 ± %0.05

Beyaz 9 9 9

Altın 0.1 ± %5

Gümüş 0.01 ± %10

Renksiz ± %20

Yandaki tablonun kolay ezberlenmesi

açısından bir heceleme geliştirilmiştir.

SoKaKTa SaYaMaM GiBi (Ama Görürüm..)

Burada dikkat edeceğiniz gibi ilk iki kelimenin

sessiz harfleri sırası ile renk kodlarını (Siyah, Kahverengi,

Kırmızı, Turuncu, Sarı, Yeşil, Mavi Mor, Gri, Beyaz ), son

iki kelimenin baş harfleri ise Altın ve Gümüş'ü anımsatmak

için kullanılmıştır. S K K T S Y M M G B FORMÜL BU!

Örneğin yukarıdaki gibi dört bantlı bir direncimiz

olsun. Direnç resminden görüleceği üzere direncimizin

renkleri Kırmızı-Mor –Kahverengi – Altın şeklindedir.

Tablodan görüleceği üzere Kırmızının değeri 2 ve Morun

değeri 7’ dir. 2 ve 7 sayılarının yan yana getiriyoruz. Bunu

çarpan rengi ile çarpıyoruz. Çarpan rengimiz ise

Kahverengidir. Kahverenginin çarpan değeri ise 10’ dur. Bu

durumda direncimizin değerinin 27x10= 270 Ω olduğu

buluruz.

Çizgili kahverengi, siyah, turuncu bir direnç yani 10 k

10 ve üç sıfır yani 10.000 Ω olduğunu.

Renk şeritleri Kahverengi- Siyah-Turuncu-Altın

olan bir direncin değeri ise 10X1KΩ yani 10.000 Ω’ dur.

LED'ler gibi, dirençler yönlü elemanlar değildir. Her

iki yönlü bağlanabilirler.

Bu slayt glossary’de olsun.

Bölüm 4: ARDUINO PROJELERİ

Konu 4.3.4: BREADBOARD DÜZENİ

270 Ω direnci ve LEDİ kullanarak, aşağıda gösterildiği gibi, Breadboard üzerinde bağlantı

yapınız.

Arduino kartı, LED’in ve direncin kullanacağı

5 Volt gerilim için, uygun bir kaynaktır. Arduino

kartınızın USB kablosunu bilgisayarınıza

takınız, Arduino kartı size 5 Voltluk gerilim

sağlayacaktır.

Bölüm 4: ARDUINO PROJELERİ

Konu 4.3.4: BREADBOARD DÜZENİ

270 Ω’luk direnç ile LED oldukça parlak ışık verir. Eğer 270 Ω’ luk

direnci 470 Ω’luk direnç ile değiştirirsek, o zaman LED biraz

sönük görünür. 2.2kΩ direnci LED ile seri bağlarsak LED

oldukça sönük ışık verir. Son olarak, yerinde 10 kΩ direnç ile

deneme yaparsak LED sadece görünür şekilde çok az ışık verir.

Kırmızı kabloyu Breadboard’dan çıkartıp boş bir deliğe takarsak,

tıpkı bir anahtar gibi davranır ve LED söner.

Yüksek dirençten daha az akım geçer. (OHM KANUNU)

Kırmızı renkli LED için LED gerilimi 1,5 volt alınır.

I1=(U-ULED)/R1= (5-1,5)/270= 13 miliAmper

I2=(U-ULED)/R2= (5-1,5)/470= 7 miliAmper

I3=(U-ULED)/R3= (5-1,5)/2200= 1,5 miliAmper

I4=(U-ULED)/R4= (5-1,5)/10000= 0,3 miliAmper

I4 < I3 < I2 < I1

I1 Akımı en yüksektir. Akım ne kadar yüksekse; LED o derece

parlak yanacaktır.

Bu durumda LED’ e seri bağlanacak en uygun direnç 270 ohm olarak görülmektedir.

Bölüm 4: ARDUINO PROJELERİ

Konu 4.3.5: BREADBOARD ÜZERİNDEKİ LEDİ ARDUINO

BOARD İLE YAKIP SÖNDÜRMEK

Breadboard basit bir değişiklik ile, LEDi Arduino kartımızın bir çıkış pinine bağlayabiliriz.

Aşağıda gösterildiği gibi, kırmızı bağlantı telini, Arduino kartınızın +5V konnektöründen D13

portuna taşıyınız.

int led = 13;

LED 13 nolu çıkıştan yanıyor

Bir sonraki aşamada çıkış

numarasının değiştirilmesi

görülecektir.

Bölüm 4: ARDUINO PROJELERİ

Konu 4.3.5: BREADBOARD ÜZERİNDEKİ LEDİ ARDUINO

BOARD İLE YAKIP SÖNDÜRMEK

Şimdi 4.Derste 'Blink' örnek taslağını(programını) Arduino kartına yükleyiniz. Hem

Arduino kartına da yerleşik olan 'L' LED’ inin, hem de BreadBoardda bulunan LED’in yanıp

söndüğünü göreceksiniz.

Arduinonun farklı bir pinini kullanmayı deneyiniz. Bu pin D7 olacaktır. Kırmızı bağlantı

kablosunu, D13 pininden D7 pinine taşıyınız. Taslak çalışmanız (Programınız) üzerinde

aşağıdaki değişikliği yapınız.

int led = 13;

Yukarıdaki satırı aşağıdaki gibi değiştiriniz.

int led = 7;

Değiştirilmiş programınızı Arduino Kartınıza yükleyiniz. LED’iniz yine yanıp sönecektir. Ama bu

kez D7 pini üzerinden çalışmaktadır.

Bölüm 4: ARDUINO PROJELERİ

Konu 4.4: ARDUINO İLE RGB LED UYGULAMASI

Bu derste, Arduino ile RGB LED (Kırmızı Yeşil Mavi) kullanmayı öğreneceksiniz. LED’in rengini

kontrol etmek için, Arduino IDE’ de bulunan `analogWrite` fonksiyonu kullanılır.

Görünüş olarak RGB (Kırmızı, Yeşil, Mavi)

LED'ler, normal LED’ lere benzer. Ancak LED paketi

içinde, üç farklı LED barındırır. Kırmızı, yeşil ve de mavi

olmak üzere 3 LED vardır. Her bir LED için, ayrı bir bacak

mevcuttur. Her LED'in parlaklığını kontrol ederek, hemen

hemen istediğiniz herhangi bir rengi elde edebilirsiniz.

Normal şartlar altında LED’ e seri bağlanan

direncin değerini değiştirip, LED’ lerin parlaklığını

ayarlayabiliriz. Fakat bu yöntem çok zordur. Her seferinde

renk ayarlamak için direnç değerlerini değiştirmek zorunda

kalırsınız!

Neyse ki; Arduino IDE’de `analogWrite`

fonksiyonu yardımıyla renk değiştirme işini kolaylıkla

yapabilirsiniz. `AnalogWrite` komutu ile, RGB LED’in, her

üç LED’ine de istediğiniz miktarda değişken elektrik akımı

gönderebilirsiniz.

Bölüm 4: ARDUINO PROJELERİ

Konu 4.4: ARDUINO İLE RGB LED UYGULAMASI

PWM TEORİSİ : Darbe Genişlik Modülasyonu (PWM), elektrik gücünü kontrol etmek için

kullanılan bir tekniktir. Biz LED'lerin parlaklığını kontrol etmek için, burada PWM tekniğini

kullanacağız.

Aşağıdaki diyagram, Arduino PWM çıkışlarından birinin sinyalini göstermektedir.

Kabaca her 1/500 saniyede, PWM çıkışı bir

darbe üretecektir. Bu darbenin uzunluğu 'analogWrite'

fonksiyonu ile kontrol edilir. Yani 'analogWrite(0)' kodu

herhangi bir darbe üretmeyecektir. 'analogWrite (255)'

komutu ise yeni darbe gelene kadar çıkışı 5 Volt

seviyesinde tutacaktır.

Eğer ‘analogWrite’ komutuna, 0 ile 255

arasında bir değer ataması yaparsak, atadığımız

değere göre bir darbe üretilecektir. Arduino çıkışımızın 5

Voltta kalma süresini, bir PWM peryodunun %5’ i olarak

ayarlarsak, çıkışımıza sadece % 5 oranında elektriki

güç aktarmış oluruz.

PWM peryodunun %90’ ı süresince çıkışımızı

enerjilendirirsek, bu durumda çıkışa bağlı yükümüz

elektriki gücün %90’ ını alacaktır. Biz LED’ in bu kısa

süre içerisinde yanıp söndüğünü göremeyiz. Bize göre;

sadece LED’in parlaklığı değişiyormuş şeklinde görülür

Bölüm 4: ARDUINO PROJELERİ

Konu 4.4.1: MALZEME LİSTESİ:

Bu derste anlatılan projeyi uygulamak için, aşağıdaki parçalar gerekecektir.

Parçalar-Adet

Diffuse RGB 10mm LED - 1 Adet

270 Ω Direnç (kırmızı, mor, kahverengi

çizgili) - Biraz sönük olmasını isterseniz

1KΩ’ luk direnç kullanabilirsiniz – 3 Adet

Yarım boy BreadBoard – 1 Adet

Arduino Uno R3 Kartı – 1 AdetJumper tel paketi – 1 Adet

Bölüm 4: ARDUINO PROJELERİ

Konu 4.4.2. BREADBOARD BAĞLANTISI

RGB LED’ in dört bacağı vardır. LED paketi içindeki her bir LED' in Anod(+) bacakları dışarıya

çıkarılmıştır. Katod (-) uçları ise, LED paketi içinde birbirine bağlanmış ve tek bir bacak olarak

LED paketinin dışına çıkarılmıştır.

Ortak Katod(-) uç; LED paketinin düz tarafından bakıldığında

ikinci bacaktır. Aynı zamanda, bu dört bacak içindeki en uzun bacaktır.

Bu bacağı Arduino kartınızda GND ucuna bağlayacaksınız.

LED’ den geçen akımı sınırlandırmak için

270Ω direnç kullanmak gereklidir. Arduino

kartındaki 9,10 ve 11 numaralı çıkışları, 270Ω’

luk dirençler üzerinden, RGB LED'in üç

Anod(+) ucuna bağlayınız. Arduino Kartınızın

9,10 ve 11 nolu uçları PWM çıkışı

üretmektedir. PWM hakkında daha ayrıntılı

bilgi için PWM TEORİSİ konusuna bakınız.

Uyarı: Eğer Ortak Anodlu(+) LED

kullanıyorsanız uzun bacağı GND’ ye değil,

+5V ucuna bağlayınız.

Bölüm 4: ARDUINO PROJELERİ

Konu 4.4.2: BREADBOARD BAĞLANTISI

Bölüm 4: ARDUINO PROJELERİ

Konu 4.4.3: RGB RENKLERİ

Kırmızı, yeşil ve mavi ışık miktarlarını değiştirerek istediğiniz herhangi bir renk elde

etmemizin nedeni, gözümüzün içinde üç tür ışık reseptörü olmasıdır (kırmızı, yeşil ve mavi).

Gözünüz ve beyniniz kırmızı, yeşil ve mavi renklerinin miktarları işler, ve bu miktarları bir renk

yelpazesine dönüştürür.

Bir bakıma, üç LED kullanarak, biz gözlerimizi kandırıyoruz. Aynı düşünceyi, kırmızı,

yeşil ve mavi renk noktaları(pikselleri) kullanan LCD ekranlar ve TV'ler de kullanılır.

Her üç LED parlaklığını da, aynı olacak şekilde ayarlarsak,

gözümüze görünen ışığın rengi beyaz olacaktır. Mavi LED’in enerjisini

keserseniz, sadece kırmızı ve yeşil LED'ler ışık verir. Bu durumda renk açık

sarı görünür.

Kırmızı, yeşil ve mavi LED’lerin parlaklığını ayrı ayrı kontrol

edersek, herhangi bir renk karışımını elde edebiririz.

Siyah bir renk olarak kabul edilmez. Daha ziyade ışık yokluğu

olarak kabul edilebilir. Eğer bütün LED’ lerimizi kapatırsak siyah renk elde

edebiliriz.

Bölüm 4: ARDUINO PROJELERİ

Konu 4.4.4: ARDUINO TASLAĞI ( PROGRAMI)

Aşağıdaki test programında renkler sırası, kırmızı, yeşil, mavi, sarı, mor, ve aqua olarak

görünecektir. Bu renkler, standart bilgisayar renkleridir./*RGB LED*/

int redPin = 11;

int greenPin = 10;

int bluePin = 9;

//Ortak Anodlu LED kullanılıyorsa aşağıdaki

// komut satırını aktif yapınız.( uncomment)

//#define COMMON_ANODE

void setup()

{

pinMode(redPin, OUTPUT);

pinMode(greenPin, OUTPUT);

pinMode(bluePin, OUTPUT);

}

void loop()

{

setColor(255, 0, 0); // red

delay(1000);

setColor(0, 255, 0); // green

delay(1000);

setColor(0, 0, 255); // blue

delay(1000);

setColor(255, 255, 0); // yellow

delay(1000);

setColor(80, 0, 80); // purple

delay(1000);

setColor(0, 255, 255); // aqua

delay(1000);

}

void setColor(int red, int green, int blue)

{

#ifdef COMMON_ANODE

red = 255 - red;

green = 255 - green;

blue = 255 - blue;

#endif

analogWrite(redPin, red);

analogWrite(greenPin, green);

analogWrite(bluePin, blue);

}

Bu örnekte #ifdef #endif ve #define gibi önişlemci

(preprocessor) deyimleri kullanılmıştır.

#define komutu ile COMMON_ANODE satırı aktif

yapılırsa red, green, ve blue değerleri 255

sayısından çıkarılmaktadır.

Burada #ifdef #endif ve #define kullanımının tek

amacı; programcının donanımda yapacağı bir

değişiklikte ( Ortak Anodlu LED kullanmak),

programın da buna kolaylıkla adapte olabilmesini

sağlamaktır.

Bölüm 4: ARDUINO PROJELERİ

Konu 4.4.4: ARDUINO TASLAĞI ( PROGRAMI)

Bu taslağı deneyiniz. Bu taslağı parçalayıp ayrıntılı bir şekilde inceleyeceğiz. Taslak;

Arduino pinlerinden hangisinin, hangi renk için kullanılacağını belirlemekle başlar.

int redPin = 11;

int greenPin = 10;

int bluePin = 9;

Bir sonraki adım 'setup' fonksiyonunu yazmaktır. Daha önce derslerde gördüğünüz gibi, 'setup'

fonksiyonu sadece resetten sonra bir kez çalıştırılır. Bu durumda, yapmak zorunda olduğunuz

görev, üç kart pinini çıkış olarak tanımlamaktır.

void setup()

{

pinMode(redPin, OUTPUT);

pinMode(greenPin, OUTPUT);

pinMode(bluePin, OUTPUT);

}

Bölüm 4: ARDUINO PROJELERİ

Konu 4.4.4: ARDUINO TASLAĞI ( PROGRAMI)

'loop' fonksiyonuna göz atmadan önce, taslağımızdaki en son fonksiyona bir göz gezdirelim.

void setColor(int red, int green, int blue)

{

analogWrite(redPin, red);

analogWrite(greenPin, green);

analogWrite(bluePin, blue);

}

Bu fonksiyon, üç argüman içerir. RED ,GREEN ve BLUE LED'lerin parlaklığı için

kullanılır. Her renk için 0 sayısı, LED sönük anlamına gelir ve 255 maksimum parlaklık anlamına

gelir. Bu durumuda ‘setcolor’ fonksiyonuna atayacağımız sayı aralığı 0-255 arasında olacaktır.

‘setcolor’ fonksiyonu çalıştırıldığı zaman, her bir LED’ in parlaklığını ayarlamak için

'analogWrite' fonksiyonunu çağırır. Dikkat edilirse ‘setcolor’ fonksiyonu kullanıcı tarafından

oluşturulmuş bir fonksiyondur.

Eğer 'loop' fonksiyonuna bakarsak, bir saniye aralıklarla hangi rengin görüntülenmek

istendiğini görürsünüz. `Setcolor` fonksiyonunun, `loop` fonksiyonu içerisinden çalıştırılması ile

RED, GREEN, BLUE değerlerini değiştirerek birer saniye aralıklarla istediğiniz rengi elde

edersiniz.

Bölüm 4: ARDUINO PROJELERİ

Konu 4.4.4: ARDUINO TASLAĞI ( PROGRAMI)

void loop()

{

setColor(255, 0, 0); // red

delay(1000);

setColor(0, 255, 0); // green

delay(1000);

setColor(0, 0, 255); // blue

delay(1000);

setColor(255, 255, 0);// yellow

delay(1000);

setColor(80, 0, 80); // purple

delay(1000);

setColor(0, 255, 255);// aqua

delay(1000);

}

Taslak programınıza yeni renkler

eklemeyi deneyin. LED’ lerdeki Renk efektinin

değiştiğini göreceksiniz.

Uyarı:

Ortak Anot(+) RGB LED

kullanıyorsanız doğru rengi elde etmek için

‘AnalogWrite’ fonksiyonunun değerlerini

değiştirmek zorundasınız. Bu durumda

girdiğiniz renk değeri 255’ den çıkarılır. (red =

255 - red; gibi)

Eğer ortak Katod(-) RGB LED

kullanıyorsanız, aşağıdaki satırı yorum

karakterlerini ( // ) kullanarak iptal ediniz!

// #define COMMON_ANODE

Satırın sol tarafındaki // işaretleri, bu

satırın Arduino IDE derleyicisi tarafından

dikkate alınmayacağını gösteriyor.

Bölüm 4: ARDUINO PROJELERİ

Konu 4.4.5: RENKLERİ ARDUINO RGB LED

UYGULAMASI İLE GERÇEKLEŞTİRMEK

İnternet sayfalarında ve bilgisayarımızda oluşan bütün renkler daha önce de belirtildiği

gibi üç temel rengin (RGB) karışımı ile oluşur.

Ayrıntılı bilgi için aşağıdaki linke bakınız: https://tr.wikipedia.org/wiki/Web_renkleri

Renk Hexadesimal Renk Hexadesimal Renk Hexadesimal Renk Hexadesimal

siyah #000000 gümüş #c0c0c0 bordo #800000 kırmızı #ff0000

lacivert #000080 mavi #0000ff menekşe #8f00ff galibarda #ff00ff

yeşil #008000 çimen #00ff00 kahve #964B00 sarı #ffff00

teal #008080 cyan #00ffff gri #808080 beyaz #ffffff

Bölüm 4: ARDUINO PROJELERİ

Konu 4.4.5: RENKLERİ ARDUINO RGB LED

UYGULAMASI İLE GERÇEKLEŞTİRMEK

Renk Hexadesimal Renk Hexadesimal Renk Hexadesimal Renk Hexadesimal

siyah #000000 gümüş #c0c0c0 bordo #800000 kırmızı #ff0000

lacivert #000080 mavi #0000ff menekşe #8f00ff galibarda #ff00ff

yeşil #008000 çimen #00ff00 kahve #964B00 sarı #ffff00

teal #008080 cyan #00ffff gri #808080 beyaz #ffffff

Yukarıdaki tabloda görüldüğü gibi, renkler Hexadecimal(Onaltılık sayı sistemi) ile

gösterilmiştir. Burada görüldüğü gibi, kırmızı rengi elde etmek # FF0000 değerini girmek

gerekir. FF hexadecimal değeri, Decimal sayı sisteminde 255 değerine denk gelir.

Arduino kartınızda, bu renklerden birini deneyelim. ‘setColor’ fonksiyonuna bu değerleri

hexadecimal sayı sisteminde gireceğiz. ( 0x karakterleri Arduino IDE programına girilen sayının

hexadecimal karakterde olduğunu söyler.)

Menekşe rengini elde etmek için, kırmızı, yeşil ve mavi değerleri (Hexadecimal olarak)

sırasıyla 8F, 00 ve FF olmalıdır. Böylece 'setColor' fonksiyonunun içine bu değerleri

aktarabilirsiniz:

setColor(0x8F, 0x0, 0xFF); // Menekşe rengi hexadecimal değerleri

Bölüm 4: ARDUINO PROJELERİ

Konu 4.4.5: RENKLERİ ARDUINO RGB LED

UYGULAMASI İLE GERÇEKLEŞTİRMEK

Renk değerlerinin önüne '0x' koyarak renk değerleri için Hexadecimal(onaltılık sayı

sistemi) giriş yapmış olduk.

‘Loop' fonksiyonuna yukarıdaki renklerden üç renk eklemeyi deneyin. Her bir renkten

sonra bir gecikme eklemeyi ihmal etmeyin.