Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore Arduino-kitap

Arduino-kitap

Published by mates-55, 2015-03-18 17:11:57

Description: Arduino-kitap

Search

Read the Text Version

Arduino programlama

önsöziki bölümden oluşan bu kitapta birinci bölüm Arduinonedir,ne değildir ve programlama için referanskısmından oluşurken ikinci kısım ise Arduino ileyapılmış projelerden oluşuyor.Kitabın amacıArduino'ya yeni başlayanlar için basit anlaşılır birkaynak sunmak.LisansBu belgeyi, Open Publication Licence lisansının 1.0 ya dadaha sonraki sürümünün koşullarına bağlı kalarakkopyalayabilir, dağıtabilir ve/veya değiştirebilirsiniz. BuLisansın özgün kopyasınıhttp://www.opencontent.org/openpub/ adresindebulabilirsiniz.

Not: Burdaki notlarla ilgili gördügünüz bir sorun veönerileriniz için [email protected] mailatabilirsiniz. içindekiler nedir? 1. Fiziksel Programlama nedir? 2. Arduino Nedir? 3. Neden Arduino? 4. Arduino çeşitleri ve Shield'leri 5. Arduino Kurulum Programlama Temel 1. Arduino Programlama dilinin Kod yapısı 2. Minimum Arduino Sketch'i 3. ilk Arduino Programı 4. Referanslar

Projeler1. proje2. proje3. proje4. proje5. proje6. proje7. proje8. proje9. proje10.proje

Nazır DOĞANwww.gereksizcoder.wordpress.com V.0.1

Fiziksel Programlama Fiziksel programlama yazılım ve donanım kullanarakanalog dış dünyayla veri alışverişi yapan fiziksel tasarlamaişine verilen isimdir.Sensorler yardımıyla dış dünyaylailetişime geçilir.Analog olan veriler dijitale aktarılır ve yazılımsayesinde ne yapılacagına karar verilir.Arduino Nedir?

Arduino fiziksel dünyayı algılayan ve kontrol edebilmekiçin kullanabileciginiz basit bir bilgisayardır. Basit birmikroişlemci ve yazılım yazmak için bir geliştirme ortamınasahip basit bir fiziksel hesaplama platformudur. Arduino anahtarları ,sensorleri,motorları ve diger fizikselçıkışları kontrol etmek ve etkileşimli nesneler geliştirmek içinkullanılabilir. Arduino projeleri tek başına geliştirebilir yadabilgisayar üzerinde çalışan yazılımlara baglanabilir .(Flash,Processing vb..) Arduino açık kaynak bir geliştirme ortamına sahip olupProcessing yazılımından yola çıkarak yazılmıştır. Kendi board'unuzu yapabileceginiz gibi tamamen hazıralabilirsiniz.ve tamamen açık kaynak kodlu bir IDE'ye sahiptir

Neden Arduino ? Fiziksel ortam için birçok mikrokontrolör vemikrokontrolör platformu mevcuttur. Örnegin Parallax BasicStamp,Netmedia's BX-24,Phidgets,MIT's Handyboard vs..birçogu aynı fonksiyona sahiptir. Fakat hepsininprogramlanması oldukça zordur.Arduino ise programlamayıoldukça kolay hale getirir.Ögrenciler ve amatörler için büyükavantajlar saglar. Nedenler ise • Ucuz olması-Arduino diger platformlarla karşılaştıgında daha ucuzdur.ayrıca kendiniz yapabilirsiniz. • Çapraz platform olması-Arduino Linux,Windows ve MacOs ta çalışabilir.Çogu mikrokontrolör sistemi Windows'la sınırlıdır. • Basit ve Açık Programlama Ortamı-Arduino yazılımı yeni başlayanlar için oldukça kolay bir ortam sunar. • Açık Kaynak olması-Benim düşüncem en önemli sebeptir.Gereksiz bir çok yazılıma para vermekten kurtarır ve devamlı gelişebilen bir ortam sunar.

Arduino Çeşitleri ve Shield'leriArduino UNOArduino Uno ATMEGA 328 temelli bir board'dur. 14 tanedijital giriş/çıkış (G/Ç) (6 tanesi PWM için kullanılabilir)pinine sahiptir.6 tane analog giriş ve 16 Mhz seramikresonator'e bulunmaktadır.USB baglantısı sayesinde kolaycayazdıgınız kodu yükleyip çalıştırabilirsiniz. Aynı zamandaUSB bağlantısını güç içinde kullanabilirsiniz.Ya da üzerinde bulunan Güç girişi ile bir güç kaynağınabağlayabilirsiniz.Bir adette ICSP baglantısı bulunmaktadır.Özet olarakMikrokontroller ATMEGA 328Çalışma Voltajı 5VGiriş Voltaji (tavsiye edilen) 7-12VGiriş Voltajı (limit) 6-20VDijital G/Ç 14 (6 tanesi PWM destekliyor)Analog Girişler 6DC akım her pin'de 40mA

3.3V pin için DC akım 50mAFlash Hafıza 32KBSRAM 1KBEEPROM 1KBSaat Hızı 16MHzArduino Uno'dan bahsettikten sonra Uno'nun öneminegelelim.Uno,Arduino programlamaya yeni başlayanlar içinbiçilmiş kaftandır.Hem diger board'lara nazaran ucuz oluşuher yerde bulunabilir olması ve Arduino shield'lerin hemenhemen hepsiyle uyumlu olması nedeniyle tercih sebebidir.

Arduino MEGA 2560Arduino Mega 2560 ATMEGA 2560 temelli bir board'dur.54 tane dijital G/Ç (15 tanesi PWM için kullanılabilir).16 taneanalog giriş ve 4 UART(donanım seri portu)bulunmaktadır.16 MHz kristal osilator,USB baglantı ve güçgirişine sahiptir.ICSP baglantısı ve reset butonu bu board'damevcuttur.Özet olarak ATMEGA 2560Mikrokontroller 5VÇalışma Voltajı 7-12VGiriş Voltaji (tavsiye edilen) 6-20VGiriş Voltajı (limit) 54(15 tanesi PWM destekliyor)Dijital G/Ç

Analog Girişler 6DC akım her pin'de 40mA3.3V pin için DC akım 50mAFlash Hafıza 256KBSRAM 8KBEEPROM 4KBSaat Hızı 16MHzArduino Mega'nın özelliklerinden bahsettikten sonra iseMega neden önemli bir boarddur ondan bahsedelim.Arduino Mega hafıza ve pin sayısından dolayı daha büyükprojeler için ideal bir boarddur .Uno'nun yetmedigi projeleriçin kullanılabilir.Mega,Uno için tasarlanmış bir çok shield ile uyumludur.Diger Arduino Board'larıBurada bütün Arduino Boardlarından bahsetmem çoktamümkün degil Muhtemelen ben bu yazıyı yazarken yeni birçok board tasarlanmaktadır . :)Sadece isimlerini ve birkaç özelliğini yazarak geçmekistiyorum.

İlk ve tek 32 bit Arduino DUEArduino Nano ve MiniArduino ESPLORA ve Leonardo

LilypadShield'lerShield'leri tanıtmadan önce shield nedir onun üzerinde birazdurmak istiyorum.Shield'ler Arduino boardumuzun üzerinekolayca takılıp yapmak istediğimiz projeyi dahada kolayyapmamızı saglayan ek board'lardır.Arduino'nun resmi olarak birçok shield'i bulunmaktadır.amaaçık kaynak olmasından dolayı gelişrtiriciler kendi

shield'lerini tasarlayıp satmakta veya kullanmaktadır.Resmi Arduino Shield'lerinden BazılarıGSM shieldEthernet Shield

Wireless SD ShieldMotor Shield

XbeeArduino Windows KurulumuÖncelikle www.arduino.cc sitesinden arduinonunbilgisayarımızın işletim sistemine uygun IDE'yi indiriyoz.İndirdikten sonra ise yapmamız gereken Arduino'yubilgisayarımıza bağlayıp tanıtmak.Bunu ekran görüntüleriyle anlatmak daha kolay sanırım. :)









Eger bu ekran görüntülerindeki adımları izlerseniz.Arduino'yu sorunsuz olarak bilgisayarınıza tanıtmışsınızdır.Linux üzerinde ArduinoEger sizde benim gibi bir Ubuntu kullanıcısıysanız UbuntuSoftware Center'dan direk olarak kurabilirsiniz.Ya daArduino'nun sitesinden linux için olan versiyonunu indiripdirek olarak çalıştırabilirsiniz .Benim kişisel önerim ise birlinux dağıtımı kullanmanızdır.Bir neden göstermek gerekirse64 bit Windows üzerinde Processing(daha ilerdebahsedeceğim) seri monitor'u kullanamamanızdır.PROGRAMLAMAArduino kod yapısıEger bir programlama diliyle uğraştıysanız Arduino sizeoldukça kolay gelecektir. Hiç ugraşmadıysanız isekorkmanıza gerek yok.Arduino'yu en temel seviyeden

anlatacağım.Bu sayede programlamaya ilğinizi artırıpyazdığınız kodları çalıştırıp gözünüzle gördügünüz içinnormal bir bilgisayar programlama dilinden daha kolayöğreneceksiniz. Eger C ailesinden bir dili ile ugraştıysanız Arduino dilinianlamanız daha kolay olacaktır.çünkü Arduino dili C dilindenesinlenmiştir. Ve C++ ile kütüphane yazabilir bunlarıkullanabilirsiniz.Minimum Kod

Fazla uzatmadan artık programlamaya başlamakistiyorum.dedigim gibi Arduino oldukça kolay en başta bunuaklımızda tutalım.Zaten felsefesi kolay olmak. :)Arduino kodunun çalışabilmesi için minimum iki tanemethoda ihtiyacımız var bunlar setup() ve loop()methodlarıdır.Setup()Bu fonksiyon sketch'in(her bir Arduino çalışmasına verilenad) başladığını gösterir. Bu fonksiyonun içinde değişkenlerve pinler tanımlanır.Kütüphaneler kullanılmaya başlanır. Bufonksiyon Arduino çalışıtıgında veya resetlendiğinde birdefa çalışır.Loop()



Bu fonksiyon ise Setup() fonksiyonunda tanımlanan G/Çbirimlerinin kontrolünü bizim yazdıgımız koda göre yapar.Örnegin bir led'e ne kadar süre yanıp ne kadaryanmayacagını burda yapabiliriz .yada bir LDR yardımıylaışıgın şiddetini ölçebiliriz.Loop() fonksiyonu Arduinoçalışmaya başladıktan sonra devamlı olarak çalışır.devamlıolarak başa döner ve döngüyü devam ettirir.

İlk Arduino Sketch'iBuraya kadar Arduino nedir ne degildir diye bahsettim .Artıkkodlamaya geçmenin zamanı geldi .lk kodumuzda bir Led'i yakıp söndürecegiz.Devremizi şekildeki gibi kurduktan sonra tek yapmamızgereken yazdıgımız kodu boarda yüklemek.



Eğer yukardakiları eksiksiz yaptıysanız şu an arduino

board'unuzda led'in yanıp söndügünü görmelisiniz. Eğer olmadıysa bu işlemlere tekrardan göz atmanızdafayda var. :)Seri Dijital OkumaBazı şeylerin Türkçesini tam bir çevirisi olmadığından ya dabenim bilmediğimden dolayı böyle çeviriler olabilir.Bu örnekte ise buton'un durumunu yani açık mı kapalımıonu Arduino board'umuzla seri ileşitimini sağlayacağız. Gerekli Donanımlar • Arduino Board • Buton • 10k ohm direnç • Devre Tahtası(Breadboard) • Kablo

Yukardakı gibi butonu ve dirençi bagladıktan sonrayapmamız gereken sadece kodumuzu board'a yüklemek.Kodu File=>Examples=>Basics=>DigitalSerialRead yolunuizleyerek açabilirsiniz

Daha sonra yapmanız gereken Seri Monitor'u açıp dijital1 ve 0 'ları görecegiz. Eger devre açıksa 0 ,değilse 1 'igörecegiz.Seri Monitor nerede diyorsanız aşağıdaki resimde

görebilirsiniz. Analog Seri OkumaBu örnekte ise potansiyometre ile fiziksel dünyadan analogveriler okuyacağız.Öncelikle potansiyometrenin neoldugundan biraz bahsedelim .potansiyometre basitçe bireksen üzerinde dönen ayarlı dirençtir.

Gerekli Donanımlar • Arduino • 10 Kohm Potansiyometreşekildeki gibi bağladıktan sonra tek yapmanız gerekenBoard'da kodu yüklemek.Kodu File=>Examples=>Basics=>AnalogSerialRead yolunuizleyerek açabilirsiniz.

Kodu yükledikten sonra Seri Monitor'u açıp nelerdöndügüne bakabilirsiniz. Eğer potensiyometreyleoynarsanız değerlerin degiştigini göreceksiniz.Arduino'dabulunan ADC (analog to digital Converter) sayesinde 0-1023arasında sayılara dönüştügünü görebilirsiniz.Buraya kadar basitçe analog ve digital kavramlarınıanladığınızı varsayarak artık programlamaya başlamak

istiyorum.Sabitler ve Veri TipleriSabitler Arduino dilinde öntanımlı olarak bulunmaktadır.Bu sabitler programımızın daha kolay okunmasını sağlar.Boolean SabitleriEğer az çok dijital elektronikle uğraştıysanız BooleanMatematiğinden haberdar olmalısınız.Boolean sabitleri 1 ve 0 'dır .Arduino'da ise true ve false 'dir.Burda 0 false 1 ise true anlamına gelmektedir.Pinlerin Durumlarını BelirlemeArduino pinlerinden okuyabileceğimiz yada yazabileceğimiziki tane deger vardır. Bunlar HIGH ve LOW 'dur.BurdaHIGH voltajın var oldugunu LOW ise olmadıgını gösterir. digitalWrite( pin,HIGH) veya digitalWrite(pin,LOW) şeklinde kullanabiliriz.Veri Tipleri • voidVoid kelimesi sadece fonksiyon tanımlanırken kullanılır.

Bu fonskiyon çagırıldığında hiçbir değer döndürmez. Örneginvoid setup(){ // ...}void loop(){ // ...} • boolean boolean'dan daha önce bahsettiğim için üzerindedurmayacağım . • char

1 bayt'lık bir karakter değeri saklayan veri türüdür.Örnekchar karakter='A';Eğer birden çok karakter içinchar karakter=”ABC”;şeklinde kullanılılabilir.Char (Karakterler) sayı olarakta tutulabilir.ASCII tablosunagöz atmanız lazım.Örnekchar karakter='A';char karakter=65;Eger ASCII tablosuna göz attıysanız A nın sayısal degerinin65 oldugunu görebilirsiniz. • unsigned char Unsigned Char hafızada 1 baytlık yer tutar.byte ile aynıdır. 0-255 arasındaki sayıları encode eder. • Byte Byte , 0-255 arasında hafızada 8 bit unsigned sayı tutar. • int

int veri tipi sayı tutmak için kullanılan birincil veri tipidir.-32,768(-2^15)-32,767(2^15-1) aralığında degeralır.Hafızada 2 baytlık yer tutar.Örnekint ledPin=13;• unsigned intunsigned int ile int farkı ise unsigned int negatif degertutmaz.sadece pozitif deger alır. 0-65,535(2^16-1) arasındadır.int gibi hafızada 2 baytlıkyer tutar.• Wordword ,0-65535 arasında 16 bit unsigned sayıtutar.Unsigned int ile aynıdır.• LongLong,sayı tutmak için genişletilmiş veri tipidir.-2,147,1483,648-2,147,483,647 arasında 32 bit'lik (4bayts) sayı tutar.• unsigned longUsigned long'ta long veri tipi gibi 32 bit (4 bayt) veritutar. Farkı ise sadece pozitif değerler almasıdır.0-4,294,967,295(2^32-1) aralığındadır.

• short Short 16 bit'lik bir veri tipidir. -32,768(-2^15) -32,767(2^15-1) arasındadır. • Float Float, decimal sayılar için kullanılan veri tipidir. Float veri tipi daha çok analog ve devam eden değerlerde daha büyük çözünürlük elde etmek için kullanılır.Değer aralığı -3,4028235E+38 ile 3,4028235E+38 arasındadır. 32 bit (4 bayt) sayı tutar. Float virgulden sonra 6-7 basamağa sahiptir. • Double Float'la aynı işi görür. • array(dizi) Dizi ,bir dizin numarası ile erişilen degişkenlerintopluluğudur.Bir Dizi(Array) oluşturmak int Dizi=[6]; int Pinler [ ]={2,4,8,7,6}; char mesaj[6]=”hello”;

Dizinin bir elemanına değer atamakmySensVals[0]=10;Dizinin bir elemanından değer almakx=mySensVals[4];Dizi ve For Döngüsüint i;for(i=0; i<5; i++){ Serial.println(myPins[i]);}OPERATÖRLERAritmetik Operatörler • = atama operatörü

• + toplama operatörü • - çıkarma operatörü • * çarpma operatörü • / bölme operatörü • % mod(artık bölme)Karşılaştırma Operatörleri • == eşittir operatörü • != eşit degil operatörü • < küçüktür operatörü • > büyüktür operatörü • <= küçük veya eşittir • >= büyük veya eşittir

Boolean Operatörleri• && AND (ve ) operatörü if deyiminde kullanılabilir. Örnek if (digitalRead(2) == HIGH && digitalRead(3) == HIGH) { // read two switches // ... }• || OR (veya ) operatörü if (x > 0 || y > 0) { // ... }• ! NOT (degil ) operatörü if (!x) { // ...}

Bitwise Operatörleri • & (bitwise and) • | (bitwise or ) • ^ (bitwise xor) • ~ (bitwise not) • << (bitwise left) • >> (bitwise right)Birleştirme Operatörleri • ++ artırma • -- azaltma • += ekleyerek atama • -= eksilterek atama • *= çarparak atama • /= bölerek atama • %= bölüp kalanı atama • &=

• |=FonksiyonlarDijital G/Ç • pinMode()Bir giriş(input) ya da çıkış(output) olarak belirtilen pin'iyapılandırır.SözdizimipinMode(pin,Mode)pin:Kaç numaralı pin'i ayarlamak istiyorsak onu yazıyoruz.Mode: INPUT,OUTPUT veya INPUT_PULLUP durumlarındanbirini yazıyoruz.ÖrnekpinMode(led,OUTPUT); • DigitalWrite() HIGH veya LOW degerini pin'e gönderen fonksiyondur.

Eğer voltaj 5V veya 3.3V ayarlanmışşa HIGH degeri içinbu degeri gönderir.LOW için ise 0V gönderir.

• digitalRead() Pin'in degerini okur .HIGH veya LOW olabilir. deger = digitalRead(inPin);

Analog G/Ç • analogReference() Analog giriş olarak kullanılan referans gerilimini yapılandırır.Seçenekler ise şunlardır • DEFAULT:varsayılan analog 5V veya 3.3 Volt • INTERNAL:1.1 volt Atmega168 veya ATMEGA328 de 2.56 Volttur. • EXTERNAL: AREF pin uygulanan voltajdır.0-5V arasında kullanılır. • analogRead() Belirtilen analog pin değerini okur .Arduino 6 kanal (8kanal Mini ve Nano,16 kanal Mega) ,10 bit ADC(AnalogDigital Converter).Bu şu anlama gelmektedir. 0 -1023arasındaki tamsayı değerlere 0 ile 5 volta arası girişgerilimleri ile eşleşir. 5Volt/1.024 birim veya birim başına0,0049. Yani Arduio'nun okuduğunuz Analog degeri bu sayıile çarparak Voltaji bulabilirsiniz.Bir analog giriş okumak için yaklaşık 100

mikrosaniye(0,0001 ) alır. En yüksek okuma orani isesaniyede 10,000 defadır. • AnalogWrite Analog değeri belirtilen pin'e yazar.LED'lerin parlaklıgını ayarlamak veya Motorları farklı hızlarda sürebilirsiniz.Kare dalga üretir.PWM sinyal frekansı yaklaşık olarak 490Hz'dir. Çogu Arduino Board'unda bu fonksiyon 3,5,6,9,10 ve 11 numaralı pinlerle çalışır.Sadece Mega board'ta 2 den 13 e kadardır. Sözdizimi analogWrite(pin,value) Parametre pin: pin'in numarası value: 0(kapalı)-255(açık) arasındaki degerlerÖrnekZaman • millis() Arduino'da yüklü mevcut olan programı başlamasından sonra milisaniye değerinde sayı döndürür.Yaklaşık 50

gün sonra overflow(taşma ) olacaktır. Örnek• micros() Arduino'da yüklü mevcut olan programı başlamasından sonra mikrosaniye değerinde sayı döndürür.Yaklaşık 70 dakika sonra overflow olacaktır. Örnek• delay() Programı belirtilen süre kadar durdurur. Birimi milisaniyedir. 1000 milisaniye 1 saniyedir. Sözdizimi delay(ms) Örnek• delayMicroseconds() Programı belirtilen süre kadar durdurur. Birimi mikrosaniyedir. 1000 mikrosaniye 1 milisaniyedir.Saniyenin milyonda bir'i kadardır. Sözdizimi


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook