49
Lattepanda ile Arduino ve Dr. Emrah Aydemir PC Kodlama

Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

  • Upload
    others

  • View
    18

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

Lattepanda ile Arduino veDr. Emrah Aydemir

PC K

odla

ma

Page 2: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

LATTEPANDA İLE ARDUİNO VE PC KODLAMAYazar: Dr. Emrah Aydemir

Genel Yayın Yönetmeni: Yusuf Ziya Aydoğan ([email protected]) Genel Yayın Koordinatörü: Yusuf Yavuz ([email protected])Sayfa Tasarımı: Kübra Konca NamKapak Tasarımı: Eğitim Yayınevi Grafik Birimi

T.C. Kültür ve Turizm Bakanlığı Yayıncı Sertifika No: 14824

ISBN: 1. Baskı, Kasım 2018

Baskı Cilt Dizgi Ofset MatbaacılıkMatbaacılar Sit. 10451. Sk. No: 4 Karatay/KONYA0 (332) 342 07 42

Kütüphane Kimlik KartıLATTEPANDA İLE ARDUİNO VE PC KODLAMADr. Emrah Aydemir (Yazar)XVI+192 s., 165x240 mmKaynakça var, dizin yok.ISBN: 1. Copyright © Bu kitabın Türkiye’deki her türlü yayın hakkı Eğitim Yayınevi’ne aittir. Bütün hakları saklıdır. Kitabın tamamı veya bir kısmı 5846 sayılı yasanın hükümlerine göre kitabı yayımlayan firmanın ve yazarlarının önceden izni olmadan elektronik/mekanik yolla, fotokopi yoluyla ya da herhangi bir kayıt sistemi ile çoğaltılamaz, yayımlanamaz.

Rampalı İş Merkezi Kat: 1 No: 121Tel: 351 92 85 • Meram/KONYAE-mail: [email protected]

Page 3: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

İÇİNDEKİLER

Şekiller Listesi XÖnsöz XV

1. Gömülü Sistemler ve Programlama 171.1. Mikroişlemciler 171.2. Mikrodenetleyiciler 18

1.2.1. Mikrodenetleyici Birimleri 191.2.2. Avantaj ve Dezavantajları 22

1.3. Gömülü Sistemler 231.4. Günümüz Mikrodenetleyicileri 23

1.4.1. PIC 241.4.2. Atmel 241.4.3. STM32 25

1.5. Diğer Entegre Sistemler 261.5.1. PLC 261.5.2. ASIC 271.5.3. SoC 271.5.4. FPGA 28

1.6. Robot Setleri 28

2. Elektronik Devre Elemanları 312.1. Temel Bilgiler 31

2.1.1. Gerilim 322.1.2. Akım 32

Page 4: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

IV

2.1.2.1. Alternatif Akım ve Gerilim 332.1.2.2. Doğru Akım ve Gerilim 34

2.1.3. Direnç 342.1.4. Temel Elektrik Kanunları 35

2.1.4.1. OHM 352.1.4.2. Güç 352.1.4.3. Kirşof 362.1.4.4. Örnek Soru Çözümleri 36

2.1.4.4.1. Örnek 1 362.1.4.4.2. Örnek 2 362.1.4.4.3. Örnek 3 37

2.2. Elektronik Devre Elemanları 382.2.1. Röleler 382.2.2. Dirençler 392.2.3. Bobin 392.2.4. Diyot 402.2.5. Transistör 402.2.6. Kondansatör 412.2.7. Potansiyometre 412.2.8. Buzzer 422.2.9. Adaptör 422.2.10. Piller ve Aküler 432.2.11. Bağlantı Kabloları (Jumper Kablolar) 43

3. Harici Donanımlar 453.1. Doğru Akım (DC) Motoru 453.2. Servo Motor 453.3. Step Motor 463.4. Mesafe Sensörü 473.5. Işık Sensörü 483.6. Eğim Sensörü 483.7. Basınç Sensörü 493.8. Dokunma Sensörü 493.9. Nem Sensörü 493.10. Yağmur Sensörü 503.11. Hareket Sensörü 50

Page 5: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

V

3.12. Sıcaklık Sensörü 513.13. Ekranlar ve Göstergeler 513.14. Devre Tahtası (Breadboard) 52

4. Arduino 554.1. Tarihçesi 554.2. Arduino Nedir? 554.3. Avantaj ve Dezavantajları 564.4. Donanımsal Özellikleri ve Kart Çeşitleri 574.5. Temel Bileşenler ve Giriş/Çıkış Pinleri 634.6. Programlama 674.7. Eklentiler (Shield) 68

5. Arduino Programlama 715.1. Sentaks (Söz Dizimi) 71

5.1.1. ; (Noktalı Virgül) 715.1.2. {} (Süslü Parantez) 715.1.3. // (Tek Satırlı Yorum) 715.1.4. /**/ (Çok Satırlı Yorum) 715.1.5. #define (Sabit Değer Tanımı) 715.1.6. #include (Kütüphane Çağırma) 72

5.2. Kontrol Yapıları ve Döngüler 725.2.1. If/Else 725.2.2. Switch/case 725.2.3. For 735.2.4. While 735.2.5. Do while 735.2.6. Break 745.2.7. Continue 745.2.8. Return 755.2.9. Goto 75

5.3. Aritmetik Operatörler 755.3.1. Atama (=) 755.3.2. Toplama (+) 765.3.3. Çıkarma (-) 765.3.4. Çarpma (*) 765.3.5. Bölme (/) 76

Page 6: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

VI

5.3.6. Mod Alma (%) 765.4. Karşılaştırma Operatörleri 77

5.4.1. Eşit Eşit (==) 775.4.2. Eşit Değil (!=) 775.4.3. Küçük (<) 775.4.4. Büyük (>) 785.4.5. Küçük Eşit (<=) 785.4.6. Büyük Eşit (>=) 78

5.5. Mantık Operatörleri (Boolean) 795.5.1. Ve ( && ) 795.5.2. Veya ( || ) 795.5.3. Değil ( | ) 79

5.6. Bit Bazlı Operatörler 805.6.1. Ve ( & ) 805.6.2. Veya ( | ) 805.6.3. Farklılık - XOR ( ^ ) 805.6.4. Tersi ( ~ ) 815.6.5. Sola Kaydırma ( << ) 815.6.6. Sağa Kaydırma ( >> ) 81

5.7. Bileşik Operatörler 815.7.1. Arttırma ( ++ ) 815.7.2. Azaltma ( -- ) 825.7.3. Bileşik Arttırma ( += ) 825.7.4. Bileşik Azaltma ( -= ) 825.7.5. Bileşik Çarpma ( *= ) 825.7.6. Bileşik Bölme ( /= ) 825.7.7. Bileşik Mod Alma ( %= ) 835.7.8. Bileşik Bit Ve ( &= ) 835.7.9. Bileşik Bit Veya ( |= ) 83

5.8. İşaretçiler (Pointerlar) 835.9. Değişkenler ve Veri Tipleri 84

5.9.1. bool 845.9.2. char 845.9.3. unsigned char 855.9.4. byte 855.9.5. int 85

Page 7: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

VII

5.9.6. unsigned int 855.9.7. word 855.9.8. long 865.9.9. unsigned long 865.9.10. short 865.9.11. float 865.9.12. double 865.9.13. string 875.9.14. String 875.9.15. array 89

5.10. Değişken Tanımlama Ön Ekleri 905.10.1. Volatile 905.10.2. static 905.10.3. Progmem 905.10.4. const 91

5.11. Dönüşüm Metotları 915.11.1. char() 915.11.2. byte() 915.11.3. int() 925.11.4. word() 925.11.5. long() 925.11.6. float() 925.11.7. sizeof() 92

5.12. Arduino Metotları 935.12.1. setup() 935.12.2. loop() 935.12.3. pinmode(pinNo, mode) 935.12.4. digitalWrite(pinNo, değer) 935.12.5. digitalRead(pinNo) 945.12.6. AnalogRead(pinNo) 945.12.7. AnalogWrite(pinNo, değer) 94

5.13. Giriş/Çıkış Pinlerini Yönetme 945.13.1. tone() 945.13.2. noTone() 955.13.3. shiftOut() 955.13.4. shiftIn() 96

Page 8: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

VIII

5.13.5. pulseIn() 965.14. Zaman Metotları 97

5.14.1. milis() 975.14.2. micros() 985.14.3. delay() 985.14.4. delayMicroseconds() 99

5.15. Matematiksel Metotlar 995.15.1. min(a,b) 995.15.2. max(a,b) 995.15.3. abs(a) 995.15.4. constrain(a,b,c) 1005.15.5. map(değer, a1, b1, a2, b2) 1005.15.6. pow(taban, üs) 1005.15.7. sqrt(a) 1005.15.8. sin(radyan) 1005.15.9. cos(radyan) 1015.5.10. tan(radyan) 101

5.16. Rastgele Sayılar 1015.16.1. random() 1015.16.2. randomSeed() 101

5.17. Karakter Metotları 1025.17.1. isAlpha(deger) 1025.17.2. isAlphaNumeric(deger) 1025.17.3. isAscii(deger) 1025.17.4. isControl(deger) 1025.17.5. isDigit(deger) 1025.17.6. isGraph(deger) 1025.17.7. isHexaDecimalDigit(deger) 1025.17.8. isLowerCase(deger) 1025.17.9. isPrintable(deger) 1025.17.10. isPunct(deger) 1035.17.11. isSpace(deger) 1035.17.12. isUpperCase(deger) 1035.17.13. isWhitespace(deger) 103

5.18. Bit ve Bayt Metotları 1045.18.1. lowByte(a) 104

Page 9: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

IX

5.18.2. highByte(a) 1045.18.3. bitRead(a, n) 1045.18.4. bitWrite(a, n, b) 1045.18.5. bitSet(a, n) 1045.18.6. bitClear(a, n) 105

5.19. Kesmeler 1055.19.1. Zamanlayıcı (Timer) Kesmeleri 105

5.19.1.1. Zamanlayıcı Çeşitleri ve Ayarları 1065.19.1.2. interrupts() 1085.19.1.3. noInterrupts() 108

5.19.2. Dış (Donanımsal) Kesmeler 1085.19.2.1. attachInterrupt() 1095.19.2.2. detachInterrupt() 109

5.20. TimerOne Kütüphanesi ile Zamanlayıcı/Kesme Kontrolü 1105.21. Seri Port Kullanımı 111

5.21.1. available() 1115.21.2. availableForWrite() 1125.21.3. begin() 1125.21.4. end() 1135.21.5. find() 1145.21.6. findUntil() 1155.21.7. flush() 1155.21.8. if(Serial) 1155.21.9. parseFloat() 1155.21.10. parseInt() 1165.21.11. peek() 1175.21.12. print() 1175.21.13. println() 1185.21.14. read() 1195.21.15. readBytes() 1195.21.16. readBytesUntil() 1205.21.17. readString() 1205.21.18. readStringUntil() 1215.21.19. serialEvent() 1215.21.20. setTimeOut() 122

Page 10: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

X

5.21.21. write() 1226. Lattepanda 123

6.1. Lattepanda Nedir? 1236.2. Avantajları ve Dezavantajları 1256.3. Giriş-Çıkış Pinleri 1256.4. LattePanda’ya İlk Bakış ve Açılış 1276.5. Lattepanda Yazılım ve Programlama 132

7. Lattepanda ile Uygulamalar 1397.1. Led Yakıp Söndürme 1397.2. RGB LED Kontrolü 1437.3. 74HC595 Shift Register Kullanımı 1477.4. Seri Haberleşme 1497.5. Dijital Giriş Buton ile Led Yakıp Söndürme 1517.6. Dijital Buton Sayıcı (Ark Önleme) 1537.7. Butonlar İle RGB LED Ayarlama 1567.8. Analog Pin ile Potansiyometre Değeri Okuma 1607.9. LDR ile Işık Algılama 1637.10. Buzzer ile Notaları Çalma 1647.11. DC Motor Hız Kontrolü 1667.12. DC Motor Hız ve Yön Kontrolü 1687.13. Servo Motor Kontrolü 1707.14. Step Motor Kontrolü 1727.15. Kızılötesi Kumanda Kontrolü 1757.16. RF ID ile Veritabanlı Personel Takibi 1827.17. Bluetooth ile Led Yakma 1867.18. 16x2 LCD Ekrana Tarih-Saati Yazdırma 1887.19. Ultrasonik Sensör İle Mesafe Ölçümü 1927.20. Sıcaklık Ölçme ve Yapay Zekâ ile Tahminleme 1947.21. Seslenerek Robot Kontrol Etme (Telefonsuz) 200

Kaynaklar 205

Page 11: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

Şekiller ListesiŞekil 1.2. Örnek Mikrodenetleyiciler 19Şekil 1.3. Mikrodenetleyici Birimleri 22Şekil 1.4. PIC Mikrodenetleyici Ailesinden Örnekler 24Şekil 1.5. Atmel Mikrodenetleyiciler 25Şekil 1.6. STM32 Kartları 25Şekil 1.7. PLC Çeşitleri 26Şekil 1.8. Örnek ASIC Devresi 27Şekil 1.9. Örnek SoC Devreleri 28Şekil 1.10. Örnek Bir FPGA Kartı 28Şekil 1.11. Lego WeDo 2.0 Eğitim Seti 29Şekil 2.1. Temel Elektrik Devresi 31Şekil 2.2. Açık/Kapalı Devre Örneği 32Şekil 2.3. Alternatif Gerilim ve Akımın Sinyal Çeşitleri 33Şekil 2.4. Doğru Akım ve Doğru Gerilim İçin Sinyal Şekli 34Şekil 2.5. Akım, Direnç ve Gerilimin Su Örneği 34Şekil 2.6. Paralel ve Seri Bağlantı Örneği 35Şekil 2.7. Röle Çeşitleri 38Şekil 2.8. Direnç Çeşitleri ve Renkleri 39Şekil 2.9. Bobin Çeşitleri 40Şekil 2.10. Diyot Çeşitleri 40Şekil 2.11. Transistör Çeşitleri 41Şekil 2.12. Kondansatör Çeşitleri 41Şekil 2.13. Potansiyometre Çeşitleri 41Şekil 2.14. Buzzer Çeşitleri 42Şekil 2.15. Adaptör Çeşitleri 42Şekil 2.16. Ayarlanabilir Güç Kaynağı Örnekleri 43Şekil 2.17. Pil ve Akü Çeşitleri 43Şekil 2.18. Bağlantı Kablo Çeşitleri 44Şekil 3.1. DC Motor Örnekleri 45Şekil 3.2. Servo Motor Örnekleri 46Şekil 3.3. Step Motor Örnekleri 46Şekil 3.5. Mesafe Ölçme Sensörleri 47Şekil 3.6. Ultasonik Mesafe Ölçme Sensörü 48Şekil 3.7. Işık Sensörü 48Şekil 3.8. Eğitim Sensörü 48

Page 12: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

XII

Şekil 3.9. Basınç Sensörü 49Şekil 3.10. Dokunma Sensörü 49Şekil 3.11. Nem Sensörü 50Şekil 3.12. Yağmur Sensörü 50Şekil 3.13. Hareket Sensörü 51Şekil 3.14. Sıcaklık Sensörleri 51Şekil 3.15. LCD Ekran ve Yedi Segment Ekran Örneği 52Şekil 3.16. LCD, TFT LCD ve OLED Ekranlar 52 Şekil 3.17. Devre Tahtası (Breadboard) İç ve Dış Görünümü 52Şekil 3.18. Devre Tahtasında Tasarımı Yapılmış Örnek Devre 53Şekil 4.1. Arduino Uno Geliştirme Kartı 56Şekil 4.2. Arduino Çeşitleri 63Şekil 4.3. Arduino UNO Temel Bileşenler 64Şekil 4.4. Arduino Giriş/Çıkış Pinleri 67Şekil 4.5. Arduino IDE Ortamı 68Şekil 4.6. Örnek Shieldler 70Tablo 1. TCCRxB Son Üç Bit Ayarı 107Şekil 5.1. TimerOne Kütüphane İndirme Sayfası 110Şekil 5.2. Serial Port Ekranına Ulaşma 111Şekil 5.3. Seri İletişim Hızı Değiştirme 113Şekil 5.4. parseFloat Metodu İçin Seri Port Çıktısı 116Şekil 5.5. parseInt Metodu İçin Seri Port Çıktısı 117Şekil 6.1. Lattepanda 123Şekil 6.2. Lattepanda Bileşenleri 124Şekil 6.3. Lattepanda Muhafazası ve Soğutucusu 125Şekil 6.4. Lattepanda Giriş/Çıkış Pinleri 126Şekil 6.5. LattePanda Kutu Açılışı 127Şekil 6.6. LattePanda Kullanım Kılavuzu 128Şekil 6.7. LattePanda Donanımlarının Bağlanmış Hali 128Şekil 6.8. LattePanda Açma Düğmesi 129Şekil 6.9. LattePanda Windows Çalışır Olduğunu Gösterir Led 129Şekil 6.10. Kablosuz Bağlantı Anteninin Bağlanması 130Şekil 6.11. LattePanda İlk Açılış Ekranı 130Şekil 6.12. LattePanda Hoşgeldiniz Ekranı 131Şekil 6.13. LattePanda Windows İşletim Sistemi Açılmış Hali 131Şekil 6.14. Arduino Yazılımı Ekranı 132

Page 13: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

XIII

Şekil 6.15. Visual Studio Programı İndirme Sayfası 132Şekil 6.16. Visual Studio Yükleme Dosyası 133Şekil 6.17. Visual Studio Yükleme Dosyasının Çalıştırılması 133Şekil 6.18. Microsoft Politikalarının ve Lisans Sözleşmesinin Kabulü 134Şekil 6.19. Temel Yükleme Paketlerinin İndirilmesi 134Şekil 6.20. İsteğe Bağlı Yükleme Paketlerinin Seçilmesi 135Şekil 6.21. Yükleme Paketlerinin İnternetten İndirilmesi 135Şekil 6.22. Visual Studio Tasarım Seçimi 136Şekil 6.23. Visual Studio Başlangıç ve Proje Açma Ekranı 136Şekil 6.24. LattePanda.Firmata Kütüphanesinin İndirilmesi 137Şekil 6.25. LattePanda Doküman Sitesi 137Şekil 6.26. Arduino.cs Dosyası 138Şekil 6.27. Arduino Sınıfının Kodları 138Şekil 7.1. Led Yakıp Söndürme Görüntüsü 140Şekil 7.2. C# Led Yakma Projesi 141Şekil 7.3. Arduino Kart Seçimi 141Şekil 7.4. Arduino Port Seçimi 142Şekil 7.5. Arduino ile Led Kontrol Kodları 143Şekil 7.6. Ortak Anot RGB Led 143Şekil 7.7. Ortak Anot RGB LED Devresi 144Şekil 7.8. Ortak Katot RGB LED Devresi 146Şekil 7.9. 74HC595 Shift Register Entegresi ve Bacakları 147Şekil 7.10. 74HC595 Shift Register Devresi 148Şekil 7.11. 74HC595 Shift Register Devresi 150Şekil 7.12. Seçili LED’i Yakmak İçin Form Görünümü 150Şekil 7.13. Dijital Giriş Buton ile Led Yakıp Söndürme Devresi 152Şekil 7.14. Buton Ark Durumu 153Şekil 7.15. Buton Sayısı Devresi 154Şekil 7.16. Buton Sayıcı Form Görüntüsü 155Şekil 7.17. Butonlar İle RGB LED Ayarlama Devresi 156Şekil 7.18. RGB LED Form Butonlar İle Kontrolü Görüntüsü 158Şekil 7.19. Potansiyometre ve Bacakları 161Şekil 7.20. Potansiyometre Değer Okuma Devresi 161Şekil 7.21. Potansiyometre Değer Okuma Windows Form Ekran Görüntüsü 162Şekil 7.22. LDR Işık Algılama Devresi 163Şekil 7.23. Buzzer Devresi 165

Page 14: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

XIV

Şekil 7.24. DC Motor Kontrolü Devresi 166Şekil 7.25. DC Motor Kontrolü Form Görüntüsü 167Şekil 7.26. L293D Motor Sürücü Entegresi 169Şekil 7.27. DC Motor Hız ve Yön Kontrolü Devresi 169Şekil 7.28. Servo Motor Kontrol Devresi 171Şekil 7.29. Servo Motor Kontrolü Form Görüntüsü 171Şekil 7.30. Step Motor Kontrolü Devresi 173Şekil 7.31. Step Motor Döndürme Form Tasarımı 174Şekil 7.32. TK19 Kızılötesi Alıcı 176Şekil 7.33. MSP430 Kızılötesi Kumanda 176Şekil 7.34. Kızılötesi Kumanda Kontrolü Devresi 177Şekil 7.35. Kumanda Tuşlarının HEX Karşılıkları 178Şekil 7.36. Kızılötesi Kumanda Kontrolü Form Görüntüsü 181Şekil 7.37. RFID Okuma Devresi 183Şekil 7.38. Personel Takibi Veritabanı Yapısı 184Şekil 7.39. HC-05 Bluetooth Modülü 186Şekil 7.40. Arduino Turn Led On&Off Android Uygulaması 187Şekil 7.41. Bluetooth LED Kontrolü Devresi 187Şekil 7.42. 16x2 LCD Ekran ve Bağlantıları 188Şekil 7.43. 16x2 LCD Ekran Devresi 189Şekil 7.44. 16x2 LCD Ekrana Veri Gönderme Formu 191Şekil 7.45. HC-SR04 Ultrasonik Uzaklık Sensörü 192Şekil 7.46. Ultasonik Sensörler Mesafe Ölçümü Devresi 192Şekil 7.47. LM35 Sensörü ve Bağlantı Noktaları 194Şekil 7.48. Sıcaklık Ölçüm Devresi 195Şekil 7.49. Sıcaklık Verilerinin Tutulacağı Tablo Yapısı 196Şekil 7.50. L298N Motor Sürücü 201Şekil 7.51. Çok Amaçlı Robot Platformu Örnekleri 201Şekil 7.52. Arabaya Seslenerek Kontrol Etme Devresi 201

Page 15: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

Önsöz

Fırat Üniversitesi Bilgisayar Öğretmenliğinden mezun oldum. Yine aynı üniversitede yüksek lisansımı yaptıktan sonra İstanbul’a taşındım ve bir vakıf üniversitesinde çalışmaya başladım. Bu sırada İstanbul Üniversitesi Enformatik bölümünde doktorama başladım ve dört yılın sonunda yapay zekâ üzerine olan tez çalışmamı bitirdim. Fakülteyi bitirdikten sonra çeşitli yazılım şirketlerinde hem yazılımcı olarak hem de danışmanlık vererek çalıştım. Bilgisayar, yazılım ve

yapay zekâ ile ilgili birçok konuda hem yurt içinde hem de yurt dışında çeşitli bildiriler sunup, makaleler yayınladım. Ayrıca birçok farklı dernekte çeşitli görevlerde de bulundum.

Bu kitap gömülü sistemler ve mikrodenetleyiciler ile uğraşan kişiler için yazılmıştır. Kitap öncelikle gömülü sistemler ile ilgili temel bilgiler verip ardından temel elektrik hakkında kısa bilgiler vermektedir. Robot veya benzeri diğer mikrodenetleyici devrelerde kullanılan elektronik devre elemanlarından bahsedildikten sonra Arduino’dan ve Arduino kodlamadan örneklerle bahsetmektedir. LattePanda cihazının temel ve ayrıntılı özelliklerinden bahsedip yaklaşık 20 adet proje tüm ayrıntıları ile verilmiştir. Projeler basitten karmaşığa doğru yazılmıştır. Proje sayısı buradaki örneklerin anlaşılması sonrası istenildiği kadar çoğaltılabilecektir.

Bu kitabı yazabilecek duruma gelmemde bana fikir veren değerli arkadaşım Öğr. Gör. Ferhat TOSLAK hocama, bana akademik hayatım boyunca örnek olan Doç. Dr. Cihad DEMİRLİ hocama ve doktora danışmanım Prof. Dr. Sevinç GÜLSEÇEN hocama her zaman şükranlarımı sunarım.

Dr. Emrah AYDEMİR

Page 16: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46
Page 17: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

1. Gömülü Sistemler ve Programlama

1.1. MikroişlemcilerBir elektronik sistemde programların işletilmesinden sorumlu olan ve tüm bileşenleri merkezi şekilde kontrol eden tümleşik devreye mikroişlemci denir. İçerisinde bir adet CPU (Merkezi İşlem Birimi), ön bellek ve giriş çıkış birimleri barındıran devrelere mikroişlemci denir. Tüm elektronik sistemlerin beyni olarak kabul edilir ve esas işi yapan kısımdır. Adında geçen mikro ifadesi yeteneğinin kısıtlı olmasını değil, boyutlarının küçük olmasını ifade eder.

Şekil 1.1. Mikroişlemci

Transistörlerin birleşiminden bir bitlik veriyi saklayan Flip-Flop’lar oluşur. Flip-Flop bir sonraki bit gelene kadar çıkıştaki biti saklayan, girişte veri değişikliği olduğunda ise saat (clock) darbesiyle birlikte çıkıştaki değeri de değiştiren lojik devredir. Dolayısıyla flip-flop‘un yaptığı şey tam olarak bir biti saklamaktır. Flip-Flop’ların birleşmesi ile daha fazla verinin saklanmasını sağlayan registerlar (saklayıcı) oluşur [1]. Bir mikroişlemci içerisinde milyonlarca transistör barındırır.

Page 18: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

18 Gömülü Sistemler ve Programlama

Mikroişlemciler üç temel bölümden oluşur [2].

• Merkezi İşlem Birimi (CPU): Veri işleme ve veri akışının gerçekleştiği birimdir. Sayısal ve lojik işlemler burada yapılır. CPU’lar içerisinde 8, 16, 32, 64 bitlik hafızalar barındırır. Bilgiler buradaki hafızada geçici olarak depolanır. Bu hafıza birimlerine Register denir. İşlemcinin çekirdeğinde bulunmalarından dolayı verilere daha hızlı ulaşılır. CPU’lar mikroişlemcilerin hafızasındaki programları bulma, çağırma ve onları çalıştırma görevini yaparlar.

• Program ve Veri Hafızaları (Program and Data Memory): Mikroişlemciye gönderilen veriler ilk olarak hafızaya gelir ve depolanır. CPU’ların doğrudan eriştiği bellekte iki tane hafıza birimi vardır. Bunlardan biri mikroişlemci kapandığında verilerin silindiği geçici hafıza olan RAM (Random Access Memory) ve sistem kapansa dahi silinmeyen kalıcı hafıza ROM (Ready Only Memory) hafızadır.

• Giriş – Çıkış Birimleri (Input – Output Units): CPU içindeki veri akışının aktarılması ile bellek ve giriş/çıkış birimlerinin bağlantılarını oluşturan üç çeşit veri yolu (BUS) vardır. Bunlar Adress BUS, Data BUS ve Control BUS’tır. Adress BUS, verinin okunacağı veya yazılacağı bölgeyi belirten adres bilgilerinin taşınmasını sağlayan tek yönlü veri yoludur. Data BUS, CPU’dan bellek ve giriş/çıkış portlarına veya bu birimlerden CPU’ya doğru çift yönlü bir veri yoludur. Control BUS, mikroişlemcideki birimler arası iletişimi düzenleyen sinyalleri ileten, kontrol eden veri yolu olup her mikro işlemcide farklı sayıda hatta sahip Control BUS bulunabilir.

1.2. Mikrodenetleyicilerİçerisine yazılan program vasıtasıyla özel bir amacı gerçekleştirmek için; işlemci (CPU), hafıza (RAM veya ROM) ve giriş/çıkış birimlerini tek bir entegre üzerine yerleştirilmiş olduğu mini bilgisayarlara mikrodenetleyiciler denir. Her mikrodenetleyici içerisinde bir mikroişlemci barındırır. Belirli bir miktarda hafıza birimine ve giriş/çıkış uçlarına sahip olmaları nedeniyle tek başlarına çalışabilirler ve diğer elektronik devreler ile irtibat kurabilirler. Günümüzde mikroişlemci ve mikrodenetleyici üreten firmalar olarak Intel, Motorola, AMD, Philips, Siemens, Atmel, Hitachi, Mitsubishi gibi firmalar sayılabilir. Akıllı cihazlar için beyin olarak adlandırılan mekanizma içerisinde yer alırlar. Temel olarak kullanıcı ile iletişimi ve etkileşimi olan herhangi bir cihaz mikrodenetleyici ile çalışır [3].

Page 19: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

19Lattepanda ile Arduino ve PC Kodlama

Şekil 1.2. Örnek Mikrodenetleyiciler

1.2.1. Mikrodenetleyici BirimleriPiyasada birçok farklı mikrodenetleyici vardır. Bunlar sahip oldukları üniteler (ADC, Zamanlayıcı, PWM vb.), giriş/çıkış sayıları, bellek kullanımları, çalışma hızları, veri ve program yolu genişlikleri bakımından birbirlerinden ayrılırlar. Bir mikrodenetleyiciyi daha iyi anlamak için aşağıdaki mikrodenetleyiciye ait birimleri ve kavramları iyi anlamak gerekir [4]:

• CPU: Bir mikroişlemciden oluşan birimdir. Komutların alınıp verilerin işlenerek çevre birimlerin yönetildiği merkezi birimdir. Mikrodenetleyici içindeki merkezi işlem birimi olan CPU tek bir çip olarak üretilmiş ise buna mikroişlemci denir.

• RAM: Mikroişlemcideki işlemler sırasında verilerin geçici olarak depolandığı hafızadır. İşlemin bitmesi veya güç kesilmesi sonucu silinirler.

• EEPROM: Küçük boyuttaki verileri kalıcı olarak saklayan ve yazıp silinebilen hafızadır. Programın yürütülmesi sırasında kalıcı olarak saklanması gereken veriler RAM belleğe göre daha yavaş olan bu hafızada saklanır. Birçok mikrodenetleyici dâhili EEPROM barındırırken EEPROM barındırmayanlar ise harici olarak bağlanan hafızalara SPI üzerinden verileri yazar ve okurlar. EPROM belleklere kayıt yapılabilir fakat silmek için EPROM silici cihazlar ile mor ötesi ışığa maruz bırakılırlar. Maliyeti çok düşük olan ROM bellekler ise yalnızca fabrika üretimi sırasında yazılabilir ve hiçbir şekilde silinemez.

Page 20: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

20 Gömülü Sistemler ve Programlama

• SPI (Serail Peripheral Interface): Sayısal entegre devrelerin birbiri ile haberleşmesi için Motorola tarafından geliştirilmiş çift yönlü ve senkron olarak çalışan haberleşme standardıdır.

• UART (Universal Asynchronous Receiver / Transmitter): Sekiz bitlik bir veri paralel olarak iletilirken bir defada, seri olarak iletilirken sekiz defada iletilir. UART ise paralel ve seri veriyi birbirine dönüştürür. Mikrodenetleyicideki paralel bir veri bir başka sisteme gönderilirken seri veriye dönüştürülerek tek tek gönderilir. Karşı taraftaki UART modülü ise bu seri veriyi mikrodenetleyici yapısına uygun paralel veriye dönüştürür. Bu şekilde UART aracılığıyla çift yönlü asenkron haberleşme gerçekleştirilir. Haberleşme hızı bps (bit per second) yani saniyede gönderilen bit sayısı ile ölçülür. Haberleşme olması için alıcı ve göndericinin haberleşme hızı aynı olmalıdır.

• WDT (Watchdog Timer): Bekçi köpeği zamanlayıcısı (WDT) programın aksaması veya tıkanması durumlarında belirli aralıklarla programı yeniden başlatır. Sistem saatinden bağımsız RC osilatörüne sahip olması nedeniyle mikrodenetleyici osilatörü çalışmaması durumunda devreye girebilir.

• Giriş/Çıkış Portları: Mikrodenetleyicinin dışarıya açılan kapısı olup pinler aracılığıyla gelen verileri tutar ve mikrodenetleyiciden dışarıya veri ya da güç gönderilmesini sağlar.

• Osilatör-Clock: Osilatör oluşturduğu clock sinyali ile mikrodenetleyicideki tüm işlemlerin eş zamanlı olarak yapılmasını sağlar. Her mikrodenetleyici birimi yaptığı işlemin her adımını saat darbesinin 0’dan 1’e yükseldiği ya da 1’den 0’a düştüğü sırada yapar. Bir 0 ve bir 1’den oluşan süreye ise bir çevrim (cycle) denir. Bir komutun kaç saniye süreceği mikrodenetleyicinin mimarisine ve komutun türüne bağlıdır.

• Stack: Veri yazılırken en üste yazıldığı ve veri okunurken sadece en üstteki verinin okunduğu hafıza (bellek) türüdür.

• Program Counter (PC): Mikrodenetleyici program hafızasında bulunan komutları satır satır sırayla işler. Mikrodenetleyicinin hangi satırda bulunduğu bilgisi Program Counter’da tutulur. Kesme geldiğinde Program Counter’daki satır bilgisi stack (yığın bellek) içine atılır. Kesme vektörünün sonuna geldiğinde stack içindeki programın son kaldığı satır bilgisi tekrar program counter içine yüklenerek program kaldığı yerden devam eder.

Page 21: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

21Lattepanda ile Arduino ve PC Kodlama

• Interrupt (Kesme): Mikrodenetleyiciler hafızalarında yazılan programı satır satır okuyarak ilgili komutun gerektirdiği işlemleri gerçekleştirirler. Programın akışına göre alt programlara dallanabilirler. Fakat bazı durumlarda mikrodenetleyicinin program akışının dışına çıkması istenebilir. Bu durumlarda kesmeler devreye girer. Programın alt programa dallanması gereken yerler program yazılırken belirlenir. Fakat kesme program dışında bir dış uyarıcı ile gerçekleşir. Bu dış uyarıcı seri haberleşme biriminden gelen bir veri, timer’ın dolmasıyla oluşan bir sinyal, ya da bir sensörün bağlı olduğu pine gelen 5v (lojik 1) olabilir. Kesme sinyali geldiğinde program kesme vektörüne dallanarak burada bulunan komutları işlemeye başlar.

• Timer: Timer birimi bir çalar saat gibi kurularak zaman dolduğunda mikrodenetleyicide kesme oluşturur. Clock darbelerin yükselen veya düşen kenarları sayılarak ilgili register üzerinde saklanan değere gelindiğinde kesme üretir. Ayrıca harici kaynaklardan gelen darbeleri de sayabilir. Eğer timer harici kaynaktan beslenirse sayıcı olarak, dâhili kaynaktan beslenirse zamanlayıcı olarak kullanılır. Timer birimi çeşitli mikrodenetleyici ailelerinde değişik çalışma modlarına sahiptir.

• Seri ve Paralel Portlar: Mikrodenetleyici üzerinde bütünleşik olarak bulunan ve seri ya da paralel iletişim sağlayan çıkışlardır.

• Analog Dijital Dönüştürücüler (ADC): İsminden de anlaşılacağı gibi bu birim mikrodenetleyicinin ADC pinine gelen analog sinyali 1 ve 0 lardan oluşan dijital sinyale dönüştürerek mikrodenetleyicinin yorumlayabileceği bir veri halini almasını sağlar.

• Dijital Analog Dönüştürücüler (DAC): Mikrodenetleyiciler analog girişleri anlamayacağı gibi analog çıkış da veremezler. Dijital Analog Çevirici PWM sinlaylleri ile mikrodenetleyiciden analog sinyal üretilmesini sağlar.

• Diğer: Buradaki birimler dışında bir kısım mikrodenetleyiciler USB, Ethernet, Wifi gibi çeşitli birimleri de bünyesinde dâhili olarak bulundurmaktadır.

Page 22: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

22 Gömülü Sistemler ve Programlama

Şekil 1.3. Mikrodenetleyici Birimleri

Mikrodenetleyiciler genellikle endüstriye yönelik olarak kontrol ve otomasyon işlemlerini gerçekleştirmek için tasarlanırlar. Üzerlerinde mikroişlemcilere göre daha fazla birim bulundururlar fakat mikroişlemcilere nazaran daha yavaş çalışırlar. Üretilen mikroişlemci-mikrodenetleyicilerin %2’si bilgisayarlarda kullanılırken, %98’i gömülü sistemlerde kullanılır.

1.2.2. Avantaj ve DezavantajlarıMikrodenetleyiciler genellikle bulundukları uygulama devresinin içine gömülüp sadece o iş için kullanılır. Bu nedenle bilgisayar gibi farklı programlar ile kullanılma esnekliğine sahip değildirler. Ancak kontrol ağırlıklı uygulamalarda ise alternatifsiz bir seçenektirler. Kendisini bu konuda alternatifsiz kılan ise çok küçük boyutlu olmaları nedeniyle az yer kaplamaları, düşük güç tüketmeleri, düşük maliyetler ile yüksek performans sağlamaları gibi birçok özelliğidir. Bir bilgisayar 50 W civarı güç tüketirken mikrodenetleyiciler 50 mW civarında güç tüketirler. Mikrodenetleyicili sistemlerin tasarımı ve kullanımı mikroişlemcili sistemlere nazaran daha sade ve daha ekonomiktir. Diğer taraftan matematiksel işlem yapma yetenekleri mikroişlemcilere nazaran kısıtlıdır. Mikrodenetleyiciler alarmlı saatler, bulaşık makinesi, çamaşır makinesi, ütü, buzdolabı, fırın, dijital kameralar, fotoğraf makineleri, personel takip sistemleri gibi sayısız türde elektronik kontrol cihazlarında kullanılmaktadır.

Page 23: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

23Lattepanda ile Arduino ve PC Kodlama

1.3. Gömülü SistemlerHerhangi bir sistem içerisinde yer alarak, belirli bir işi gerçekleştirmek amacıyla tasarlanmış yazılım, donanım ve mekanik bileşenlerden oluşan sistemlere gömülü sistem denir. Herhangi bir sistemin bünyesinde bulunarak o sisteme akıllı olma özelliğini sağlayan donanım ve yazılımlardan oluşan bütüne gömülü sistem denir. Günlük hayatta kullanılan eşyaların hemen hemen tümünde bu tür gömülü sistemleri görmek mümkündür. Banka ATM cihazları, cep telefonu, televizyon, fotokopi makinesi, mikrodalga fırın bunlardan bazılarıdır. Örneğin her evde kullanılan çamaşır makinesinde birden fazla mekanik bölüm vardır. Bütün bu mekanik bölümleri kontrol etmek için bir veya birden fazla mikrodenetleyiciden oluşan sistemler kullanılır. Makinenin beyni olarak kabul edilen bu birimler aracılığıyla örneğin çamaşır makinesinin kapağının ancak çamaşır yıkama işleminin bitmesi sonucunda açılır olması, sular kesilmişse çalışmaması, yeterli suyu alınca su alımını durdurması burada bahsedilen gömülü sistemler ile gerçekleştirilir. Ayrıca makine üzerinde düğmeler ile yapılan tüm işlemler de gömülü sistem aracılığıyla gerçekleştirilir. Günümüzün ortalama bir otomobilinde 20-25 civarında mikrodenetleyici kullanılmaktadır. Emniyet kemeri uyarı sistemi, müzik çalar, yakıt seviyesi kritik eşiğe ulaşınca uyarı sistemi, hız sabitleyici, yağmur yağınca otomatik aktif olan silecek sistemi, otomatik far açma kapama sistemi, uzaktan kumanda ile kapı açma sistemi vb. bunlardan bir kısmıdır. Bu nedenle de gömülü sistemler zikirmatik gibi basit cihazlardan büyük fabrika cihazlarına kadar birçok alanda kullanılmaktadır.

Gömülü sistemler çok uzun yıllarca hiçbir sorun vermeden çalışması istenen donanımlar içerisine yerleştirilir. Bu sebeple bilgisayarlarda kullanılan birçok donanımın burada kullanılması tercih edilmez. Bu tür donanımların güvenirliliğinin düşük olduğu düşüncesiyle uzak durulur. Örneğin hata çıktısı için LED ile uyarı verilmesi tercih edilir. Gömülü sistemler çok büyük sayılarda üretildiği için maliyetin düşürülmesi ile elde edilecek kazanç en önemli unsurlardandır. Güvenirlilik, işlem gücü, bellek, üretim maliyeti, birim üretim hacmi ve beklenilen yaşam süresi gömülü sistemlerin tasarım aşamasında dikkate alınan gereksinimlerdir. Günlük yaşamda kullanılan eşyaların yanı sıra araç fren sistemleri, uçak ve füze sistemlerinde kullanılması ile çok kritik işlevleri yerine getirirler. Burada ortaya çıkabilecek en küçük bir hata çok büyük can ve mal kaybına neden olacaktır. Bu nedenle de bu sistemlerin güvenilir ve hataları tolere etme özelliği en önemli ölçütlerdir [5].

1.4. Günümüz MikrodenetleyicileriGünümüzde birçok firma mikrodenetleyici üretimi yapmaktadır. Çeşitli web sitelerinden rahatlıkla temin edilebilmektedir. Fakat mikrodenetleyici tercihinde en önemli unsurlar, kullanımının yaygınlığı, kullanıcı dostu olması,

Page 24: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

24 Gömülü Sistemler ve Programlama

basit donanımlara ihtiyaç duyması, ileri seviye bilgi istememesi ve kod yazımında sorulara cevap bulabilmektir. Intel tarafından üretilen 8051 gibi mikrodenetleyiciler günümüzde biraz eskimişlerdir fakat halen daha kullanıldığı yerler vardır. Aşağıdaki başlıklarda yaygın olarak kullanılan mikrodenetleyiciler kısaca anlatılmıştır.

1.4.1. PICAdını Peripheral Interface Controller (Çevresel Ünite Denetleme Arabirimi) ifadesinden alan PIC, Microchip firması tarafından üretilmektedir. Giriş/çıkış işlemlerini çok hızlı bir şekilde gerçekleştirmek üzere tasarlanmış bu chip ucuz olmasının da etkisiyle ülkemizde yaygın olarak kullanılmasının yanı sıra onlarca ürün çeşidine sahiptir.

Şekil 1.4. PIC Mikrodenetleyici Ailesinden Örnekler

PIC mikrodenetleyicilerin programlanmasında yaygın kullanımı olmayan fakat donanıma yakın olan Assembly (ASM) dili kullanılmaktadır. Microchip firmasının kendi programı olan MPLAB IDE ile kod yazımı yapılır ve derleme işlemi sonrası bir başka program ile mikrodenetleyici içerisine yükleme yapılır. PIC mikrodenetleyiciler daha kullanıcı dostu ve anlaşılır olan BASIC ve C dilinde de ücretli derleyiciler yardımıyla programlanabilir. Bu mikrodenetleyicilerde komut sayısı oldukça azdır ve komutlar tek bir çevrimde işlendiğinden dolayı mikrodenetleyici çok hızlıdır.

1.4.2. AtmelKısaca AVR olarak anılan bu mikrodenetleyicilerin üretildiği Atmel şirketi Microchip tarafından satın alınmıştır [6]. Atmel mikrodenetleyiciler Atmel’in ücretsiz resmi uygulaması olan Atmel Studio ile Assembly ve C dili kullanılarak programlanır. Derleyicide oluşturulan program Usbasp ve USBtinyISP gibi programlayıcılar aracılığıyla mikrodenetleyiciye yüklenebilir. Bu

Page 25: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

25Lattepanda ile Arduino ve PC Kodlama

mikrodenetleyiciler 8 bitliktir ve RISC mimarisini kullanırlar. 18 KB’a kadar yazılıp silinebilen bellek çeşitlerine sahiptirler.

Şekil 1.5. Atmel Mikrodenetleyiciler

Atmel mikrodenetleyicilerin de ülkemizde yaygın kullanım alanları vardır. Bu mikrodenetleyiciler ile ilgili birçok kütüphane, proje ve kaynak kod kullanım örnekleri çeşitli web sitelerinde rahatlıkla bulunabilmektedir.

1.4.3. STM32ST firması tarafından üretilen bu mikrodenetleyiciler ARM ailesi olarak kısaca adlandırılır. ARM Cortex – M serisi mikrodenetleyiciler yüksek performans, düşük güç tüketimi ve optimum güç/performans özelliklerine sahip farklı türlere sahiptir. Ucuz olması nedeniyle ülkemizde kullanımı yaygın olup yüksek işlem gücünü düşük güç tüketimi ile sağlaması sonucu bilhassa bataryalı sistemlerde tercih edilmektedir.

Şekil 1.6. STM32 Kartları

Firma STM32 serisinin tanıtımına ve yaygınlaşmasına yönelik ucuz geliştirme kartlarını satışa sunmuştur. Kartların üzerinde gelen ST-Link programlayıcı ile ekstra herhangi bir şeye ihtiyaç duymadan programla yapılabilmektedir. Kartlar üzerindeki çeşitli çevre birimleri ile geliştirme yapmak prototipler oluşturmak için iyi bir seçenek olarak görülmektedir. Firma STM32 Cube MX adlı yazılım geliştirme aracını geliştirerek çevrebirim ayarlar ve yazılım kütüphaneleri gibi bileşenleri içine almıştır.

Page 26: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

26 Gömülü Sistemler ve Programlama

1.5. Diğer Entegre SistemlerMikrodenetleyiciler birçok sistemde etkin bir şekilde kullanılmasına rağmen aynı anda birden fazla işlem yapamaması nedeniyle mikrodenetleyiciler ile yapılamayan diğer uygulamaların çözümünde programlanabilir başka lojik entegrelere müracaat edilir [7].

1.5.1. PLCPLC (Programlanabilir Mantıksal Kontrolcü), fabrikalardaki üretim hatlarını oluşturan robot, taşıyıcı bant, pnömatik ekipman vb. makinelerin kontrolü gibi işlemlerin denetiminde kullanılan otomasyon cihazı veya özel bilgisayarlardır. Yaygın olarak kullanılan mikrodenetleyicilere göre PLC'nin birçok giriş ve çıkışı (I/O) vardır. PLC’lerin en büyük ayırt edici özellikleri elektriksel parazit/gürültülere, toza, neme, sıcaklık farklarına ve mekanik darbelere karşı dayanıklı tasarlanmış olmalarıdır. Günümüz mikrodenetleyicileri gibi PLC içinde de giriş/çıkış modülü, haberleşme modülü, işlemci, RAM ve ROM bellekler bulunur. PLC’ler mantık olarak piyasadaki diğer mikrodenetleyiciler (Arduino, atmel, pic vb.) gibi programlanarak kullanılırlar. Fakat günümüz mikrodenetleyicilerinin giriş/çıkış gerilimi 5V civarında iken PLC’de 24V civardındadır. Ayrıca PLC’lerin en ayırt edici özellikleri arasında giriş bilgilerini gözle görülmeyecek hızlarla işleyerek çıkış bilgilerini gerçek zamana yakın derecede cevap verecek şekilde çalışmasıdır. Bu nedenle de PLC, kısa sürede daha çok ve kaliteli ürün üretme, çok düşük hata oranlarına sahip üretim yapma, zamanlamanın kritik olduğu endüstriyel üretim gibi unsurların ön plana çıktığı durumlarda vazgeçilmez olur. PLC’lerin kullanımı ile yüzlerce rölenin kullanıldığı devrelere ihtiyaç kalmamıştır.

Şekil 1.7. PLC Çeşitleri

Her markanın kendi PLC programlama arayüzü vardır. Mitshubishi PLC’lerde MT Works adlı yazılım kullanılırken, Siemens PLC’lerde TIA Portal adlı yazılım kullanılmaktadır. Herhangi bir sistem için PLC seçiminde maliyet, giriş/çıkış sayısı, komut işleme hızı, program kapasitesi, bellek kapasitesi, kesme işletim yeteneği dikkate alınması gereken hususlardan bir kısmıdır.

Page 27: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

27Lattepanda ile Arduino ve PC Kodlama

1.5.2. ASICASIC (Application Specific Integrated Circuit) açılımı Uygulamaya Özel Entegre Devre olup yaygın olarak kullanılan mikrodenetleyicilerin ve mikroişlemcilere göre, genellikle büyük firmalar tarafından üretilen belirli özel bir işlemi veya görevi yerine getirmek için tasarlanmış bütünleşik devrelerdir. Bu devreler özel olarak hazırlanması nedeniyle sonradan program değişikliği veya parça değişikliği yapılamaz. Yalnızca tasarlayan şirket tarafından kullanılması nedeniyle tescili ilgili şirkete aittir. Büyük sayıda üretimler için ucuz bir çözüm olmakla birlikte az sayıdaki ürün için tasarım ve üretimi pahalıdır. Zikirmatik, dijital saat, müzikçalar gibi çok satılan tüketici elektroniğinde yaygın olarak kullanılmakla birlikte neredeyse kullanılan tüm elektronik cihazların içerisinde bulunur. Yalnızca o iş için tasarlanması nedeniyle küçük yapıda olup, düşük enerji tüketirler ve yapmakta oldukları işi çok iyi yaparlar.

Şekil 1.8. Örnek ASIC Devresi

1.5.3. SoCSoC (System on a Chip), açılımı bir sistemin tek bir chip üzerinde olmasıdır. Bir bilgisayarın veya diğer elektronik sistemlerin tüm bileşenlerini birleştiren bir entegre devredir. Merkezi işlem birimi (CPU), bellek, girişi/çıkış bağlantıları, hafıza ve uygulama göre değişmekle birlikte dijital/analog sinyal, radyo frekansı da içerebilir. Üç ayrı tipte SoC vardır; bir mikrodenetleyici etrafında oluşturulanlar, bir mikroişlemcinin etrafında oluşturulan ve bu iki kategoriye de uymayan özel uygulamalar için tasarlanmış olanlardır.

Page 28: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

28 Gömülü Sistemler ve Programlama

Şekil 1.9. Örnek SoC Devreleri

1.5.4. FPGAFPGA (Alanda Programlanabilir Kapı Dizileri), üretim sonrası ihtiyaç duyulan duruma göre donanım yapısı kullanıcı tarafından değiştirilebilen entegre devrelere FPGA denir. Standart entegrelerde transistörler arası bağlantılar sabit iken FPGA içindeki transistörler birbirinden bağımsız ve serbest olarak üretilmiş ham bir entegre olarak kabul edilebilir. Kullanıcı tarafından belirlenen fonksiyona göre FPGA içindeki transistörler birbirlerine bağlanır ve istenilen fonksiyon yerine getirilir. Transistör kapasitesi dahilinde herhangi bir entegrenin yaptığı içi FPGA ile yapılabilir [8].

Şekil 1.10. Örnek Bir FPGA Kartı

FPGA’ların ayırt edici özellikleri arasında aynı anda birden fazla işlemi yaparak paralel çalışabilmeleridir. Hatta yapılan uygulamaya ve kapasiteye göre aynı anda yüzlerce işlemin yapılması mümkün olabilir. Günümüzde mikrodenetleyiciler kadar olmasa da yaygın olarak kullanılmaktadır. Özellikle askeri alanlarda, tıp cihazlarında, otomotiv sektöründe ve ses işlemlerinde kullanımı yaygındır.

1.6. Robot SetleriFen (Sience), Teknoloji (Technology), Mühendislik (Engineering) ve Matematik (Math) derslerindeki konuları birbirlerine entegre edilmiş biçimde öğretilmesini amaçlayan STEM eğitim modeli için çeşitli robot setleri vardır. Çeşitli setler

Page 29: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

29Lattepanda ile Arduino ve PC Kodlama

aracılığıyla çocuklara kolayca robot yapmayı öğretmek amaçlanmaktadır. Bilgisayarda renkli kod blokları ile yazılan programlar bluetooth yardımı ile mikrodenetleyici içerisine yüklenir. Çeşitli sensörleri ve motorları kullanarak çizgi izleyen robot, kedi, istifleme makinesi benzeri farklı uygulamalar yapılabilmektedir. Ülkemizde son zamanlarda LegoEducation firması tarafından geliştirilen bu robot setleri kullanılmasının yanı sıra farklı firmaların da benzer robot setleri bulunmaktadır.

Şekil 1.11. Lego WeDo 2.0 Eğitim Seti

Page 30: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46
Page 31: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

2. Elektronik Devre Elemanları

Gömülü sistemler ile herhangi bir projeyi yapabilmek için öncelikle elektronik devre elemanları tanıyıp özelliklerini bilmek ve temel elektrik bilgisine sahip olmak önemlidir. Bu nedenle burada öncelikle elektronik devre elemanları ve temel elektrik kavramları hakkında kısa bilgiler verilecektir.

2.1. Temel BilgilerYüklü parçacıkların hareketi ile ilgili olan fiziksel olaylara genel olarak elektrik denir. Herhangi bir maddenin yüklü parçacıklarının yüzey veya içerisinde dengesiz şekilde dağılması sebebiyle oluşan elektriğe statik elektrik denir. Bu durum elektrik alanı oluşmasına neden olur. Madde içerisinde yer bu parçacıklar fiziksel olarak iletken bir madde üzerinden akım oluşturma eğilimi taşırlar. Bir akım oluşmadığı sürece de elektrik alanı var olmaya devam eder. Direnç, kapasitör, anahtar, transistör vb. elemanların birbirine bağlandığı sistemlere elektrik devresi denir [9].

Şekil 2.1. Temel Elektrik Devresi

Page 32: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

3. Harici Donanımlar

3.1. Doğru Akım (DC) MotoruBobin ve mıknatısın bir araya geldiği ve elektrik uygulandığında ortadaki milin sabit mıknatıslarda zıt yönde oluşan manyetik kuvvetin etkisiyle döndürüldüğü elektromekanik parçaya DC motor denir. Matkap, fotokopi makinesi ve oyuncak araba gibi çeşitli elektronik sistemlerde sıklıkla kullanılır. Ortadaki milin dönüş yönü motora verilen elektriğin kutuplarının değişmesiyle değişir. Bu motorların ihtiyaç duyduğu gerilim ve akım miktarı motorların boyut ve cinsiye göre değişiklik gösterir. Motor boyutu ile ihtiyaç duyulan gerilim ve akım miktarı doğru orantılıdır. DC motorların dönüş hızı motorun yapısına ve verilen güce göre değişmekle birlikte binen bir yük sonucu yavaşlayabilir ve hatta durabilir. Bu nedenle dönüş hızı yerine asıl önemli olan motorun gücü (torku) olup karşılaştığı bir zorlanma sonucunda yavaşlamaması ve durmamasıdır. Motorların torku ve ağırlıkları da doğru orantılıdır. Çok çeşitli DC motorlar vardır. Gömülü sistemlerde bu motorların sürülmesi için ekstra bir sürücüye ve güce ihtiyaç duyulur.

Şekil 3.1. DC Motor Örnekleri

3.2. Servo Motorİçerisinde bir DC motor barındıran ve hassas açısal hareketler uygulamak için kullanılan motorlara servo motor denir. 180 derece ile 360 derece arasında dönen

Page 33: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

46 Harici Donanımlar

çeşitli motorlar vardır. Bunların çıkış dişlisi mekanik olarak kısıtlanmış olması nedeniyle daha fazla dönemezler. Bilhassa robot teknolojisinde en sık kullanılan motor çeşididir. Kendi içlerinde sürücü entegrelerini barındırırlar. Bu nedenle gömülü sistemlerden PWM sinyalleri verilerek motorun açısı değiştirilir. Fakat 5-12 V arasındaki gerilimler ile çalışmaları nedeniyle ekstra bir güce ihtiyaç duyarlar.

Şekil 3.2. Servo Motor Örnekleri

3.3. Step MotorKendisine uygulanan elektrik sinyali sonucu dönme hareketini adım adım ve çok hassas bir şekilde yapan motorlara step motor denir. Adım motoru olarak da adlandırılan bu motorların 360 dereceyi tamamlamak için olan adım sayısı motordan motora farklılık göstermektedir. Motora verilen sinyalin frekansı değiştirilerek hızı değiştirilebilir. Devir sayısı, dönüş hızı ve dönüş yönü mikrodenetleyici sistemler tarafından kontrol edilir. Bu motorlar da diğerleri gibi ekstra bir güç ve sürücü devresi ister. Step motorlar, bipolar ve unipolar olmak üzere iki çeşit olup bipolar step motorlar 4 kablolu, unipolar step motorlar ise 4,5,6 ya da 8 kablolu olabilirler. Yazıcı, lazer kesici, cnc tezgah gibi birçok yerde bu motorlar kullanılır.

Şekil 3.3. Step Motor Örnekleri

Page 34: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

47Lattepanda ile Arduino ve PC Kodlama

3.4. Mesafe SensörüMesafe sensörleri toplam üç grupta toplanabilir. Bunlardan ilki engel algılama sensörü olup IR verici led ile kodlanmış olarak gönderilen IR ışığının IR alıcı modül tarafından toplanması mantığıyla çalışır. Sensör bir engelle karşılaştığında engel olduğunu, engel ile karşılaşmadığında engel olmadığı verisini gönderir. Sensörün çalışma yeteneği, engel yüzeyinin renk, şekil, yapı ve duruş açısından etkilenir. Üzerinde bulunan potansiyometre ile hassasiyet ayarı yapılır.

Şekil 3.4. Mesafe Algılama Sensörü

Mesafe ölçmek için ise mesafe algılama sensörleri tarafından gönderilen IR ışığın engele çarpıp geri yansıması ve yansıyan IR ışığın sensör üzerine düştüğü noktanın açısı ve genişliği mesafe hesaplamasında kullanılır. 10-80 cm aralığında ölçüm yapan sensörler özellikle robot teknolojilerinde yaygın olarak kullanılmaktadır.

Şekil 3.5. Mesafe Ölçme Sensörleri

Ultrasonik sensörler ise bir adet mikrofon ve bir adet hoparlörden oluşur. Ultasonik hoparlörden çıkan ve insan kulağının duyacağı frekanstan daha yüksek bir frekansa sahip ses dalgası gönderilir ve bir engele çarptıktan sonra hoparlörden algılanır. Yolda geçen süreden mesafe hesaplaması yapılır. Sensörün çalışma hassasiyeti bulunduğu koşullara göre değişiklik gösterebilir.

Page 35: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

4. Arduino

4.1. TarihçesiCasey Reas ve Ben Fry adlı araştırmacılar tarafından, hiç programlama deneyimi olmayan kişilere programlama öğretmek amacıyla bir programlama dili ve geliştirme ortamı olan Processing adlı proje oluşturuldu. İtalya’daki bir yüksek lisans öğrencisi olan Hernando Barragan ise yüksek lisans tezi olarak Processing projesinin üzerine inşa edilmiş basitçe interaktif sistemler geliştirmeye olanak sağlayan Wiring projesini yaptı. Massimo Bansi öncülüğündeki bir ekip ise Wiring projesini temel alan Arduino projesini oluşturdu. Bu üç projenin de ortak noktası programlama ve elektronik bilgisi sınırlı olan bireylerin kolayca tasarımlar yapabileceği ortamlar oluşturmaktı. Böylelikle elektronik mühendislerinin alanlarından olan mikrodenetleyici tabanlı tasarımlar Arduino ile teknik bilgisi çok az olan insanlara da çekici oldu. Böylelikle bu kişiler çevresiyle etkileşimde bulunan interaktif nesneleri kolaylıkla yapabilir oldular [7].

4.2. Arduino Nedir?İtalyan elektronik mühendislileri tarafından açık kaynak kodlu olarak geliştirilmiş, donanım ve yazılım tabanlı bileşenleri yerleştirilmiş hazır devrelerden oluşan esnek ve kullanımı kolay bir elektronik sistemler geliştirme platformudur. Arduino bir mikroişlemci olmayıp yazılımcıların mikroişlemcileri kullanarak rahat kodlamalar yapabileceği kolaylaştırıcı bir geliştirme ortamıdır [13]. Arduino için hazır üretilmiş kartlar temin edilebileceği gibi istenirse buradaki bileşenlerden kişilere özgü baskı devreler tasarlanması da mümkündür. Arduino kartlarında bir adet Atmel AVR 8 bit ve 16 bit mikrodenetleyici (ATmega328, ATmega2560, ATmega32u4 vb.), 5V regüle entegresi, 16MHz osilatör, programlama ve diğer devrelerle bağlantı kurmada kullanılan diğer elektronik devre elemanları bulunur.

Page 36: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

56 Arduino

Kendi mikrodenetleyicisi üzerinde bootloader programı olması nedeniyle Arduino kartlarının programlanmasında harici bir programlayıcı yoktur.

Şekil 4.1. Arduino Uno Geliştirme Kartı

4.3. Avantaj ve DezavantajlarıÇevre ile etkileşime giren sistemlerin kolayca yapılmasına imkan tanıyan Arduino platformu açık kaynaklı bir geliştirme platformudur. Hem analog hem de dijital verileri işlemek için analog ve dijital girişlere sahiptir. Bu sayede çeşitli sensörlerden elde edilen veriler kullanılabilir. İşlenen veriler sonrası çıkış pinleri ile ses, ışık, hareket vb. çeşitli çıkışlar elde edilebilir. Arduino, programlama için USB seri bağlantısı, LED, girdi/çıktı pinleri, güç girişi ve birçok daha özellik ile geliştiriciye yardımcı olmaktadır. Kullanılan programlama dilinin basit olması nedeniyle çok sayıda kaynak bulmak mümkündür. Yazılımları ücretsiz olarak Windows, Linux ve Mac OS işletim sistemlerine göre indirilip kullanılabilir. Yüzlerce robotik ve elektronik uygulama yapmaya olanak tanır. Arduino ile ilgili birçok kitap ve proje örneği bulmak gayet kolaydır. C# benzeri görsel programlar ile de kullanmak mümkün olup etkileşimli arayüzler hazırlanabilir [14].

Arduino kartların getirdiği kolaylıklar çok olmasının yanı sıra içerisinde yer alan Atmega mikrodenetleyicinin performası %100 kullanılamaz. Bu durum tıpkı donanım dili olan Assembly veya C gibi dilleri kulanmakla C# veya Java gibi dilleri kullanmak gibidir. Burada programlama dili seçerken performans ya da hızlı geliştirme arasında seçim yapmak gerekir. Arduino veya özel geliştirilen bir mikrodenetleyici sisteminde de durum benzerdir. Kısaca Arduino araç olup kullanıldığı yere göre değerlidir. Yine çeşitli projeler yapmak kolay olsa da bunların sıfır elektronik ve yazılım bilgisi ile hızlıca yapılması pek mümkün değildir. Arduino hazır kütüphaneleri ve örnekleri kullanılarak belirli bir yerden başlanabilir fakat daha fazla ilerlerken tıkanmamak için elektronik ve yazılım

Page 37: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

57Lattepanda ile Arduino ve PC Kodlama

bilgisine de ihtiyaç vardır. Gerçek zamanlı sinyal işleme ve kamera görünüşü aktarma gibi ağır işlemlerde pek işlevsel değildir. Arduino kartları üzerinde Android, Windows CE veya Linux gibi işletim sistemleri çalıştırılamaz. Bu türdeki çalışmalarda Rasperry Pi, Beagle Bone vb. kartlardan yararlanılabilir.

4.4. Donanımsal Özellikleri ve Kart ÇeşitleriDonanımsal özellikler Arduino kartlarının her birinde farklılık gösterse de temel bir Arduino kart aşağıdaki özelliklere sahiptir [15, 16].

• ATmega Mikroişlemci: Düşük güç tüketen, yüksek performanslı 8 bitlik bir static mikrodenetleyici olan ATmega değişik boyutlarda SRAM, EEPROM ve FLASH belleğe sahiptir. 131 tane, birçoğu tek çevrimde çalışan güçlü komut seti vardır. 20MHz’e kadar hızı desteklemektedir.

• 5 Voltluk Regüle Entegresi: Sabit 5V gerilim çeken bir devre elemanı olup üç bacaklıdır. Birincisi yüksek volt girişi, ikincisi toprak (GND) ve üçüncüsü ise 5V çıkış içindir. En fazla güç girişi tavsiye edilen 6-20V arasıdır.

• 16MHz Kristal Osilator veya Seramik Rezonatör: Kare veya üçgen dalga elde etmek için gömülü sistemlerde osilatör veya seramik rezanatör kullanılır. Osilatör bir yükselteç ile verdiği çıktıyı tekrar girdi olarak geri alır. Bu pozitif geri besleme ile sinyal her seferinde kendini yeniler.

• SRAM: Her bit depolamak için tek şeritli dayanma devrelerinin kullanıldığı yarı iletken bellek türü olup güç verildiği sürece bellek içeriğini korur. 2KB hafızaya sahiptir.

• EEPROM: Güç kesintisi olsa dahi kaybolmayan ve program içerisinden hafıza içeriğinin okunup yazılabildiği bellek türüdür. Ram belleklere göre yavaş çalışır ve 2KB veri saklayabilir. Daha fazla hafıza için ise SD Kart kullanımı yaygındır.

• Giriş/Çıkış Pinleri: 6 adet analog giriş ve 6 adeti PWM olarak kullanılabilen 14 adet dijital giriş/çıkış pinleri vardır. Giriş/çıkış pinleri 20mA akım verir.

• Program Hafızası: 32KB program hafızası var olup 0.5KB alanı bootloader olarak kullanılır.

Gün geçtikçe yeni ihtiyaçlara göre yeni Arduino kart çeşitlerinin ortaya çıktığı görülmektedir. Temel olarak bu kartlar benzer bileşenleri içermesine karşın, mikrodenetleyici modelleri, giriş/çıkış pinleri, dahili modül sayıları, boyut, çalışma gerilimi gibi bir kısım farklılıkları vardır. Yapılacak projeye göre

Page 38: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

5. Arduino Programlama

5.1. Sentaks (Söz Dizimi)

5.1.1. ; (Noktalı Virgül)Program içerisinde yazılan her bir işlemin sonuna eklenerek işlemin sonlandırılması sağlanır. Yazılmaması durumunda derleme hatası alınır. Örneğin metot çağırma, değişken tanımlama, değişkene değer atama, matematiksel işlemler yapma gibi tüm işlemlerin sonuna yazılır.

5.1.2. {} (Süslü Parantez)Birden fazla satırdan oluşan kodları kümelemek için ilgili kodlar süslü parantezler arasına yazılır. Herhangi bir süslü parantezin açılması fakat kapanmaması durumunda derleme hatası alınır.

5.1.3. // (Tek Satırlı Yorum)Kod satırlarının yanına veya herhangi bir boş satıra tek satırdan oluşan yorum ya da açıklama yazmak için kullanılır.

5.1.4. /**/ (Çok Satırlı Yorum)Birden fazla satırdan oluşan açıklama ya da yorum satırlarının başına “/*” işareti eklenirken sonuna da “*/” işareti eklenir. Herhangi birinin eksik olması durumunda derleme hatası alınır.

5.1.5. #define (Sabit Değer Tanımı)Program içerisinde tanımlanan değişkenlerin sabit olmasını ve bir daha değiştirilmemesi durumunda ön ek olarak kullanılır. Genellikle #define yerine const kullanımı daha uygundur. “#define ledPin 13” ya da “const int ledPin=13;” şeklinde kullanılır. #define kullanımında satır sonunda noktalı virgül kullanılmaz ve o satıra ondan başka bir kod yazılmamalıdır.

Page 39: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

72 Arduino Programlama

5.1.6. #include (Kütüphane Çağırma)Program içerisinde kullanılacak kütüphanelerin dosyasını eklemek için kullanılır. Örneğin uygulamada LCD ekran kullanılacak ise program kodlarında buna yönelik özelliklerin kullanılması için “#include <LiquidCrystal.h>” şeklindeki kodun yazılması gerekir. #include kullanımında satır sonunda noktalı virgül kullanılmaz ve o satıra ondan başka bir kod yazılmamalıdır.

#include <LiquidCrystal.h>”Const int buttonPin = 10;#define PWMPin 5void setup(){ Serial.begin(9600); pinMode(buttonPin, INPUT);//10 numaralı pin giriş olarak ayarlandı.}

void loop(){ /*Bu parentezler arasınasürekli çalışacak kodlar yazılır*/ }

5.2. Kontrol Yapıları ve Döngüler

5.2.1. If/ElseTemal karar komutu olup kendisinden sonra parantezler arasına yazılan şartın gerçekleşmesi (TRUE olması) durumunda kendisinden sonraki kod bloğu çalışırken, belirtilen şartın gerçekleşmemesi durumunda else kelimesinden sonraki kod bloğunun çalışması sağlanır.

if (şart){// Şart sağlanıyor ise yapılacak işlemler}else{// Şart sağlanmıyor ise yapılacak işlemler}

5.2.2. Switch/caseParantez içerisine verilen bir değeri alıp case ile belirtilen alt ifadelere sırayla gönderir. Case olarak belirtilen her kod bloğunda önce şart kontrol edilir. Şartın gerçekleşmesi durumunda oradaki kod bloğu içerisindeki işlemler yapılır ve bir sonraki Case olarak belirtilen kod bloğuna kontrol için geçilir. Default olarak belirtilen kod bloğu ise önceki tüm şartların gerçekleşmemesi durumunda yerine getirilir. Break komutunun kullanılması durumunda diğer Case blokları kontrol edilmeden switch kontrolünün dışına çıkılır. Yalnızca bir şartın gerçekleşmesi istenmesi durumunda break komutu her case bloğu içerisinde kullanılır. Şartı sağlayan tüm kod bloklarının yerine getirilmesi istenirse break komutu kullanılmaz.

Page 40: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

73Lattepanda ile Arduino ve PC Kodlama

int durum=2;switch (durum) {case 1: digitalWrite(13, HIGH); break; case 2: digitalWrite(13, LOW); break; default: Serial.println(“Bilinmeyen durum ile karşılaşıldı”);

5.2.3. ForBelirli bir başlangıç değerinden başlayarak istenen değer kadar artıp ya da azalıp son değere ulaşıncaya kadar kod bloğu içerisindeki işlemleri tekrar eden temel döngü işlemidir. Örneğin birden başlayarak üçer üçer artan sayıları alt alta yazmak için aşağıdaki döngü işlemi kullanılır.

for (int a = 1; a < 100; a = a+3){ Serial.println (a);}

5.2.4. WhileKendi içerisinde verilen şartın sağlandığı sürece içerisindeki kodları gerçekleştiren döngüdür. Sürekli bir döngü olduğundan durmasını sağlayacak şartın güncellenmesine dikkat edilmelidir.

int i=1;while(i>0){ Serial.println (i); i=i+3; if(i>=100) i=-1;}

5.2.5. Do whileWhile içerisinde belirtilen şart doğru olduğu sürece üstteki kod bloğunu çalıştıran bir döngüdür. While ile aynı mantıkta olmakla birlikte, while önce şartı kontrol

Page 41: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

6. Lattepanda

6.1. Lattepanda Nedir?Koreli bir ekip tarafından tasarlanan Lattepanda, evlerde kullanılan kişisel bir bilgisayarın ne kadar küçüldüğünü gösteren en iyi örnektir. Lattepanda için Windows yüklü bir bilgisayar ve Arduino kartının birleşimi olduğu söylenebilir. Üzerinde lisanslı Windows 10 kurulu olarak gelmektedir. Böylece multimedya ve performans ihtiyaç olduğunda atom işlemci, hassas zamanlama, PWM, analog giriş gibi donanımsal ihtiyaçlarda ise Arduino mikrodenetleyicisi kullanılır. Sistemin işlemcisi kartın altında pasif bir şekilde soğutulmaktadır. Daha ağır işlemlerde kullanılması durumunda fan çıkışı ile harici bir soğutma yapılabilir. Arduino ve bilgisayarın birleşimi olması nedeniyle Arduino’yu programlamak için Arduino IDE kullanılır ve Arduino programı Windows ile birlikte kurulu olarak gelir. Ayrıca Visual Studio ve Office gibi büyük uygulamaların da çalışmasına imkân tanır.

Şekil 6.1. Lattepanda

Page 42: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

124 Lattepanda

Lattepanda üç farklı sürüme sahiptir. Bu sürümler sırasıyla 2G/32GB,2GB/32GB ve 4G/64GB olmak üzeredir. Ayrıca 4G/64GB’lık sürümü kişisel bilgisayarlarda kullanılan 64 bit Windows 10 desteği sunmaktadır. Cihazın 4K desteği olması nedeniyle kablolu ya da kablosuz klavye ve fare ile de kullanılabilir. Kendisine en yakın Arduino kartı olan Raspberry PI üzerine Windows kurulamazken bu cihazın en büyük ayrıcalığı bu olmaktadır. Fakat tüm bunlara rağmen elbette ki normal bir bilgisayardaki gibi bir performansı bu cihazdan beklemek yanlış olacaktır. Ancak robotlardan güvenlik sistemlerine kadar birçok farklı projede rahatlıkla kullanılabilir. İstenirse Linux gibi farklı işletim sistemleri de kurulabilir. Hatta ikinci bir işletim sistemi kurulumunu da desteklemektedir. Bu cihazın donanımsal özellikleri aşağıdaki gibidir.

• Intel Atom 4 Çekirdekli 1.84GHz işlemci• 500Mhz Grafik işlemcisi• 4 GB DDRL3L RAM• 64GB EMMC Hafıza• WiFi ve Bluetooth 4.0• 2x USB 2.0• 1x USB 3.0• HDMI Çıkışı• Display & Touch konnektörleri• Ses çıkışı• MicroSD kart yuvası• Ethernet bağlantısı• Arduino mikrodenetleyicisi• Arduino pinleri ve 6x 3’lü sensör konnektörleri• Direkt işlemciye bağlı I2C ve UART bağlantısı• 100 gram ağırlık

Şekil 6.2. Lattepanda Bileşenleri

Page 43: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

125Lattepanda ile Arduino ve PC Kodlama

6.2. Avantajları ve DezavantajlarıBilgisayar ve Arduino birleşimi olan Lattepanda Arduino kartları ile yapılabilecek tüm işlemleri yapabilme özelliğine sahiptir. Fakat basit işlemleri yerine getirmek için fiyat açısından dezavantajlıdır. Bilhassa nesnelerin interneti gibi projelerde kullanmak için projeleri çok hızlı geliştirme konusunda büyük avantajlar sağlar. Ayrıca Arduino kartlar ile birçok eklenti (shield) aracılığıyla karmaşık devreler sonucu yapılabilecek işlemleri çok daha sade ve kolay bir şekilde yapabilme imkânı tanır. Ağır iş ve işlemleri gerçekleştirilmesi durumunda işlemcinin ekstra bir soğutma sistemine ihtiyaç duyması bir başka dezavantajı olabilir. Bir bilgisayarda çalıştırılabilecek tüm donanımların bu cihaza bağlanabilmesi ve C# veya Java gibi görsel programlar ile rahatlıkla kullanılabilir olması büyük avantajları arasında yer alır. Ayrıca donanımsal işlemlerde mikrodenetleyicinin işlemcisini ve görsel ya da performans gerektiren işlemlerde ise Intel işlemcisini kullanmak büyük kolaylıklar sağlamaktadır. Endüstriyel ortamlarda dayanıklılığının çok yüksek olmaması da bir başka dezavantaj olarak sayılabilir. Bir kısım darbe veya diğer etkenlerden korumak amaçlı muhafaza kutusu, soğutmak için fan veya az sayıda birkaç eklenti (shield) de bulunabilmektedir. Lattepanda’nın çok yeni olması nedeniyle hakkında fazla bilgi veya örnek projeleri yaygın bir şekilde görmek henüz zordur.

Şekil 6.3. Lattepanda Muhafazası ve Soğutucusu

6.3. Giriş-Çıkış PinleriUSB portları kullanılmayıp normal işlem durumunda 700 ile 1.100mAh arasında değişen bir akıma ihtiyaç duymaktadır. Aşağıdaki şekilde giriş/çıkış pinleri ayrıntılı olarak gösterilmiştir.

Page 44: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

126 Lattepanda

Şekil 6.4. Lattepanda Giriş/Çıkış Pinleri

U1 alanındaki çıkış pinleri X-Z8300 atom işlemcisine ait iken U2 alanındaki giriş/çıkış pinleri ise ATmega32u4 mikrodenetleyicisine aittir. U2 alanında A0-A5 arasında 6 ve D0-D13 arasında 14 olmak üzere toplamda 20 dijital pin var olup bunlar dijital giriş/çıkış amacıyla kullanılmaktadır. Her biri 5V gerilim ile çalışan bu pinler 40mA alabilir veya verebilir. Ayrıca her biri başlangıçta kapalı olan 20-50k ohm değerinde dâhili pull-up dirence sahiptir. Fakat unutulmamalıdır ki herhangi bir pinde 40mA değerinin aşılması, mikrodenetleyicinin kalıcı hasar görmesine (yanmasına) neden olabilir. Buradaki pinlerden bazıları aşağıdaki gibi özelleştirilmiştir.

• Analog Girişler: Lattepanda A0’dan A11’e kadar isimlendirilen toplam 12 adet analog girişe sahiptir. Bunların tümü aynı zamanda dijital giriş/çıkış olarak da kullanılabilir. Her bir pimin 10bit çözünürlüğü vardır ve 1024 farklı değer alır. Varsayılan olarak 5 Volta kadar ölçüm yaparlar.

Page 45: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

7. Lattepanda ile Uygulamalar

7.1. Led Yakıp SöndürmeLattepanda üzerindeki işlemcinin hemen yanında mavi renkli bir led tümleşik olarak vardır. Bu led Arduino 13 numaralı pine bağlıdır. Dolayısıyla Arduino tarafında istenildiği gibi kontrol edilebilir. Visual Studio üzerinden C# projesi yazarak bu led’in yarım saniye yanmasını yarım saniye sönük kalmasını sağlayacak kod aşağıdaki gibi olacaktır.

using LattePanda.Firmata;

Arduino ard = new Arduino(); private void button1_Click(object sender, EventArgs e) { ard.pinMode(13, Arduino.OUTPUT);//13 numarali pin çikis olarak ayarlanir. //sonsuz bir döngü açilir ve sürekli bu islemin tekrarlanmasi saglanir. while (true) { ard.digitalWrite(13, Arduino.HIGH);//13 numarali pin’e 1 degeri gönderilir. Thread.Sleep(500);//Yarim saniye program bekletilir. ard.digitalWrite(13, Arduino.LOW);//13 numarali pin’e 0 degeri gönderilir. Thread.Sleep(1000);//Yarim saniye program bekletilir. } }

Kodlar yazılırken öncelikle “LattePanda.Firmata” isim uzayının (namespace) using etiketi kullanılarak eklenmesi gerekir. Bu işlem Arduino adlı sınıfın kullanılmasında uzunca yazımları önleyecektir. Sonrasında ise Arduino sınıfına ait “ard” adında bir adet nesne türetilir. Bundan sonraki yazılacak tüm Arduino kodları bu sınıfın içerisinde vardır ve türetilen nesnesi altından çağrılabilecektir.

Page 46: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

140 Lattepanda ile Uygulamalar

pinMode() metodu “ard” sınıf nesnesi altında bir metot olup içerisine ilk parametre olarak pin numarasını ve ikinci parametre olarak ise bu pinin hangi amaçla kullanılacağını alır. Bu pinin çıkış olarak kullanılacağı belirtilmiştir. Bu metotlar yalnızca bir kere kullanılacak metotlar olması nedeniyle Form_Load olayı içerisine yazılması daha uygun olacaktır. Ardından Arduino içerisinde kullanılan Loop() metodunun C# tarafında muadilini sağlamak için while döngüsü ile sonsuz bir döngü açılır. Bu döngü içerisinde digitalWrite() metodu kullanılır ve 13 numaralı pine 1 yani HIGH değeri gönderilir. C# tarafında program çekirdeğindeki işlemin beklemesini sağlamak için kullanılan ve Thread sınıfı altındaki Sleep() metodu kullanılır ve parametre olarak kaç mili saniye bekleyeceğini gösteren değer girilir. 500 mili saniye beklemesi ve ardından 13 numaralı pine 0 yani LOW değeri gönderilmesi yine sonrasında ise 500 mili saniye beklemesi kodu yazılır. Artık üretilen exe sonlandırılana kadar bu döngü devam edecek ve sürekli bu işlemi yapacaktır. Yani aşağıdaki şekilde gösterilen mavi led yarım saniye yanıyor olacak ve yarım saniye de yanmıyor olacak şekilde tekrarlanacaktır.

Şekil 7.1. Led Yakıp Söndürme Görüntüsü

Bu işlemin kodlarının C# tarafında nasıl göründüğü incelenmek istenirse aşağıdaki şekil incelenebilir. Dikkat edilirse ekran görüntüsünün sağ tarafında proje çalıştırılınca analiz penceresi açılır ve burada programın çalışması ile ilgili çeşitli veriler sunulur.

Page 47: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

141Lattepanda ile Arduino ve PC Kodlama

Şekil 7.2. C# Led Yakma Projesi

Aynı proje Arduino yazılımı içerisinden de yapılabilir. Bunun için öncelikle arama çubuğuna Arduino yazarak Arduino yazılımı açılır. Program ekranı tamamen boş olarak açılacaktır. Öncelikle LattePanda içerisinde yer alan Arduino türü Tools->Board->Arduino Leonardo olarak seçilir. Daha önce de bahsedildiği üzere LattePanda içinde Arduino Leonardo vardır. Aşağıdaki şekilde bu durumun nasıl yapılacağı gösterilmiştir.

Şekil 7.3. Arduino Kart Seçimi

Page 48: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

142 Lattepanda ile Uygulamalar

Bu işlem sonrası Arduino ile haberleşmede kullanılacak portun seçili olup olmadığı kontrol edilmelidir. Genellikle seçili olmayabilir. COM1 dışındaki aktif portlardan herhangi biri seçilebilir. Aşağıdaki şekilde bu durum gösterilmiştir.

Şekil 7.4. Arduino Port Seçimi

Bu ön aşamaların gerçekleştirilmesi sonrası kod yazım ekranına geçilebilir. Varsayılan olarak boş gelen ekranda temel iki metot olan setup() ve loop() metotları yoktur. Dolayısıyla öncelikle bu iki metodun yazılması gerekir. Ardından aşağıdaki kodlar yazılır.

void setup(){ pinMode(13,OUTPUT);}

void loop(){ digitalWrite(13,1); delay(500); digitalWrite(13,0); delay(500);}

Kodlara dikkat edildiğinde C# kodları ile çok büyük benzerlikler taşımaktadır. Kodun yazılması sonrası öncelikle kodun kontrolü ve sonrasında ise kodun Arduino hafızasına yüklenmesi gerçekleştirilir. Aşağıdaki şekilde 1 numara ile gösterilen butona basılarak kodun derlenmesi ve kontrolü yapılır. 2 numara ile gösterilen butona basılarak ise kodun LattePanda içinde yer alan Arduino hafızasına yüklenmesi sağlanır.

Page 49: Lattepanda ile Arduino ve - websiteyonetimi.ahievran.edu.tr · Şekil 2.18. Bağlantı Kablo Çeşitleri 44 Şekil 3.1. DC Motor Örnekleri 45 Şekil 3.2. Servo Motor Örnekleri 46

Kaynaklar[1] Elektrikport, 2018. Mikrodenetleyiciler Nasıl Çalışır?, http://www.elektrikport.com,

Erişim Tarihi: 11.08.2018.. [2] Robotistan, 2018. Mikrodenetleyici ve Mikroişlemci Nedir? https://maker.robotistan.

com, Erişim Tarihi: 11.08.2018.. [3] Delebe, E. (2015). Projeler ile Arduion. Kodlab Yayınevi, İstanbul.. [4] Elektrikport, 2018. Mikrodenetleyiciler Nasıl Çalışır?, http://www.elektrikport.com,

Erişim Tarihi: 11.08.2018.. [5] Elektrikport, 2018. Gömülü Sistem Nedir?, http://www.elektrikport.com, Erişim

Tarihi: 11.08.2018.. [6] Microchip, 2018. News Release Microchip Technology To Acquire Atmel, www.

microchip.com, Erişim Tarihi: 12.08.2018.. [7] Taşdemir, C. 2010. ARDUNİO, 6. Baskı, Dikey Eksen Yayınları.. [8] FPGA NEDİR, 2018. FPGA Nedir?, http://fpganedir.com, Erişim Tarihi: 12.08.2018.. [9] Robotistan, 2018. Gerilim, Akım ve Direnç Nedir? Temel Elektrik Kavramları,

https://maker.robotistan.com, Erişim Tarihi: 13.08.2018.. [10] Robotistan, 2018. Röle Nedir? Nerelerde Kullanılır? – Röle Çeşitleri, https://maker.

robotistan.com, Erişim Tarihi: 14.08.2018.. [11] Sülün, E. E., Aslan, M. (2003). Herkes İçin Elektronik. Kanyılmaz Matbaası, İzmir.. [12] Çamuroğlu, D. (2015). Arduino ve Raspberry PI için Temel Elektronik. Dikeyeksen

Yayınevi, 2. Baskı, İstanbul.. [13] Taşdemir, C. (2016). Arduino Uygulama Kitabı. Dikeyeksen Yayınevi, İstanbul.. [14] Kanat, V. (2014). Mühendisler İçin Arduino. Dikeyeksen Yayınevi, İstanbul.. [15] Hayal Et ve Yap, (2018). Arduino Nedir?. http://hayaletveyap.com, Erişim Tarihi:

19.08.2018.. [16] Dökmetaş, G. (2016). Arduino Eğitim Kitabı, Dikeyeksen Yayınevi, İstanbul.. [17] Diyot, (2018). Arduino Uno Pinleri, http://diyot.net, Erişim Tarihi: 19.08.2018.. [18] Robotik Sistem, (2018). ARDUINO NEDİR?. http://www.robotiksistem.com,

Erişim Tarihi: 18.08.2018.. [19] Doğan, N. (2015). Android ve Arduino. Dikeyeksen Yayınevi, İstanbul.. [20] Dökmetaş, G. (2016). Arduino ve Raspberry PI ile Nesnelerin İnterneti, Dikeyeksen

Yayınevi, İstanbul.. [21] Çamoğlu, D. (2014). İleri Seviye Arduino. Dikeyeksen Yayınevi, İstanbul.. [22] Çağlargül., (2018). Shield Nedir? Arduino Shield Çeşitleri Nelerdir? Tercih Ederken

Nelere Dikkat Edilmesi Gerekir?, http://www.caglargul.com, Erişim Tarihi: 17.08.2018..