Vous êtes sur la page 1sur 44

1

Yazar Hakknda: Hasbi SEVN


Ocak 1992de Balkesirde gzlerimi dnyaya atm. 10 gibi
kk bir yata bilgisayar ile tanmam beni bu alana
ynlendirdi. Bilgisayarmn alnmas ile birlikte Paintte
izimler yaptm ve bu izimleri PowerPointte bir araya
getirerek ksa izgi filmler yapmaya baladm. Bilgisayarm
formatlamak iin gelen Mert Abimin nerisiyle FLASH
animasyon programn kullanmaya ve yama gre gzel
animasyonlar hazrlamaya baladm. 15 Yamda eve
internetin balanmas alma alanm geniletti ve
programlamaya yneldim. nce C programlamaya baladm ve ksa srede arkadalarmn
ihtiya duyduu eitli programlar yazdm. Web sitelerine merakmn olmas nedeniyle
kendime de bir tane yapmak istedim. Bu yzden 16 yamda ASP programlamaya baladm.
ASP ile web sitesi yazmak yerine daha ok bot programlar yazdm. Bu programlar ile web
sitelerimi gncel tutarak kendime maddi destek saladm. Fakat bu becerilerimi iyi bir
niversite ile talandrmadktan sonra bir anlam olmadn fark ettim. Bunun iin 17-18
yalarmda kendimi tamamen derslere adadm. Lise 1 ve 2 de hi ders almamama ramen
son snfa doru btn eksiklerimi kapattm ve YGS/LYS girdim ( Bu arada PHP programlamay
da ileri dzeyde renim). Tek hedefim olan T Elektronik-Haberleme Mhendisliini
kazandm. niversitemin ilk ylnda kendimi ngilizce ve temel elektronik zerine gelitirdim.
Bu senede ayrca CCS C ile PIC programlamay rendim. Hazrl atlayp blme
baladmda Tdeki projeleri inceledim. lk senemde iki projeye girdim ve girdiim
projelerden birinde elektronik takm kaptan oldum. Fakat bu projeler baarszlkla
sonuland. kinci snfta kendimi daha da gelitirmek iin kendi projelerimi yaptm. Yaptm
projeler ile yarmalara katldm ve birka televizyon kanalna rportaj verdim. Arduino ile ilk
tanmam da bu zamanlardadr. nc snfn banda birinci snfta baarsz olduumuz
projeyi tekrar yapmaya ve bu projede takm kaptan olmaya karar verdim. Bu proje ile
NASAnn sponsorluunda dzenlenen Cansat Model Uydu yarmasna katldk. 13 farkl
lkeden 59 proje takmn geride brakarak rekor puanla Dnya Birincisi olduk. Bu projeyi
yllar sonra bile ilk gnk gibi hatrlayacamdan ok eminim. Bu sene de T Roket Takmn
kurduk. Amacmz yzde yz yerli bir roket retmek ve Amerikada dzenlenen roket
yarmasnda lkemize derece getirmektir.
Kusura bakmayn Laf laf at, yazm biraz uzun oldu.
Beni takip etmek isterseniz iletiim bilgilerim aadadr.

facebook.com/flashasbi
hasbi.sevinc@gmail.com
hasbisevinc.com

T ARI TEKNOLOJ GELTRME KULB [ARIGE]


2013 ylnda, stanbul Teknik niversitesi Elektrik Elektronik Fakltesinde kurulan Ar
Teknoloji Gelitirme Kulb [ARIGE], kiisel geliim ve kariyer odakl almalara
odaklanan yeni bir kulptr. ARIGE, ksa srede baarl projeler gerekletirmitir
ARIGE'nin vizyonu; niversite rencilerinin yeni teknolojik gelimeleri yakndan takip
etmesini, derslerde rendikleri teorik bilgiler ile bu gelimeleri harmanlayarak, daha
inovatif teknolojileri yerli olarak projelendirip retmelerini salamaktr. Bu
projelerden kabilecek yaynlar aracl ile akademik birikime de katk salanmas
hedeflenmektedir.
ARIGE, bu srete gerekli sanayi- niversite ibirliini salayp, eitim seminerleri
dzenleyerek ilgili projelerin endstriyel bir boyut ve ticari deer kazanmalarna
yardmc olur.
Kulp ayn zamanda kendisinin oluturaca proje ve komiteler ierisinde rencilerin
kalifiye bir ekilde yetimesini salayarak Tdeki dier renci projelerine i gc
yaratmay hedeflemektedir. Bu sayede projeler aras iletiim de kuvvetlendirilmi
olacaktr.

Bu amalar dorultusunda, ARIGE, yelerinin akademik hayatlarnda rendikleri


teorik bilgileri, alma hayatna aktarabilmesini, ders d zamanlarda gelitirilecek
olan projeler ile retim ve ynetim konusunda bilgilenmesini, deneyimli ve
aratrmac bir ruha sahip olarak mezun olmasn hedefler.

NSZ
Hibir kitabn nszn okumam. Fakat okuyanlar iin kitab tantan ksa bir yaz
yazmak istedim. Trkiye ne yazk ki teknolojiyi geriden izleyen bir toplum
konumundadr. Bu durumdan kurtulmamz iin herkesin bildiini paylamas
gerektiini dnmekteyim. Bu yzden bu kitab yazmaya karar verdim. Kitapta
anlattklarm anlatan web siteleri internette mevcut. Ben bu kitapta temel dzeyde
lazm olacak tm bilgileri bir yerde toplamak istedim.
Umarm kitabm sizler iin yararl olur

NDEKLER
Neden Arduino? ......................................................................................................................... 1
Temel Elektronik......................................................................................................................... 1
Voltaj Blc .............................................................................................................................. 2
Temel Yazlm Bilgileri................................................................................................................. 3
Arduinonun Kurulumu ve Arduino Program ............................................................................ 5
Arduino ile Yanp Snen Led Yapm........................................................................................... 7
Arduino ile Kara imek Devre ................................................................................................... 9
Arduino ile Buton Kullanm ..................................................................................................... 10
Arduino ile SeriPort zerinden Bilgisayara Veri Yollama ......................................................... 12
Arduino ile Bluetooth Haberlemesi ........................................................................................ 14
Arduino ile Analog Veri Okuma ................................................................................................ 16
Arduino ile Siyah Beyaz Kontrol ............................................................................................. 17
Arduino ile LCD Kullanm ......................................................................................................... 19
Dahili EEPROMa Yazma ve Okuma .......................................................................................... 20
Arduino ile Servo Kullanm ...................................................................................................... 21
Arduino ile DC Motor Srme .................................................................................................... 22
Arduino ile Uzaklk Sensr ...................................................................................................... 27
Arduino ile vme lm .......................................................................................................... 29
ARDUNO UYGULAMALARI ....................................................................................................... 30
Trafik Lambalar .................................................................................................................... 30
Arduino ile Voltmetre Robot Yapm .................................................................................... 31
LM35 ile Scaklk lm....................................................................................................... 32
Arduino ile arpmayan Robot Yapm .................................................................................. 33
Arduino ile Basit izgi zleyen Robot Yapm ........................................................................ 36
Arduino ile Bluetooth Kontroll Robot Yapm ..................................................................... 38

Neden Arduino?
Arduino Atmel marka ilemcilerin kullanld hazr bir devre kartdr. Ak kaynak kodludur ve
isteyen kii kendi Arduinosunu yapabilir. Arduino projelerde kullanm kolayl salar ve
projelerin daha hzl ve stabil olarak yaplmasn salar. Arduino yap ve zelliklerine gre
eitli trlerden olumaktadr. Biz projemizde Arduino Uno modelini kullanacaz.
Arduino zerinde USB balants, g balants ve giri k pinleri bulunmaktadr. USB
balants karta program yollama, bilgisayar ile kart arasndaki bilgi aktarmna ve kart
beslemek iin kullanlr. G balants da ayn ekilde harici beslemeler iin kullanlr. 9
Voltluk besleme nerilir. USBden beslemek bu besleme trne gre daha risklidir. nk
bilgisayarn USB k yeterli akm vermeyebilir Arduino iin (motor ile ilgili uygulamalarda
zellikle). Arduino ile programlamaya balamadan nce baz temel elektronik bilgilerimizi
gzden geirelim.

Temel Elektronik
Breadboard
Resimde grld gibi breadboardmzn iki kenarnda aaya doru
uzanan delikler vardr. Bu delikler besleme kanalmzdr. Aaya doru inen
izgilere karlk gelen delikler ksa devre durumundadr. Yani sol stteki
krmzdan balanan bir kablo ayn izgi zerinden balanacak kablolar ile
birleiktir. Ay ekilde orta ksmdaki yatay izgilere karlk gelen delikler de
birbirleri ile balantldr. Fark ettiyseniz yatay izgilerin ortasndan bir yark
gemektedir. Bu yarn amac entegrelerimizi kolaylkla takabilmemizi
salamasdr.

Diren
Hemen hemen herkesin bildii bilgilerimizi de gzden geirelim. V=I*R formln
inceleyelim; bu formle gre sabit bir voltaj altnda direncimizi arttrrsak Akmmz
azalmaktadr. Bu zellik ile fazla akm ekmemesini istediimiz elemanlarn nne diren
koymalyz.

Voltaj Blc
Giri voltajnn istenilen voltaja drlmesini salayan devredir. ekildeki gibi kurulur. k
voltaj R1 ve R2 direnlerine baldr. Vout = Vgiri*R2/(R1+R2) eklinde yazlr. rnein
R1=10k R2= 10k ohm olarak seilir ve giri voltajmz da 5 volt olursa, k voltajmz =
5*10K/(10K+10K) = 2.5 Volt olarak bulunur.

Diyotlar
Kullanm alanlarna gre eitli diyotlar bulunmaktadr. Led, fotosel, zener diyotlar bunlara
rnek olarak verilebilir. Lise bilgilerimizden de bildiimiz gibi diyotlar tek ynde geirgendir.
ekildeki resimde akm geirme yn belirtilmitir. Fakat ne yazk ki gerek dnyada diyotlar
kat zerindeki gibi ideal davranmazlar. Diyot akm geirme ynnde kullanlsa bile bir voltaj
farkna neden olmaktadr. Bu voltaj fark diyotun yapsna gre deimekle beraber genellikle
0,6 0,7 Volt arasnda olmaktadr.

Zener Diyotlar
Genellikle devreye dier diyotlardan farkl olarak ters balanrlar. Ters (tkama) ynnde
oluturduklar gerilim fark sayesinde kol zerindeki gerilim sabitlenmektedir. Devre zerinde
kullanm ekildeki gibi gsterilmitir. Voltaj fark diyotun yapsna gre deimektedir.
Genellikle 5.1 Voltluk diyotlar kullanacaz. Bu diyotlar ile devre zerindeki fazla gerilimi ve
olas dalgalanmalar engellemeyi umuyoruz.

Tranzistr
Giriine uygulanan sinyali kuvvetlendiren devre elemandr. Ayn zamanda anahtarlama
eleman olarak da kullanlmaktadr.

Temel Yazlm Bilgileri


Arduino programlamaya gemeden nce temel yazlm kodlarna bakalm. Projelerimizde
kullanacamz baz fonksiyon ve kod yaplarn tantacam.
Koullar (if-else-elseif): Yazlm dillerinin en temel komutlarndan birisidir. Elinizde bir durum
var ve bu durum doru ise a iini yapmasn eer yanl ise b iini yapmasn istiyorsanz, bu
kod sistemi tam bu ie uygun. Ksaca kod emasna bakalm.
f( a == 5 ){
//Buraya doru durumda almas istenilen kodlar
}else{
Ann 5 olmad durumda alacak kodlar.
}
a == 5 burada bizim koulumuzu oluturmaktadr. Dikkat edilmelidir ki iki tane eittir
kullanlmaktadr. Yani denk midir anlamna gelmektedir. Koul alannda kullanabileceim
ifadeler,
==

Denk ise

!=

Eit deilse

<

Byktr

>

Kktr

<=

Byk veya eitse

>=

Kk veya eitse

Koul1 &&Koul 2

Ve

Koul1 ||Koul 2

Veya

Koullarmza else kullanm zorunlu deildir. Sadece if kullanm yaplabilir, bylece koul
doru deilse extradan bir kod almaz. Birden fazla koulumuz var ise elseif ile yeni koullar
ekleyebiliriz.
f( a == 1 ){
// a = 1 durumunda buras alr
}

elseif (a == 2 ) {
// a = 2 durumunda buras alr
}
elseif (a == 3 ) {
// a = 3 durumunda buras alr
}
For dngs: Yazdmz kodlarn belli bir sre tekrar etmesini isteyebiliriz. Bunun iin
dngler kullanmalyz.
For(int i =0; i < 10; i ++){
// buras 10 kere okunacak
// program buraya her uradnda i deeri bir arttrlacak
// i deeri 10a ulaana kadar dng devam edecek
}
While dngs: For gibi while kodlar da dng amacyla kullanlr.
b = 20;
while( b > 10){
// b deikeninin 10dan byk olduu durumlarda dng devam eder
b = b 1 ; // her dngde bnin deerini bir azalttk
// dikkat edilmelidir ki eer bnin deerini deitirmeseydik
// dng koulu hep doru olacandan program burada takl kalacakt
}

Arduinonun Kurulumu ve Arduino Program


Arduinoyu kullanmaya balyoruz. ncelikle arduinomuzun USB kablosunu arduinoya
balayalm. Daha sonra bilgisayarmza takalm. Win 7 ve st srmlerinden arduino
otomatik olarak yklenecektir. Biraz bekledikten sonra artk arduino bilgisayar tarafndan
tannacaktr. Arduinonun bilgisayar tarafndan tannp tannmadn grmek iin aygt
yneticisinden kontrol edelim ve arduino'nun bal olduu COM Portunu aklmzda tutalm (
aygt yneticisi: bilgisayarma sa tklayn -> ynet -> aygt yneticisi )

Arduinoyu bilgisayarmza tantrken bizde bir yandan kullanacamz program indirelim.


Bunun iin http://arduino.cc/en/Main/Software adresine girelim ve Arduino programn
indirip program kuralm. Program hatasz bir ekilde ykledikten sonra program aalm.

Program altnda yandaki gibi bir


ekran sizi karlayacak. Bu ekrann
ortasndaki ksma kodlarmz
yazyoruz. Programn sa en altndaki
yer bize Arduino Uno zerinden
altmz ve arduinonun COM1
portuna bal olduunu gsteriyor.
Eer bu doru deilse bu ayarlar
deitirmemiz lazm ncelikle.

Tools mens: Buradan kullandmz


arduino trn ve arduinomuzun bal
olduu COM portunu seelim. Eer bunu bilmiyorsak aygt yneticisinden bakabiliriz.

Program compile: Bu buton ile yazdmz program kontrol edebiliriz. Eer kodda hata
varsa alttaki siyah blmde turuncu yaz eklinde yaptmz hata ve satr yazacaktr.
Hatrlatma: Bulunduumuz satrn says sol atta yazmaktadr.

Program Compile & Upload: Bu buton ile nce yazdmz kod derlenir. Eer kodda hata
yoksa yazlan kod Arduinonun anlayaca dile evrilir ve otomatik olarak Arduinoya atlr.
lem srasnda ilerleyen ubuktan ilem durumunu grebilirsiniz. Ayrca Tam program atlma
srecinde Arduino zerinde bulunan Tx ve Rx LEDleri hzl bir ekilde yanp snecektir.
Program bir kere Arduinoya atmanz yeterli olacaktr.

Serial Monitor: Yeni pencere aan bu buton ile Arduinodan yolladmz verileri
grebiliriz. lerleyen konularmzda bu butonu ska kullanacaz.
imdiden Arduino almalarnzda baar dilerim
Haydi Balayalm.

Arduino ile Yanp Snen Led Yapm


ncelikle LED balamay renelim. LEDin ayaklarna bakldnda
birinin uzun birinin ksa olduu grlmektedir. Buradan anlamamz
gereken ey, uzun ayan + uca ksa ayanda da uca balanmas
gerektiidir. Yani uzun ayamz arduinoya balayacaz. Fakat
ayaklar arasnda bir balant yoksa, LEDin iindeki ksa olan yere bal
ayak + ucu, dier ayak ucu gstermektedir. LEDimizin alma akm
vardr. Bunu salamas ve fazla akm ekmemesi iin LEDin art ucu ile
arduino(yada +5 volt besleme) arasna 220 ohmluk bir diren balamalyz. Aksi taktirde
LEDimiz patlayabilir. erisinden kan gaz salk iin zararl olabilir.
imdi programlamaya giri yapabiliriz. Arduino programlar iki ana fonksiyondan oluur.
void setup() fonksiyonu: Bu fonksiyon program ilk aldnda bir kere alr ve gerekli
kalibrasyon, setup komutlarn buraya yazarz.
void loop() fonksiyonu: dier programlama dillerinden alk olduumuz main() fonksiyonu
gibidir. Farkl olarak loop fonksiyonu ilevi bitince tekrar batan balar yani sonsuz bir
dngdr aslnda.
Arduino Programlama emas:
// lk bata ktphaneleri ekleyebiliriz
// Global cinsteki deikenlerimizi tanmlayabiliriz
// Fonksiyonlarmz burada yazabiliriz
void setup(){
// ilk bata almasn istediimiz kodlar buraya yazlr
}
void loop(){
// sonsuz dng eklindeki main fonksiyonumuz

// program buraya yazyoruz


}

Arduinoyu test etmek ve ilk programmz yazmak iin bu projeyi yapabiliriz. 1 Saniye
aralklar ile LEDimiz yanp snecektir.
int LED = 10; // burada arduinonun 10. Ayana ledimizi baladmz
sylyoruz
void setup(){
pinMode(LED, OUTPUT); // LED pini yani Arduinonun 10. Aya k
yapld
}
void loop(){
digitalWrite(LED,HIGH); // LEDin bal olduu pinden 5 volt gerilim
saland
delay(1000); // 1000 ms yani 1 saniye program duruyor
digitalWrite(LED,LOW); // LED sndrlyor
delay(1000); // bir saniye bekliyoruz
}

Arduino ile Kara imek Devre


Arduinoya pratik olarak kara imek diye tabir edilen, paralel bal ledlerden oluan rnek
devremizle balayalm. Devremizi istediimiz kadar ledle oluturabiliriz. Biz bu rnekte 5 adet
led ile kurulum yapm gibi davranacaz.
void setup(){
pinMode (13, OUTPUT);
pinMode (12, OUTPUT);
pinMode (11,OUTPUT);
pinMode (10, OUTPUT);
pinMode (9, OUTPUT);
}
void loop(){
digitalWrite (9, HIGH);
delay (10);
digitalWrite (9, LOW);
digitalWrite (10, HIGH);
delay(10);
digitalWrite (10, LOW);
digitalWrite (11 , HIGH);
delay(10);
digitalWrite (11, LOW);
digitalWrite (12, HIGH);
delay(10);
digitalWrite (12, LOW);
digitalWrite (13, HIGH);
delay(10);
digitalWrite (13, LOW);
}

Kara imek uygulamasnn alma mantnn kavranmas iin yukarda verilen kodlarn
aklayc olduunu dnmekteyim. Fakat bu kodlar balang dzeyindedir ve gereksiz
olarak her led tek tek kontrol edilmitir. Bir sonraki aama olarak yukardaki uygulamay
yapan fakat daha profesyonel olan bir program yazalm.
const int ledPini [] = {9,10,11,12,13};
void setup () {
for(int i=0; i<5;i++)
{
pinMode(ledPini [i], OUTPUT); // LED pinlerini k olarak tanmladk
}
}
void loop() {
for(int i=0; i<5; i){
digitalWrite(ledPini[i],HIGH);
delay(50);
digitalWrite(ledPini[i],LOW);
}
for(int j=4;j>-1; j--)
{
digitalWrite(ledPini[j],HIGH);
delay(50);
digitalWrite(ledPini[j], LOW);
}
}

Arduino ile Buton Kullanm


Uygulamalarmzda eitli grevler iin butonlar kullanacaz. lk olarak butonun alma
mantn inceleyelim. Kullanc butona tkladnda butonun iki ucu ksa devre olur ve
bylece akm akmaya balar. Kullanc butondan elini ektiinde devrenin nceki durumuna
dnmesi iin pull-up/pull-down diren sistemi kullanlr. Kullanlan bu direnler ile buton
elektriksel olarak basl kalmaktan kurtarlr.

Pull-Down Diren
Butona basldnda 5 Volt arduinonun input
ayana ular. Fakat butondan elimizi
kaldrdmzda arduinoun pininde 5 volt gerilimi
kalmaktadr. Bu durumdan kurtulmak iin
genellikle 10K ohm deerinde bir diren arduinoun
input ayandan topraa balanr.

Pull-up Diren
Butona baslmad durumlarda arduinonun input
aya 5 volttadr. Butona basldnda akm
arduinonun input aya yerine topraa
ulamaktadr. Pull-Down diren sisteminin tam tersi
eklinde almaktadr. Direncin konulma nedeni
butona basldnda 5 Voltun dorudan topraa (ua) ulamasn engellemektir. Genellikle 10K
deerinde diren kullanlmaktadr.

Bu kadar teorik bilginin yeterli olduunu dnyorum. Butona bastmzda lambann


yanmasn ve elimizi ektiimizde snmesini salayan bir program yazalm.

10

const int buttonPin = 2;


// Butonun pin numaras
const int ledPin = 13; // Ledin baland pin numaras
int buttonState = 0; // Butonun durumu
void setup() {
pinMode(ledPin, OUTPUT);
// Ledin bal olduu pini k olarak
ayarlyoruz.
pinMode(buttonPin, INPUT);
// Butonun bal olduu pini k olarak
ayarlyoruz.
}
void loop(){
buttonState = digitalRead(buttonPin); // butonun basl olup olmadn
kontrol ediyoruz.
// Buton basl ise bize HIGH deil ise LOW olarak geri dnmektedir (1 veya
0)
if (buttonState == HIGH) {
//buton basl m?
digitalWrite(ledPin, HIGH); // ledi yak
}
else {
digitalWrite(ledPin, LOW); // buton basl deil ledi sndr
}
}

Ark olaylarn engellemek iin digitalWrite kodlarndan sonra az bir bekleme verilebilir,
delay(100) eklinde.
Buton kontrol etmeyi rendiimize gre bir adm daha ileriye gidelim ve saya yapalm.
Fakat bunun iin ncelikle bilgisayar ile arduinomuzu nasl haberletireceimize bakalm.

11

Arduino ile SeriPort zerinden Bilgisayara Veri Yollama


Gerek arduinonun kontrol gerekse ilenen deerlerin kullancya aktarlmas iin
arduinomuz ile bilgisayarmz arasndaki haberlemeyi yapmamz gerekir. Bu haberleme
arduinonun RX ve TX ayaklarndan gerekleecektir. Haberleme iin her zamanki gibi
arduinoyu USB zerinden bilgisayarmza takmamz yeterli olmaktadr. Haberleme iin setup
fonksiyonumuza balatma kodunu yazmay unutmayalm. Aadaki kod ile bilgisayara her
saniye artan saymz yolluyoruz.
void setup() {
Serial.begin(9600); // bilgisayar ile arduinomuzun haberlemesini
balatyoruz.
// Bilgisayarn ve arduinonun ayn hzda almas iin 9600 yazdk.
// Yani saniyede 9600 tane bit transferi olacaktr.
}
int sayici = 0;
void loop() {
Serial.print(Sayicimizin degeri= ); // Ekrana mesajmz yazdryoruz.
Serial.println(sayici); // saya deerimizi ekrana yazdrp yeni satra
geiyoruz.
delay(1000);
// Bir saniye bekle
}

Btn ilem bu kadar kolay. Bundan sonras tamamen size kalm. Bu balant ile yazdnz
program kolaylkla test etme debug etme imkan salamaktasnz.
imdi daha nce rendiimiz buton kontrolyle haberlememizi birletirelim ve butona her
basldnda artan bir saya yapalm.
const int buttonPin = 2;
// Butonun pin numaras
int sayici = 0; //sayacimiz
int buttonState = 0; // Butonun durumu
void setup() {
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
sayici ++; // sayici = sayici + 1;
Serial.print("Sayicimizin degeri= "); // Ekrana mesajmz
yazdryoruz.
Serial.println(sayici); // saya deerimizi ekrana yazdrp yeni satra
geiyoruz.
while(buttonState == HIGH){ // Butondan elini ekene kadar program
burada kalr
// Bylece butona her basldnda sadece bir kere deer arttrlr
buttonState = digitalRead(buttonPin);
}

12

}
}

Hep arduino mu veri yollayacak, biraz da kardan veri bekleyelim. Bu kod ile bilgisayardan
gelen veriler arduinoda ilenmektedir. Unutmayn ki tm veriler karakter olarak tek tek
gelmektedir.
int incomingByte = 0;
// gelen veriler
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) { // bilgisayardan veri gelmesini bekliyoruz
incomingByte = Serial.read(); // gelen veriyi oku
Serial.print("gelen veri: ");
Serial.println(incomingByte, DEC); // gelen veriyi bilgisayara geri
yolla
}
}

13

Arduino ile Bluetooth Haberlemesi


Temel olarak yaptmz i bilgisayar ile arduino zerinden haberlemeye benzemektedir. Tek
fark donanmsal olarak bluetooth modlmz arduinomuza balayacaz. Piyasada eitli
modelleri bluetooth modlleri genellikle 4 ayaa sahiptir. zerinde yazanlardan da
anlalaca gibi 2 besleme 2 haberleme aya vardr. Beslemeleri modlmzn
datasheetine gre 5 veya 3.3 volta balayalm. Hatal balant yaplmas durumunda
modlmz p olabilir. Geriye kalan 2 ayak arduinomuza balanacaktr. lk uygulama olarak
bu ayakalrmz arduinomuzun Rx ve Tx ayaklarna balayalm. Bluetoothun Tx aya
arduinonun Rx ayana, Bluetoothun Rx aya ise arduinonun Tx ayana balanacaktr. Yani
ters olarak balanmas gerekmektedir. Hep yaplan ve yaplamaya devam edecek bir hata var
burada. Arduinomuzun Rx ve Tx ayaklarna bir eyler bal iken arduinoyu bilgisayara
balayarak kod atmaya alrsanz hata alrsnz. nk bu ayaklar ayn zamanda bilgisayarn
kulland ayaklardr ve oraya baka bir modln bal olmas iletiiminizi bozar. Eer bu
ayaklar kullanacaksak kod atacamz zaman bu kablolar skmeyi unutmayn.
in arduino zerindeki ksm ok zor deil. Fakat bluetooth modlmz bilgisayarmzla
eletirmemiz gerekmektedir. Bluetoothumuzun besleme balantlarn yaptktan sonra
krmz yanp snecektir. Bu k balant bekliyorum anlamna gelmektedir.
Bilgisayarmzn bluetoothundan arama yaparak modlmz bulalm. Cihazlar eletirelim.
ifre sorarsa genellikle ilk ifremiz 1234 olmaktadr. Eer dzgn bir ekilde balantmz
yaptysak krmz k srekli yanacaktr. Bu ksm ile ilgili daha detayl bilgiyi aadaki linkten
ulaabilirsiniz. Modl iin yeni bir COM Port alacaktr ve bu modl ilerleyen
programlarmzda kullanacaz.
http://www.mcu-turkey.com/stm8s-hc-06-bluetooth-modul-ile-haberlesme-uygulamasi/
Artk kod yazalm. Aslnda ok farkl bir ey yapmayacaz. Seri haberleme konusundaki
rnek kodu ykleyebiliriz arduinomuza.
void setup() {
Serial.begin(9600);
}
int sayici = 0;
void loop() {
Serial.print("Sayicimizin degeri= ");
Serial.println(sayici);
delay(1000);

14

Programmz arduinomuza attk ve bluetooth modlnn Tx ve Rx ayaklarn dikkatlice


arduinoya baladk. Hala modldeki krmz k yanp snmektedir. nk bilgisayarn
modle balanmas gerekmektedir (Master -> Slave ilikisi)
Bu admda ek bir programa ihtiya duyuyoruz. Bu program bilgisayarmzn COM Portlarn
dinleyen programdr. ok zel bir program olmasna gerek yok piyasada bu ii yapan eitli
programlar vardr. Benim nerim Tera Termdr. Aadaki linkten indirebilirsiniz.
http://download.cnet.com/Tera-Term/3000-20432_4-75766675.html
Program altralm ve modlmze balanalm. Balant ayarlarnda daha nce modl
bilgisayara tanttmz COM portunu seelim. Her ey doru ise artk krmz k srekli
yanmakta ve veri akmz gereklemektedir. Eer veri ak yok ise ayarlarmz kontrol
edelim ve dier bluetooth COM portunu seelim, tekrar deneyelim. Umarm veri akn
salayabilmisinizdir. Tm admlar dikkatlice yaplmaldr.
imdi unu sorabilirsiniz Her seferinde Tx Rx kablolaryla m uraacaz? Cevabmz HAYIR.
Arduinomuza yeni haberleme ayaklar tanmlayabiliriz. Bylece bilgisayar haberlemesi ile
bir akma gereklemez.
Aadaki kod ile artk modlmz balayacamz ayaklar 10 ve 11dir.
#include <SoftwareSerial.h>
SoftwareSerial yeniHaberlesmeKanali(10, 11); // 10 = RX, 11 = TX yani 10 > bluetoohtu Txine 11 -> Rxine
void setup()
{
Serial.begin(9600); // bilgisayar ile haberlememiz
yeniHaberlesmeKanali.begin(4800); // yeni haberleme kanalmz
}
void loop()
{
Serial.println("Bu yazi bilgisayara");
yeniHaberlesmeKanali.println("Bu yazi bluetootha");
delay(100);
}

Yukardaki kod yardm ile arduino hem bluetootha hemde bilgisayara farkl mesajlar
yollamaktadr. Mesajlar grmek iin Tera Term ve arduinonun kendi Serial Monitorn
aabilirsiniz.

15

Arduino ile Analog Veri Okuma


Gerek dnyada her ey analog haldedir. Fakat
dijital dnyada bu mmkn deildir. Analog
verilerin saklanabilmesi ve ilenebilmesi iin dijital
hale getirilmesi gerekmektedir. Fazla teoriye
girmeyi planlamyorum fakat olayn nasl olduunu
anlamanz iin yandaki resmi paylatm. yle
dnelim 0 ile 5 volt arasnda deien bir giriimiz
var. Bu giriin deerlerini Arduinoya tantmak iin ADC (Analog Digital Convert) ilemini
kullanacaz. 0 Volta 0 deerini vereceiz ve 5 Volta da 1023 deerini vereceiz. Yani 10 bit
znrlkl bir ADC kullanacaz. Oran liner olarak devam etmektedir. Yani giriimizdeki
0,004 Voltluk bir deiim dijitalde 1 deere karlk gelecektir. Yani 0,44 Volt => 100 deeri.
Arduino bu dnm bizim iin kendisi yapmaktadr. Fakat lm yapacamz kablolar
Arduinonun analog ayaklarna balamamz gerekmektedir. Giriimizdeki analog deeri dijital
olarak bilgisayardan okuyalm:
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorDegeri = analogRead(A0); // Arduinonun A0 ayana balanan
kablodaki gerilim llyor
Serial.println(sensorDegeri); // Okuduumuz deer ekrana yazdrlyor
delay(1); // Dzgn alabilmesi iin ksa bir bekleme veriyoruz.
}

16

Arduino ile Siyah Beyaz Kontrol


Hemen hemen herkesin aklna ilk gelen uygulama
olan izgi izleyen robotun temel tan oluturan
siyah beyaz sensrleri inceleyelim. Kitabmzda
piyasada bu i iin kullanlan ve rahatlkla
bulabileceiniz CNY70 sensrn inceleyeceiz.
Piyasadaki dier sensrler de ayn man tkla
almaktadr.
CNY70 Nasl alr: zerinde kzltesi k yayan
ve bu geri toplayabilen iki LED bulunmaktadr.
Kzltesi LEDden kan n yzeye arpar ve
toplayc LEDe gelir. LED bu n iddetini ler.
Yzeyin siyah veya beyaz olmas yansyan n
iddetini deitirir. Bu da bizim ihtiyacmz olan
siyah beyaz ayrmn salar. Sensrmz analog
olarak almaktadr. Yani bi nceki konuda rendiimiz ADC-analog okuma- fonksiyonunu
kullanacaz.
ncelikle devremizi kurmamz gerekiyor. Bunun iin delikli pertinaksa yandaki gibi devremizi
kuralm. Sensr yerletirirken ayaklarnn ekildeki gibi olmasna dikkat ediniz.

17

rnek olarak ilk bata bir tane sensrn balantlarn yapalm ve tek sensr ile bir proje
gerekletirelim. lerleyen projelerimizde 3 tane sensr birletirip izgi izleyen basit bir
robot yapacaz.
Resimdeki balantlar breadboardmza kuralm. Dikkat edin ki balantlar yanl
balamayn. Sensrn karo-baklava dilimi eklinde breadboarda konmas kablolamay
kolaylatrr.
Resimdeki gibi kurulumu gerekletirdiimize gre kod yazmaya balayalm.
int referansDegeri = 800; // siyah beyaz iin eik deeri
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorDegeri = analogRead(A1); // Arduinonun A1 ayana balanan
kablodaki gerilim llyor
Serial.print(sensorDegeri); //Okuduumuz deer ekrana yazdrlyor
if (sensorDegeri > referansDegeri){
Serial.println(" Siyah");
}
else{
Serial.println(" Beyaz");
}
delay(1); // Dzgn alabilmesi iin ksa bir bekleme veriyoruz.
}

Programdaki referansDegeri bizim eiimizi oluturmaktadr. Bu deeri kendi sensrnze


gre ayarlamanz gerekmektedir. Program altrp aldnz deerleri inceleyiniz. Siyahtaki
deer ile beyazdaki deeri toplayp ikiye blnz. Bu yeni deer artk sizin referansDegerinizi
oluturacaktr.
Sensrn alp almadn dnyorsanz kontrol amal Android tabanl telefonunuzun
kamerasn sensre doru tutunuz (Baz android ve iphonelarda almaz). Eer sensrde k
yandn gryorsanz besleme balantnz dorudur. Sensrnz hala almyorsa analog
ayayla sensr balantlarn bir kez daha kontrol ediniz.

18

Arduino ile LCD Kullanm


Arduino ile sklkla kullanmasam bile LCD kullanmn renmek yararl olacaktr. Her zaman
verilerimizi gstermek iin bilgisayar bulamayabiliriz. Bu gibi durumlarda LCDmizi kullanarak
elde ettiimiz durumlar ekrana yazdrabiliriz. Kablo balantlar biraz kark olabilir ve ilk
denemenizde hata yapabilir ve LCDyi dzgn bir ekilde kullanamayabilirsiniz. Bu yzden
devre balantlarnz dikkatli yapn.

Devremizi dikkatli bir ekilde kurduysak artk programlamaya geebiliriz. Btn karakterler
daha nceden bizim iin tanmlanm. Bu karakterlere ulamak iin ncelikle ktphanemizi
programmza dahil edeceiz. Daha sonra balang ayarlarmz yapacaz ve LCDmizi
kullanmaya balayacaz.
Haydi ekranmza bir eyler yazalm.
#include <LiquidCrystal.h> // ktphanemizi ekledik
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // kablo balantlarmz programa
tanttk
void setup() {
lcd.begin(16, 2); // LCDmizin satr ve stun saysn girdik
lcd.print("Hasbi Sevinc"); // Ekrana bir eyler yazdk
}
void loop() {
lcd.setCursor(0, 1); // imlecimizi 2. Satra indirdik
lcd.print(millis()/1000); // programn balangcndan beri geen sre
}

19

Dahili EEPROMa Yazma ve Okuma


Bulduumuz sonular ve deikenlerimizdeki deerleri enerji kesilse dahi Arduino ierisinde
kaydetmek isteyebiliriz. Bunu salayabilmemiz iin Arduinonun ierisinde dahili EEPROM
Bulunmaktadr. EEPROM programmz ile ilgili deiken deerlerini tutabilen, elektriksel
olarak yazlp silinebilen kk depolama birimidir. Arduino zerindeki mikrokontrolc
trne gre EEPROM kapasitesi deimektedir. ATmega328in 1024 byte, ATmega168 ve
ATmega8in 512 byte, ATmega1280 ve ATmega2560n ise 4 KB depolama alan vardr.
Bu depolama alanlar programmz iin gerekli deerlerin depolanmas iin yeterli olmaktadr.
Hadi rnek bir program yazalm

#include <EEPROM.h> // EEPROM kullanm iin ktphane eklenmesi


int yazdirilacakAdres , yazdirilacakDeger;
int okunacakAdres, okunanDeger;
void setup()
{
Serial.begin(9600); // Bilgisayara veri gndermek iin
}
void loop()
{
int yazdirilacakAdres = 10; // 0-255 arasnda adres giriyoruz
yazdirilacakDeger = 50; // kaydedilecek deerimiz
EEPROM.write(yazdirilacakAdres, yazdirilacakDeger); // 10 adresinde artk
50 deerimiz saklanyor
okunacakAdres = yazdirilacakDeger; // 10 adresini okuyacaz
okunanDeger = EEPROM.read(okunacakAdres ); // 10 adresini okuyoruz ve
oradaki deri okunan deer deikenine yklyoruz
// Sonular ekrana yazdryoruz
Serial.print(okunacakAdres);
Serial.print("Adresindeki Deger= ");
Serial.print(okunanDeger);
Serial.println();
delay(500); // biraz bekleyelim
}

20

Arduino ile Servo Kullanm


Yava yava arduinomuzla d dnyay kontrol etmeye balyoruz. Arduino ile servo motor
srmek dier mikrokontrolclere gre (zellikle PICe gre) daha kolaydr. PIC ile haftalarca
sren servo motor kontrol arduino ile dakikalar srmektedir.
Servo Motor: 1 derece hassasiyetle alan 0-180 dereceler arasnda hareket edebilen bir
motor eididir. Dediim gibi sadece 0 ile 180 derece arasnda dnmektedir. Yani tam bir tur
atamamaktadr. Genellikle robot kollarda kullanlmaktadr. Servonun eitleri genellikle
tayabilecei yke gre belirlenmektedir. Piyasada genellikle 1.4 kg*cm torkundaki servolar
bulunmaktadr. Bu demek oluyor ki motor milinize bal 1 CM uzunluunda bir ubuk ucuna
bal yk 1.4 KGdan fazla ise motorunuzun gc mili dndrmeye yetmez. Eer ubuunuz
10 CM ise 140 gram kaldrabilirsiniz. Birok kii burada hata yapmaktadr. Kullanacanz yke
gre servo semelisiniz. Piyasada ayn mantkla alan daha kuvvetli servo motorlar vardr.
Peki Servo motoru nasl kontrol ediyoruz derseniz, teorik olarak yle zetleyebilirim. PWM
adn verdiimiz kare dalga sinyali vardr. Bu sinyalin HIGH ve LOW olduu yerlere gre
servomuzun konumu deimektedir.
Servonun 3 balant kablosu bulunmaktadr. Krmz kablomuzu +5 volta balayalm,
kahverengi kablomuzu topraa (- uca) ve turuncu kablomuzu da arduinomuzun PWN (~)
yazan ayaklarna balayalm. Turuncu kablomuz data kablomuz olmaktadr ve konumumuz
bu kablo zerinden aktarlr. Unutulmamaldr ki servolar vb mekanik elemanlar fazla akmla
almaktadr. Arduinomuzun 5 volt k servomuzu beslemeye yeterli olmad durumlar
olabilir. Ayrca servo yznden devrede grlt oluabilir. Bu yzden devremizin + ve
ularna kapasite balamamz bu grlty engelleyebilir.
#include <Servo.h> // servo ktphanesini programmza dahil ettik
Servo servoNesnesi; // servo kontrol iin bir nesne yarattk
void setup()
{
servoNesnesi.attach(9); // Servomuzun turuncu kablosunu 9 nolu pine
taktmz sylyoruz
}
void loop()
{
servoNesnesi.write(100);
dndrdk
delay(1000);
servoNesnesi.write(20);
delay(1000);
}

// Servomuzu 100 dereceye


// biraz bekleyelim
// Servomuzu 20 dereceye dndrdk
// biraz bekleyelim

21

Arduino ile DC Motor Srme


Arduinonun pin klarn dorudan motora balamamz motor iin gerekli akm
salamamaktadr. Arduinonun pin klar ancak bir ledi yakacak kadar akm vermektedir.
Fakat biz bu akm tetikleme ilevinde kullanp DC motorlar ileri veya geri ynde
altrabiliriz. Bunun iin hazr devre kartlar vardr. Bunlardan birini alp kolaylkla
kullanabiliriz. rnek hazr karta linkten ulaabilirsiniz.
http://www.aliexpress.com/item/Special-promotions-5pcs-lot-L298N-motor-driver-boardmodule-L298-for-arduino-stepper-motor-smart-car/1827893830.html
Bu kart aldnzda birazdan anlatacam ekilde kablo balantlarn yapabilir ve motorunuzu
kolaylkla kontrol edebilirsiniz.
Fakat tm devreyi kendiniz yapmak istiyorsanz bu i biraz uratrc ve karmak olabilir.
Fakat sistemin nasl altn anlamak iin en azndan bir kere devrenin kurulmas yararl
olabilir. Motor src iin akm kuvvetlendirmek ve motoru kontrol etmek iin L298
entegresini kullanacaz. Benzer entegreler de ayn grevi yapmaktadr. L298 entegresinin en
nemli zellikleri, 2 ampere kadar dayanabilmesi ve iki adet H kprsnn bulunmasdr.

H Kprs:
H kprs motorumuzun ileri ve geri ynde srlmesini
salayan yapdr. 4 adet tranzistrden olumaktadr.

Entegremizde toplam 15 adet ayak bulunmaktadr. Bu ayaklarn bazlar motorlarmza


bazlar Arduinoya ve bazlar da beslemeye balanacaktr. Entegrenin pin yaplanmas iin
resimden yararlanabilirsiniz.

22

Ksaca balayacamz pinleri tantmak istiyorum;


INPUT 1 ve INPUT 2 (5. ve 7. Ayaklar): Bu pinlerimizi Arduinoya balayacaz. Input 1e 5
volt verip input 2ye 0 volt verdiimizde motorumuz ileri doru, tam tersini yaptmzda da
geri doru gidecektir.
INPUT 3 ve INPUT 4 (10. ve 12. Ayaklar): Bu pinler de INPUT 1 ve INPUT 2 gibi almaktadr.
OUTPUT 1 ve OUTPUT 2 (2. Ve 3. Ayaklar): Bu iki pin motorun iki ucuna balanmas
gerekmektedir.
OUTPUT 3 ve OUTPUT 4 (13. Ve 14. Ayaklar): Bu iki pin dier motorun iki ucuna balanmas
gerekmektedir.
ENABLE A ve ENABLE B (6. ve 11. Ayaklar): Bu iki pin bizim hzmz ayarlayacak pinlerdir. Bu
yzden bu pinleri Arduinonun PWM ayaklarna balamamz gerekir. Verilen PWM sinyaline
gre hzmz belli olacak ve INPUT ayaklarna verdiimiz veya vermediimiz 5 volta gre de
motorun yn belli olacaktr.

23

PWM ile Hz Kontrol: PWM sinyali LOGICHIGH (5 Volt) ve LOGIC-LOW (0 Volt)


sinyallerden olumaktadr. HIGH ve LOW
sinyalin oranna gre belli olan ortalama
k sinyali sayesinde motorumuzun hz 0255 arasnda deerler alabilmektedir.

VSS (LOGIC SUPPLY VOLTAGE 9. Ayak): Adndan da anlald gibi bu pinin 5 volta
balanmas gerekmektedir. Devrenin kararszln azaltmak iin bu pin ile toprak arasna
100nFlk kondansatr balanabilir.
GND (8. Ayak) : Bu pini topraa balamamz gerekmektedir. Ayrca entegrenin tepesindeki
metal de toprak olmaktadr. Bunu belirtmemin nedeni yanllkla ksa devre yapmamanz
iindir.
VS (4. Ayak): Entegremizin motorlara gidecek enerjiyi salad asl besleme ayadr. Buraya
verdiimiz motor kontrolmz dorultusunda motorlara verilecektir. Motorumuzun
zellikleri gze alnarak uygulamalarmzda buraya 12 Volt balayacaz.

Entegremizin pin yaplanmasn rendiimize gre devremizi oluturmaya balayalm. Test


iin entegreyi breadboard zerinde kullanabilirsiniz. Fakat dier uygulamalarda kullanmak
istediinizde, kablo kalabal ve srekli kan/temasszlk yapan kablolar yznden tam
verim alamazsnz. Bu yzden devreyi test ettikten sonra delikli pertinaksa veya bask
devreye kurmak isteyebilirsiniz. Veya benim nerim hazr devre kartn almanz. Yurtdndan
2-3$a alabilirsiniz.
Hazr kart aldnzda da zerinden demin bahsettiim pinleri greceksiniz.

24

Sra geldi Arduino programn yazmaya. Aadaki kodda oluturuum fonksiyonlar dier
uygulamalarmzda da kullanacaz. ncelikle INPUT ayaklar iin deikenlerimizi
tanmlyoruz.

const int sagileri = 9;


const int saggeri = 8;
const int solileri = 12;
const int solgeri = 13;
const int solenable = 11;
const int sagenable = 10;
void ileri(int hizsag, int hizsol){
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,HIGH);
digitalWrite(saggeri,LOW);
analogWrite(solenable, hizsol);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri,LOW);
}
void geri(int hizsag, int hizsol){ // ilk deikenimiz sag motorun ikincisi
sol motorun hzn gstermektedir.
// motorlarmzn hz 0-255 arasnda olmaldr.
// Fakat baz motorlarn torkunun yetersizliiniden 60255 arasnda almaktadr.
// Eer motorunuzdan tiz bir ses kyorsa hzn arttrmanz gerekmektedir
.
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,LOW);
digitalWrite(saggeri, HIGH);
analogWrite(solenable, hizsol);
digitalWrite(solileri, LOW);
digitalWrite(solgeri, HIGH);
}
void dur()
{
digitalWrite(sagileri, HIGH);
digitalWrite(saggeri, HIGH);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri, HIGH);
}
void setup(){
pinMode(sagileri,OUTPUT);
pinMode(saggeri,OUTPUT);
pinMode(solileri,OUTPUT);
pinMode(solgeri,OUTPUT);
pinMode(sagenable,OUTPUT);
pinMode(solenable,OUTPUT);
}
void loop(){
ileri(100,100); // ileri gidiyoruz
delay(1000);
dur(); // durduk
delay(1000);
ileri(150,100) // hafif sola doru gidiyoruz
delay(1000);

25

dur(); // durduk
delay(1000);
ileri(100,150) // hafif saa doru gidiyoruz
delay(1000);
dur(); // durduk
delay(1000);
geri(100,100); // geri gidiyoruz
delay(1000);
dur(); // durduk
delay(1000);
}

Umarm kodlar yararl olmutur. imdi bir de yazlmda yazdmz kodlarla yani Arduino
ayaklaryla motor srcmzn ayaklar arasndaki balantlar bir tabloda gsterelim.
Arduino

Motor Src

INPUT 1

INPUT 2

13

INPUT 3

12

INPUT 4

11

ENABLE A

10

ENABLE B

Motor

Motor Src

Motor1 +

OUTPUT 1

Motor1 -

OUTPUT 2

Motor2 +

OUTPUT 3

Motor2 -

OUTPUT 4

(Motorun + veya ucunun hangisi olduu farketmez)


Besleme

Motor Src

+12 Volt

VCC

Toprak (- u)

GND

+5 Volt

VS

26

Arduino ile Uzaklk Sensr


Kitabmzda HC-SR04 Mesafe Sensr ile uygulama yapacaz. Bu sensr piyasada bolca
bulunan fakat lkemizde pahal olan bir sensrdr. inden tanesini 1-2$a alabilirsiniz.
Sensr 2-200 CM arasndaki uzaklklar lmektedir. Fakat 200 CMe doru sensr kalitesi
bozulmaktadr.
Sensr insan kulann duyamayaca bir frekansta ses yollar. Ses eer bir yere arpar ise geri
yansz ve sensrmze gelir. Sensr bu sesin gidip gelme sresini hesaplar ve bylece cismin
uzakln bulur. Bu yzden bu sensre ultrasonik ses sensr de denir.
Devre emas iin aadaki resme bakabilirsiniz.

Resimde de grld gibi balant emas


Sensr -> Arduino
VCC -> 5 Volt
GND -> GND
Trig -> 8 (deiebilir)
Echo -> 7 (deiebilir)
imdi sensrden aldmz uzakl bilgisayar ekranna yazdran bir uygulama programlayalm.

27

int trigPin = 6; // sensrn trig pinine balanacak arduino pini


int echoPin = 7; // sensrn echo pinine balanacak arduino pini
long olcum;
long cm; // sensrmzden okuduumuz uzaklk
void setup(){
pinMode(trigPin, OUTPUT);
pinMode(echoPin,INPUT);
Serial.begin(9600);
}
void loop()
{
digitalWrite(trigPin, LOW); // sensr ilk bata ses yollamasn
delayMicroseconds(5);
digitalWrite(trigPin, HIGH); // Burada ses dalgasn yolluyoruz
delayMicroseconds(10);
digitalWrite(trigPin, LOW); // Tek bir ses dalgas yolladk
olcum = pulseIn(echoPin, HIGH); // Eer ses geri dnerse echo pinine geri
dnecektir.
// Burada geen sreyi hesaplyoruz.
cm= olcum /29.1/2; // lm deerini zamandan -> CMye eviriyoruz
Serial.println(cm); // sonucu Serial Monitorden grmek iin bilgisayara
yolluyoruz
delay(100);
}

Eer sensrn nnde engel yoksa sensrde bir miktar yavalama olacaktr. Bundan
kurtulmak iin MAX bekleme deerini girmemiz lazmdr. Bu deeri arttrp azaltarak kendi
sensrnze uygulayabilirsiniz. Deitirmeniz gereken kod:
digitalWrite(trigPin, HIGH, 2895); // 2895 saysn deitirebilirsiniz.

28

Arduino ile vme lm


vme lm iin piyasada en ok kullanlan ADXL345i kullanacaz. Bu sensr ile 3 eksende
asal ivme llebilir. Sensr I2C ve SPI hatt zerinden haberlemektedir. Haydi
balantlarmz kuralm:

Devremize baladmza gre programlamaya geebiliriz. Sensrmz kullanmadan nce


hazr fonksiyonlarnn bulunduu ADXL345 ktphanesini indirelim. Linkten indirebilirsiniz.
http://code.bildr.org/download/959.zip
Ktphaneyi Arduinonun program dosyalar arasndaki libraries klasrne dosya halinde
atalm. Ktphane kurulumu tamamladna gre rnek kodu inceleyelim.
#include <Wire.h>
#include <ADXL345.h>
ADXL345 adxl; //adxl adnda nesne yaratyoruz
void setup(){
Serial.begin(9600);
adxl.powerOn(); // sensr altryoruz
}
void loop(){
int x,y,z;
adxl.readAccel(&x, &y, &z); //sensrden gelen deerleri okuyoruz
Serial.print(x);
Serial.print(y);
Serial.println(z); // sensr deerlerini ekrana yazdrdk.
Delay(10);
// sensrler hem yer ekim ivmesini hemde aktif ivmeyi vermektedir
}

29

ARDUNO UYGULAMALARI
Trafik Lambalar
lk uygulamamz olarak basit bir proje ile balayalm. Bu
projede 3 adet(krmz,sar,yeil) LED kullanacaz. Daha
nce de bahsettiimiz gibi LEDin uzun aya arduinoya,
ksa aya ise topraa taklmaldr. 3 LEDi sras ile
Arduinonun 11, 12 ve 13. pinlerine takalm. Her LED ile
Arduino balantsnn arasna yaklak 220 ohm deerinde
direnler takalm.
Ama: Krmz k 5 saniye boyunca yanacak. Daha sonra
sar k yarm saniye ve sonra da yeil k 3 saniye boyunca
yanar. Fakat daha sonra sar k bir saniye yanar ve krmz
a geilir.
int kirmizi = 13;
int sari = 12;
int yesil = 11;
void setup()
{
pinMode(kirmizi, OUTPUT);
pinMode(sari, OUTPUT);
pinMode(yesil, OUTPUT);
}
void lambaDegistir(int lamba) // kirmizi = 1, sari = 2, yeil = 3
{
digitalWrite(kirmizi, LOW);
digitalWrite(sari, LOW);
digitalWrite(yesil, LOW);
switch(lamba){
case 1:
digitalWrite(kirmizi, HIGH);
break;
case 2:
digitalWrite(sari, HIGH);
break;
case 3:
digitalWrite(yesil, HIGH);
break;
}
}
void loop()
{
lambaDegistir(1);
delay(5000);
lambaDegistir(2);
delay(500);
lambaDegistir(3);
delay(3000);
lambaDegistir(2);
delay(1000);
}

30

Arduino ile Voltmetre Robot Yapm


Bu projemizde 0 ile 5 volt arasndaki deerleri lebilen bir voltmetre tasarlayacaz.
Amacmz ADCyi daha iyi kavramaktr. Balantlarmzda sadece iki kablo kullanacaz.
lk kablomuzu Arduinonun ground ayana balayalm. kinci kablomuzu A0 ayana
balayalm. Yaptmz voltmetreyi test etmek iin test devresi kurabilir ve bunun eitli
yerlerindeki gerilimleri lebilirsiniz.
Hemen yazlma geelim. ADC rneimizden farkl olarak bu sefer saysal deere kar gelen
gerilimi hesaplayp bilgisayar ekranna yazdracaz.
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorDegeri = analogRead(A0); // A0daki gerilimin saysal deeri
float gerilim = (5/1023)*sensorDegeri; // 5 volt max. 1023 ile
llyordu. Bu yzden adm araln bulmak iin 5/1023 ilemini yaptk.
Bu sonucuda ADCnin deeri ile arptk Bylece gerilimi bulmu olduk.
Serial.print(gerilim);
Serial.println(" Volt");
delay(100);
}

lm iin gerilimi lmek istediiniz yere A0dan gelen kabloyu, devrenizin toprana da
GNDden gelen ucu balaynz.
DKKAT: Asla ve Asla 5 volt zerindeki deerleri lmeye almayn. Byle bir hatay
engellemek iin devrenize 5 Volt deerinde bir Zenner Diyotu ters balamanz yararl
olabilir.

31

LM35 ile Scaklk lm


En temel uygulamalardan birisi olan LM35 scaklk sensryle lm yapalm. LM35
sensrnn 3 pini vardr. Bunlar +5V, GND ve DATA ayaklardr. Data ayandan gelen deeri
ADC ile dijitale evirmemiz gerekir.

Balantlar ekildeki gibi yapalm. Sensrn gbekli yeri arkaya baktnda, yani yazs bize
baktnda ilk Pin 5 Volt, ortadaki pin Arduinonun analog giriine ve 3. Pin ise topraa (GND)
balanmaldr.
Haydi, yazlma geelim Yapmamz gereken analog sinyali okumak ve matematiksel ilem ile
scakla evirmektir. evirdiimiz deeri bilgisayara yollayalm.
float sicaklik;
void setup()
{
Serial.begin(9600);
}
void loop()
{
sicaklik = analogRead(A0);
sicaklik = sicaklik * 0.48828125;
Serial.print("SICAKLIK = ");
Serial.print(sicaklik);
Serial.println(" C");
delay(500);
}

32

Arduino ile arpmayan Robot Yapm


lk robotumuzu yapmaya balayalm. Robotumuzu yapmak iin derste grdmz uzaklk
sensrmz ve DC motor srcmz kullanacaz. Eer bu konular hakknda bilgi sahibi
deilseniz bu konular tekrardan gzden geirmeniz yararl olabilir.
Haydi Balayalm ncelikle malzeme listemizi kartalm:
-

1 adet ase: Tm malzemeleri ve motorlar sabitlemek iin bir plaka

2 adet DC motor

2 adet tekerlek: DC motorun ucuna tam uymal

1 adet motor src: Kendi yaptmz da olur

1 adet sarho tekerlek: Veya yzeyle srtnmeyi azaltacak bir ubuk ( ben genellikle
LEDin kafasn kullanmaktaym)

Pil : 11.1 Voltluk lipo piller uygun olacaktr. 9 Voltluk pil motorlar iin yetersiz kald
oluyor Denemek lazm

3 adet HC-SR04 uzaklk sensr

Ve tabii ki bir Arduino

lk bata robotun mekaniini yapalm. asemizin


arkasna iki motoru yerletirelim. Robotun n tarafna
sarho tekerimizi yerletirelim. Sarhoumuz yoksa
dengeyi salayacak ekilde robotun altna LEDler
koyalm. DC motorlarmza tekerlerimizi takalm ve
robotumuzun dengede durmasn salayalm. imdi
Arduino ve motor srcmz iin gzel bir yer
ayarlayalm. Kablolamay iyi yapmanz robotu rahat test
etmenizi salayacaktr. Son olarak da sensrleri 0-90-180
derece eklinde yerletirelim.
Robotun yerleimi resimdeki gibi olacaktr.
Elektronik balantlar daha nceki konularda
bahsettiimiz gibi dikkatlice yapalm.

33

Kablolamay bitirdiimize gre yazlma geelim ve robotumuzu test edelim.


const int sagileri = 9;
const int saggeri = 8;
const int solileri = 12;
const int solgeri = 13;
const int solenable = 11;
const int sagenable = 10;
/*
trigPin1 ve echoPin1 = soldaki uzaklk sensrmz
trigPin2 ve echoPin2 = ndeki uzaklk sensrmz
trigPin3 ve echoPin3 = sadaki uzaklk sensrmz
*/
int trigPin1 = 6;
int echoPin1 = 7;
int trigPin2 = 4;
int echoPin2 = 5;
int trigPin3 = 2;
int echoPin3 = 3;
float uzaklik(int trigPin, int echoPin){
float olcum;
float cm;
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
olcum = pulseIn(echoPin, HIGH);
cm= olcum /29.1/2;
return cm;
}
void ileri(int hizsag, int hizsol){
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,HIGH);
digitalWrite(saggeri,LOW);
analogWrite(solenable, hizsol);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri,LOW);
}
void geri(int hizsag, int hizsol){
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,LOW);
digitalWrite(saggeri, HIGH);
analogWrite(solenable, hizsol);
digitalWrite(solileri, LOW);
digitalWrite(solgeri, HIGH);
}
void dur()
{
digitalWrite(sagileri, HIGH);
digitalWrite(saggeri, HIGH);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri, HIGH);
}
void setup(){
pinMode(sagileri,OUTPUT);
pinMode(saggeri,OUTPUT);
pinMode(solileri,OUTPUT);

34

pinMode(solgeri,OUTPUT);
pinMode(sagenable,OUTPUT);
pinMode(solenable,OUTPUT);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1,INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2,INPUT);
pinMode(trigPin3, OUTPUT);
pinMode(echoPin3,INPUT);
}
void loop(){
while( uzaklik(trigPin2, echoPin2 ) < 10 ){ // nne engel gelene kadar
dz git
ileri(100,100);
}
dur(); // engel geldikten sonra dur
delay(1000); // 1 saniye bekle
if( uzaklik(trigPin1, echoPin1) > 10 ){ // soluna bak
ileri(150,0); // engel yoksa sola dn
delay(500); // 90 derece dnene kadar geecek sre. Bu sreyi kendinize
gre ayarlayn
dur(); // dur
delay(1000);
}else if(uzaklik(trigPin3, echoPin3) > 10 ){ // sol dolu ise saa bak
ileri(0,150); // engel yoksa saa dn
delay(500); // 90 derece dnene kadar geecek sre. Bu sreyi
kendinize gre ayarlayn
dur(); // dur
delay(1000);
}else { // sa ve solda engel varsa geri gidip dnelim
geri(100,100);
delay(1000);
ileri(150,0);
delay(500);
dur();
delay(1000);
}
}

Yaptnz robot ve kodlarn uygun olarak almas iin kodlar zerinde baz deiiklikler
yapmak gerekebilir.
Bu robot ile labirent zen robot yaplabilir. Burada tek nemli olan robotun tam 90 derece
dnmesini salamaktr.

35

Arduino ile Basit izgi zleyen Robot Yapm


Bir nceki projemizdekine benzer bir robot tasarlayalm. Fakat bu sefer uzaklk sensrlerini
skelim ve robotun en nne yere bakacak ve yerden 1-2 CM yukarda olacak ekilde,
siyah/beyaz sensrlerimizi koyalm. Bu robotumuzda 3 tane CNY70 kullanacaz. Bu yzden
daha nce anlattmz ekilde bu sensrlerden 3 tane balayalm.
ncelikle sylemeliyim ki robot yarmalarnda grdmz kadar kaliteli bir izgi izleyen
yapmayacaz. O tarz bir robot yapmak iin PID kullanmamz gerekir. Fakat biz buna gerek
kalmadan daha basit bir robot yapacaz.
Haydi Balayalm ncelikle malzeme listemizi kartalm:
-

1 adet ase: Tm malzemeleri ve motorlar sabitlemek iin bir plaka

2 adet DC motor

2 adet tekerlek: DC motorun ucuna tam uymal

1 adet motor src: Kendi yaptmz da olur

1 adet sarho tekerlek: Veya yzeyle srtnmeyi azaltacak bir ubuk ( ben genellikle
LEDin kafasn kullanmaktaym)

Pil : 11.1 Voltluk lipo piller uygun olacaktr. 9 Voltluk pil motorlar iin yetersiz kald
oluyor Denemek lazm

3 adet CNY70 : Balantlar bir kartn zerine yaparak kullanabilirsiniz

Ve tabii ki bir Arduino

Programlamaya balayalm. nceki konularda rendiimiz kodlar zerinden projemizi


yazacaz.
const int sagileri = 9;
const int saggeri = 8;
const int solileri = 12;
const int solgeri = 13;
const int solenable = 11;
const int sagenable = 10;
int sensorpin[3] = {A0,A1,A2}; // Sensrlerimizin balantlar
int dijitalize(int deger,int sensor){
int esikdegeri;
switch(sensor){
// Eik deerlerini kendi sensrnze gre ayarlamay unutmayn
// Eik deerleri iin Arduino ile Siyah Beyaz Kontrol konusuna
bakabilirsiniz
case 0:
esikdegeri = 900;

36

break;
case 1:
esikdegeri = 820;
break;
case 2:
esikdegeri = 820;
break;
}
if (esikdegeri <deger)
return 1;
else
return 0;
}
void ileri(int hizsag, int hizsol){
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,HIGH);
digitalWrite(saggeri,LOW);
analogWrite(solenable, hizsol);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri,LOW);
}
void setup(){
pinMode(sagileri,OUTPUT);
pinMode(saggeri,OUTPUT);
pinMode(solileri,OUTPUT);
pinMode(solgeri,OUTPUT);
pinMode(sagenable,OUTPUT);
pinMode(solenable,OUTPUT);
}
void loop(){
if(dijitalize(analogRead(sensorpin[1]),1)){
ileri(100,100);
}
if(dijitalize(analogRead(sensorpin[0]),0)){
ileri(0,100);
while(!dijitalize(analogRead(sensorpin[0]),0));
}
if(dijitalize(analogRead(sensorpin[2]),2)){
ileri(100,0);
while(!dijitalize(analogRead(sensorpin[2]),2));
}
}

37

Arduino ile Bluetooth Kontroll Robot Yapm


ncelikle Arduino ve Bluetooth kontrol yaptmz konuyu anladnzdan emin olunuz. Bu
projede robotumuzu TERA TERM programn kullanarak bluetooth zerinden yneteceiz. Bir
nceki projelerde kurduumuz robotumuzu kuralm. Sensrlerimizi kartalm ve bluetooth
modlmz balayalm.
-

1 adet ase: Tm malzemeleri ve motorlar sabitlemek iin bir plaka

2 adet DC motor

2 adet tekerlek: DC motorun ucuna tam uymal

1 adet motor src: Kendi yaptmz da olur

1 adet sarho tekerlek: Veya yzeyle srtnmeyi azaltacak bir ubuk ( ben genellikle
LEDin kafasn kullanmaktaym)

Pil : 11.1 Voltluk lipo piller uygun olacaktr. 9 Voltluk pil motorlar iin yetersiz kald
oluyor Denemek lazm

Bluetooth modl

Ve tabii ki bir Arduino

Eer her eyi doru yaptysak Bluetooth modlndeki k yanp snecektir. Laf fazla
uzatmadan programlamaya gemek istiyorum. Robotumuz harekete gemek iin
bilgisayardan komut bekleyecektir. Bu komutu TERA TERM program zerinden klavyemizle
vereceiz. Robotumuz w ile ileri, x ile geri gidecek; a ile sola, d ile saa dnecek ve s
tuu ile duracaktr.
Haydi balayalm
const int sagileri = 9;
const int saggeri = 8;
const int solileri = 12;
const int solgeri = 13;
const int solenable = 11;
const int sagenable = 10;
void ileri(int hizsag, int hizsol){
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,HIGH);
digitalWrite(saggeri,LOW);
analogWrite(solenable, hizsol);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri,LOW);
}
void geri(int hizsag, int hizsol){

38

analogWrite(sagenable, hizsag);
digitalWrite(sagileri,LOW);
digitalWrite(saggeri, HIGH);
analogWrite(solenable, hizsol);
digitalWrite(solileri, LOW);
digitalWrite(solgeri, HIGH);
}
void dur()
{
digitalWrite(sagileri, HIGH);
digitalWrite(saggeri, HIGH);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri, HIGH);
}
void setup(){
Serial.begin(9600);
pinMode(sagileri,OUTPUT);
pinMode(saggeri,OUTPUT);
pinMode(solileri,OUTPUT);
pinMode(solgeri,OUTPUT);
pinMode(sagenable,OUTPUT);
pinMode(solenable,OUTPUT);
}
void loop(){
if (Serial.available() > 0) {
//Bluetoothtan veri bekliyoruz
char tus = (char)Serial.read();
if( tus == 'w' )
ileri(100,100);
if( tus == 's' )
dur();
if( tus == 'a' )
ileri(0,100);
if( tus == 'd' )
ileri(100,0);
if( tus == 'x' )
geri(100,100);
}
}

39

Vous aimerez peut-être aussi