Professional Documents
Culture Documents
nsz
iki blmden oluan bu kitapta birinci blm Arduino
nedir,ne deildir ve programlama iin referans
ksmndan oluurken ikinci ksm ise Arduino ile
yaplm projelerden oluuyor.Kitabn amac
Arduino'ya yeni balayanlar iin basit anlalr bir
kaynak sunmak.
Lisans
Bu belgeyi, Open Publication Licence lisansnn 1.0 ya da
daha sonraki srmnn koullarna bal kalarak
kopyalayabilir, databilir ve/veya deitirebilirsiniz. Bu
Lisansn zgn kopyasn
http://www.opencontent.org/openpub/ adresinde
bulabilirsiniz.
iindekiler
nedir?
1. Fiziksel Programlama nedir?
2. Arduino Nedir?
3. Neden Arduino?
4. Arduino eitleri ve Shield'leri
5. Arduino Kurulum
Programlama
Temel
1. Arduino Programlama dilinin Kod yaps
2. Minimum Arduino Sketch'i
3. ilk Arduino Program
4. Referanslar
Projeler
1. proje
2. proje
3. proje
4. proje
5. proje
6. proje
7. proje
8. proje
9. proje
10.proje
Nazr DOAN
www.gereksizcoder.wordpress.com
V.0.1
Fiziksel Programlama
Fiziksel programlama yazlm ve donanm kullanarak
analog d dnyayla veri alverii yapan fiziksel tasarlama
iine verilen isimdir.Sensorler yardmyla d dnyayla
iletiime geilir.Analog olan veriler dijitale aktarlr ve yazlm
sayesinde ne yaplacagna karar verilir.
Arduino Nedir?
Neden Arduino ?
Fiziksel ortam iin birok mikrokontrolr ve
mikrokontrolr platformu mevcuttur. rnegin Parallax Basic
Stamp,Netmedia's BX-24,Phidgets,MIT's Handyboard vs..
birogu ayn fonksiyona sahiptir. Fakat hepsinin
programlanmas olduka zordur.Arduino ise programlamay
olduka kolay hale getirir.grenciler ve amatrler iin byk
avantajlar saglar.
Nedenler ise
ATMEGA 328
alma Voltaj
5V
7-12V
6-20V
Dijital G/
Analog Giriler
40mA
50mA
Flash Hafza
32KB
SRAM
1KB
EEPROM
1KB
Saat Hz
16MHz
zet olarak
Mikrokontroller
ATMEGA 2560
alma Voltaj
5V
7-12V
6-20V
Dijital G/
Analog Giriler
40mA
50mA
Flash Hafza
256KB
SRAM
8KB
EEPROM
4KB
Saat Hz
16MHz
Lilypad
Shield'ler
Shield'leri tantmadan nce shield nedir onun zerinde biraz
durmak istiyorum.Shield'ler Arduino boardumuzun zerine
kolayca taklp yapmak istediimiz projeyi dahada kolay
yapmamz saglayan ek board'lardr.
Arduino'nun resmi olarak birok shield'i bulunmaktadr.ama
ak kaynak olmasndan dolay gelirtiriciler kendi
Ethernet Shield
Wireless SD Shield
Motor Shield
Xbee
PROGRAMLAMA
Arduino kod yaps
Eger bir programlama diliyle uratysanz Arduino size
olduka kolay gelecektir. Hi ugramadysanz ise
korkmanza gerek yok.Arduino'yu en temel seviyeden
Minimum Kod
setup() ve loop()
methodlardr.
Setup()
Bu fonksiyon sketch'in(her bir Arduino almasna verilen
ad) baladn gsterir. Bu fonksiyonun iinde deikenler
ve pinler tanmlanr.Ktphaneler kullanlmaya balanr. Bu
fonksiyon Arduino altgnda veya resetlendiinde bir
defa alr.
Loop()
Bu fonksiyon ise
lk Arduino Sketch'i
Buraya kadar Arduino nedir ne degildir diye bahsettim .Artk
kodlamaya gemenin zaman geldi .
lk kodumuzda bir Led'i yakp sndrecegiz.
Devremizi ekildeki gibi kurduktan sonra tek yapmamz
gereken yazdgmz kodu boarda yklemek.
Gerekli Donanmlar
Arduino Board
Buton
10k ohm diren
Devre Tahtas(Breadboard)
Kablo
grebilirsiniz.
Gerekli Donanmlar
Arduino
10 Kohm Potansiyometre
istiyorum.
Boolean Sabitleri
Eer az ok dijital elektronikle uratysanz Boolean
Matematiinden haberdar olmalsnz.
Boolean sabitleri 1 ve 0 'dr .Arduino'da ise true ve false 'dir.
Burda 0 false 1 ise true anlamna gelmektedir.
Veri Tipleri
void
Void kelimesi sadece fonksiyon tanmlanrken kullanlr.
Bu fonskiyon agrldnda
rnegin
void setup()
{
// ...
}
void loop()
{
// ...
}
boolean
boolean'dan daha nce bahsettiim iin zerinde
durmayacam .
char
unsigned char
Unsigned Char hafzada 1 baytlk yer tutar.byte ile
ayndr.
0-255 arasndaki saylar encode eder.
Byte
Byte , 0-255 arasnda hafzada 8 bit unsigned say tutar.
int
int veri tipi say tutmak iin kullanlan birincil veri tipidir.
-32,768(-2^15)-32,767(2^15-1) aralnda deger
alr.Hafzada 2 baytlk yer tutar.
rnek
int ledPin=13;
unsigned int
unsigned int ile int fark ise unsigned int negatif deger
tutmaz.sadece pozitif deger alr.
short
Short 16 bit'lik bir veri tipidir.
-32,768(-2^15) -32,767(2^15-1) arasndadr.
Float
Float, decimal saylar iin kullanlan veri tipidir. Float veri tipi
daha ok analog ve devam eden deerlerde daha byk
znrlk elde etmek iin kullanlr.Deer aral
-3,4028235E+38 ile 3,4028235E+38 arasndadr. 32 bit
(4 bayt) say tutar. Float virgulden sonra 6-7 basamaa
sahiptir.
Double
Float'la ayn ii grr.
array(dizi)
Dizi ,bir dizin numaras ile eriilen degikenlerin
topluluudur.
Bir Dizi(Array) oluturmak
int Dizi=[6];
int Pinler [ ]={2,4,8,7,6};
char mesaj[6]=hello;
OPERATRLER
Aritmetik Operatrler
= atama operatr
+ toplama operatr
- karma operatr
* arpma operatr
/
blme operatr
% mod(artk blme)
Karlatrma Operatrleri
== eittir operatr
!= eit degil operatr
< kktr operatr
> byktr operatr
<= kk veya eittir
>= byk veya eittir
Boolean Operatrleri
&& AND (ve ) operatr
if deyiminde kullanlabilir.
rnek
if (digitalRead(2) == HIGH && digitalRead(3) == HIGH)
{
// read two switches
// ...
}
||
OR (veya ) operatr
if (x > 0 || y > 0) {
// ...
}
if (!x) {
// ...}
Bitwise Operatrleri
& (bitwise and)
| (bitwise or )
^ (bitwise xor)
~ (bitwise not)
<< (bitwise left)
>> (bitwise right)
Birletirme Operatrleri
++ artrma
--
azaltma
+= ekleyerek atama
-= eksilterek atama
*= arparak atama
/= blerek atama
%= blp kalan atama
&=
|=
Fonksiyonlar
Dijital G/
pinMode()
Bir giri(input) ya da k(output) olarak belirtilen pin'i
yaplandrr.
Szdizimi
pinMode(pin,Mode)
pin:Ka numaral pin'i ayarlamak istiyorsak onu yazyoruz.
Mode: INPUT,OUTPUT veya INPUT_PULLUP durumlarndan
birini yazyoruz.
rnek
pinMode(led,OUTPUT);
DigitalWrite()
HIGH veya LOW degerini pin'e gnderen fonksiyondur.
digitalRead()
Pin'in degerini okur .HIGH veya LOW olabilir.
deger = digitalRead(inPin);
Analog G/
analogReference()
Analog giri olarak kullanlan referans gerilimini
yaplandrr.Seenekler ise unlardr
DEFAULT:varsaylan analog 5V veya 3.3 Volt
INTERNAL:1.1 volt Atmega168 veya ATMEGA328 de
2.56 Volttur.
EXTERNAL: AREF pin uygulanan voltajdr.0-5V arasnda
kullanlr.
analogRead()
Belirtilen analog pin deerini okur .Arduino 6 kanal (8
kanal Mini ve Nano,16 kanal Mega) ,10 bit ADC(Analog
Digital Converter).Bu u anlama gelmektedir. 0 -1023
arasndaki tamsay deerlere 0 ile 5 volta aras giri
gerilimleri ile eleir. 5Volt/1.024 birim veya birim bana
0,0049. Yani Arduio'nun okuduunuz Analog degeri bu say
ile arparak Voltaji bulabilirsiniz.
Bir analog giri okumak iin yaklak 100
AnalogWrite
Analog deeri belirtilen pin'e yazar.LED'lerin
parlaklgn ayarlamak veya Motorlar farkl hzlarda
srebilirsiniz.Kare dalga retir.PWM sinyal frekans
yaklak olarak 490Hz'dir.
ogu Arduino Board'unda bu fonksiyon 3,5,6,9,10 ve 11
numaral pinlerle alr.Sadece Mega board'ta 2 den 13
e kadardr.
Szdizimi
analogWrite(pin,value)
Parametre
pin: pin'in numaras
value: 0(kapal)-255(ak) arasndaki degerler
rnek
Zaman
millis()
Arduino'da ykl mevcut olan program balamasndan
sonra milisaniye deerinde say dndrr.Yaklak 50
micros()
Arduino'da ykl mevcut olan program balamasndan
sonra mikrosaniye deerinde say dndrr.Yaklak 70
dakika sonra overflow olacaktr.
rnek
delay()
Program belirtilen sre kadar durdurur. Birimi
milisaniyedir. 1000 milisaniye 1 saniyedir.
Szdizimi
delay(ms)
rnek
delayMicroseconds()
Program belirtilen sre kadar durdurur. Birimi
mikrosaniyedir. 1000 mikrosaniye 1
milisaniyedir.Saniyenin milyonda bir'i kadardr.
Szdizimi
delayMicroseconds(us)
rnek
Matematik
min()
iki saydan kk olan geri dndrr.
rnek
SensValue=min(Sens,100) // burda devaml kk olan
degeri geri dndrecektir. Yani 100 e kadar Sens
degerini alacak 100 den sonra ise hep 100 degerini
dndrecektir.
Max()
iki saydan byk olan geri dndrr.
rnek
SensValue=max(sens,20) // burda ise devaml byk olan
deeri dndrecektir.Yani 20 ye kadar hep 20 sonrasnda ise
sens deerini dndrecektir.
Abs()
saynn mutlak deerini geri dndrr.
Constrain()
Sayy bir aralkta snrlar.
rnek
sensVal=constrain(sens,10,160); // deikenin deeri en
kk 10 en yksek 160 olabilir.
Map()
Map fonksiyonu saynn araln baka bir arala
tamaya yarar.
y=map(x,1,50,50,1) // burda birinci dk degeri 1 iken
50 olmu ikinci degeri ise 50 iken 1 olmutur.
Pow()
Saynn kuvvetini hesaplamaya yarayan fonksiyondur.
Szdizimi
pow(taban,zeri)
sqrt()
Saynn karekkn hesaplayan fonksiyondur.
Szdizimi
Sqrt(x)
Trigonometri
sin()
cos()
tan()
Rastgele(Random) Saylar
randomSeed()
random
Bit'ler ve Bayt
lowByte()
highByte()
bitRead()
bitWrite()
bitSet()
bitClear()
bit()
letiim
Serial
Arduino board'nun bilgisayar veya dier cihazlarla
iletiimi iin kullanlr.Btn Arduinp board'larnda en az
bir tane Seri port bulunmaktadr.(Genellikle UART ve
USART diye bilinirler).Seri port USB yardm ile dijital
pinler zerindeki 0 (RX ) ve 1 (TX) kullanarak haberleir.
Fonksiyonlar
available()
Seri porttan okumak iin kullanlabilir bayt saysn alr.
Szdizimi
Serial.available()
rnek
begin
Seri veri iletimi iin saniyedeki bit (baud) hzn ayarlar.
300,600,1200,2400,4800,9600 ,
14400,19200,28800,38400,57600,115200 degerlerinden
birini alr.
Szdizimi
Serial.begin(hz)
end()
Seri iletiimi devre d brakr.pinleri genel giri ve k
olarak kullanmaya izin verir. Yeniden iletiime gemek
iin Serial.begin() kullanlr.
Szdizimi
Serial.end()
Find()
Verilen uzunlukta veri bulunana kadar tampon verileri
okur.Hedef dize,yanl zaman veya olmadg bulunursa
ilevi true degerini dndrr.
Szdizimi
Serial.find(hedef)
findUntil()
Belirli bir uzunlukta veya sonlandrc bir dize bulunana
kadar Serial.findUtil() tampon verilerini okur.
Szdizimi
Serial.findUtil(hedef,terminal)
Flush()
Giden Seri verinin tamamlanmasn bekler.
Szdizimi
Serial.flush()
parseFloat()
Seri verinin virgulden sonrasnda geri
dndrr.Basamak (veya eksi iareti) olmayan
karakterler atlanr.
Szdizimi
Serial.parseFloat()
parseInt()
Seri veride bir sonraki geerli tam sayy arar.
Sz dizimi
Serial.parseInt()
peek()
print
Seri port'tan ald verileri ASCII tablosundaki karlg
eklinde yanstr. Bu komut birok ekilde olabilir.
rnek
Serial.print(78) 78 verir
println()
print() 'den fark daha okunabilir veriyi
gstermesidir.Veri bittiginde dier veriyi bir alt satrda
gsterir.
Szdizimi
Serial.println(deer)
Serial.println(deer,format)
Read()
Gelen seri veriyi okur.
Szdizimi
Serial.read()
readBytes
readBytesUntil()
setTimeout()
write
Seri port'a ikilik verileri yazar.Bu veri bayt bayt veya dizi
olarak gnderilir.
Szdizimi
Serial.write(val)
rnek
Stream
Kontrol Yaplar
if ve if ...else
if ve else koullu ilem yapan deyimlerdir.if ve else tek
bir karlatrma deyimi olup else kullanm istege
baldr.Eer koul doru ise if den sonraki blm
yrtlr. Else'den sonraki blm atlanr.
rnek-1
if(degisken>50)
{
digitalWrite(ledPin,HIGH)
}
rnek -2
if(degisken>500)
{
digitalWrite(ledpin,LOW)
}
else
{
digitalWrite(ledpin,HIGH)
}
for
Bu deyim, dier dng deyimleri gibi bir kmeyi bir ok
kez tekrarlamak iin kullanlr. Koul snamas while da
olduu gibi dngye girmeden yaplr. Bu dng
deyimin iinde dierlerinden farkl olarak balang
deeri ve dng sayacna sahip olmasdr.
rnek
int PWMpin = 10; // led digital 10 'a balanr.
void setup()
{
// no setup needed
}
void loop()
{
switch case
Bu deyim bir deikenin ieriine bakarak, programn
akn bir ok seenekten birine ynlendirir. case
(durum) deyiminden sonra deikenin durumu belirlenir
ve takip eden gelen satrlar (deyimler) ileme konur.
Btn durumlarn aksi sz konu olduunda
gerekletirilmesi istenen deyimler default deyiminden
sonraki ksmda bildirilir.
rnek
switch (degisken) {
case 1:
//deiken 1 eit oldugunda yrt
break;
case 2:
//deiken 2 eit oldugunda yrt
break;
default:
// Hibiri ile elemez ise yrt
// default deyimi opsiyoneldir.
}
while
Tekrarlama deyimidir. Bir kme ya da deyim while
kullanlarak bir ok kez yinelenebilir. Yinelenmesi iin
koul snamas dngye girilmeden yaplr. Koul olumlu
olduu srece evrim yinelenir.
rnek
degisken = 0;
while(degisken < 200){
// 200 defa kodu yrtr.
degisken++;
}
do....while
Bu deyimin while deyiminden fark, koulun dng
sonunda snanmasdr. Yani koul snanmadan dngye
girilir ve dng kmesi en az bir kez yrtlr. Koul
olumsuz ise dngden sonraki satra geilir.
rnek
do
{
delay(50);
break
Bir Arduino programnda, bir ilem gerekletirilirken,
ilemin sona erdirilmesi bu deyim ile yaplr. rnein,
dng deyimleri iindekiler yrtlrken, evrimin,
kouldan bamsz kesin olarak sonlanmas gerektiinde
bu deyim kullanlr.
rnek
for (x = 0; x < 255; x ++)
{
digitalWrite(PWMpin, x);
sens = analogRead(sensorPin);
if (sens > threshold){
x = 0;
break;
}
delay(50);
}
continue
Bir dng ierisinde continue deyimi ile karlalrsa,
ondan sonra gelen deyimler atlanr ve dng bir sonraki
evrime girer.
rnek
for (x = 0; x < 255; x ++)
{
if (x > 40 && x < 120){
continue;
}
digitalWrite(PWMpin, x);
delay(50);
}
return
Fonksiyon'u sonlandrmak veya deger dndrmek iin
kullanlr.
rnek
int checkSensor(){
if (analogRead(0) > 400) {
return 1;
else{
return 0;
}}
goto
Programn herhangi bir yerinden baka bir yerine atlamak
iin goto deyimi kullanlr.
rnek
for(byte r = 0; r < 255; r++){
for(byte g = 255; g > -1; g--){
for(byte b = 0; b < 255; b++){
FRITZING
Fritzing ak kaynak kodlu gelitirilen devre tasarm
programdr.Fritizng iinde bulunan Arduino board'laryla
(diger board'larda mevcut) ve temel devre elemanlaryla
devrenizi abuk prototip retmenizi saglar.Fritzing'i
kullanmak iin ok fazla Bir ey bilmenize gerek yok devre
elemanlarn srkle brak ile alma alannza alp
kullanabilirsiniz.
PROCESSING
Processing, resim, animasyon ve etkileim yntemleri
gelitirebileceiniz ak kaynak bir programlama dili ve
ortamdr. okluortam malzemeleriyle (resim, video ve ses
gibi) sorunsuz alabilir, ileyebilir. Grsel bir kt zerinden
PROJELER
Proje-1
Aslnda ilk projelerimizi yapm olmakla birlikte burda ise
sadece proje bazl anlatacam.
LED yakp sndrdgmz iin ilk projemiz biraz daha yine
led'lerle alakal olup biraz daha kullanl bir proje olacak
Trafik Lambas
Projemizin adndan anlalac zere trafik lambas
yapacaz.
Neye ihtiyan var
1. BreadBoard
2. 1'er adet krmz ,sar ve yeil led
3. Jumper kablo
Kod