temel elektronik ve arduino eğitimi

Upload: ertan2002

Post on 02-Jun-2018

239 views

Category:

Documents


0 download

TRANSCRIPT

  • 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

    [email protected]

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

    }

    }