3. LIBRO AUTOMATAS PROGRABLES SIEMENS GRAFCET Y GUIA GEMMA CON TIA PORTAL - A...
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
1. ARDUINO KODLAMA
(40 Örnek Proje)
Doç. Dr. Mehmet Metin ÖZGÜVEN
Y. Müh. Ziya ALTAŞ
Y. Müh. Tahsin UYGUN
Tokat Gaziosmanpaşa Üniversitesi, Ziraat Fakültesi
Biyosistem Mühendisliği Bölümü
e-posta: mmozguven@hotmail.com
2022
ISBN 978-625-00-0933-8
2. i
İÇİNDEKİLER
İÇİNDEKİLER ....................................................................................i
ÖNSÖZ ............................................................................................iv
1. ELEKTRONİK ve DEVRE YAPIMI................................................1
1.1. Elektronik Nedir? ........................................................................1
1.2. Elektrik Akımları (DC/AC) ...........................................................2
1.3. Ölçü Aleti (Multimetre) Kullanımı ................................................3
1.4. Breadboard Kullanımı.................................................................5
1.5. Elektronik Devre Elemanları .......................................................6
1.6. Yardımcı Elemanlar..................................................................15
1.7. Baskı Devre Çıkarma ...............................................................18
2. ARDUINO....................................................................................21
2.1. Arduino Nedir? .........................................................................21
2.2. Arduino Çeşitleri .......................................................................21
2.3. Arduino Shield Çeşitleri ............................................................24
2.4. Arduino ile Kullanılabilen Sensörler ..........................................25
2.5. Arduino Simülasyon Programları ..............................................27
2.6. Arduino UNO R3 Kısımları........................................................27
2.7. Arduino IDE Programının Kurulumu .........................................29
2.8. Arduino IDE Program Arayüzü..................................................31
3. ARDUINO PROGRAMLAMA......................................................32
3.1. Program Yapısı.........................................................................32
3.2. Kütüphane Ekleme ...................................................................33
3.3. Kontrol Yapısı...........................................................................33
3.4. Sabitler.....................................................................................34
3.5. Dijital Giriş Çıkışlar ...................................................................35
3.6. Analog Giriş Çıkışlar.................................................................35
3.7. Gecikmeler ...............................................................................35
3. ii
3.8. Seri Haberleşme.......................................................................36
3.9. Söz Dizimi ................................................................................36
3.10. Karşılaştırma Operatörleri.......................................................37
3.11. Boolean Operatörleri ..............................................................37
3.12. Birleşik Operatörler.................................................................38
3.13. Map komutu............................................................................38
3.14. Dönüşümler............................................................................39
4. ÖRNEK PROJELER ...................................................................40
A. LED UYGULAMALARI...............................................................40
4.1. Buton ile Led Yakma ................................................................40
4.2. Potansiyometre ile Led Parlaklık Ayarı .....................................42
4.3. Trafik Işığı.................................................................................44
4.4. Potansiyometre ile Led Hız Kontrolü.........................................46
4.5. Takip Eden Işık.........................................................................48
4.6. Buton ile RGB Led Kontrolü......................................................50
4.7. Joystick ile Led Yakma .............................................................53
4.8. LDR ile Led Kontrolü ................................................................56
B. SES UYGULAMALARI...............................................................59
4.9. Buzzer ile Melodi Çalma...........................................................59
4.10. Ses Duyarlı Led Kontrolü........................................................62
4.11. Buton ile Ses Tonu Kontrolü ...................................................65
C. SENSÖR UYGULAMALARI.......................................................67
4.12. Yağmur Sensörü ile Led Kontrolü...........................................67
4.13. Ultrasonik Mesafe Sensorü ile Park Sensörü..........................69
4.14. Toprak Nem Sensorü ile Uyarı Sistemi...................................72
4.15. Sıcaklık Sensörü ile Yangın Alarmı.........................................75
4.16. Gaz Sensörü ile Doğalgaz Kaçak Alarmı................................77
4.17. Hareket Sensörü ile Uyarı Sistemi ..........................................80
4.18. Manyetik Sensörlü Uyarı Sistemi............................................83
4. iii
D. MOTOR UYGULAMALARI.........................................................85
4.19. Joystick ile Servo Motor Kontrolü............................................85
4.20. Mesafe Sensörü ile Servo Motor Kontrolü ..............................87
4.21. RFID ile Servo Motor Kontrolü................................................90
4.22. Ses ile Servo Motor Kontrolü ..................................................93
4.23. Renk Sensörü ile Servo Motor Kontrolü..................................95
4.24. Potansyiometre ile DC Motor Kontrolü..................................101
4.25. Mesafe Sensörü ile DC Motor Kontrolü.................................103
4.26. Sıcaklık Sensörü ile DC Motor Kontrolü................................ 106
E. LCD EKRAN UYGULAMALARI ...............................................108
4.27. LCD Ekrana Yazı Yazdırma..................................................108
4.28. LCD Ekrana Sıcaklık ve Nem Değerini Yazdırma .................110
4.29. LCD Ekrana Gerilim Değerini Yazdırma (Voltmetre).............112
4.30. LCD Ekrana Ölçülen Mesafeyi Yazdırma.............................. 115
F. DİĞER UYGULAMALAR.......................................................... 118
4.31. Nabız Ölçer ..........................................................................118
4.32. Engelliler için Sesli ve Titreşimli Uyarı Sistemi...................... 121
4.33. Akıllı Madenci Bareti............................................................. 124
4.34. FM Radyo.............................................................................127
4.35. Akıllı Sulama Sistemi............................................................ 130
4.36. Güneş Takip Sistemi ............................................................ 132
4.37. Sonar Sistemi .......................................................................136
4.38. Engel Tanıyan Robot............................................................ 143
4.39. Keypad ile Şifreli Kapı........................................................... 147
4.40. LCD Ekranda Runner Oyunu................................................156
5. iv
ÖN SÖZ
Arduino çok çeşitli projeler yapma imkanı sağlayan açık kaynak kodlu bir
geliştirme platformudur. Açık kaynak kodlarının çok çeşitli uygulamaların
yapılmasına olanak sağlaması, uygulama kolaylığı ve uygun maliyetli
olması Arduino kullanımını yaygın hale getirmiştir. Günümüz çağında
yazılımın önemi, geliştirilen cihaz ve uygulamalarda kendini
göstermektedir. Örneğin SpaceX, Tesla, Apple, Facebook, Twitter ve
Bayraktar İHA gibi geliştirilmiş cihaz ve uygulama yazılımlarının özgün
olması ve rakiplerine olan üstün niteliklerinden dolayı dünya çapında
insanların ilgisini çekmeyi başarmıştır. Bu rakipsiz firmaların ortaya
çıkmasını sağlayan en önemli unsur yazılımdır. Yazılımın temeli
ilköğretim seviyesinde Arduino uygulamalar ile öğretilmeye başlanabilir.
Yazılımın öğrenilmesine katkı amacıyla bu kitapta, Arduino kodlamanın
nasıl yapıldığı açıklanmış ve 40 örnek uygulama verilmiştir. Bu
uygulamaların yazılım ve donanım kontrolü uygulamalı olarak test
edilmiş ve sorunsuz çalıştığı görülmüştür. Uygulamaların yapılabilmesi
için gerekli temel elektronik bilgisi de kitapta verilmiştir. Kitabın içeriği
yeni yazılım öğrenmek isteyenlerin belirli bir seviyeye gelmesini
sağlayacak şekilde planlanmıştır. Bu amaçla Arduino ile yapılabilecek 6
çeşit temel uygulama basitten karmaşığa doğru belirli bir düzende
verilmiştir. Kitabın hazırlanmasında yardımlarını gördüğümüz Y. Müh.
İsmail TERZİ ile Yüksek Lisans öğrencileri Arif ÇAM ve Derya GÜVEN’e
teşekkürlerimizi sunarız.
6. 1
1. ELEKTRONİK ve DEVRE YAPIMI
1.1. Elektronik Nedir?
Elektrik akımı, atomlar arasında serbest olarak hareket eden elektronlardan
oluşmaktadır. Akım şiddeti, elektron hareketine neden olan etmenin oluşturduğu
potansiyel farkı ile orantılıdır. Elektron akışı negatif yükten pozitif yüke ya da daha az
negatif yüke doğru olmaktadır.
Elektron akışından oluşan elektrik enerjisi; ısı, ışık, mekanik, manyetik enerji gibi
diğer enerjilerin üretilmesinde kullanılır. Bu kullanım içinde, elektron akışını
denetleyecek ve yönetecek bir kısım yapı elemanlarına gereksinim duyulmaktadır. Bu
yapı elemanlarının bir bölümü mekanik esaslara göre ve mekanik güçlerle
çalışmaktadır. Şalterler, röleler, kontaktörler, reostalar vb, bunlara birer örnektir.
Kuvvetli akım, orta ve yüksek gerilim devrelerinde, mekanik esaslı denetim ve
yönetim elemanları kullanılmaktadır.
Elektron akışının denetimi ve yönetimi; mekanik olmayan, hareket etmeyen ve
mekanik güce gereksinim duymayan elemanlarla da yapılabilmektedir. Bu gruba
giren elemanlar, elektronik yapı elemanlarıdır. Günümüz teknolojisi henüz bu
elemanları kuvvetli akım (>20mA) devrelerine uygulayacak ölçülere çıkaramamıştır.
Bugünkü ölçüleriyle ancak, zayıf elektrik sinyallerini kullananan elemanları
denetleyebilmekte ve yönetebilmektedir.
Elektronik; elektron akışını, direnç, sıcaklık, manyetik alan, elektrik alanı, ışık, basınç,
elektriksel yük gibi değişkenlerle denetleyen, elektronların yollarını mekanik hareketi
olmayan ve mekanik güce gereksinim göstermeyen elemanlarla yöneten bir
uygulama dalıdır.
Zayıf akım, elektroniğin temel uğraş alanını oluşturmaktadır. Denetim ve yönetim işi,
analog ya da dijital olarak yapılabilmektedir. Kullanılan yapı malzemelerinin ömrü
aynı işi yapan mekanik araçlardan çok daha uzun, yapıları basit ve hacimleri yüzlerce
kez daha küçüktür.
7. 2
1.2. Elektrik Akımları (DC/AC)
Elektrik akımı, elektronların bir noktadan diğer bir noktaya akışıdır. Elektrik akım
birimi, iletkenin kesitinden bir saniyede geçen elektron miktarı olarak
tanımlanmaktadır.
Doğru Akım (DC)
Zamana bağlı olarak yönü ve şiddeti değişmeyen akıma doğru akım denir. Doğru
akım genelde elektronik devrelerde kullanılmaktadır. En ideal doğru akım en sabit
olanıdır. En sabit doğru akım kaynakları da pillerdir.
Alternatif Akım (AC)
Zamana bağlı olarak yönü ve şiddeti değişen akıma alternatif akım denir. Alternatif
akım büyük elektrik devrelerinde ve yüksek güçlü elektrik motorlarında
kullanılmaktadır. Ev veya iş yerlerinde kullanılan prizlerdeki elektrik, alternatif akım
sınıfına girmektedir. Buzdolabı, çamaşır makinesi, bulaşık makinesi, klima ve
vantilatörler doğrudan alternatif akımla çalışmaktadır. Bilgisayar, televizyon, müzik
seti ve video gibi içerisinde elektronik devre bulunan cihazlar ise bu alternatif akımı
doğru akıma çevirerek kullanmaktadır.
8. 3
1.3. Avometre Kullanımı
Ölçme, bilinmeyen bir büyüklüğün, aynı türden bilinen bir büyüklükle kıyaslanmasına
denir. Uzunluk ölçülürken ölçülecek cisim metre ile ağırlık ölçülürken ise kilogram ile
kıyaslanmaktadır. Elektriksel ölçmelerde elektrik ölçü aletleri kullanılmaktadır. Ölçü
aletleri analog ve dijital ölçü aletleri olmak üzere iki çeşittir. En yaygın kullanılan dijital
ölçü aleti avometre (multimetre) dir.
Akım, gerilim ve direnç ölçebilen ölçü aletlerine avometre denilmektedir. “AVO”
sözcüğüne dikkat edildiğinde Amper – Volt – Ohm birimlerinin baş harflerinden
oluştuğu görülmektedir. Avometre çok amaçlı kullanılan bir ölçü aleti olduğu için diğer
bir adı da multimetredir. Avometreler yapılarına göre analog ve dijital olmak üzere iki
tipte imal edilmektedir.
Son yıllarda okuma kolaylığı nedeniyle tercih edilen dijital avometrelerin birçok
modeline rastlamak mümkündür. Okuma işlemi LCD ekrandan direkt sayısal olduğu
için kullanımı analog avometrelere göre çok daha kolay ve pratiktir. Ölçme için
kullanıcının yapacağı işlem, uygun komütatör kademesi ve ölçülecek büyüklüğe
uygun prob bağlantı terminallerinin seçimidir.
9. 4
Komütatör Anahtar Konumları
Ölçülecek değer tahmini olarak bilinmiyorsa ölçme işlemine her zaman en yüksek
kademeden başlanmalıdır.
Doğru Gerilim (DCV)
Doğru gerilim ölçmek istendiğinde komütatör anahtar DCV bölgesinde uygun
kademeye getirilir.
Alternatif Gerilim (V~)
Alternatif gerilim ölçümlerinde komütatör ACV bölgesindeki uygun kademeye getirilir.
Doğru Akım (DCA)
Doğru akım ölçümlerinde komütatör anahtar DCA bölgesindeki uygun kademeye
getirilir.
Alternatif Akım (A~)
DCA komütatör bölgesinde 200 mA’e kadar doğru akım ölçülebilmektedir. Ancak
ölçülecek akım daha büyük değerde olabilir. Bu durumda ölçme probu 10A
kademesinde ve komütatör A~ bölgesindeki uygun kademeye getirilir.
Direnç (Ω)
Direnç ölçme işlemi yapılacağı zaman seçici komütatör Ω bölgesine getirilir.
Prob Bağlantı Terminalleri
Prop bağlantı terminalleri incelendiğinde, 3 adet olduğunu ve hemen yanlarında
dikkat çeken talimatlar olduğu görülmektedir. COM, akım – gerilim – direnç
ölçümlerinin hepsinde kullanılacak iki terminalden birisidir. Yani üç ölçümde de ortak
terminal olarak kullanılmaktadır. Siyah prob COM terminaline takılır. VΩmA; doğru ya
da alternatif gerilim, direnç ve mA seviyesinde yapılacak akım ölçmelerinde
kullanılacak 2. terminaldir. 10A; Ölçülecek doğru akım değerinin 200 mA den yüksek
olması durumunda komütatör anahtar 10A kademesine alınır ve bu durumda 2.
bağlantı terminali olarak 10A terminali kullanılır.
10. 5
1.4. Breadboard Kullanımı
Breadboard, devre tasarlamak ve test etmek için yaygın olarak kullanılan bir araçtır.
Breadboard kullanırken devre yapmak için tellerin ve bileşenlerin lehimlenmesine
gerek yoktur. Bileşenleri monte etmek ve yeniden kullanmak daha kolaydır.
Bileşenler lehimlenmediği için devre tasarımı istendiği zaman sorunsuz bir şekilde
değiştirilebilmektedir. Breadboardlar genelde beyaz ABS plastikten yapılmış bir
kutuya yerleştirilmiş bir dizi iletken metal klipsten oluşmaktadır. Burada her bir klips
başka bir klipsle yalıtılmaktadır. Plastik kutu üzerinde belirli bir şekilde düzenlenmiş
birkaç delik vardır. Genellikle her biri 5 satır ve 64 sütunlu iki bölümden oluşmaktadır.
Her kolon ise elektriksel olarak içeriden bağlanmıştır.
Breadboard’a elemanlar yerleştirilirken her bir sütundaki birbirine bağlı 5’li (A, B, C,
D, E veya F, G, H, I, J) delik dikkate alınarak yerleştirilir. Bir elemanın birden fazla
ayağı aynı 5’liye bağlanması kısa devre oluşturur ve devre çalışmaz. Breadboard
doğru kullanıma örnek olarak aşağıda şekilde gösterilmiştir.
11. 6
1.5. Elektronik Devre Elemanları
Arduino ile kullanılan en temel elektronik devre elemanları aşağıda açıklanmıştır.
DİRENÇ
Direnç, akım geçişi sırasında gerilimin düşürülmesi ve akımın zayıflatılması istenilen
yerlerde kullanılmaktadır.
Sabit dirençler: Devre akımını ya da gerilimini belirli bir değerde sabitlemek
amacıyla kullanılan, dolayısıyla direnç değerinin değişmediği elemanlara sabit direnç
denir.
12. 7
SEMBOLÜ GÖRSELİ
Ayarlı dirençler (potansiyometre, trimpot, reosta): Direnç değerinin belli bir aralık
boyunca ayarlanabildiği dirençlerdir.
SEMBOLÜ GÖRSELİ
Ortam etkili dirençler (LDR, NTC, PTC, VDR): Işık etkili dirençler (LDR) ve ısı etkili
dirençler (termistörler) olmak üzere ikiye ayrılmaktadır.
Işık etkili dirençler (LDR): Üzerine düşen ışık şiddetiyle ters orantılı olarak
direnci değişen devre elemanlarıdır.
SEMBOLÜ GÖRSELİ
Isı etkili dirençler (NTC, PTC): Gövde sıcaklığı yükseldikçe direnci yükselen ve
gövde sıcaklığı düştükçe de direnci düşen dirençler Pozitif Kat Sayılı Direnç – PTC
(Positive Temperature Coefficient) olarak adlandırılmaktadır. Gövde sıcaklığı
düştükçe direnci yükselen ve gövde sıcaklığı yükseldikçe de direnci düşen dirençler
Negatif Kat Sayılı Direnç – NTC (Negative Temperature Coeffcient) olarak
adlandırılmaktadır.
SEMBOLÜ GÖRSELİ
13. 8
Dirençlerin Renk Kodlarıyla Okunması
Ölçü aleti kullanmadan direncin değerini renk bantları yardımıyla belirleyebilmek
önemlidir. Dirençler 4 ve 5 bantlı olarak üretilmektedir. Aşağıdaki şekilde renk
bantlarının hangi sayısal değerleri temsil ettiği gösterilmiştir. 4 bantlı direnç
okunmasında 1. renk; 1. sayıyı, 2. renk; 2. sayıyı, 3. renk çarpan üstelini ve 4. renk
ise toleransı göstermektedir. Direnç değeri hesaplanırken, ilk iki rengin karşılığı olan
sayılar yan yana konulur ve üçüncü rengin karşılığı 10′un kuvveti şeklinde çarpan
olarak gelmektedir. 5 renk bandlı dirençlerde ise ilk üç renk sayı, 4. renk çarpan, 5.
renk toleranstır. Aşağıdaki şekilde gösterilen direncin okunmasında; öncelikle ilk 3
renge karşılık gelen kahve:1, yeşil:5 ve mavi:6 = 156 sayısal değeri yazılır. Ardından
elde edilen bu değer dördüncü renk kırmızı:102
ile çarpılıp direnç değeri bulunur
(156x100 = 15600 Ω = 15.6 kΩ). Ayrıca renk değerlerinin akılda kolayca kalması için
renklerin baş harflerinden oluşturulan “SOKAKTA SAYAMAM GİBİ” tekniği
kullanılabilir.
14. 9
KONDANSATÖR
Kondansatör iki uçlu enerji depolayan elektronik bir elemandır. Kondansatörün yük
depo edebilme yeteneğine kapasite adı verilmektedir. Kondansatör kapasitesi farad
olarak adlandırılmakta ve ‘F’ harfiyle gösterilmektedir.
Sabit ve ayarlı kondansatör (Kutupsuz)
SEMBOLÜ GÖRSELİ
Kutuplu kondansatör
SEMBOLÜ GÖRSELİ
RÖLE
Röle, elektromanyetik olarak çalışan ve kontakları ile yük kontrolü yapılmasını
sağlayan elemandır. Elektromıknatıs özelliğine sahip bir bobinden ve kontaklardan
meydana gelmiştir. Düşük gerilim ile yüksek değerli gerilimleri kontrol edebilmektedir.
SEMBOLÜ GÖRSELİ
KRİSTAL
Kristal, özellikle kararlı frekans üretilmesi gereken osilatör devrelerinde
kullanılmaktadır. Kuartz (Quartz) kristalinden imal edilmiştir. Kuartz kristalinin özelliği,
üzerine bir basınç uygulandığında uçlarından gerilim elde edilmesi, uçlarına gerilim
uygulandığında ise titreşerek frekans üretmesidir.
15. 10
SEMBOLÜ GÖRSELİ
HOPARLÖR
Hoparlör, bir ses frekans yükseltecinin (amplifikatör) çıkışındaki elektrik sinyalini
(akımını), ses sinyaline çeviren cihazdır.
SEMBOLÜ GÖRSELİ
MİKROFON
Mikrofon, ses sinyalini elektrik sinyaline çeviren cihazdır.
SEMBOLÜ GÖRSELİ
TRANSİSTÖR
Girişine uygulanan sinyali yükselterek gerilim ve akım kazancı sağlayan, gerektiğinde
anahtarlama elemanı olarak kullanılan yarı iletken bir elektronik devre elemanıdır.
Transistör üç kutuplu bir devre elemanıdır. Devre sembolü üzerinde orta kutup beyz
(B), okun olduğu kutup emiter (E), diğer kutup kollektör (C) olarak adlandırılmaktadır.
Beyz akımının şiddetine göre kollektör ve emiter akımları ayarlanmaktadır.
SEMBOLÜ GÖRSELİ
16. 11
TRİSTÖR
Tristör, üç uçlu yarıiletken devre elemanıdır. Silikon Kontrollü Doğrultucu olarak da
isimlendirilmektedir. Tristör, çalışma karakteristiği bakımından normal silisyum diyota
benzer. Ancak Tristör de anot (A) ve katot (K) uçlarından başka bir de Kapı (Gate)
adı verilen üçüncü bir uca sahiptir.
SEMBOLÜ GÖRSELİ
DİYAK
Silisyumdan yapılmış iki uçlu yarıiletken devre elemanıdır. Her iki yönde akım
geçirebilir.
SEMBOLÜ GÖRSELİ
TRİYAK
Triyak, silisyumdan yapılmış üç uçlu yarıiletken bir devre elemanıdır. Çalışma
prensibi açısından tristöre benzemesine rağmen, çift yönde akım geçirmesinden
dolayı ondan ayrılmaktadır. Triyağa çift yönlü tristör adı da verilebilmektedir.
SEMBOLÜ GÖRSELİ
ENTEGRE DEVRELER
Entegre devreler; diyot, transistor, direnç, kondansatör vb. gibi birden fazla elektronik
devre elemanının, bir devre oluşturacak şekilde, özel üretim teknikleri kullanarak
kapalı bir yapı içerisine konulması ile oluşturulmuş elektronik devre elemanlarıdır.
17. 12
SEMBOLÜ GÖRSELİ
DİYOT
Silisyum gibi bir yarı iletken maddenin P ve N tipi olarak elde edilmiş iki türünün
birleşiminden oluşan bir devre elemanıdır. Pozitif elektriksel özellik gösteren kutbu
anot (P-maddesi), negatif elektriksel özellik gösteren kutbu katot (N-maddesi) olarak
adlandırılmaktadır. Diyodun en önemli elektriksel özelliği akımı tek yönde iletmesidir.
Çeşitleri aşağıdaki gibidir.
Zener Diyotlar: Zener diyot ters kırılma gerilimi, tek yüzey birleşimli diyottan daha
küçük olan bir diyot çeşididir. Bu özellikleri sayesinde genellikle ufak genlikli sabit
referans voltajı elde edilmek istenen yerlerde kullanılırlar. Bu nedenle devreye ters
bağlanırlar.
SEMBOLÜ GÖRSELİ
Foto Diyotlar: Işığa duyarlı olarak iletime geçen diyotlardır. Foto sensörlerde yaygın
olarak kullanılır. Bir optoelektronik devre elemanıdır. Fotodiyotlar devreye ters
bağlanır, bu sebeple katot ucundan anot ucuna doğru elektrik akımı geçirirler.
SEMBOLÜ GÖRSELİ
18. 13
Işık Yayan Diyotlar: Işık yayan diyotların çalışma ilkesi kristal diyotla aynıdır. P ve N
maddelerinin birleşim yüzeyine elektrik gerilimiyle beraber ışık saçılmasını sağlayan
katkı maddeleri eklenmiştir.
LED’ler (Light Emitting Diode): Işık yayan flamansız lambalardır.
SEMBOLÜ GÖRSELİ
Kristal Diyotlar: Kristal diyotlar çoğunlukla alternatif gerilimin doğrultulması gereken
yerlerde ya da elektronik devrelerin kısa devreden korunması istenen yerlerde
kullanılmaktadır. Değişik çalışma gerilimi ve akımlarına sahip kristal diyotlar vardır.
En sık kullanılanları 1N4xxx serisi diyotlardır.
SEMBOLÜ GÖRSELİ
MOTOR
Motor, uçlarına elektrik uygulandığında elektrik enerjisini mekanik enerjiye
dönüştürür.
DC motor: Motorun içindeki tel bobinleri, içinden akım geçtiğinde mıknatıslanır. Bu
manyetik alanlar mıknatısları çeker ve geri püskürterek şaftın dönmesine neden
olmaktadır. Elektriğin yönü tersine çevrilirse, motor ters yönde dönecektir.
GÖRSELİ
19. 14
Servo motor: Yalnızca 180° dönebilen bir tür dişli motordur. Arduino'dan elektrik
darbeleri gönderilerek kontrol edilmektedir. Bu darbeler motora hangi konuma
hareket etmesi gerektiğini bildirmektedir.
GÖRSELİ
SIVI KRİSTAL EKRAN (LCD)
Sıvı kristallere dayalı bir tür alfanümerik veya grafik ekrandır. LCD'ler birçok boyutta,
şekilde ve stilde üretilmektedir. Genellikle her biri 16 sütun ve 2 satırdan oluşan LCD
yaygın kullanılmaktadır.
GÖRSELİ
BUZZER
Titreşimleri algılamak ve sesler oluşturmak için kullanılabilen elektrikli bir bileşendir.
GÖRSELİ
SICAKLIK SENSÖRÜ
Bileşenin sıcaklığına bağlı olarak voltaj çıkışını değiştirmektedir. Dış ayaklar güce ve
toprağa bağlanır. Merkez pimindeki voltaj ısındıkça veya soğudukça değişmektedir.
GÖRSELİ
20. 15
BUTON
Basıldığında bir devreyi kapatan anlık anahtardır. Devreye kolayca takılırlar.
GÖRSELİ
JUMPER KABLOLAR
Bileşenleri breadboard ve Arduino'ya bağlamak için kullanılmaktadır.
GÖRSELİ
ERKEK BAŞLIK PİMLERİ
Çeşitli shield ve kart tasarımlarında bir şeyleri bağlamak için kullanılmaktadır.
GÖRSELİ
1.6. Yardımcı Elemanlar
Eleman Görseli
Güç Kaynağı
Ayarlı Adaptör
23. 18
Bakır Plaket
Delikli Pertinaks
1.7. Baskı Devre Çıkartma
Elektronik cihazlar, bakır plaket üzerine monte edilen elektronik elemanlardan
meydana gelmektedir. Elektronik devre şemaları, baskı devre şemalarına
dönüştürülerek bakır plakaya aktarılmaktadır. Bu işleme baskı devre çıkarma tekniği
denir. Böylece devreyi oluşturan devre elemanları bir araya getirilerek belirli bir
düzene getirilmektedir. Bu şekilde üretim hızlandırılmakta, maliyet düşürülmekte ve
cihazların daha küçük olması (az yer kaplaması) sağlanmaktadır. Bu işlem yapılırken
devrenin şeması yani hangi devre elemanının hangi pin (bacak)’in nereye
bağlanacağı planlanmaktadır. Daha sonra board üzerindeki baskı görünüşü
çizilmekte ve bu baskı görünüşünden yararlanılarak baskı devre çıkartılmaktadır.
Asetat yöntemi, pozitif 20 yöntemi ve serigrafi yöntemi gibi baskı devre çıkartma
yöntemleri bulunmakla birlikte, burada asetat yöntemi açıklanmıştır.
Asetat Yöntemi İle Baskı Devre Çıkartma
İlk önce devrede kullanılacak elemanlar temin edilir. Hata payını azaltmak için
öncelikle bir kâğıt üzerine elemanların ayakları ölçülendirilip hatlar birbirini
kesmeyecek şekilde baskı devre şeması çizilir. Baskı devrenin alt görünüşü ve üst
görünüşü olmak üzere iki durum söz konusudur. Bu nedenle çizimler bakır yüzeye
yapılırken, arka yüzeye elemanlar yerleştirilmektedir. Örneğin bir entegrenin önden
görünüşü 1 nolu pinine karşılık gelirken arka görünüşünde son numaralı pini olur ve
buna dikkat edilmediyse entegre doğru monte edilemez. Yanlış bir devre tasarlanmış
olur. Kağıt üzerine devre tasarımı tamamlandıktan sonra devre şeması asetat kalemi
ile bakır plaket üzerine çizilmektedir. Çizim anında ufak hatalar kalemin arkasındaki
silgi ile kurumadan kolaylıkla silinebilmektedir.
24. 19
Çizimi tamamlan bakır plaketin girebileceği büyüklükte bir kaba bir perhidrol kapağı
ölçekte perhidrol, dört perhidrol kapağı ölçekte de tuz ruhu karıştırılır. Böylece bakırı
eritecek ama gerekli olan baskı devre kaleminin mürekkebini eritmeyecek eriyik asit
elde edilmiş olunur. Tuz ruhunun asidik özelliği yüksektir. Bakır plaket sadece tuz
ruhuna atılırsa plaka üzerinde hiç bir bakır kalmayacaktır yani bize gerekli yollarda
erimiş olacaktır. Perhidrol tuzruhunun asidik özelliğini düşürmektedir. Bu karışım
deneme yanılma yöntemiyle de ne kadar tuz ruhu ne kadar perhidrol kullanılacağı
bulunabilir. Ancak asit olduğu için güvenlik açısından temas etmeyiniz ve
koklamayınız. Plaket, hazırlanan eriğin içerisine atılır. Çizilen hatların dışındaki tüm
bakır plaka çözülene kadar biraz sallayarak beklenmektedir. Sadece gerekli yollar
kalınca plaket çıkartılır. Daha sonra bol suyla yıkayarak kurutulur.
Kullanılan elemanların bacak kalınlıklarına göre, devre elemanlarının geleceği yerler
ince uçlu matkap ile delinmelidir. Bakır hattın ters yüzüne elektronik elemanlar
gelecek şekilde yerleştirilir. Lehimleme işlemleri kısa devre meydana gelmeyecek
şekilde yapılır. Lehimleme işi tamamlandıktan sonra, devreye gerilim vererek devre
çalıştırılır.
26. 21
2. ARDUINO
2.1. Arduino Nedir?
Arduino yüksek derecede elektronik ve mikrodenetleyici bilgisi gerektirmeden, çeşitli
projeler geliştirilebilen açık kaynaklı bir geliştirme platformudur. Yüksek seviyeli C dili
ile geliştirilen AVR mimarisi ile tasarlanmıştır. Açık kaynak kodlu olması nedeniyle
donanım ve yazılımlara kolay bir şekilde ulaşılabilmekte ve programlanmasının bir
parça kod ile sağlanabilmesi yaygın kullanılmasını sağlamıştır.
2.2. Arduino Çeşitleri
Yapılacak olan çalışmanın gereksinimlerini karşılamak amacıyla donanımsal olarak
farklı Arduino geliştirici kartları üretilmiştir. Bu şekilde farklı pin sayıları ve işlemci hızı,
rom bellek kapasitesi, ek dahili portları ile farklı amaca hizmet eden çeşitli Arduino
geliştirici kartları bulunmaktadır. Bunlardan bazıları aşağıda verilmiştir.
Arduino Uno (R3)
Bu Arduino kartı, ATmega328P tabanlı bir mikro denetleyiciye bağlıdır. 6 pin'in PWM
(darbe genişlik modülasyon çıkışları) olarak kullanılabileceği 14 dijital I/O pinleri, 6
analog girişler, reset butonu, power jack, USB bağlantısı, In-Circuit Serial'den
oluşmaktadır.
Arduino Nano
Arduino Uno kartı ile karşılaştırıldığında, boyutu küçüktür. Projeleri oluşturmak için
mini USB ve Arduino IDE gibi yazılım ve cihazlar gereklidir. Bu kart temel olarak 8
analog pin, bir I/O pin seti ile 14 dijital pin, 6 güç pini ve 2 RST (sıfırlama) pini
içermektedir.
27. 22
Arduino Micro
Arduino Micro kartı, 7 PWM pini, 12 analog giriş pin içeren ATmega32U4 tabanlı
mikrodenetleyiciye bağlıdır. Bu kart, bir ICSP başlığı, RST düğmesi, küçük USB
bağlantısı, kristal osilatör-16MHz gibi farklı bileşenler içermektedir.
Arduino Mega
ATMega 2560 tabanlı mikrodenetleyiciye sahiptir. Daha çok kompleks sistemlerde
kullanılmaktadır ve giriş çıkış pin sayıları fazladır. 54 adet dijital giriş ve çıkış pini ile
birlikte 16 adet analog giriş bulunmaktadır. Bunun yanında 4 adet donanımsal seri
porta ve 16 mhz hızında kristal osilatöre sahiptir. Arduino Uno ile benzer özelliklere
sahiptir.
28. 23
Arduino Ethernet
Adından da anlaşılacağı üzere Arduino'nun internet bağlantılı projelerinde
kullanılabilmesi için geliştirilmiş bir kart türüdür. Üzerinde Ethernet portuyla birlikte
Ethernet çipi yer almaktadır. ATMega 328 tabanlı mikrodenetleyici ile gelmektedir.
Bunun yanında SD kart yuvası da mevcuttur.
Arduino Leonardo
Diğer kart türlerinden farklı olarak USB bağlantısı için ek bir çipe gerek duyulmaz.
Arduino Leonardo ATMega 32u4 tabanlı bir mikrodenetleyiciye sahiptir. Kart üzerinde
20 adet dijital giriş ve çıkış pini, 12 adet analog girişi bulunmaktadır. Bilgisayara
klavye ve fare olarak bağlanabilmektedir.
Arduino Esplora
Bu kart dahili olarak birçok sensörü içerisinde barındırmaktadır. Kart ile birlikte
sunulan bu eklentiler sayesinde ekstra elektronik bilgiye ihtiyaç duyulmaz ve son
derece uyumludur. Potansiyometre, sıcaklık sensörü, 3 renkli led, ivmeölçer, ışık ve
ses sensörü ve joystick barındırdığı sensörlerdir. Arduino Esplora kartında kullanılan
mikrodenetleyici ise ATMega 32u4 AVR'dir.
29. 24
Arduino Zero
Arduino Zero, 32-bit ARM Cortex® M0 mimarisine sahip, Atmel'in SAMD212 MCU
işlemcisi ile güçlendirilmiştir. Arduino/Genuino Zero 'nun en önemli özelliklerinden biri
Atmel 'in Embedded Debugger (EDBG - Dahili Hata Ayıklayıcı) özelliğidir. Bu özellikle
Arduino/Genuino Zero, ek bir donanım gerekmeden size tam işlevli bir hata ayıklama
arayüzü (debugging) sağlamaktadır. Ayrıca EDBG ek olarak programlama ve
bootloader işlevi sağlayan sanal COM portu işlevi de sağlamaktadır.
2.3. Arduino Shield Çeşitleri
Shield’ler, Arduino’ya ekstra işlevsellik kazandırmak için üzerine takılan modüler
devre kartlarıdır. Shield’ler basit veya karmaşık olabilmektedir. Arduino’nun birden
fazla amaç için kullanılmasını ve bu amacın kolayca değiştirilebilmesini
sağlamaktadır. Shield’ler, Arduino'nun tam üstüne takılmaktadır. Arduino'nun
kenarlarındaki siyah plastik delik sıralarına başlıklar denilmekte ve bir shield altında
uzun metal erkek pimler vardır. Bir shield üzerindeki bu erkek pimler, bir Arduino'daki
başlık sıraları ile aynı hizaya denk getirilip yerleştirilmektedir. Bazı motorları
çalıştırmak veya Arduino'ya internete erişim sağlama gibi daha pek çok farklı işlevi
gerçekleştirmek için piyasada farklı shield’ler mevcuttur. İki ana shield türü vardır.
Bunlardan biri kullanıcının shield üzerindeki bileşenleri lehimlediği protoshield olarak
da adlandırılan basit devre kartıdır. Diğer shield türleri, belirli amaçlar için kullanılan
yerleşik bileşenlerle birlikte gelenlerdir. Arduino kartlarından kolayca ayrılabildikleri
30. 25
için shield’lerin kullanımı yaygındır. Shield’leri Arduino'ya bağlamak için bağlantı
kablosu gerekmez. Ayrıca, Arduino ile birbiri üzerine monte edilerek birden fazla
shield kullanılabilir ve bunlar devrenin düzenli, kompakt görünmesini sağlar. Sensör,
motor, röle, GPRS&GSM, ethernet, ekran vb. gibi shield’ler yaygın olarak Arduino
devrelerinde kullanılmaktadır.
2.4. Arduino ile Kullanılabilen Sensörler
Çevremizdeki fiziksel ortam (sıcaklık, basınç, uzaklık vb.) değişikliklerini algılayan
cihazlara “sensör” denir. Bir diğer adı da algılayıcı ya da duyargadır. Fiziksel ortamla
elektrik – elektronik cihazları birbirine bağlayarak bir köprü görevi görmektedir.
Sensörler analog ve dijital olmak üzere ikiye ayrılmaktadır. Analog sensörler,
algıladıkları fiziksel büyüklüğe orantılı olarak değişen bir akım veya gerilim çıktısı
vermektedir. Bu sensörleri, dijital çalışan kontrol kartlarına bağlayabilmek için analog-
dijital çeviriciler (ADC) kullanılmaktadır. Analog-dijital çeviriciler mikrokontrolör
içerisinde de yer alabildiği gibi (örn. Arduino analog giriş pinleri), sayısının veya
hassasiyetinin yetmemesi durumunda harici olarak da bağlanabilirler.
Dijital sensörler ise genellikle I2C, SPI, OneWire gibi bir haberleşme protokolü
aracılığıyla bilgisayar (mikroişlemci) ile haberleşmektedir. Bunun yanı sıra, çoğu
analog sensör bir op-amp ile birlikte kullanılarak belirli bir seviye üzerinde lojik 1
(genellikle 5V veya 3.3V) çıkışı verecek şekilde kullanılabilmektedir. Böylelikle analog
çıkışlı sensörler, Raspberry Pi gibi ADC’ye sahip olmayan mikrokontrolörler ile
kullanılabilir.
31. 26
Ayrıca sensörler aktif sensör ve pasif sensör olarak da ikiye ayrılırlar. Aktif sensörler,
kendi sinyallerini ürettikten sonra bu sinyalin ortamdaki değişimini kontrol ederek
algılama işlemini gerçekleştirirler. Ultrasonik ve kızılötesi sensörler bu gruba dahildir.
Pasif sensörler ise ortamdan aldıkları sinyalleri kontrol ederek algılama işlemini
gerçekleştirirler. LDR (ışığa duyarlı direnç), NTC/PTC (ısıya duyarlı dirençler),
fototransistör (ışığa duyarlı transistör) bu gruba örnek olarak gösterilebilirler.
Sensör Çeşitleri
Sensörler, giriş büyüklüklerine göre altıya ayrılırlar. Aşağıda bu sensör çeşitleri ve
algılama özellikleri verilmiştir.
Mekanik sensörler (Uzunluk, alan, miktar, kütlesel akış, kuvvet, tork, basınç, hız,
ivme, pozisyon, ses dalga boyu ve yoğunluğu)
Termal sensörler (Isı akışı ve sıcaklık)
Elektriksel sensörler (Voltaj, akım, direnç, endüktans, kapasitans, dielektrik
katsayısı, polarizasyon, elektrik alanı, frekans)
Manyetik sensörler (Alan yoğunluğu, akı yoğunluğu, manyetik moment, geçirgenlik)
Işıma sensörleri (Yoğunluk, dalga boyu, polarizasyon, faz, yansıtma, gönderme)
Kimyasal sensörler (Yoğunlaşma, içerik, oksidasyon/redaksiyon, reaksiyon hızı, pH
miktarı)
Bu sensör çeşitleri kendi içlerinde de farklı şekillerde bulunurlar. En yaygın
kullanılanlar;
Mesafe sensörleri (Ultrasonik, PIR, Kapasitif, Endüktif, Kızılötesi optik…)
Kuvvet/Ağırlık/Basınç sensörleri
Eğim sensörleri (Flex, Lineer/Esnek potansiyometre…)
Manyetik sensörler (Hall effect, reed röle…)
Sıcaklık/Nem/Su Seviyesi sensörleri (NTC, PTC, Yağmur sensörü…)
Ses sensörleri (Dinamik/Kapasitif/Şeritli/Kristal/Karbon tozlu mikrofon)
Işık/renk sensörleri (LDR, RGB, UV, Fototransistör, Fotodiyot…)
32. 27
Gaz sensörleri
2.5. Arduino Simülasyon Programları
Bir proje ortaya konulmadan önce bilgisayar ortamında simülasyonu yapılarak
uygulamanın gerçekleştirilme durumu test edilebilmektedir. Böylece proje
aşamasında daha sağlıklı ve seri bir şekilde kararlar alınabilmektedir. Arduino ile
devre tasarımı yaparken devreyi geliştirmek adına sürekli değişiklik ve denemeler
yapmak gerekebilir. Devre üzerindeki her fiziksel değişiklik maliyet ve zaman kaybına
neden olabilmektedir. Devre üzerinde yapılacak değişiklik bazen Arduino kartınızın
veya devre elemanlarının bozulmasına da neden olabilir. Bu yüzden Arduino
simülatörleri, devre şeması ve tasarımın temellerini öğrenmek isteyen programcılar
ve tasarımcılar için vazgeçilmez platformlardır. En yaygın kullanılan simülatörler
Tinkercad ve Fritzing’tir.
2.6. Arduino UNO R3
Bu kitapta verilen tüm uygulama örnekleri Arduino UNO R3 ile gerçekleştirilmiştir. Bu
modelin seçilmesinin nedeni en yaygın olarak kullanılan Arduino modeli olmasıdır.
Arduino UNO R3 modelinin bölümleri aşağıda verilmiştir.
33. 28
PWM ( Pulse Width Modulation)
Analog sinyaller 0-5 V arasında değerler almaktadır. Bu lojik değerde 0 ve 1 olarak
yani aç kapa olarak kullanılmaktadır. PWM sistemi ise bu sinyali aralıklara bölerek bir
potansiyometre mantığıyla istenilen voltaj değerine getirilmeyi sağlamaktadır. Şekilde
gösterildiği gibi sinyalin %80 i açık % 20 si kapalıysa bu 0.2x5V= 1 V a denk
gelecektir. Sensörlerde 0 analog değer olan 0-5 V dijital değerde 0-1024 değer
aralığına denktir. Sensörlerde hassasiyet ayarlaması bu dijital değer üzerinde
yapılmaktadır. PWM Ledler ve motorların farklı kademelerde çalıştırılmasnda
kullanılmaktadır. Örneğin;
34. 29
0-255 arasında 1V gerilimle çalışma
256-511 arasında 3V gerilimle çalışma
512-1023 arasında 5V gerilimle çalışma
2.7. Arduino IDE Programının Kurulumu
Arduino yazılımının yüklenmesi için öncelikle internet tarayıcısında
https://www.arduino.cc/en/Main/Software adresine girilir. Hangi işletim sistemi
kullanılıyorsa Windows, Mac OS X, Linux dan uygun olanı seçilir; just download
tıklanarak indirme işlemi gerçekleştirilir. İndirilen arduino.exe’ye sağ tıklayıp yönetici
olarak çalıştır denilir ve aşağıdaki adımlar takip edilir.
36. 31
2.8. Arduino IDE Program Arayüzü
1 Derleme Yazılan programı derler hataları bulur.
2 Yükleme Yazılan kodu derler, Arduino içine atar.
3 Yeni Yeni çalışma sayfası açar.
4 Açma Kayıtlı bir programı açar
5 Kaydetme Yazılan programı kaydeder.
6 Seri Monitör Arduino ile seri iletişim yaparak ekran açar.
7 Sketch Yazılan programın dosya ismi.
8 Boş alan Yazılacak program alanı.
9 Gösterge Yapılan işlemin ilerleme durumunu gösterir.
10 Rapor
Derleme sonucu yapılan hataların veya programın yükleme
sonrası mikro denetleyicide kapladığı alanı gösterir.
11 Gösterge
Bilgisayarımıza usb ile bağlan Arduino’nun bağlandığı portu ve
hangi Arduino modeli ile çalışıyorsak onu gösterir.
37. 32
3. ARDUINO PROGRAMLAMA
Yazılımın temeli ALGORİTMA dan oluşmaktadır. Algoritma, bir sorunu çözmek veya
belirlenmiş bir amaca ulaşmak için tasarlanan yola, takip edilen işlem basamaklarına
denir.
Tüm programlama dillerinin temelinde algoritma vardır. Algoritmalar, programlama
dillerinin vasıtasıyla uygulanabilirler. Programda bir algoritmanın işlemesi için
dışarıdan gelen tüm girdiler “değişken” olarak tanımlanır. Algoritmadaki döngüler ve
işlemler, bu değişkenler üzerinden gerçekleştirilir.
3.1. Program Yapısı
void setup()
Setup() fonksiyonu program yüklenilip enerji verildikten veya reset atıldıktan sonra 1
defa çalışır. Bu fonksiyon içine yazılanlar; pin modları, kütüphaneyi başlatma ve
değişkenlerdir.
void loop()
Setup() fonksiyon tamamlandıktan sonra loop fonksiyonuna geçilir ve burada sonsuz
döngü içinde yazılan program çalıştırılır.
#define
#define ön işlemci komutu olup, bir isim yerine başka bir ismin değişimini sağlar.
Örnek; #define ledpin 13; denildiğinde programda ledpin gördüğü yere 13 rakamını
yerleştirecektir.
#include
#include program dışındaki kütüphanelere erişmek için kullanılır. Programda SPI
kütüphanesini kullanmak ve onun içerisindeki komutlara ulaşmak istenildiğinde
program başında ("..") yada (<..>) şeklinde tanımlanabilmektedir.
#include "SPI.h" //Tanımlama 1
#include <SPI.h> //Tanımlama 2
38. 33
3.2. Kütüphane Ekleme
Kütüphaneler, bir sensöre, ekrana, modüle vb. bileşenlere bağlanmayı kolaylaştıran
bir kod koleksiyonudur. Doğrudan Arduino IDE üzerinden indirilebilecek binlerce
kütüphane bulunmakta ve hepsi Arduino Kütüphane Referansında listelenmiş olarak
bulunabilir.
Kütüphaneler genellikle bir ZIP dosyası veya klasör olarak paylaşılmaktadır. Klasörün
içinde; bir .cpp dosyası, bir .h dosyası ve genellikle bir keywords.txt dosyası, örnekler
klasörü ve kütüphanenin gerektirdiği diğer dosyalar bulunmaktadır.
Kütüphane eklenirken izlenecek adımlar; Arduino Taslak > library ekle > .ZIP Kitaplığı
Ekle.. > ilgili küphane dosyası seçilir.
3.3. Kontrol Yapısı
if
if Türkçe karşılığı eğer demektir. Eğer butona basıldıysa ledi yak vb. durumlarda veya
karşılaştırmalarda kullanılır.
if/else
if else bir koşullu ifadeyi yürütmek için kullanılır. İf eğer demektir else, değil ise
demektir. if ve else birlikte kullanılır. Programlama dilinde else tek başına
kullanılamaz.
switch/case
switch/case bir ifadenin sabit değerlerinden birisiyle eşleşip eşleşmediğini test eden
çok yönlü bir karar verme yapısıdır. Bir switch/case yapısından çıkışı sağlamak ya da
sonlandırmak için break ya da return kullanılır.
while
while (ifade) {
// İfadeler }
while (ifade) döngüsü ifadenin doğru olduğu durumlarda iki süslü parantez içindeki
ifadeleri baştan aşağı çalıştırır, tekrar başa döner çalıştırır. Sonsuz döngü içine girer.
39. 34
do/while
do-while döngüsü öncelikle do parantez içindeki işlemi yapar ve while ile yapılan
işlemi kontrol eder.
break
Break do, for, ve while döngülerinden döngü çalışması bittiğinde döngü dışına
çıkmak için kullanılır. Switch case yapısında da kullanılır.
continue
Continue do, for, while döngülerinde bir satırın, işlem yapılmadan geçilmesi istenildiği
durumlarda kullanılır.
return
Return bir fonksiyon sonlandırılmak istenirse return ile döndürülecek değer belirtilir.
Return’un ikinci bir kullanımı da belli bir yerden sonra kodlar çalışmasın istenirse
return kullanılır.
for
Programlama dillerinde en sık kullanılan döngülerden biridir. For döngüsü
uygulanması istenen işlemin kaç kez tekrar edileceğinin belli olduğu durumlarda
kullanılır. Daha net bir ifade ile for döngüsü sayesinde işlemin kaç kez tekrar
edileceğini, başlangıç/bitiş değerlerini ve değerler arasındaki artış/azalış miktarı
kontrol edilir.
3.4. Sabitler
HIGH | LOW
Okuma veya yazma yaparken dijital pine verilen aktif veya pasif durumudur. HIGH ile
çıkış aktif edilir yani 5V, LOW ile pasif edilerek 0V verilmiş olur.
INPUT | OUTPUT
Pin modun giriş mi, çıkış mı olacağı belirlenir. Sensör okurken giriş, ya da çıkış
tanımlanır. Setup fonksiyonu içinde tanımlanır.
true | false
Arduino da doğru ya da yanlışı göstermek için kullanılan mantıksal tanımlamadır.
false 0 (sıfır) olarak tanımlanır. (LOW)
40. 35
true 1 olarak tanımlanır. (HIGH)
3.5. Dijital Giriş Çıkışlar
pinMode (pin,mod)
INPUT, OUTPUT mod olarak, hangi pinin giriş ya da çıkış olacağının tanımlandığı
komuttur.
digitalWrite (pin,değer)
HIGH, LOW değer olarak, hangi pinin aktif ya da pasif olacağının tanımlandığı
komuttur.
digitalRead (pin)
Dijital pinin aktif mi pasif mi olduğunu yani HIGH mı LOW mu olduğu belirlenir.
3.6. Analog Giriş Çıkışlar
analogRead (pin,mod)
Arduino Uno’da 6 adet, 10 bit analog to digitalconverter vardır. Yani analog bir giriş
dijitale çevrilerek okunur. 10 bit olması hassasiyeti gösterir. 2^10=1024, bu değer
ölçümün 0-1023 parçaya bölünmesini ifade etmektedir. Böylece istenen hassasiyet
değeri elde edilebilmektedir.
analogWrite (pin,değer) - PWM
Değişen led ışığı ya da çeşitli hızlarda küçük motor sürmek için kullanılmaktadır.
Arduino Uno’da bu komut 3, 5, 6, 9, 10, 11. pindir.
3.7. Gecikmeler
delay (milisaniye)
Program akışına milisaniye cinsinden bekletme verilebilmektedir. 1 saniyelik
gecikmeye ihtiyaç olunduğunda delay(1000); komutu kullanılır. 1 saniye = 1000
milisaniye dir. delay komutu Arduino’ yu tamamen durdurur, bu nedenle ileri seviye
programlarda bu durum göz önünde bulundurulmalıdır.
delayMicroseconds (mikrosaniye)
Program akışına mikrosaniye cinsinden bekletme verilmektedir.
41. 36
unsigned long millis()
Arduino programı yüklenilip enerji verildikten sonra süre saymaya başlayan komuttur.
Maksimum 50 gün sayılabilir bu süre sonunda sıfırlanır.
3.8. Seri Haberleşme
Serial.begin (hız)
Bilgisayar ile Arduino arasında seri iletişimi başlatmak için void setup() fonksiyonu
altında seri iletişim açılır. Serial.begin(9600); buradaki 9600 alınan ve gönderilen
verilerin hızıdır.
int Serial.available ()
Veri gelmeye başladığı zaman seri portu okumaya açar.
Serial.print (data)
Data yazılan yere çift tırnak içerisinde yazılanz yazıları ya da değişkenleri seriport
ekranına yazar.
Serial.println (data)
Data yazılan yere çift tırnak içerisinde yazılan yazıları ya da değişkenlerin sonuna
satır sonu ekler. Böylece verilerin alt alta sütun şekilde yazılması sağlanır.
3.9. Söz Dizimi
Noktalı Virgül (;)
C program dilinde her satır programından sonra noktalı virgül konulması gerekir.
Noktalı virgül konulmadığı yerlerde derleme yaparken hata verir.
Süslü Parantez ({})
Fonksiyonlarda, döngülerde ve koşullu ifadeleri bildirirken süslü parantez kullanılır. İç
içe olan fonksiyonlarda en dıştaki süslü parantezin en baştaki fonksiyona ait olduğu
dikkat edilmelidir aksi takdirde derleme yaparken hata verecektir.
Çift Slash (//)
Program satırından, program başında veya herhangi bir yerde açıklama yapmak
istenirse çift slash kullanarak yapılır. Çift slash dan sonra yazılanlar program kodu
olarak alınmaz.
42. 37
Yıldızlı Slash (/**/)
/* Buraya yazılanlar satır, sütun dahil program olarak alınmayacak, açıklama olarak
alınacaktır. */ gibi yıldızlı slash arasına yazılan açıklamalar programa dahil
edilmemektedir.
3.10. Karşılaştırma Operatörleri
==(eşit eşit), != (eşit değil), < (küçük), > (büyük), <= (küçük eşittir), >= (büyük
eşittir)
Genellikle if içerisinde karşılaştırma yaparken kullanılan operatörlerdir.
x == y (x, y ye eşit)
x != y (x, y ye eşit değil )
x < y (x, y den küçük)
x > y (x, y den büyük)
x <= y (x, y den küçük eşit)
x >= y (x, y den büyük eşit)
3.11. Boolean Operatörleri
&& (Mantıksal Ve)
Her iki işlem de doğru ise if şartı sağlanır ve if içerisindeki komut çalıştırılır. Herhangi
bir durum ya da ikisi de yanlış sonuç ise if yapısına girilmez.
|| (Mantıksal Veya)
Her iki işlemden herhangi birisi doğruluk şartını taşıyorsa if yapısının içine girer.
! (Mantıksal Değil)
Değer olarak verilen ifadenin sıfır olma durumudur. İfadenin sıfır olma şartı
sağlanıyor ise if yapısının içine girer. Örneğin;
if (!buton1) {
digitalWrite(led, LOW); // ledi söndür
}
43. 38
3.12. Birleşik Operatörler
++ (arttırma), -- (azaltma)
Arttırma veya azaltma yapılmasını sağlar.
++x veya x++ kullanımı, x=x+1 ile aynıdır yani amaç sayıyı 1 arttırmaktır.
--x veya x--kullanımı, x=x-1 ile aynıdır yani amaç sayıyı 1 azaltmaktır.
+= , -= , *= , /= , %=
x += y; // x = x + y;
x -= y; // x = x - y;
x *= y; // x = x * y;
x /= y; // x = x / y;
x %= y; // x = x % y; //mod alma
Mod alma x in y ile bölümünden kalan sayıdır. x=10%3; olursa x =1 dir.
3.13. Map komutu
Sensor değerini belli aralıkta tutarak istenilen aralığa dönüştürülmesini sağlar.
Sensörden okunan değer 0 ile 1023 arasında iken gerekli olan 0 ile 255 arası değer
için; int sonuc=map(sensor, 0, 1023, 0, 255); kodlanması gerekir.
44. 39
3.14. Dönüşümler
Veri Türü Açıklama
Bellek
Boyutu
boolean Mantıksal veri türü (1 yada 0) 1 byte
char Tek karakteri içeren veri türü 1 byte
byte 0-255 arası pozitif sayı saklar. 8 bit=1byte
int
Tam sayıları saklar. İşaretli:(-32,768 ile 32,767)
İşaretsiz:(0 ile 65535)
2 byte
unsigned int Tam sayıları saklar.(0 ile 4294967295) 4 byte
const
Const ile oluşturulan değişken sabitlenir ve değeri
daha sonradan değiştirilemez.
2 byte
long
4 byte lik işaretli tam sayıları saklar.
(-2147483648 ile +2147483647)
4 byte
unsigned long
4 byte lik işaretli tam sayıları saklar.
(0 ile 4294967295)
4 byte
float 4 byte lik işaretli ondalık sayıları saklar. 4 byte
double
İşaretli ondalık sayıları saklar.
5.0 * 10-324 - 1.7 * 10308
8 byte
string Char veri türünden olan karakterler toplamıdır.
Her eleman 1
byte
array
Her birine indeks numarası ile ulaşılan aynı türdeki
veri topluluğudur.
Değişken
45. 40
4. UYGULAMALAR
A. LED UYGULAMALARI
4.1. Buton ile Led Yakma
Bu uygulamada; butona basıldığı zaman led yanmakta buton bırakıldığı zaman led
sönmektedir. Programda buton 13. pine, led 12. pine kodlanmıştır. İstenirse farklı bir
pine kodlanarak ve Arduino üzerinde yeni kodlanan pinlere bağlantıları yapılarak
çalıştırılabilir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet 10 kΩ direnç
1 adet 220 Ω direnç
1 adet push button
1 adet led
Devre Şeması
47. 42
4.2. Potansiyometre ile Led Parlaklık Ayarı
Bu uygulamada; potansiyometrenin şaft kolu çevrildiğinde ledin parlaklığının değiştiği
görülmektedir. Programda potansiyometrenin sinyal ayağı Analog 0 (A0) pinine, led
ise 9. pine kodlanmıştır. İstenirse farklı bir pine kodlanarak ve Arduino üzerinde yeni
kodlanan pinlere bağlantıları yapılarak çalıştırılabilir. Potansiyometrenin hassasiyeti
‘potvalue/4’ değeri değiştirilerek ayarlanabilir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet led
1 adet 100 kΩ potansiyometre
1 adet 470 Ω direnç
Devre Şeması
48. 43
Arduino Kodları
int potpin = A0;
int potvalue = 0;
int led = 9;
void setup (){
pinMode (led, OUTPUT);
}
void loop (){
potvalue = analogRead (potpin);
analogWrite (led, potvalue/4);
delay (10);
}
49. 44
4.3. Trafik Işığı
Bu uygulamada; günlük hayatta kullanılan trafik ışıklarının çalışmasına örnek
verilmektedir. İlk önce kırmızı led ayarlanan 10 saniyelik gecikme (delay) süresince
yanmaktadır. Ardında kırmızı led ile birlikte sarı led 2 saniye birlikte yanmaktadır. Son
olarak kırmızı ve sarı ledler kapanıp yeşil led ayarlanan 10 saniyelik gecikme (delay)
süresince yanmaktadır. Uygulama, istenirse farklı gecikme süreleri ile değiştirilerek
çalıştırılabilir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
3 adet led (kırmızı, sarı ve yeşil)
3 adet 220 Ω direnç
Devre Şeması
51. 46
4.4. Potansiyometre ile Led Hız Kontrolü
Bu uygulamada; potansiyometrenin şaft kolu çevrildiğinde led çiftlerinin hızlı veya
yavaş bir şekilde yanıp söndüğü görülecektir. Programda potansiyometrenin sinyal
ayağı Analog 0 (A0) pinine, ledler ise 11 ve 12. pinlere kodlanmıştır. İstenirse farklı
bir pine kodlanarak ve Arduino üzerinde yeni kodlanan pinlere bağlantıları yapılarak
çalıştırılabilir. Ledlerin hızları için ‘map’ komutu kullanılarak sınır değerler belirtildikten
sonra (0, 1023) potansiyometrenin hassasiyeti sınır aralığında bir değere (10, 500)
ayarlanmıştır. Bu değerler değiştirilerek hassasiyet değiştirilebilir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
2 adet kırmızı 2 adet sarı led
4 adet 220 Ω direnç
1 adet 100 kΩ potansiyometre
Devre Şeması
53. 48
4.5. Takip Eden Işık
Bu uygulamada; ilk önce ledler sırasıyla yanmaktadır ardından tersi yönüne doğru
sırasıyla yanmaktadır. Programda ledler ‘byte ledPin [ ]={}’ komutu ile kullanılacak
pinlere tek satırda kodlanmıştır. Uygulamada 10 adet led kullanılmıştır. Led sayısı
azaltılmak veya artırmak istenirse ‘for’ döngülerindeki maksimum led sayısı ve yön
için olan ‘if’ koşulunda tersine dönecek led sayısı değiştirilerek ayarlanabilir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
10 adet led
10 adet 150 Ω direnç (veya 220 Ω)
Devre Şeması
55. 50
4.6. Buton ile RGB Led Kontrolü
Bu uygulamada; her bir buton bir rengi (kırmızı, yeşil, mavi) temsil etmektedir. Bir
rengin butonuna basıldığında o renk yanmaktadır. Butona ardarda basıldıkça rengin
şidddeti artmaktadır ve kodda ayarlanan maksimum değere ulaşınca renk başlangıç
şiddetine dönmektedir. Bu sayede her bir renk ayarlanarak farklı renkler elde
edilebilir. Örneğin üç rengin butonuna aynı sayıda basıldığında beyaz renk elde
edilmektedir. RGB led ortak anot (+) veya katot (-) pinine (uzun bacak) sahip olabilir.
Uygulamada ortak anot pinine sahip 4 pinli RGB led kullanılmıştır. Bu yüzden devre
şemasında gösterildiği gibi anot pini artı kutuba bağlanmıştır. Ortak katot pinli RGB
kullanılırsa bu pin eksi kutuba bağlanmalıdır.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
3 adet push button
3 adet 220 Ω direnç
1 adet RGB led (4 Pin)
Devre Şeması
56. 51
Arduino Kodları
int kirmiziled = 11;
int yesilled = 10;
int maviled = 9;
int kirmiziswitch = 7;
int yesilswitch = 6;
int maviswitch = 5;
int kirmizi = 0;
int yesil = 0;
int mavi = 0;
void setup (){
pinMode (kirmiziled, OUTPUT);
pinMode (yesilled, OUTPUT);
pinMode (maviled, OUTPUT);
pinMode (kirmiziswitch, INPUT_PULLUP);
pinMode (yesilswitch, INPUT_PULLUP);
pinMode (maviswitch, INPUT_PULLUP);
}
void loop (){
if (digitalRead (kirmiziswitch) == LOW)
{
kirmizi ++;
if (kirmizi > 255){
kirmizi = 0;
}
}
if (digitalRead (yesilswitch) == LOW)
{
yesil ++;
57. 52
if (yesil > 255){
yesil = 0;
}
}
if (digitalRead (maviswitch) == LOW)
{
mavi ++;
if (mavi > 255){
mavi = 0;
}
}
renkAyarla (kirmizi, yesil, mavi);
delay (10);
}
void renkAyarla (int kirmizi, int yesil, int mavi)
{
kirmizi = 255 - kirmizi;
yesil = 255 - yesil;
mavi = 255 - mavi;
analogWrite (kirmiziled, kirmizi);
analogWrite (yesilled, yesil);
analogWrite (maviled, mavi);
}
58. 53
4.7. Joystick ile Led Yakma
Bu uygulamada; 2 eksenli joystick, x ve y eksenlerinde hareket ettirildiği zaman ‘if’
koşulundaki değerlere göre ledleri yakmaktadır. if koşulu içerindeki eksen konumları
ve değer aralıkları değiştirilerek farklı uygulama yapılabilir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
4 adet 220 direnç
1 adet joystick
4 adet led
Devre Şeması
59. 54
Arduino Kodları
int xPin = A0;
int yPin = A1;
int ledK=2;
int ledM=3;
int ledY=4;
int ledS=5;
int xPozisyon = 0;
int yPozisyon = 0;
void setup () {
pinMode (xPin, INPUT);
pinMode (yPin, INPUT);
pinMode (ledK, OUTPUT);
pinMode (ledM, OUTPUT);
pinMode (ledY, OUTPUT);
pinMode (ledS, OUTPUT);
}
void loop () {
xPozisyon = analogRead (xPin);
yPozisyon = analogRead (yPin);
if (xPozisyon<10) {digitalWrite (ledK, HIGH);
}
else {digitalWrite (ledK, LOW);
}
if (xPozisyon>1000) {digitalWrite (ledM, HIGH);
}
else {digitalWrite (ledM, LOW);
}
if (yPozisyon<10) {digitalWrite (ledY, HIGH);
61. 56
4.8. LDR ile Led Kontrolü
Bu uygulamada; LDR (foto direnç) üzerine gelen ışık şiddetine göre yanan led
sayısındaki artış ve azalış görülmektedir. if koşulu içerindeki değer aralıkları veya
ledlerin açık/kapalı olma durumları değiştirilerek farklı uygulama yapılabilir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet LDR
1 adet 10 kΩ direnç
4 adet led
4 adet 220 Ω direnç
Devre Şeması
64. 59
B. SES UYGULAMALARI
4.9. Buzzer ile Melodi Çalma
Bu uygulamada; bir melodinin notaları, tonu ve frekansları ayarlanarak buzzer
üzerinden çalması görülmektedir. Melodi çalarken kesintisiz çalmalı eğer bir yerde
ses takılıyorsa notalara dikkat edilmelidir. Örneğin büyük/küçük harf veya notaların
ritimleri gibi kısımlar kontrol edilmelidir.
Malzemeler:
1 adet Arduino Uno R3
Jumper kablolar
Buzzer
Devre Şeması
65. 60
Arduino Kodları
int speakerpin = 9;
int length = 15;
char notes [ ] = "ccggaagffeeddc";
int beats [ ] = {1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4};
int tempo = 300;
void playTone (int tone, int duration){
for (long i = 0; i < duration * 1000L; i += tone * 2){
digitalWrite (speakerpin, HIGH);
delayMicroseconds (tone);
digitalWrite (speakerpin, LOW);
delayMicroseconds (tone);
}
}
void playNote (char note, int duration){
char names [ ] = {'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int tones [ ] = {1915, 1700, 1519, 1432, 1275, 1136, 1014, 956};
for (int i = 0; i < 8; i++){
if (names [i] == note){
playTone (tones [i], duration);
}
}
}
void setup (){
pinMode (speakerpin, OUTPUT);
}
void loop (){
for (int i = 0; i < length; i++){
if (notes [i] == ' '){
67. 62
4.10. Ses Duyarlı Led Kontrolü
Bu uygulamada; ses sensör kartı kullanılarak alkış ile ledlerin yanmasını
görülmektedir. İlk alkışta yeşil led ikinci alkışta sarı led, üçüncü alkışta kırmızı led,
dördüncü alkışta bütün ledler yanacaktır. Ayrıca programda seri haberleşme
başlatıldığı için seriport ekranı açıldığı zaman algılan alkışların ekrana yazıldığı
görülecektir. Sensör üzerindeki ayar potansiyometresi ile hassasiyet ayarı yapılabilir.
Birden fazla durum için switch/case komutu kullanılmıştır. Daha fazla durum veya
durumlarda değişiklik yapılmak istenirse bu komut kullanılabilir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar Ω
Ses sensör kartı (3 Pin)
3 adet led
3 adet 220 Ω direnç
Devre Şeması
68. 63
Arduino Kodları
int sensor_pin=2;
int yesil_LED =3;
int sari_LED =4;
int kirmizi_LED =5;
int sayac =0;
void setup () {
pinMode (sensor_pin, INPUT);
pinMode (yesil_LED, OUTPUT);
pinMode (sari_LED, OUTPUT);
pinMode (kirmizi_LED, OUTPUT);
Serial.begin (9600);
}
void loop (){
int sensor_Veri=digitalRead (sensor_pin);
if (sensor_Veri==LOW){
sayac++;
switch (sayac)
{
case 1:
Serial.println ("1.Alkış Algılandı!");
digitalWrite (yesil_LED, HIGH);
delay (500);
break;
case 2:
Serial.println ("2.Alkış Algılandı!");
digitalWrite (sari_LED, HIGH);
delay (500);
break;
70. 65
4.11. Buton ile Ses Tonu Kontrolü
Bu uygulamada; her bir butona tanımlanan tonları buton aktif oldukça çalmaktadır.
Yani her bir butona basıldıkça farklı bir tonda buzzerdan ses çıkmaktadır.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet buzzer
4 adet push button
1 adet 100 Ω direnç
Devre Şeması
71. 66
Arduino Kodlar
void setup (){
pinMode (8, OUTPUT);
pinMode (3, INPUT_PULLUP);
pinMode (4, INPUT_PULLUP);
pinMode (5, INPUT_PULLUP);
pinMode (6, INPUT_PULLUP);
}
void loop (){
if (!digitalRead (3)) tone (1);
if (!digitalRead (4)) tone (2);
if (!digitalRead (5)) tone (3);
if (!digitalRead (6)) tone (4);
}
void tone (int del){
digitalWrite (8, HIGH);
delay (del);
digitalWrite (8, LOW);
delay (del);
}
72. 67
C. SENSÖR UYGULAMALARI
4.12. Yağmur Sensörü ile Led Kontrolü
Bu uygulamada; yağmur sensörü üzerine su damlatıldığı zaman veya bir su kabına
konulduğu zaman okunan değer, tanımlanan eşik değerinden küçük ise led
yanacaktır. Ayrıca programda seri haberleşme başlatıldığı için seriport ekranı açıldığı
zaman yağmur değerlerinin ekrana yazıldığı görülecektir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet led
1 adet yağmur sensörü
Devre Şeması
74. 69
4.13. Ultrasonik Mesafe Sensorü ile Park Sensörü
Bu uygulamada; günlük hayatta kullanılan park sensörünün çalışması görülmektedir.
Ultrasonik mesafe sensörüne el veya bir nesne belirlenen maksimum mesafeden
itibaren tutularak sensöre doğru yaklaştırıldığında buzzerdan bip bip sesi gelecektir.
Sensöre yaklaştıkça bip bip sesi hızlanacaktır.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet buzzer
1 adet 330 Ω direnç
1 adet HC-SR04 ultrasonik mesafe sensörü
Devre Şeması
76. 71
}
int melodi (int dly)
{
tone (buzzerpin, 440);
delay (dly);
noTone (buzzerpin);
delay (dly);
}
77. 72
4.14. Toprak Nem Sensorü ile Uyarı Sistemi
Bu uygulamada; toprak nem sensörü bir su kabına konulduğu zaman veya bir
toprağa gömülüp üzerine su döküldüğü zaman okunan değer, tanımlanan eşik
değerinden büyük ise led yanacak ve buzzerdan ses gelecektir. Ayrıca programda
seri haberleşme başlatıldığı için seri port ekranı açıldığı zaman nem değerlerinin
ekrana yazıldığı da görülebilecektir. Seri port ekranından okunan değerler görülerek
ayarlamalar yapılabilir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet toprak nem sensörü
1 adet led
1 adet buzzer
Devre Şeması
78. 73
Arduino Kodları
const int moistureAO = 0;
int AO = 0;
int tmp = 0;
int buzzpin = 11;
int led = 13;
void setup (){
Serial.begin (9600);
Serial.println ("Toprak Nem Sensoru");
pinMode (moistureAO, INPUT);
pinMode (buzzpin, OUTPUT);
pinMode (led, OUTPUT);
}
void loop (){
tmp = analogRead (moistureAO);
if (tmp != AO){
AO = tmp;
Serial.print ("A = ");
Serial.println (AO);
}
delay (1000);
if (analogRead (0) > 900) {
digitalWrite (buzzpin, HIGH);
digitalWrite (led, HIGH);
delay (1000);
digitalWrite (buzzpin, LOW);
digitalWrite (led, HIGH);
}
else{
80. 75
4.15. Sıcaklık Sensörü ile Yangın Alarmı
Bu uygulamada; başlangıçta durum normal olduğu için yeşil led yanacak ve bir
çakmak yardımıyla sıcaklık sensörünün siyah kısmı ısıtılarak denenmelidir. Sıcaklık
değeri belirlenen eşik değerinden büyük olması durumunda yeşil led sönecek kırmızı
led yanacak ve buzzer alarm verecektir. ÖNEMLİ NOT: Kullanılan sıcaklık
sensöründen kaynaklı olarak bazen ısıtıldığında oluşan değer değişebilmekte veya
ısıtıldıkça değer yükselmek yerine düşebilmektedir. Bu yüzden uygulama direk alarm
vermeye başlayacaktır. Bu gibi durmlarda programın void setup kısmında
Serial.begin (9600) komutu ile seri haberleşme başlatılıp, if döngüsünden hemen
önce Serial.println (dijital_sicaklik) komutu ile de sensörden okunan değer seri port
ekranına yazdırılarak eşik değer ve büyüktür/küçüktür (>/<) durumu değiştirilerek
çözülebilir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet Lm35 veya Lm335 sıcaklık sensörü
2 adet led (kırmızı ve yeşil)
2 adet 330 Ω direnç
1 adet buzzer
Devre Şeması
82. 77
4.16. Gaz Sensörü ile Doğalgaz Kaçak Alarmı
Bu uygulamada; başlangıçta durum normal olduğu için yeşil led yanacak ve bir
çakmak gazı gaz sensörünün önüne tutularak denenmelidir. Ölçülen değer belirlenen
eşik değerinden büyük olması durumunda yeşil led sönecek kırmızı led yanacak ve
buzzer alarm verecektir. Ayrıca programda seri haberleşme başlatıldığı için seri port
ekranı açıldığı zaman gaz değerlerinin ekrana yazıldığı görülecektir. Seri port
ekranından okunan değerler görülerek ayarlamalar yapılabilir. Gaz sensörü
üzerinden ayar potansiyometresi aracılığıyla hassasiyet ayarlaması da
yapılabilmektedir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet MQ-2 gaz sensörü
1 adet buzzer
2 adet led
3 adet 330 Ω direnç
Devre Şeması
85. 80
4.17. Hareket Sensörü ile Uyarı Sistemi
Bu uygulamada; PIR sensörünün önünde hareket algılandığı zaman led yanacak ve
buzzer alarm verecektir. Ayrıca programda seri haberleşme başlatıldığı için seriport
ekranından sensör aktif olduğunda ‘Hareket Tespit Edildi!’ sensör pasif olduğunda
‘Hareket Sonlandı!’ yazıldığı görülecektir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet buzzer
1 adet led
1 adet 220 Ω direnç
1 adet Pır hareket sensörü
Devre Şeması
86. 81
Arduino Kodları
int sensor = 2;
int led = 13;
int buzzer = 10;
int sensordurum = LOW;
int deger = 0;
void setup () {
pinMode (sensor, INPUT);
pinMode (led, OUTPUT);
pinMode (buzzer, OUTPUT);
Serial.begin (9600);
}
void loop () {
deger = digitalRead (sensor);
if (deger == HIGH) {
digitalWrite (led, HIGH);
playTone (300, 160);
delay (150);
if (sensordurum == LOW) {
Serial.println ("Hareket Tespit Edildi!");
sensordurum = HIGH;
}
} else {
digitalWrite (led, LOW);
playTone (0, 0);
delay (300);
if (sensordurum == HIGH) {
Serial.println ("Hareket Sonlandi!");
sensordurum = LOW;
88. 83
4.18. Manyetik Sensörlü Uyarı Sistemi
Bu uygulamada; reed röle önüne bir mıknatıs yaklaştırıp uzaklaştırılarak
denenmektedir. Başlangıçta durum normal olduğu için yeşil led yanacaktır. Reed röle
sensörünün önüne tutulan mıknatıs uzaklaştırıldığı zaman yeşil led sönecek kırmızı
led yanacaktır.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet buzzer
1 adet kırmızı led
1 adet yeşil led
2 adet 330R Ω direnç
1 adet Reed röle modülü
1 adet mıknatıs
Devre Şeması
90. 85
D. MOTOR UYGULAMALARI
4.19. Joystick ile Servo Motor Kontrolü
Bu uygulamada; 2 eksenli joystick modül hareket ettirilerek x ekseninde bir motor y
ekseninde diğer motor kontrol edilmektedir. Joystick modülün eksenlerde artı veya
eksi yönüne göre motorun dönme yönü belirlenmektedir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet joystick modül
2 adet SG90 mini servo motor
Devre Şeması
92. 87
4.20. Mesafe Sensörü ile Servo Motor Kontrolü
Bu uygulamada; ultrasonik mesafe sensörüne el veya bir nesne belirlenen
maksimum mesafeye kadar olan sınır içerisinde tutulduğunda ölçülen değer 15 cm
den küçükse başlangıçta yanan yeşil led sönecek ve kırmızı led yanıp sönecektir.
Servo motor ise ilk önce 180° dönecek, 1 saniye bekleyip 90° dönecek, 1 saniye
bekleyip sıfır konumuna gelecek ve 1 saniye bekleyip 90° dönecektir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet SG90 mini servo motor
1 adet HC-SR04 ultrasonik mesafe sensörü (4 pin)
2 adet led (yeşil ve kırmızı)
2 adet 220 Ω direnç
Devre Şeması
95. 90
4.21. RFID ile Servo Motor Kontrolü
Bu uygulamada; RFID kart okuyucuya kart veya anahtarlık okutulduğunda motoru
hareket ettirmektedir. Kullanılan kartların kendilerine ait UID isimli bir numarası
vardır. Bu numara, her kart için farklıdır. Okuyucuya kart veya anahtarlık
yaklaştırıldığında bu numara okunarak işlem yapılır. Bu nedenle byte ID [4] = {}
komutu ile yetkili kart ID'si tanımlanmaktadır. Ayrıca programda seri haberleşme
başlatıldığı için seri port ekranından yetkili kart veya yetkisiz kart olduğu
yazdırılmakta ve ID numaraları görülmektedir. Bu sistem bir kapı kilidine entegre
edilerek otomatik kapı yapılabilir. İstenirse kapının açık veya kapalı olma
durumlarında led ve buzzer ile uyarı sistemi de eklenebilir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet RC522 RFID NFC modülü kart ve anahtarlık kiti
1 adet SG90 mini servo motor
Devre Şeması
96. 91
Arduino Kodları
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
int RST_PIN = 9;
int SS_PIN = 10;
int servoPin = 8;
Servo motor;
MFRC522 rfid (SS_PIN, RST_PIN);
byte ID [4] = {53, 113, 231, 42};
void setup () {
motor.attach (servoPin);
Serial.begin (9600);
SPI.begin ();
rfid. PCD_Init ();
}
void loop () {
if (! rfid.PICC_IsNewCardPresent ())
return;
if (! rfid.PICC_ReadCardSerial ())
return;
if (rfid.uid.uidByte [0] == ID [0] &&
rfid.uid.uidByte [1] == ID [1] &&
rfid. uid.uidByte [2] == ID [2] &&
rfid. uid.uidByte [3] == ID [3] ) {
Serial.println ("Kapi acildi");
ekranaYazdir ();
motor.write (110);
delay (6000);
98. 93
4.22. Ses ile Servo Motor Kontrolü
Bu uygulamada; mikrofon modülü kullanarak servo motor kontrolü görülmektedir.
Mikrofondan ölçülen ses seviyesi belirlenen eşik değerden büyük olması durumunda
servo moturun belirlenen açılarda ve bekleme süresinde hareketini sağlamaktadır. Bu
sistem örneğin bir beşiğe entegre edilerek akıllı beşik haline getirilebilir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet LM393 entegreli mikrofon modülü
1 adet SG90 mini servo motor
Devre Şeması
99. 94
Arduino Kodları
const int mic = A0;
const int esik =540;
int seviye;
#include <Servo.h>
Servo servoNesnesi;
void setup (){
Serial.begin (9600);
servoNesnesi.attach (9);
}
void loop () {
seviye = analogRead (mic);
if (seviye > esik)
{
servoNesnesi.write (10);
delay (300);
servoNesnesi.write (90);
delay (300);
servoNesnesi.write (10);
delay (300);
servoNesnesi.write (90);
delay (300);
}
}
100. 95
4.23. Renk Sensörü ile Servo Motor Kontrolü
Bu uygulamada; renk sensöründen elde edilen renk değerine göre motorların hareket
ettirilmesi sağlanmaktadır. Burada renk sensörü olarak iyi algılama yapan ve
çevredeki ışık değişiminden minimum etkilenen Tcs34725 renk sensörüne göre devre
oluşturulup kodlanmıştır. Kodlamada 6 farklı renk (kırmızı, turuncu, yeşil, sarı,
pembe, mavi) için 6 koşul oluşturulmuştur. Ölçülen ana renkler kırmızı, yeşil, mavidir
ve değerler seriport ekranında görülebilmektedir. Bu değerlerin karışımına göre diğer
renkler yani koşullar oluşturulmaktadır. Her koşul durumuna göre servo motor
belirlenen açıda döndürülmektedir. Bu sistem renklerine göre ürünleri ayırma
robotuna entegre edilerek kullanılabilir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
2 adet SG90 mini servo motor
1 adet Tcs34725 (daha hassas) renk sensörü veya TC-3200
Devre Şeması
101. 96
Arduino Kodları
#include <Servo.h>
#include "Wire.h"
#include "Adafruit_TCS34725.h"
Servo ust_servo;
Servo alt_servo;
int renk = 0;
int data, durum = false;
Adafruit_TCS34725 tcs =
Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS,
TCS34725_GAIN_1X);
void setup () {
Serial.begin (9600);
if (tcs.begin ()) {
} else {
while (1);
}
ust_servo.attach (9);
alt_servo.attach (8);
ust_servo.write (120);
delay (10);
}
void loop () {
data = Serial.read ();
delay (10);
if (data == '8')
{
durum = true;
}
102. 97
if (data == '9')
{
durum = false;
}
if (durum == true)
{
makine_baslat ();
}
if (durum == false)
{
makine_durdur ();
}
}
void makine_baslat ()
{
delay (500);
for (int i = 120; i > 55; i--) {
ust_servo.write (i);
delay (5);
}
delay (500);
renk = renk_oku ();
delay (50);
switch (renk) {
case 1:
alt_servo.write (45);
Serial.println (1);
break;
case 2:
103. 98
alt_servo.write (60);
Serial.println (2);
break;
case 3:
alt_servo.write (72);
Serial.println (3);
break;
case 4:
alt_servo.write (88);
Serial.println (4);
break;
case 5:
alt_servo.write (102);
Serial.println (5);
break;
case 6:
alt_servo.write (120);
Serial.println (6);
break;
default:
Serial.println (0);
break;
}
delay (300);
for (int i = 55; i > 20; i--) {
ust_servo.write (i);
delay (5);
}
delay (200);
104. 99
for (int i = 20; i < 120; i++) {
ust_servo.write (i);
delay (5);
}
renk=0;
}
void makine_durdur ()
{
ust_servo.write (ust_servo.read ());
alt_servo.write (alt_servo.read ());
}
int renk_oku () {
uint16_t clearcol, red, green, blue;
float average, r, g, b;
tcs.getRawData (&red, &green, &blue, &clearcol);
average = (red+green+blue)/3;
r = red/average;
g = green/average;
b = blue/average;
delay (50);
if ((r < 1.74) && (r > 1.58) && (g > 0.76) && (g < 0.9) && (b < 0.56) && (b
> 0.45))){
renk = 1;
}
if ((r < 1.05) && (r > 0.75) && (g > 1.38) && (g < 1.5) && (b < 1) && (b >
0.54))){
renk = 2;
}
106. 101
4.24. Potansyiometre ile DC Motor Kontrolü
Bu uygulamada; potansiyometre ile bir DC motorun hız kontrolünün yapılması
gösterilmektedir. Potansiyometrenin şaft kolu en düşük ayara getirilirse motor
durmaktadır. Şaft kolu yavaşça çevrilirse elde edilen değere göre motor
hızlanmaktadır. Şaft kolunu en son seviyeye getirildiğinde DC motor ayarlanan
maksimum hızda dönmektedir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet 10 kΩ potansiyometre
1 adet 12V DC motor
1 adet 9V pil
1 adet L298N motor sürücüsü
Devre Şeması
108. 103
4.25. Mesafe Sensörü ile DC Motor Kontrolü
Bu uygulamada; ultrasonik mesafe sensörüne el veya bir nesne belirlenen
maksimum 50 cm lik mesafeye kadar olan sınır içerisinde tutulduğunda röle modülü
aktif olup DC motor çalışmaktadır. Ayrıca seri port ekranı açıldığında sensörden
ölçülen değer görülebilmektedir.
Malzemeler:
1 adet Arduino Uno R3
Jumper kablolar
1 adet HCSR-04 ultrasonik mesafe sensörü (4 Pin)
1 adet 12V DC motor
1 adet 9V pil
1 adet 5V tek kanallı Arduino röle modülü
Devre Şeması
111. 106
4.26. Sıcaklık Sensörü ile DC Motor Kontrolü
Bu uygulamada; sıcaklık sensörü ile elde edilen değere göre DC motorun çalışması
görülmektedir. Sıcaklık sensörünün siyah kısmı bir çakmak yardımıyla ısıtıldığında
sensörden elde edilen değer belirlenen eşik değerinden büyük ise röle modülü
kapanıp DC motoru çalıştırmaktadır. Sıcaklık değeri düştüğü zaman röle modülü aktif
olup motor durmaktadır. Ayrıca seri port ekranı açıldığında sensörden ölçülen değer
görülebilmektedir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet LM35 sıcaklık sensörü
1 adet 12V DC motor
1 adet 9V pil
1 adet 5V tek kanallı Arduino röle modülü
Devre Şeması
112. 107
Arduino Kodları
int role=7;
int lm35=A0;
void setup () {
Serial.begin (9600);
analogReference (INTERNAL);
pinMode (role, OUTPUT);
}
void loop () {
int okunanDeger = analogRead (A0);
float derece = okunanDeger / 9.31;
Serial.println (derece);
delay (1000);
if (derece >30)
digitalWrite (role, LOW);
else
digitalWrite (role, HIGH);
}
113. 108
E. LCD EKRAN UYGULAMALARI
4.27. LCD Ekrana Yazı Yazdırma
Bu uygulamada; LCD ekrana kayan yazılar yazdırılması gösterilmektedir.
LiquidCrystal lcd ( ) komutu ile LCD ekranın pinlerinin Arduino’nun hangi pinlerine
bağlanacağı kodlanmıştır. lcd.begin (16, 2) komutu ile 16 sütunlu 2 satırlı LCD ekran
başlatılmıştır. lcd.print (" ") komutu ile tırnak içerisinde ekrana yazdırılacak yazı
girilmektedir. Programda yazı karakter sayısına göre ne kadar kaydırılacağı
ayarlanabilmektedir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet 16x2 LCD ekran
1 adet 100 kΩ potansiyometre
Devre Şeması
115. 110
4.28. LCD Ekrana Sıcaklık ve Nem Değerini Yazdırma
Bu uygulamada; LCD ekrana DHT11 ısı ve nem sensöründen elde edilen değerlerin
yazdırılması gösterilmektedir. Üst satıra ondalıklı sayı olarak sensörden okunan
sıcaklık değeri °C cinsinden, alt satıra ise sensörden okunan nem değeri % olarak
yazdırılmaktadır.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet DHT11 ısı ve nem sensörü
1 adet 10 kΩ potansiyometre
1 adet 1 kΩ direnç
1 adet 16×2 LCD ekran
Devre Şeması
117. 112
4.29. LCD Ekrana Gerilim Değerini Yazdırma (Voltmetre)
Bu uygulamada; basit bir voltmetre yapımı gösterilmektedir. Devre şemasından
görüldüğü gibi ölçüm uçlarından örneğin bir pilin artı ve eksi kutuplarına temas
ettirerek DC gerilim ölçüm yapılabilir. Ölçülen değer V (volt) olarak LCD ekrana
yazdırılmaktadır. Arduino girişi en fazla 5 volt olabileceğine göre bu devre ile 30 volt
seviyelerine kadar ölçüm yapılabilmektedir. Direnç değeri hesaplanıp değiştirilerek
ölçülen voltaj değeri arttırılabilir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet 16x2 LCD ekran
2 adet 10 kΩ direnç
1 adet 100 Ω direnç
1 adet 10 kΩ potansiyometre
Devre Şeması
120. 115
4.30. LCD Ekrana Ölçülen Mesafeyi Yazdırma
Bu uygulamada; ultrasonik mesafe sensörü önüne el veya bir nesne konulduğu
zaman ölçülen mesafe inç ve cm ölçü birimlerinde LCD ekranın ilk satırına
yazdırılması görülmektedir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet 220 Ω direnç
1 adet HCSR-04 ultrasonik sensör (4 Pin)
1 adet 10 kΩ potansiyometre
Devre Şeması
123. 118
F. DİĞER UYGULAMALAR
4.31. Nabız Ölçer
Bu uygulamada; nabız sensörü parmak uçlarıyla tutulduğunda ölçülen nabız değeri
LCD ekrana yazdırılmaktadır. Devre şemasında nabız ölçer sensörün S (Sinyal) ucu
Arduino’ya, VCC ucu artı kutuba, GND ucu eksi (-) kutuba gitmektedir. Bu uçlar aynı
markada bile farklı pin yerleşimine sahip olabilmektedir. Bu nedenle devreyi kurarken
dikkat edilmelidir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet KY-039 parmak nabız ölçer sensörü veya kalp hızı nabız sensörü
1 adet 16x2 LCD ekran
1 adet 10 kΩ potansiyometre
Devre Şeması
126. 121
4.32. Engelliler için Sesli ve Titreşimli Uyarı Sistemi
Bu uygulamada; hem işitsel hem de görme engelliler için sesli ve titreşimli bir uyarı
sistemi gösterilmektedir. Ultrasonik mesafe sensörü önüne bir engel geldiği zaman
belirlenen sınır değerler içerisinde ise buzzer, led ve titreşim moturu aktif olup uyarı
vermektedir. Bu sistem bir eldivene veya bir bastona entegre edilerek faydalı hale
getirilebilir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet HC-SR04 ultrasonik mesafe sensörü (4 Pin)
1 adet titreşim motoru
1 adet buzzer
1 adet led
Devre Şeması
129. 124
4.33. Akıllı Madenci Bareti
Bu uygulamada; sıcaklık sensörü ile doğalgaz veya metan gazı sensöründen ölçülen
değerlerin, belirlenen eşik değerler koşuluna göre ledler ve buzzer aktif olup alarm
vermektedir. Bu sistem bir madenci baretine entegre edilerek akıllı baret haline
getirilebilir. Ayrıca programda seri haberleşme başlatıldığı için seri port ekranı açıldığı
zaman ölçülen değerler görülebilmekte ve istendiğinde yeniden eşik değeri
belirlenebilir.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet buzzer
2 adet led
1 adet LM35 sıcaklık sensörü
1 adet MQ-4 doğalgaz ve metan gazı ölçme sensörü
Devre Şeması
132. 127
4.34. FM Radyo
Bu uygulamada; TEA5767 stereo FM radyo modülü kullanılarak bir radyo yapımı
gösterilmiştir. Frekans seçimi A0’a bağlı olan potansiyometreyi çevirerek
yapılmaktadır. Diğer potansiyometre, LCD ekranın kontrastını ayarlamak için
kullanılmaktadır. Devre kurulup kodlar Arduino’ya yüklendikten sonra anten ve
kulaklık/hoparlör bağlantısı yapılarak test edilmektedir. Bulunan frekanslar LCD
ekrana yazdırılmaktadır.
Malzemeler:
1 adet Arduino Uno R3
1 adet breadboard
Jumper kablolar
1 adet TEA5767 stereo FM radyo modülü + anten
1 adet 16x2 LCD ekran
2 adet 10 kΩ potansiyometre
Devre Şeması