Download - Temel Elektronik ve Arduino Eğitimi
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
1/44
1
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
2/44
2
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. Buprogramlar ile web
sitelerimi gncel tutarak kendime maddi destek saladm. Fakat bu becerilerimi iyi bir
niversite ile talandrmadktansonra bir anlam olmadn farkettim. 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 girdiimprojelerden 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 roketyarmasnda lkemize derece getirmektir.
Kusura bakmayn Laf laf at, yazm biraz uzun oldu.
Beni takip etmek isterseniz iletiim bilgilerim aadadr.
facebook.com/flashasbi
hasbisevinc.com
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
3/44
3
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.
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
4/44
4
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
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
5/44
5
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
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
6/44
1
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.
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
7/44
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
8/44
3
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
= 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
}
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
9/44
4
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 = b1 ; // her dngde bnin deerini bir azalttk
// dikkat edilmelidir ki eer bnin deerini deitirmeseydik
// dng koulu hep doru olacandan program burada takl kalacakt
}
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
10/44
5
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 iinhttp://arduino.cc/en/Main/Softwareadresine 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.
http://arduino.cc/en/Main/Softwarehttp://arduino.cc/en/Main/Softwarehttp://arduino.cc/en/Main/Softwarehttp://arduino.cc/en/Main/Software -
8/10/2019 Temel Elektronik ve Arduino Eitimi
11/44
6
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.
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
12/44
7
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
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
13/44
8
// program buraya yazyoruz
}
Arduinoyu test etmek ve ilk programmz yazmak iin bu projeyi yapabiliriz. 1 Saniye
aralklar ile LEDimiz yanp snecektir.
intLED = 10; // burada arduinonun 10. Ayana ledimizi baladmz
sylyoruz
voidsetup(){
pinMode(LED, OUTPUT); // LED pini yani Arduinonun 10. Aya k
yapld
}
voidloop(){
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
}
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
14/44
9
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.
voidsetup(){
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11,OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
}
voidloop(){
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 kodlarnaklayc olduunu dnmekteyim. Fakat bu kodlar balang dzeyindedir ve gereksizolarak her led tek tek kontrol edilmitir. Bir sonraki aama olarak yukardaki uygulamayyapan fakat daha profesyonel olan bir program yazalm.
constintledPini [] = {9,10,11,12,13};
voidsetup() {
for(inti=0; i
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
15/44
10
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.
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
16/44
11
constintbuttonPin = 2; // Butonun pin numaras
constintledPin = 13; // Ledin baland pin numaras
intbuttonState = 0; // Butonun durumu
voidsetup() {
pinMode(ledPin, OUTPUT); // Ledin bal olduu pini k olarak
ayarlyoruz.
pinMode(buttonPin, INPUT); // Butonun bal olduu pini k olarakayarlyoruz.
}
voidloop(){
buttonState = digitalRead(buttonPin); // butonun basl olup olmadn
kontrol ediyoruz.
// Buton baslise bize HIGH deilise 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.
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
17/44
12
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.
voidsetup() {
Serial.begin(9600); // bilgisayar ile arduinomuzun haberlemesini
balatyoruz.
// Bilgisayarnve arduinonun aynhzdaalmasiin9600 yazdk.
// Yani saniyede 9600 tane bit transferi olacaktr.}
intsayici = 0;
voidloop() {
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.
constintbuttonPin = 2; // Butonun pin numaras
intsayici = 0; //sayacimiz
intbuttonState = 0; // Butonun durumu
voidsetup() {
pinMode(buttonPin, INPUT);
Serial.begin(9600);}
voidloop() {
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);}
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
18/44
13
}
}
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.
intincomingByte = 0; // gelen veriler
voidsetup() {
Serial.begin(9600);
}
voidloop() {
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 geriyolla
}
}
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
19/44
14
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.
voidsetup() {
Serial.begin(9600);
}
intsayici = 0;
voidloop() {
Serial.print("Sayicimizin degeri= ");
Serial.println(sayici);
delay(1000);
http://www.mcu-turkey.com/stm8s-hc-06-bluetooth-modul-ile-haberlesme-uygulamasi/http://www.mcu-turkey.com/stm8s-hc-06-bluetooth-modul-ile-haberlesme-uygulamasi/http://www.mcu-turkey.com/stm8s-hc-06-bluetooth-modul-ile-haberlesme-uygulamasi/ -
8/10/2019 Temel Elektronik ve Arduino Eitimi
20/44
15
}
Programmz arduinomuza attk ve bluetooth modlnn Tx ve Rx ayaklarn dikkatlice
arduinoya baladk. Hala modldeki krmz k yanp snmektedir. nk bilgisayarnmodle 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. Tmadmlar 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
SoftwareSerialyeniHaberlesmeKanali(10, 11); // 10 = RX, 11 = TX yani 10 -
> bluetoohtu Txine 11 -> Rxine
voidsetup()
{
Serial.begin(9600); // bilgisayar ile haberlememiz
yeniHaberlesmeKanali.begin(4800); // yeni haberleme kanalmz
}
voidloop()
{
Serial.println("Bu yazi bilgisayara");
yeniHaberlesmeKanali.println("Bu yazi bluetootha");
delay(100);
}
Yukardaki kod yardm ile arduino hem bluetoothahemde bilgisayara farkl mesajlar
yollamaktadr. Mesajlar grmek iin Tera Term ve arduinonun kendi Serial Monitorn
aabilirsiniz.
http://download.cnet.com/Tera-Term/3000-20432_4-75766675.htmlhttp://download.cnet.com/Tera-Term/3000-20432_4-75766675.htmlhttp://download.cnet.com/Tera-Term/3000-20432_4-75766675.html -
8/10/2019 Temel Elektronik ve Arduino Eitimi
21/44
16
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:
voidsetup() {
Serial.begin(9600);
}
voidloop() {
intsensorDegeri = 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.
}
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
22/44
17
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.
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
23/44
18
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.
intreferansDegeri = 800; // siyah beyaz iin eik deeri
voidsetup() {
Serial.begin(9600);
}voidloop() {
intsensorDegeri = 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 sensrnzegre 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.
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
24/44
19
Arduino ile LCD Kullanm
Arduino ile sklkla kullanmasam bile LCD kullanmn renmekyararl 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 // ktphanemizi ekledik
LiquidCrystallcd(12, 11, 5, 4, 3, 2); // kablo balantlarmz programa
tanttk
voidsetup() {
lcd.begin(16, 2); // LCDmizin satr ve stun saysn girdik
lcd.print("Hasbi Sevinc"); // Ekrana bir eyler yazdk
}
voidloop() {
lcd.setCursor(0, 1); // imlecimizi 2. Satra indirdik
lcd.print(millis()/1000); // programn balangcndan beri geen sre
}
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
25/44
20
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 kullanm iin ktphane eklenmesi
intyazdirilacakAdres , yazdirilacakDeger;
intokunacakAdres, okunanDeger;
voidsetup()
{
Serial.begin(9600); // Bilgisayara veri gndermek iin
}
voidloop()
{
intyazdirilacakAdres = 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
// Sonularekrana yazdryoruz
Serial.print(okunacakAdres);
Serial.print("Adresindeki Deger= ");
Serial.print(okunanDeger);
Serial.println();
delay(500); // biraz bekleyelim
}
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
26/44
21
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 ktphanesini programmza dahil ettikServoservoNesnesi; // servo kontrol iin bir nesne yarattk
voidsetup()
{
servoNesnesi.attach(9); // Servomuzun turuncu kablosunu 9 nolu pine
taktmz sylyoruz
}
voidloop()
{
servoNesnesi.write(100); // Servomuzu 100 dereceye
dndrdk
delay(1000); // biraz bekleyelim
servoNesnesi.write(20); // Servomuzu 20 dereceye dndrdkdelay(1000); // biraz bekleyelim
}
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
27/44
22
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-board-
module-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.
http://www.aliexpress.com/item/Special-promotions-5pcs-lot-L298N-motor-driver-board-module-L298-for-arduino-stepper-motor-smart-car/1827893830.htmlhttp://www.aliexpress.com/item/Special-promotions-5pcs-lot-L298N-motor-driver-board-module-L298-for-arduino-stepper-motor-smart-car/1827893830.htmlhttp://www.aliexpress.com/item/Special-promotions-5pcs-lot-L298N-motor-driver-board-module-L298-for-arduino-stepper-motor-smart-car/1827893830.htmlhttp://www.aliexpress.com/item/Special-promotions-5pcs-lot-L298N-motor-driver-board-module-L298-for-arduino-stepper-motor-smart-car/1827893830.htmlhttp://www.aliexpress.com/item/Special-promotions-5pcs-lot-L298N-motor-driver-board-module-L298-for-arduino-stepper-motor-smart-car/1827893830.html -
8/10/2019 Temel Elektronik ve Arduino Eitimi
28/44
23
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.
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
29/44
24
PWM ile Hz Kontrol:PWM sinyali LOGIC-
HIGH (5 Volt) ve LOGIC-LOW (0 Volt)
sinyallerden olumaktadr. HIGH ve LOW
sinyalin oranna gre belli olan ortalamak sinyali sayesinde motorumuzun hz 0-
255 arasnda deerler alabilmektedir.
VSS (LOGIC SUPPLY VOLTAGE9. 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 dorultusundamotorlara 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 sonradelikli 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.
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
30/44
25
Sra geldi Arduino programn yazmaya. Aadaki kodda oluturuum fonksiyonlar dier
uygulamalarmzda da kullanacaz. ncelikle INPUT ayaklar iin deikenlerimizi
tanmlyoruz.
constintsagileri = 9;
constintsaggeri = 8;
constintsolileri = 12;
constintsolgeri = 13;
constintsolenable = 11;
constintsagenable = 10;
voidileri(inthizsag, inthizsol){
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,HIGH);
digitalWrite(saggeri,LOW);
analogWrite(solenable, hizsol);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri,LOW);
}
voidgeri(inthizsag, inthizsol){ // ilk deikenimiz sag motorun ikincisi
sol motorun hzn gstermektedir.
// motorlarmznhz0-255 arasndaolmaldr.
// Fakat bazmotorlarntorkunun yetersizliiniden60-
255 arasndaalmaktadr.
// Eermotorunuzdan tiz bir ses kyorsahznarttrmanzgerekmektedir
.
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,LOW);digitalWrite(saggeri, HIGH);
analogWrite(solenable, hizsol);
digitalWrite(solileri, LOW);
digitalWrite(solgeri, HIGH);
}
voiddur()
{
digitalWrite(sagileri, HIGH);
digitalWrite(saggeri, HIGH);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri, HIGH);
}voidsetup(){
pinMode(sagileri,OUTPUT);
pinMode(saggeri,OUTPUT);
pinMode(solileri,OUTPUT);
pinMode(solgeri,OUTPUT);
pinMode(sagenable,OUTPUT);
pinMode(solenable,OUTPUT);
}
voidloop(){
ileri(100,100); // ileri gidiyoruz
delay(1000);
dur(); // durduk
delay(1000);ileri(150,100) // hafif sola doru gidiyoruz
delay(1000);
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
31/44
26
dur(); // durduk
delay(1000);
ileri(100,150) // hafif saa doru gidiyoruz
delay(1000);
dur(); // durduk
delay(1000);
geri(100,100); // geri gidiyoruzdelay(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
8 INPUT 1
9 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 + veyaucunun hangisi olduu farketmez)
Besleme Motor Src
+12 Volt VCC
Toprak (- u) GND
+5 Volt VS
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
32/44
27
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.
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
33/44
28
inttrigPin = 6; // sensrn trig pinine balanacak arduino pini
intechoPin = 7; // sensrn echo pinine balanacak arduino pini
longolcum;
longcm; // sensrmzden okuduumuz uzaklk
voidsetup(){
pinMode(trigPin, OUTPUT);
pinMode(echoPin,INPUT);Serial.begin(9600);
}
voidloop()
{
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 geensreyihesaplyoruz.
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.
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
34/44
29
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 #include
ADXL345 adxl; //adxl adnda nesne yaratyoruz
voidsetup(){
Serial.begin(9600);
adxl.powerOn(); // sensr altryoruz
}
voidloop(){
intx,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);// sensrlerhem yer ekimivmesini hemde aktif ivmeyi vermektedir
}
http://code.bildr.org/download/959.ziphttp://code.bildr.org/download/959.ziphttp://code.bildr.org/download/959.zip -
8/10/2019 Temel Elektronik ve Arduino Eitimi
35/44
30
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 boyuncayanar. Fakat daha sonra sar k bir saniye yanar ve krmz
a geilir.
intkirmizi = 13;
intsari = 12;
intyesil = 11;
voidsetup()
{
pinMode(kirmizi, OUTPUT);
pinMode(sari, OUTPUT);
pinMode(yesil, OUTPUT);
}voidlambaDegistir(intlamba) // kirmizi = 1, sari = 2, yeil = 3
{
digitalWrite(kirmizi, LOW);
digitalWrite(sari, LOW);
digitalWrite(yesil, LOW);
switch(lamba){
case1:
digitalWrite(kirmizi, HIGH);
break;
case2:
digitalWrite(sari, HIGH);
break;
case3:digitalWrite(yesil, HIGH);
break;
}
}
voidloop()
{
lambaDegistir(1);
delay(5000);
lambaDegistir(2);
delay(500);
lambaDegistir(3);
delay(3000);
lambaDegistir(2);delay(1000);
}
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
36/44
31
Arduino ile Voltmetre Robot Yapm
Bu projemizde 0 ile 5 volt arasndaki deerleri lebilenbir 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.
voidsetup() {Serial.begin(9600);
}
voidloop() {
intsensorDegeri = analogRead(A0); // A0daki gerilimin saysal deeri
floatgerilim = (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.
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
37/44
32
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.
floatsicaklik;
voidsetup()
{
Serial.begin(9600);
}
voidloop()
{
sicaklik = analogRead(A0);
sicaklik = sicaklik * 0.48828125;
Serial.print("SICAKLIK = ");
Serial.print(sicaklik);
Serial.println(" C");
delay(500);
}
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
38/44
33
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 Balayalmncelikle 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 olarakda sensrleri 0-90-180
derece eklinde yerletirelim.
Robotun yerleimi resimdeki gibi olacaktr.
Elektronik balantlar daha nceki konularda
bahsettiimiz gibi dikkatlice yapalm.
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
39/44
34
Kablolamay bitirdiimize gre yazlma geelim ve robotumuzu test edelim.
constintsagileri = 9;
constintsaggeri = 8;
constintsolileri = 12;
constintsolgeri = 13;
constintsolenable = 11;
constintsagenable = 10;
/*
trigPin1 ve echoPin1 = soldaki uzaklksensrmz
trigPin2 ve echoPin2 = ndekiuzaklksensrmz
trigPin3 ve echoPin3 = sadakiuzaklksensrmz
*/
inttrigPin1 = 6;
intechoPin1 = 7;
inttrigPin2 = 4;
intechoPin2 = 5;
inttrigPin3 = 2;
intechoPin3 = 3;
floatuzaklik(inttrigPin, intechoPin){
floatolcum;
floatcm;
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
olcum = pulseIn(echoPin, HIGH);
cm= olcum /29.1/2;
returncm;
}
voidileri(inthizsag, inthizsol){
analogWrite(sagenable, hizsag);digitalWrite(sagileri,HIGH);
digitalWrite(saggeri,LOW);
analogWrite(solenable, hizsol);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri,LOW);
}
voidgeri(inthizsag, inthizsol){
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,LOW);
digitalWrite(saggeri, HIGH);
analogWrite(solenable, hizsol);digitalWrite(solileri, LOW);
digitalWrite(solgeri, HIGH);
}
voiddur()
{
digitalWrite(sagileri, HIGH);
digitalWrite(saggeri, HIGH);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri, HIGH);
}
voidsetup(){
pinMode(sagileri,OUTPUT);
pinMode(saggeri,OUTPUT);pinMode(solileri,OUTPUT);
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
40/44
35
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);
}
voidloop(){
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);
}elseif(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.
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
41/44
36
Arduino ile Basit izgi zleyen Robot Yapm
Bir nceki projemizdekine benzer bir robot tasarlayalm. Fakat bu sefer uzaklk sensrlerini
skelim ve robotun en nneyere 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 yarmalarndagrdmz 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.
constintsagileri = 9;
constintsaggeri = 8;
constintsolileri = 12;
constintsolgeri = 13;
constintsolenable = 11;
constintsagenable = 10;
intsensorpin[3] = {A0,A1,A2}; // Sensrlerimizin balantlar
intdijitalize(intdeger,intsensor){
intesikdegeri;
switch(sensor){
// Eik deerlerini kendi sensrnze gre ayarlamay unutmayn
// Eik deerleri iin Arduino ile Siyah Beyaz Kontrol konusuna
bakabilirsiniz
case0:
esikdegeri = 900;
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
42/44
37
break;
case1:
esikdegeri = 820;
break;
case2:
esikdegeri = 820;
break;}
if(esikdegeri
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
43/44
38
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 b luetooth
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 fazlauzatmadan 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
constintsagileri = 9;
constintsaggeri = 8;constintsolileri = 12;
constintsolgeri = 13;
constintsolenable = 11;
constintsagenable = 10;
voidileri(inthizsag, inthizsol){
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,HIGH);
digitalWrite(saggeri,LOW);
analogWrite(solenable, hizsol);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri,LOW);
}voidgeri(inthizsag, inthizsol){
-
8/10/2019 Temel Elektronik ve Arduino Eitimi
44/44
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,LOW);
digitalWrite(saggeri, HIGH);
analogWrite(solenable, hizsol);
digitalWrite(solileri, LOW);
digitalWrite(solgeri, HIGH);}
voiddur()
{
digitalWrite(sagileri, HIGH);
digitalWrite(saggeri, HIGH);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri, HIGH);
}
voidsetup(){
Serial.begin(9600);
pinMode(sagileri,OUTPUT);
pinMode(saggeri,OUTPUT);
pinMode(solileri,OUTPUT);
pinMode(solgeri,OUTPUT);
pinMode(sagenable,OUTPUT);
pinMode(solenable,OUTPUT);
}
voidloop(){
if(Serial.available() > 0) { //Bluetoothtan veri bekliyoruz
chartus = (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);
}
}