SlideShare a Scribd company logo
1 of 172
Download to read offline
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
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
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
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
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.
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.
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.
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.
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.
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.
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.
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İ
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.
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.
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İ
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.
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İ
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İ
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İ
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
16
Timsah Kablo
Yan Keski
Pense
Cımbız Seti
Mini Tornavida Seti
Silikon Tabancası
Elektrik Bandı
Mini Matkap
17
Matkap Standı
Havya
Lehim
Lehim Pastası
Lehim Pompası
Lehim Temizleme Teli
Lehim Tutma Aparatı
Tek Damarlı Zil Teli
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.
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.
20
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.
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.
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.
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
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.
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…)
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.
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;
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.
30
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.
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
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.
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)
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.
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.
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
}
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.
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
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ı
41
Arduino Kodları
int buton = 13;
int led = 12;
void setup (){
pinMode (buton, INPUT);
pinMode (led, OUTPUT);
}
void loop (){
if (digitalRead (buton) == HIGH){
digitalWrite (led, HIGH);
}
else {
digitalWrite (led, LOW);
}
}
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ı
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);
}
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ı
45
Arduino Kodları
int ledDelay = 10000;
int kirmiziled = 10;
int sariled = 9;
int yesilled = 8;
void setup (){
pinMode (kirmiziled, OUTPUT);
pinMode (sariled, OUTPUT);
pinMode (yesilled, OUTPUT);
}
void loop (){
digitalWrite (kirmiziled, HIGH);
delay (ledDelay);
digitalWrite (sariled, HIGH);
delay (2000);
digitalWrite (yesilled, HIGH);
digitalWrite (kirmiziled, LOW);
digitalWrite (sariled, LOW);
delay (ledDelay);
digitalWrite (sariled, HIGH);
digitalWrite (yesilled, LOW);
delay (2000);
digitalWrite (sariled, LOW);
}
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ı
47
Arduino Kodları
const int analogpin = A0;
int sensorvalue = 0;
int timer = 0;
void setup (){
pinMode (12, OUTPUT);
pinMode (11, OUTPUT);
}
void loop (){
sensorvalue = analogRead (analogpin);
timer = map (sensorvalue, 0, 1023, 10, 500);
digitalWrite (12, HIGH);
delay (timer);
digitalWrite (12, LOW);
delay (timer);
digitalWrite (12, HIGH);
delay (timer);
digitalWrite (12, LOW);
digitalWrite (11, HIGH);
delay (timer);
digitalWrite (11, LOW);
delay (timer);
digitalWrite (11, HIGH);
delay (timer);
digitalWrite (11, LOW);
}
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ı
49
Arduino Kodları
byte ledPin [ ] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
int ledDelay (250);
int yon = 1;
int currentLED = 0;
unsigned long degismezamani;
void setup (){
for (int x=0; x<10; x++)
{
pinMode (ledPin [x], OUTPUT);
}
degismezamani = millis ();
}
void loop (){
if ((millis ()-degismezamani) > ledDelay)
{
changeLED ();
degismezamani = millis ();
}
}
void changeLED (){
for (int x=0; x<10; x++)
{ k3digitalWrite (ledPin [x], LOW);
}
digitalWrite (ledPin [currentLED], HIGH);
currentLED += yon;
if (currentLED == 9) {yon = -1;}
if (currentLED == 0) {yon = 1;}
}
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ı
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 ++;
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);
}
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ı
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);
55
}
else {digitalWrite (ledY, LOW);
}
if (yPozisyon>1000) {digitalWrite (ledS, HIGH);
}
else {digitalWrite (ledS, LOW);
}
}
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ı
57
Arduino Kodları
int ledler [ ] = {4, 5, 6, 7};
int led_sayisi = 4;
int ldr_pin = A0;
int deger = 0;
void setup (){
for (int i = 0; i < led_sayisi; i++)
{
pinMode (ledler [i], OUTPUT);
}
}
void loop (){
deger = analogRead (ldr_pin);
if (deger > 0 && deger <= 255)
{
digitalWrite (ledler [0], HIGH);
digitalWrite (ledler [1], LOW);
digitalWrite (ledler [2], LOW);
digitalWrite (ledler [3], LOW);
}
if (deger > 256 && deger <= 511)
{
digitalWrite (ledler [0], HIGH);
digitalWrite (ledler [1], HIGH);
digitalWrite (ledler [2], LOW);
digitalWrite (ledler [3], LOW);
}
if (deger > 512 && deger <= 767)
{
58
digitalWrite (ledler [0], HIGH);
digitalWrite (ledler [1], HIGH);
digitalWrite (ledler [2], HIGH);
digitalWrite (ledler [3], LOW);
}
if (deger > 768 && deger <= 1023)
{
digitalWrite (ledler [0], HIGH);
digitalWrite (ledler [1], HIGH);
digitalWrite (ledler [2], HIGH);
digitalWrite (ledler [3], HIGH);
}
delay (1000);
}
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ı
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] == ' '){
61
delay (beats [i] * tempo);
}
else {
playNote (notes [i], beats [i] * tempo);
}
delay (tempo/2);
}
}
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ı
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;
64
case 3:
Serial.println ("3.Alkış Algılandı!");
digitalWrite (kirmizi_LED, HIGH);
delay (500);
break;
case 4:
Serial.println ("4.Alkış Algılandı!");
digitalWrite (yesil_LED, HIGH);
digitalWrite (sari_LED, HIGH);
digitalWrite (kirmizi_LED, HIGH);
delay (500);
sayac=0;
break;
}
}
else
{
digitalWrite (yesil_LED, LOW);
digitalWrite (sari_LED, LOW);
digitalWrite (kirmizi_LED, LOW);
}
}
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ı
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);
}
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ı
68
Arduino Kodları
int yagmurPin = A0;
int ledPin = 8;
int yagmurdegeri;
int yagmurEsikdegeri = 800;
void setup (){
pinMode (yagmurPin, INPUT);
pinMode (ledPin, OUTPUT);
Serial.begin (9600);
}
void loop (){
yagmurdegeri = analogRead (yagmurPin);
Serial.print ("Yağmur Değeri: ");
Serial.println (yagmurdegeri);
if (yagmurdegeri < yagmurEsikdegeri)
{
digitalWrite (ledPin, HIGH);
}
else
{
digitalWrite (ledPin, LOW);
}
delay (100);
}
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ı
70
Arduino Kodları
#define echopin 6
#define trigpin 7
#define buzzerpin 8
int maximumrange = 50;
int minimumrange = 0;
void setup (){
pinMode (trigpin, OUTPUT);
pinMode (echopin, INPUT);
pinMode (buzzerpin, OUTPUT);
}
void loop (){
int olcum = mesafe (maximumrange, minimumrange);
melodi (olcum*10);
}
int mesafe (int maxrange, int minrange)
{
long duration, distance;
digitalWrite (trigpin, LOW);
delayMicroseconds (2);
digitalWrite (trigpin, HIGH);
delayMicroseconds (2);
digitalWrite (trigpin, LOW);
duration = pulseIn (echopin, HIGH);
distance = duration / 58.2;
delay (50);
if (distance >=maxrange || distance <= minrange)
return 0;
return distance;
71
}
int melodi (int dly)
{
tone (buzzerpin, 440);
delay (dly);
noTone (buzzerpin);
delay (dly);
}
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ı
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{
74
digitalWrite (buzzpin, LOW);
digitalWrite (led, LOW);
}
}
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ı
76
Arduino Kodları
int lm35_pin=A1;
int yesil_led=11;
int kirmizi_led=5;
int buzzer_alarm=2;
void setup () {
pinMode (lm35_pin, INPUT);
pinMode (yesil_led, OUTPUT);
pinMode (kirmizi_led, OUTPUT);
pinMode (buzzer_alarm, OUTPUT);
digitalWrite (yesil_led, HIGH);
}
void loop () {
float lm35_okunan_deger=analogRead (lm35_pin);
float analog_sicaklik=(lm35_okunan_deger/1023)*5000;
float dijital_sicaklik=analog_sicaklik/10.0;
if (dijital_sicaklik>50)
{
tone (buzzer_alarm, 300);
digitalWrite (kirmizi_led, HIGH);
digitalWrite (yesil_led, LOW);
}
else
{
noTone (buzzer_alarm);
digitalWrite (yesil_led, HIGH);
digitalWrite (kirmizi_led, LOW);
}
}
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ı
78
Arduino Kodları
int redLed = 12;
int greenLed = 11;
int buzzer = 10;
int smokeA0 = A5;
int sensorThres = 400;
void setup () {
pinMode (redLed, OUTPUT);
pinMode (greenLed, OUTPUT);
pinMode (buzzer, OUTPUT);
pinMode (smokeA0, INPUT);
Serial.begin (9600);
}
void loop () {
int analogSensor = analogRead (smokeA0);
Serial.print ("Pin A0: ");
Serial.println (analogSensor);
if (analogSensor > sensorThres)
{
digitalWrite (redLed, HIGH);
digitalWrite (greenLed, LOW);
tone (buzzer, 1000, 200);
}
else
{
digitalWrite (redLed, LOW);
digitalWrite (greenLed, HIGH);
noTone (buzzer);
}
79
delay (100);
}
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ı
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;
82
}
}
}
void playTone (long duration, int freq) {
duration *= 1000;
int period = (1.0 / freq) * 1000000;
long elapsed_time = 0;
while (elapsed_time < duration) {
digitalWrite (buzzer, HIGH);
delayMicroseconds (period / 2);
digitalWrite (buzzer, LOW);
delayMicroseconds (period / 2);
elapsed_time += (period);
}
}
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ı
84
Arduino Kodları
int reedRolePin = 2;
int led1 = 8;
int led2 = 10;
int buzzer = 12;
int deger;
void setup () {
pinMode (led1, OUTPUT);
pinMode (led2, OUTPUT);
pinMode (buzzer, OUTPUT);
pinMode (reedRolePin, INPUT);
}
void loop () {
deger = digitalRead (reedRolePin);
if (deger==0){
digitalWrite (buzzer,0);
digitalWrite (led1,0);
digitalWrite (led2,1);
}
else{
digitalWrite (buzzer,1);
digitalWrite (led1,1);
digitalWrite (led2,0);
}
}
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ı
86
Arduino Kodları
#include <Servo.h>
int xPin = A0;
int yPin = A1;
Servo motor1;
Servo motor2;
int xPozisyon = 0;
int yPozisyon = 0;
void setup () {
pinMode (xPin, INPUT);
pinMode (yPin, INPUT);
motor1.attach (5);
motor2.attach (6);
}
void loop () {
xPozisyon = map (analogRead (xPin) , 0, 1023, 0, 180);
yPozisyon = map (analogRead (yPin) , 0, 1023, 0, 180);
motor1.write (xPozisyon);
motor2.write (yPozisyon);
}
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ı
88
Arduino Kodları
#include <NewPing.h>
#include <Servo.h>
#define trigPin 12
#define echoPin 13
#define MAX_DISTANCE 500
NewPing sonar (trigPin, echoPin, MAX_DISTANCE);
int greenLed = 3, redLed = 2;
int pos =20;
Servo myservo;
void setup () {
Serial.begin (115200);
pinMode (trigPin, OUTPUT);
pinMode (echoPin, INPUT);
pinMode (greenLed, OUTPUT);
pinMode (redLed, OUTPUT);
myservo.attach (9);
}
void loop () {
int duration, distance, pos = 0, i;
digitalWrite (trigPin, LOW);
delayMicroseconds (2);
digitalWrite (trigPin, HIGH);
delayMicroseconds (10);
digitalWrite (trigPin, LOW);
duration = pulseIn (echoPin, HIGH);
distance = (duration / 2) / 29.1;
Serial.print (distance);
Serial.print (" cm");
89
if (distance <= 15)
{
digitalWrite (greenLed, LOW);
digitalWrite (redLed, HIGH);
myservo.write (180);
delay (1000);
digitalWrite (redLed, LOW);
myservo.write (90);
delay (1000);
digitalWrite (redLed, HIGH);
myservo.write (0);
delay (1000);
digitalWrite (redLed, LOW);
myservo.write (90);
}
else {
digitalWrite (redLed, LOW);
digitalWrite (greenLed, HIGH);
myservo.write (90);
}
delay (1000);
}
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ı
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);
92
motor.write (0);
delay (1000);
}
else{
Serial.println ("Yetkisiz Kart");
ekranaYazdir;
}
rfid.PICC_HaltA ();
}
void ekranaYazdir (){
Serial.print ("ID Numarasi: ");
for (int sayac = 0; sayac < 4; sayac++) {
Serial.print (rfid.uid.uidByte [sayac]);
Serial.print (" ");
}
Serial.println ("");
}
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ı
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);
}
}
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ı
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;
}
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:
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);
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;
}
100
if ((r < 1.32) && (r > 1.19) && (g > 1.24) && (g < 1.34) && (b < 0.52) &&
(b > 0.42))){
renk = 3;
}
if ((r < 1.5) && (r > 1.35) && (g > 0.74) && (g < 0.85) && (b < 0.9) && (b >
0.7)){
renk = 4;
}
if ((r < 2.2) && (r > 1.8) && (g > 0.5) && (g < 0.65) && (b < 0.55) && (b >
0.4)){
renk = 5;
}
if ((r < 1) && (r > 0.48) && (g > 1.24) && (g < 1.34) && (b < 1.24) && (b >
1.14)){
renk = 6;
}
return renk;
}
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ı
102
Arduino Kodları
int in1 = 8;
int in2 = 9;
int ConA = 10;
int speed1;
void setup () {
pinMode (8, OUTPUT);
pinMode (9, OUTPUT);
pinMode (10, OUTPUT);
}
void TurnMotorA (){
digitalWrite (in1, LOW);
digitalWrite (in2, HIGH);
speed1 = analogRead (A0);
speed1 = speed1*0.2492668622;
analogWrite (ConA,speed1);
}
void loop () {
TurnMotorA ();
}
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ı
104
Arduino Kodları
#define echopin 6
#define trigpin 8
#define rolepin 7
int maximumrange = 50;
int minimumrange = 0;
void setup (){
pinMode (trigpin, OUTPUT);
pinMode (echopin, INPUT);
pinMode (rolepin, OUTPUT);
Serial.begin (9600);
}
void loop (){
int olcum = mesafe (maximumrange, minimumrange);
}
int mesafe (int maxrange, int minrange)
{
long duration, distance;
digitalWrite (trigpin, LOW);
delayMicroseconds (2);
digitalWrite (trigpin, HIGH);
delayMicroseconds (2);
digitalWrite (trigpin, LOW);
duration = pulseIn (echopin, HIGH);
distance = duration / 58.2;
delay (50);
Serial.println (distance);
if (distance >=maxrange || distance <= minrange)
digitalWrite (rolepin, HIGH);
105
else
digitalWrite (rolepin, LOW);
}
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ı
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);
}
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ı
109
Arduino Kodları
#include<LiquidCrystal.h>
LiquidCrystal lcd (7, 8, 9, 10, 11, 12);
void setup () {
lcd.begin (16, 2);
lcd.print ("Biyosistem Mühendisliği");
delay (1000);
}
void loop () {
for (int positionCounter = 0; positionCounter < 13;
positionCounter++){
lcd.scrollDisplayLeft ();
delay (150);
}
for (int positionCounter = 0; positionCounter < 29;
positionCounter++){
lcd.scrollDisplayRight ();
delay (150);
}
for (int positionCounter = 0; positionCounter < 16;
positionCounter++){
lcd.scrollDisplayLeft ();
delay (150);
}
delay (1000);
}
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ı
111
Arduino Kodları
#include<dht11.h>
#define DHT11PIN 9
#include <LiquidCrystal.h>
dht11 DHT11;
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
void setup () {
}
void loop () {
int chk = DHT11.read (DHT11PIN);
lcd.begin (16, 2);
lcd.print ("ISI = ");
lcd.print ((float) DHT11.temperature, 0);
lcd.print (" 337C");
lcd.setCursor (0, 1);
lcd.print ("NEM = ");
lcd.print ("% ");
lcd.print ((float) DHT11.humidity, 0);
delay (1000);
}
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ı
113
Arduino Kodları
#include <LiquidCrystal.h>
LiquidCrystal lcd (9, 8, 3, 4, 5, 6);
float vA = 0.0;
float vB = 0.0;
float vGiris = 0.0;
float vOrtalama = 0.0;
float RA = 99.2;
float RB = 9.7;
float RC = 9.8;
void setup () {
Serial.begin (9600);
for (int i=16; i>3 ; i--){
int k= i + 6;
lcd.begin (16, 2);
lcd.setCursor (i, 0);
lcd.print ("EGITIM");
lcd.setCursor (k, 1);
lcd.print ("SART!");
delay (500);
}
lcd.clear ();
delay (500);
lcd.setCursor (4, 0);
lcd.print ("EGITIM");
lcd.setCursor (10, 1);
lcd.print ("SART!");
delay (2000);
lcd.clear ();
114
}
void loop () {
float vToplam = 0.0;
for (int i=0; i<30; i++)
{
float okunanA = analogRead (A0);
float okunanB = analogRead (A1);
vA = okunanA * 5 / 1024;
vB = okunanB * 5 / 1024;
vA = vA *((RA + RB + RC)/20);
vB = vB *((RA + RB + RC)/ 10);
vOrtalama = (vA + vB)/2;
vToplam = vToplam + vOrtalama;
delay (70);
}
float v = vToplam / 30;
Serial.print ("Voltaj (V):");
Serial.print (v);
Serial.println ();
lcd.clear ();
lcd.print ("DC Voltmetre");
lcd.setCursor (0, 1);
lcd.print ("Voltaj(v):");
lcd.print (v);
delay (1000);
}
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ı
116
Arduino Kodları
#include <LiquidCrystal.h>
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
int echoPin = 6;
int pingPin = 7;
int val = 0;
void setup (){
Serial.begin (9600);
pinMode (pingPin, OUTPUT);
pinMode (echoPin, INPUT);
}
void loop (){
long duration, inches, cm;
digitalWrite (pingPin, LOW);
delayMicroseconds (2);
digitalWrite (pingPin, HIGH);
delayMicroseconds (10);
duration = pulseIn (echoPin, HIGH);
inches = MicrosecondsToInches (duration);
cm = MicrosecondsToCentimeters (duration);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print (inches);
lcd.print ("inch, ");
lcd.print (cm);
lcd.print ("cm");
lcd.println ();
}
long MicrosecondsToInches (long microseconds){
117
return microseconds /74/2;
}
long MicrosecondsToCentimeters (long microseconds){
return microseconds /29/2;
}
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ı
119
Arduino Kodları
#include <Wire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
const int sensor = A0;
int periyot=20;
double alfa=0.75;
double yenileme=0.0;
void setup (void)
{
pinMode (sensor, INPUT);
lcd.begin (16, 2);
lcd.clear ();
lcd.setCursor (0, 0);
}
void loop (void)
{
static double oncekideger=0;
static double oncekiyenileme=0;
int ritim=analogRead (sensor);
double deger=alfa*oncekideger+(0-alfa)*ritim;
yenileme=deger-oncekideger;
lcd.setCursor (0, 0);
lcd.print ("kalp monitoru");
lcd.setCursor (0,1);
lcd.print (" ");
lcd.setCursor (0,1);
lcd.print (ritim/10);
oncekideger=deger;
120
oncekiyenileme=yenileme;
delay (periyot*10);
}
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ı
122
Arduino Kodları
#define trigPin 13
#define echoPin 12
#define motor 7
#define buzzer 6
void setup (){
pinMode (trigPin, OUTPUT);
pinMode (echoPin, INPUT);
pinMode (motor, OUTPUT);
pinMode (buzzer, OUTPUT);
}
void loop (){
long duration, distance;
digitalWrite (trigPin, LOW);
delayMicroseconds (2);
digitalWrite (trigPin, HIGH);
delayMicroseconds (10);
digitalWrite (trigPin, LOW);
duration = pulseIn (echoPin, HIGH);
distance = (duration/2) / 29.1;
if (distance < 30) {
digitalWrite (motor, HIGH);
digitalWrite (buzzer, HIGH);
}else{
digitalWrite (motor, LOW);
digitalWrite (buzzer, LOW);
}
delay (500);
}
123
long microsecondsToCentimeters (long microseconds)
{
return microseconds / 29 / 2;
}
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ı
125
Arduino Kodları
float derece;
int redLed1 = 13;
int redLed2 = 12;
int buzzer = 10;
int gazA1= A1;
int sensordeger =750;
void setup () {
pinMode (redLed1, OUTPUT);
pinMode (redLed2, OUTPUT);
pinMode (buzzer, OUTPUT);
pinMode (gazA1, INPUT);
Serial.begin (9600);
}
void loop (){
derece= 5.0*analogRead (0)*100.0/1024;
int analogSensor = analogRead (gazA1);
Serial.println ("Gaz Sensörü:");
Serial.println (analogSensor);
Serial.println ("derece");
Serial.println (derece);
if (analogSensor>sensordeger || derece>75)
{
digitalWrite (redLed1, HIGH);
digitalWrite (redLed2, HIGH);
tone (buzzer, 1000, 200);
}
else
{
126
digitalWrite (redLed1, LOW);
digitalWrite (redLed2, LOW);
noTone (buzzer);
}
delay (100);
}
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ı
128
Arduino Kodları
#include <Wire.h>
#include <LiquidCrystal.h>
unsigned char frekansH = 0;
unsigned char frekansL = 0;
unsigned int frekansB;
double frekans = 0;
static char frekans_ekran [15];
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
void setup (){
Wire.begin ();
lcd.begin (16, 2);
frekans = 93.0;
frekansAyarla ();
lcd.setCursor (3, 0);
lcd.print ("FM Radyo");
}
void loop (){
int reading = analogRead(0);
frekans = ((double)reading * (108.0 - 87.5)) / 1024.0 + 87.5;
frekans = ((int)(frekans * 10)) / 10.0;
frekansAyarla ();
dtostrf (frekans, 6, 2, frekans_ekran);
lcd.setCursor (4, 1);
lcd.print (frekans_ekran);
}
void frekansAyarla (){
frekansB = 4 * (frekans * 1000000 + 225000) / 32768;
frekansH = frekansB >> 8;
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES
ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES

More Related Content

What's hot

Implementation of Cascaded H-bridge MULTI-LEVEL INVERTER
Implementation of Cascaded H-bridge MULTI-LEVEL INVERTERImplementation of Cascaded H-bridge MULTI-LEVEL INVERTER
Implementation of Cascaded H-bridge MULTI-LEVEL INVERTER
Editor IJMTER
 
EE8402 Transmission and Distribution
EE8402 Transmission and DistributionEE8402 Transmission and Distribution
EE8402 Transmission and Distribution
rmkceteee
 

What's hot (20)

Transformer vector group_test_conditions
Transformer vector group_test_conditionsTransformer vector group_test_conditions
Transformer vector group_test_conditions
 
EC8353 ELECTRONIC DEVICES AND CIRCUITS Unit 1
EC8353 ELECTRONIC DEVICES AND CIRCUITS Unit 1EC8353 ELECTRONIC DEVICES AND CIRCUITS Unit 1
EC8353 ELECTRONIC DEVICES AND CIRCUITS Unit 1
 
DC potentiometers
DC potentiometersDC potentiometers
DC potentiometers
 
Implementation of Cascaded H-bridge MULTI-LEVEL INVERTER
Implementation of Cascaded H-bridge MULTI-LEVEL INVERTERImplementation of Cascaded H-bridge MULTI-LEVEL INVERTER
Implementation of Cascaded H-bridge MULTI-LEVEL INVERTER
 
EE8402 Transmission and Distribution
EE8402 Transmission and DistributionEE8402 Transmission and Distribution
EE8402 Transmission and Distribution
 
Electrical Substation and Switchyard Design
Electrical Substation and Switchyard DesignElectrical Substation and Switchyard Design
Electrical Substation and Switchyard Design
 
Iec 62271 200 (edition 2011)
Iec 62271 200 (edition 2011)Iec 62271 200 (edition 2011)
Iec 62271 200 (edition 2011)
 
Electrical and electronics engineering
Electrical and electronics engineeringElectrical and electronics engineering
Electrical and electronics engineering
 
Selection of transmission voltage
Selection of transmission voltageSelection of transmission voltage
Selection of transmission voltage
 
Power quality disturbances
Power quality disturbancesPower quality disturbances
Power quality disturbances
 
Different simulation softwares in power system
Different simulation softwares in power systemDifferent simulation softwares in power system
Different simulation softwares in power system
 
BASIC TRANSFORMER CALCULATIONS
BASIC TRANSFORMER CALCULATIONSBASIC TRANSFORMER CALCULATIONS
BASIC TRANSFORMER CALCULATIONS
 
SEPIC CONVERTER
SEPIC CONVERTERSEPIC CONVERTER
SEPIC CONVERTER
 
Unit commitment in power system
Unit commitment in power systemUnit commitment in power system
Unit commitment in power system
 
Automatic load frequency control
Automatic load frequency controlAutomatic load frequency control
Automatic load frequency control
 
GENERATING OF HIGH ALTERNATING VOLTAGE
GENERATING OF HIGH ALTERNATING VOLTAGEGENERATING OF HIGH ALTERNATING VOLTAGE
GENERATING OF HIGH ALTERNATING VOLTAGE
 
Transformer relays trips alarms.pptx
Transformer relays trips alarms.pptxTransformer relays trips alarms.pptx
Transformer relays trips alarms.pptx
 
Presentation on bjt configuration
Presentation on bjt configuration Presentation on bjt configuration
Presentation on bjt configuration
 
half wave rectifer.pptx
half wave rectifer.pptxhalf wave rectifer.pptx
half wave rectifer.pptx
 
Lab manual
Lab manualLab manual
Lab manual
 

Similar to ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES

Grup 2 b170100014_alperen dobrucalı tasarım çalışması
Grup 2 b170100014_alperen dobrucalı  tasarım çalışmasıGrup 2 b170100014_alperen dobrucalı  tasarım çalışması
Grup 2 b170100014_alperen dobrucalı tasarım çalışması
Bayram7
 
Aritmetik devreler
Aritmetik devrelerAritmetik devreler
Aritmetik devreler
Erol Dizdar
 
Kursat taskin yolsuzluk onlemede bdd teknikleri
Kursat taskin   yolsuzluk onlemede bdd teknikleriKursat taskin   yolsuzluk onlemede bdd teknikleri
Kursat taskin yolsuzluk onlemede bdd teknikleri
Kürşat TAŞKIN
 
Tümleşik devreler
Tümleşik devrelerTümleşik devreler
Tümleşik devreler
Erol Dizdar
 
Doğru akım ve alternatif akım devreleri
Doğru akım ve alternatif akım devreleriDoğru akım ve alternatif akım devreleri
Doğru akım ve alternatif akım devreleri
Erol Dizdar
 
Işlemsel yükselteç
Işlemsel yükselteçIşlemsel yükselteç
Işlemsel yükselteç
Erol Dizdar
 
Yakıcı cihazlar ve montajı522 ee0033
Yakıcı cihazlar ve montajı522 ee0033Yakıcı cihazlar ve montajı522 ee0033
Yakıcı cihazlar ve montajı522 ee0033
Iklimlendirme Sogutma
 
Lehimleme ve baskı devre
Lehimleme ve baskı devreLehimleme ve baskı devre
Lehimleme ve baskı devre
Erol Dizdar
 
Sistem güvenliği
Sistem güvenliğiSistem güvenliği
Sistem güvenliği
Onur Şaner
 
Türkiye Elektrik Piyasası Kısa Dönemli Referans Fiyat Tahmini
Türkiye Elektrik Piyasası Kısa Dönemli Referans Fiyat TahminiTürkiye Elektrik Piyasası Kısa Dönemli Referans Fiyat Tahmini
Türkiye Elektrik Piyasası Kısa Dönemli Referans Fiyat Tahmini
Sercan Yıldız
 
Sunucu işletim sistemi 1
Sunucu işletim sistemi 1Sunucu işletim sistemi 1
Sunucu işletim sistemi 1
Erol Dizdar
 

Similar to ARDUINO KODLAMA EMERSON EDUARDO RODRIGUES (20)

Grup 2 b170100014_alperen dobrucalı tasarım çalışması
Grup 2 b170100014_alperen dobrucalı  tasarım çalışmasıGrup 2 b170100014_alperen dobrucalı  tasarım çalışması
Grup 2 b170100014_alperen dobrucalı tasarım çalışması
 
Aritmetik devreler
Aritmetik devrelerAritmetik devreler
Aritmetik devreler
 
Sistem koruyucu bakım
Sistem koruyucu bakımSistem koruyucu bakım
Sistem koruyucu bakım
 
Kursat taskin yolsuzluk onlemede bdd teknikleri
Kursat taskin   yolsuzluk onlemede bdd teknikleriKursat taskin   yolsuzluk onlemede bdd teknikleri
Kursat taskin yolsuzluk onlemede bdd teknikleri
 
Tümleşik devreler
Tümleşik devrelerTümleşik devreler
Tümleşik devreler
 
Designing A Smart Solar Car
Designing A Smart Solar CarDesigning A Smart Solar Car
Designing A Smart Solar Car
 
Doğru akım ve alternatif akım devreleri
Doğru akım ve alternatif akım devreleriDoğru akım ve alternatif akım devreleri
Doğru akım ve alternatif akım devreleri
 
Guvenlik yonetimi-87
Guvenlik yonetimi-87Guvenlik yonetimi-87
Guvenlik yonetimi-87
 
Guvenlik yonetimi-87
Guvenlik yonetimi-87Guvenlik yonetimi-87
Guvenlik yonetimi-87
 
Işlemsel yükselteç
Işlemsel yükselteçIşlemsel yükselteç
Işlemsel yükselteç
 
Osilatör
OsilatörOsilatör
Osilatör
 
Yakıcı cihazlar ve montajı522 ee0033
Yakıcı cihazlar ve montajı522 ee0033Yakıcı cihazlar ve montajı522 ee0033
Yakıcı cihazlar ve montajı522 ee0033
 
Lehimleme ve baskı devre
Lehimleme ve baskı devreLehimleme ve baskı devre
Lehimleme ve baskı devre
 
Ekg (elektrokardiografi)
Ekg (elektrokardiografi)Ekg (elektrokardiografi)
Ekg (elektrokardiografi)
 
Sistem güvenliği
Sistem güvenliğiSistem güvenliği
Sistem güvenliği
 
Türkiye Elektrik Piyasası Kısa Dönemli Referans Fiyat Tahmini
Türkiye Elektrik Piyasası Kısa Dönemli Referans Fiyat TahminiTürkiye Elektrik Piyasası Kısa Dönemli Referans Fiyat Tahmini
Türkiye Elektrik Piyasası Kısa Dönemli Referans Fiyat Tahmini
 
Sayıcılar
SayıcılarSayıcılar
Sayıcılar
 
Artificial intelligence in architecture design and bim
Artificial intelligence in architecture design and bimArtificial intelligence in architecture design and bim
Artificial intelligence in architecture design and bim
 
Hastalık Teşhislerinde Veri Madenciliğinin Kullanımının İncelenmesi (3).pdf
Hastalık Teşhislerinde Veri Madenciliğinin Kullanımının İncelenmesi (3).pdfHastalık Teşhislerinde Veri Madenciliğinin Kullanımının İncelenmesi (3).pdf
Hastalık Teşhislerinde Veri Madenciliğinin Kullanımının İncelenmesi (3).pdf
 
Sunucu işletim sistemi 1
Sunucu işletim sistemi 1Sunucu işletim sistemi 1
Sunucu işletim sistemi 1
 

More from EMERSON EDUARDO RODRIGUES

More from EMERSON EDUARDO RODRIGUES (20)

emersoneduardorodrigues_curso-de-russo.pdf
emersoneduardorodrigues_curso-de-russo.pdfemersoneduardorodrigues_curso-de-russo.pdf
emersoneduardorodrigues_curso-de-russo.pdf
 
STEP 7 - AWL para S7-300 y S7-400 emerson eduardo rodrigues
STEP 7 - AWL para S7-300 y S7-400 emerson eduardo rodriguesSTEP 7 - AWL para S7-300 y S7-400 emerson eduardo rodrigues
STEP 7 - AWL para S7-300 y S7-400 emerson eduardo rodrigues
 
PLC SCUBE STANDARD PROGRAMING EMERSON EDUARDO RODRIGUES
PLC SCUBE STANDARD PROGRAMING EMERSON EDUARDO RODRIGUESPLC SCUBE STANDARD PROGRAMING EMERSON EDUARDO RODRIGUES
PLC SCUBE STANDARD PROGRAMING EMERSON EDUARDO RODRIGUES
 
The+48+Laws+Of+Power EMERSON EDUARDO RODRIGUES
The+48+Laws+Of+Power EMERSON EDUARDO RODRIGUESThe+48+Laws+Of+Power EMERSON EDUARDO RODRIGUES
The+48+Laws+Of+Power EMERSON EDUARDO RODRIGUES
 
Basica_Documentacion EMERSON EDUARDO RODRIGUES
Basica_Documentacion EMERSON EDUARDO RODRIGUESBasica_Documentacion EMERSON EDUARDO RODRIGUES
Basica_Documentacion EMERSON EDUARDO RODRIGUES
 
Avanzado_Documentacion_EMERSON EDUARDO RODRIGUES
Avanzado_Documentacion_EMERSON EDUARDO RODRIGUESAvanzado_Documentacion_EMERSON EDUARDO RODRIGUES
Avanzado_Documentacion_EMERSON EDUARDO RODRIGUES
 
Tratamiento Digital de Señales__EMERSON EDUARDO RODRIGUES.pdf
Tratamiento Digital de Señales__EMERSON EDUARDO RODRIGUES.pdfTratamiento Digital de Señales__EMERSON EDUARDO RODRIGUES.pdf
Tratamiento Digital de Señales__EMERSON EDUARDO RODRIGUES.pdf
 
DICIONARIO_DICIONARIO_ITALIANO_PORTUGUES EMERSON EDUARDO RODRIGUES
DICIONARIO_DICIONARIO_ITALIANO_PORTUGUES EMERSON EDUARDO RODRIGUESDICIONARIO_DICIONARIO_ITALIANO_PORTUGUES EMERSON EDUARDO RODRIGUES
DICIONARIO_DICIONARIO_ITALIANO_PORTUGUES EMERSON EDUARDO RODRIGUES
 
penetration test essentials comptia EMERSON EDUARDO RODRIGUES
penetration test essentials comptia EMERSON EDUARDO RODRIGUESpenetration test essentials comptia EMERSON EDUARDO RODRIGUES
penetration test essentials comptia EMERSON EDUARDO RODRIGUES
 
compTIA guide to get the CERTIFICATION EMERSON EDUARDO RODRIGUES
compTIA guide to get the CERTIFICATION EMERSON EDUARDO RODRIGUEScompTIA guide to get the CERTIFICATION EMERSON EDUARDO RODRIGUES
compTIA guide to get the CERTIFICATION EMERSON EDUARDO RODRIGUES
 
HHS_TOC_Glossary EMERSON EDUARDO RODRIGUES
HHS_TOC_Glossary EMERSON EDUARDO RODRIGUESHHS_TOC_Glossary EMERSON EDUARDO RODRIGUES
HHS_TOC_Glossary EMERSON EDUARDO RODRIGUES
 
Cómo programar Step 7 y no morir en el intento EMERSON EDUARDO RODRIGUES
Cómo programar Step 7 y no morir en el intento EMERSON EDUARDO RODRIGUESCómo programar Step 7 y no morir en el intento EMERSON EDUARDO RODRIGUES
Cómo programar Step 7 y no morir en el intento EMERSON EDUARDO RODRIGUES
 
11. EJERCICIOS PRACTICOS DE AUTOMATIZACION - AUTOMATI EMERSON EDUARDO RODRIGUES
11. EJERCICIOS PRACTICOS DE AUTOMATIZACION - AUTOMATI EMERSON EDUARDO RODRIGUES11. EJERCICIOS PRACTICOS DE AUTOMATIZACION - AUTOMATI EMERSON EDUARDO RODRIGUES
11. EJERCICIOS PRACTICOS DE AUTOMATIZACION - AUTOMATI EMERSON EDUARDO RODRIGUES
 
10. SISTEMAS PROGRAMABLES AVANZADOS - AUTOMATI EMERSON EDUARDO RODRIGUES
10. SISTEMAS PROGRAMABLES AVANZADOS - AUTOMATI EMERSON EDUARDO RODRIGUES10. SISTEMAS PROGRAMABLES AVANZADOS - AUTOMATI EMERSON EDUARDO RODRIGUES
10. SISTEMAS PROGRAMABLES AVANZADOS - AUTOMATI EMERSON EDUARDO RODRIGUES
 
9. LIBRO SISTEMAS SECUENCIALES PROGRAMABLES - AUTOMATI EMERSON EDUARDO RODRIGUES
9. LIBRO SISTEMAS SECUENCIALES PROGRAMABLES - AUTOMATI EMERSON EDUARDO RODRIGUES9. LIBRO SISTEMAS SECUENCIALES PROGRAMABLES - AUTOMATI EMERSON EDUARDO RODRIGUES
9. LIBRO SISTEMAS SECUENCIALES PROGRAMABLES - AUTOMATI EMERSON EDUARDO RODRIGUES
 
8. LIBRO PROGRAMACION DE CONTROLADORES AVANZADOS SIMATIC S7-1500 CON TIA PORT...
8. LIBRO PROGRAMACION DE CONTROLADORES AVANZADOS SIMATIC S7-1500 CON TIA PORT...8. LIBRO PROGRAMACION DE CONTROLADORES AVANZADOS SIMATIC S7-1500 CON TIA PORT...
8. LIBRO PROGRAMACION DE CONTROLADORES AVANZADOS SIMATIC S7-1500 CON TIA PORT...
 
6. LIBRO AUTOMATAS PROGRAMABLES Y SISTEMAS DE AUTOMATIZACION - AUTOMATI EMERS...
6. LIBRO AUTOMATAS PROGRAMABLES Y SISTEMAS DE AUTOMATIZACION - AUTOMATI EMERS...6. LIBRO AUTOMATAS PROGRAMABLES Y SISTEMAS DE AUTOMATIZACION - AUTOMATI EMERS...
6. LIBRO AUTOMATAS PROGRAMABLES Y SISTEMAS DE AUTOMATIZACION - AUTOMATI EMERS...
 
5. LIBRO APRENDA WINCC - AUTOMATI EMERSON EDUARDO RODRIGUES
5. LIBRO APRENDA WINCC - AUTOMATI EMERSON EDUARDO RODRIGUES5. LIBRO APRENDA WINCC - AUTOMATI EMERSON EDUARDO RODRIGUES
5. LIBRO APRENDA WINCC - AUTOMATI EMERSON EDUARDO RODRIGUES
 
4. LIBRO COMUNICACIONES INDUSTRIALES - AUTOMATISSANDRO EMERSON EDUARDO RODRIGUES
4. LIBRO COMUNICACIONES INDUSTRIALES - AUTOMATISSANDRO EMERSON EDUARDO RODRIGUES4. LIBRO COMUNICACIONES INDUSTRIALES - AUTOMATISSANDRO EMERSON EDUARDO RODRIGUES
4. LIBRO COMUNICACIONES INDUSTRIALES - AUTOMATISSANDRO EMERSON EDUARDO RODRIGUES
 
3. LIBRO AUTOMATAS PROGRABLES SIEMENS GRAFCET Y GUIA GEMMA CON TIA PORTAL - A...
3. LIBRO AUTOMATAS PROGRABLES SIEMENS GRAFCET Y GUIA GEMMA CON TIA PORTAL - A...3. LIBRO AUTOMATAS PROGRABLES SIEMENS GRAFCET Y GUIA GEMMA CON TIA PORTAL - A...
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
  • 21. 16 Timsah Kablo Yan Keski Pense Cımbız Seti Mini Tornavida Seti Silikon Tabancası Elektrik Bandı Mini Matkap
  • 22. 17 Matkap Standı Havya Lehim Lehim Pastası Lehim Pompası Lehim Temizleme Teli Lehim Tutma Aparatı Tek Damarlı Zil Teli
  • 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.
  • 25. 20
  • 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.
  • 35. 30
  • 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ı
  • 46. 41 Arduino Kodları int buton = 13; int led = 12; void setup (){ pinMode (buton, INPUT); pinMode (led, OUTPUT); } void loop (){ if (digitalRead (buton) == HIGH){ digitalWrite (led, HIGH); } else { digitalWrite (led, LOW); } }
  • 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ı
  • 50. 45 Arduino Kodları int ledDelay = 10000; int kirmiziled = 10; int sariled = 9; int yesilled = 8; void setup (){ pinMode (kirmiziled, OUTPUT); pinMode (sariled, OUTPUT); pinMode (yesilled, OUTPUT); } void loop (){ digitalWrite (kirmiziled, HIGH); delay (ledDelay); digitalWrite (sariled, HIGH); delay (2000); digitalWrite (yesilled, HIGH); digitalWrite (kirmiziled, LOW); digitalWrite (sariled, LOW); delay (ledDelay); digitalWrite (sariled, HIGH); digitalWrite (yesilled, LOW); delay (2000); digitalWrite (sariled, LOW); }
  • 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ı
  • 52. 47 Arduino Kodları const int analogpin = A0; int sensorvalue = 0; int timer = 0; void setup (){ pinMode (12, OUTPUT); pinMode (11, OUTPUT); } void loop (){ sensorvalue = analogRead (analogpin); timer = map (sensorvalue, 0, 1023, 10, 500); digitalWrite (12, HIGH); delay (timer); digitalWrite (12, LOW); delay (timer); digitalWrite (12, HIGH); delay (timer); digitalWrite (12, LOW); digitalWrite (11, HIGH); delay (timer); digitalWrite (11, LOW); delay (timer); digitalWrite (11, HIGH); delay (timer); digitalWrite (11, LOW); }
  • 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ı
  • 54. 49 Arduino Kodları byte ledPin [ ] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; int ledDelay (250); int yon = 1; int currentLED = 0; unsigned long degismezamani; void setup (){ for (int x=0; x<10; x++) { pinMode (ledPin [x], OUTPUT); } degismezamani = millis (); } void loop (){ if ((millis ()-degismezamani) > ledDelay) { changeLED (); degismezamani = millis (); } } void changeLED (){ for (int x=0; x<10; x++) { k3digitalWrite (ledPin [x], LOW); } digitalWrite (ledPin [currentLED], HIGH); currentLED += yon; if (currentLED == 9) {yon = -1;} if (currentLED == 0) {yon = 1;} }
  • 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);
  • 60. 55 } else {digitalWrite (ledY, LOW); } if (yPozisyon>1000) {digitalWrite (ledS, HIGH); } else {digitalWrite (ledS, LOW); } }
  • 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ı
  • 62. 57 Arduino Kodları int ledler [ ] = {4, 5, 6, 7}; int led_sayisi = 4; int ldr_pin = A0; int deger = 0; void setup (){ for (int i = 0; i < led_sayisi; i++) { pinMode (ledler [i], OUTPUT); } } void loop (){ deger = analogRead (ldr_pin); if (deger > 0 && deger <= 255) { digitalWrite (ledler [0], HIGH); digitalWrite (ledler [1], LOW); digitalWrite (ledler [2], LOW); digitalWrite (ledler [3], LOW); } if (deger > 256 && deger <= 511) { digitalWrite (ledler [0], HIGH); digitalWrite (ledler [1], HIGH); digitalWrite (ledler [2], LOW); digitalWrite (ledler [3], LOW); } if (deger > 512 && deger <= 767) {
  • 63. 58 digitalWrite (ledler [0], HIGH); digitalWrite (ledler [1], HIGH); digitalWrite (ledler [2], HIGH); digitalWrite (ledler [3], LOW); } if (deger > 768 && deger <= 1023) { digitalWrite (ledler [0], HIGH); digitalWrite (ledler [1], HIGH); digitalWrite (ledler [2], HIGH); digitalWrite (ledler [3], HIGH); } delay (1000); }
  • 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] == ' '){
  • 66. 61 delay (beats [i] * tempo); } else { playNote (notes [i], beats [i] * tempo); } delay (tempo/2); } }
  • 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;
  • 69. 64 case 3: Serial.println ("3.Alkış Algılandı!"); digitalWrite (kirmizi_LED, HIGH); delay (500); break; case 4: Serial.println ("4.Alkış Algılandı!"); digitalWrite (yesil_LED, HIGH); digitalWrite (sari_LED, HIGH); digitalWrite (kirmizi_LED, HIGH); delay (500); sayac=0; break; } } else { digitalWrite (yesil_LED, LOW); digitalWrite (sari_LED, LOW); digitalWrite (kirmizi_LED, LOW); } }
  • 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ı
  • 73. 68 Arduino Kodları int yagmurPin = A0; int ledPin = 8; int yagmurdegeri; int yagmurEsikdegeri = 800; void setup (){ pinMode (yagmurPin, INPUT); pinMode (ledPin, OUTPUT); Serial.begin (9600); } void loop (){ yagmurdegeri = analogRead (yagmurPin); Serial.print ("Yağmur Değeri: "); Serial.println (yagmurdegeri); if (yagmurdegeri < yagmurEsikdegeri) { digitalWrite (ledPin, HIGH); } else { digitalWrite (ledPin, LOW); } delay (100); }
  • 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ı
  • 75. 70 Arduino Kodları #define echopin 6 #define trigpin 7 #define buzzerpin 8 int maximumrange = 50; int minimumrange = 0; void setup (){ pinMode (trigpin, OUTPUT); pinMode (echopin, INPUT); pinMode (buzzerpin, OUTPUT); } void loop (){ int olcum = mesafe (maximumrange, minimumrange); melodi (olcum*10); } int mesafe (int maxrange, int minrange) { long duration, distance; digitalWrite (trigpin, LOW); delayMicroseconds (2); digitalWrite (trigpin, HIGH); delayMicroseconds (2); digitalWrite (trigpin, LOW); duration = pulseIn (echopin, HIGH); distance = duration / 58.2; delay (50); if (distance >=maxrange || distance <= minrange) return 0; return distance;
  • 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ı
  • 81. 76 Arduino Kodları int lm35_pin=A1; int yesil_led=11; int kirmizi_led=5; int buzzer_alarm=2; void setup () { pinMode (lm35_pin, INPUT); pinMode (yesil_led, OUTPUT); pinMode (kirmizi_led, OUTPUT); pinMode (buzzer_alarm, OUTPUT); digitalWrite (yesil_led, HIGH); } void loop () { float lm35_okunan_deger=analogRead (lm35_pin); float analog_sicaklik=(lm35_okunan_deger/1023)*5000; float dijital_sicaklik=analog_sicaklik/10.0; if (dijital_sicaklik>50) { tone (buzzer_alarm, 300); digitalWrite (kirmizi_led, HIGH); digitalWrite (yesil_led, LOW); } else { noTone (buzzer_alarm); digitalWrite (yesil_led, HIGH); digitalWrite (kirmizi_led, LOW); } }
  • 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ı
  • 83. 78 Arduino Kodları int redLed = 12; int greenLed = 11; int buzzer = 10; int smokeA0 = A5; int sensorThres = 400; void setup () { pinMode (redLed, OUTPUT); pinMode (greenLed, OUTPUT); pinMode (buzzer, OUTPUT); pinMode (smokeA0, INPUT); Serial.begin (9600); } void loop () { int analogSensor = analogRead (smokeA0); Serial.print ("Pin A0: "); Serial.println (analogSensor); if (analogSensor > sensorThres) { digitalWrite (redLed, HIGH); digitalWrite (greenLed, LOW); tone (buzzer, 1000, 200); } else { digitalWrite (redLed, LOW); digitalWrite (greenLed, HIGH); noTone (buzzer); }
  • 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;
  • 87. 82 } } } void playTone (long duration, int freq) { duration *= 1000; int period = (1.0 / freq) * 1000000; long elapsed_time = 0; while (elapsed_time < duration) { digitalWrite (buzzer, HIGH); delayMicroseconds (period / 2); digitalWrite (buzzer, LOW); delayMicroseconds (period / 2); elapsed_time += (period); } }
  • 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ı
  • 89. 84 Arduino Kodları int reedRolePin = 2; int led1 = 8; int led2 = 10; int buzzer = 12; int deger; void setup () { pinMode (led1, OUTPUT); pinMode (led2, OUTPUT); pinMode (buzzer, OUTPUT); pinMode (reedRolePin, INPUT); } void loop () { deger = digitalRead (reedRolePin); if (deger==0){ digitalWrite (buzzer,0); digitalWrite (led1,0); digitalWrite (led2,1); } else{ digitalWrite (buzzer,1); digitalWrite (led1,1); digitalWrite (led2,0); } }
  • 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ı
  • 91. 86 Arduino Kodları #include <Servo.h> int xPin = A0; int yPin = A1; Servo motor1; Servo motor2; int xPozisyon = 0; int yPozisyon = 0; void setup () { pinMode (xPin, INPUT); pinMode (yPin, INPUT); motor1.attach (5); motor2.attach (6); } void loop () { xPozisyon = map (analogRead (xPin) , 0, 1023, 0, 180); yPozisyon = map (analogRead (yPin) , 0, 1023, 0, 180); motor1.write (xPozisyon); motor2.write (yPozisyon); }
  • 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ı
  • 93. 88 Arduino Kodları #include <NewPing.h> #include <Servo.h> #define trigPin 12 #define echoPin 13 #define MAX_DISTANCE 500 NewPing sonar (trigPin, echoPin, MAX_DISTANCE); int greenLed = 3, redLed = 2; int pos =20; Servo myservo; void setup () { Serial.begin (115200); pinMode (trigPin, OUTPUT); pinMode (echoPin, INPUT); pinMode (greenLed, OUTPUT); pinMode (redLed, OUTPUT); myservo.attach (9); } void loop () { int duration, distance, pos = 0, i; digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW); duration = pulseIn (echoPin, HIGH); distance = (duration / 2) / 29.1; Serial.print (distance); Serial.print (" cm");
  • 94. 89 if (distance <= 15) { digitalWrite (greenLed, LOW); digitalWrite (redLed, HIGH); myservo.write (180); delay (1000); digitalWrite (redLed, LOW); myservo.write (90); delay (1000); digitalWrite (redLed, HIGH); myservo.write (0); delay (1000); digitalWrite (redLed, LOW); myservo.write (90); } else { digitalWrite (redLed, LOW); digitalWrite (greenLed, HIGH); myservo.write (90); } delay (1000); }
  • 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);
  • 97. 92 motor.write (0); delay (1000); } else{ Serial.println ("Yetkisiz Kart"); ekranaYazdir; } rfid.PICC_HaltA (); } void ekranaYazdir (){ Serial.print ("ID Numarasi: "); for (int sayac = 0; sayac < 4; sayac++) { Serial.print (rfid.uid.uidByte [sayac]); Serial.print (" "); } Serial.println (""); }
  • 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; }
  • 105. 100 if ((r < 1.32) && (r > 1.19) && (g > 1.24) && (g < 1.34) && (b < 0.52) && (b > 0.42))){ renk = 3; } if ((r < 1.5) && (r > 1.35) && (g > 0.74) && (g < 0.85) && (b < 0.9) && (b > 0.7)){ renk = 4; } if ((r < 2.2) && (r > 1.8) && (g > 0.5) && (g < 0.65) && (b < 0.55) && (b > 0.4)){ renk = 5; } if ((r < 1) && (r > 0.48) && (g > 1.24) && (g < 1.34) && (b < 1.24) && (b > 1.14)){ renk = 6; } return renk; }
  • 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ı
  • 107. 102 Arduino Kodları int in1 = 8; int in2 = 9; int ConA = 10; int speed1; void setup () { pinMode (8, OUTPUT); pinMode (9, OUTPUT); pinMode (10, OUTPUT); } void TurnMotorA (){ digitalWrite (in1, LOW); digitalWrite (in2, HIGH); speed1 = analogRead (A0); speed1 = speed1*0.2492668622; analogWrite (ConA,speed1); } void loop () { TurnMotorA (); }
  • 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ı
  • 109. 104 Arduino Kodları #define echopin 6 #define trigpin 8 #define rolepin 7 int maximumrange = 50; int minimumrange = 0; void setup (){ pinMode (trigpin, OUTPUT); pinMode (echopin, INPUT); pinMode (rolepin, OUTPUT); Serial.begin (9600); } void loop (){ int olcum = mesafe (maximumrange, minimumrange); } int mesafe (int maxrange, int minrange) { long duration, distance; digitalWrite (trigpin, LOW); delayMicroseconds (2); digitalWrite (trigpin, HIGH); delayMicroseconds (2); digitalWrite (trigpin, LOW); duration = pulseIn (echopin, HIGH); distance = duration / 58.2; delay (50); Serial.println (distance); if (distance >=maxrange || distance <= minrange) digitalWrite (rolepin, HIGH);
  • 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ı
  • 114. 109 Arduino Kodları #include<LiquidCrystal.h> LiquidCrystal lcd (7, 8, 9, 10, 11, 12); void setup () { lcd.begin (16, 2); lcd.print ("Biyosistem Mühendisliği"); delay (1000); } void loop () { for (int positionCounter = 0; positionCounter < 13; positionCounter++){ lcd.scrollDisplayLeft (); delay (150); } for (int positionCounter = 0; positionCounter < 29; positionCounter++){ lcd.scrollDisplayRight (); delay (150); } for (int positionCounter = 0; positionCounter < 16; positionCounter++){ lcd.scrollDisplayLeft (); delay (150); } delay (1000); }
  • 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ı
  • 116. 111 Arduino Kodları #include<dht11.h> #define DHT11PIN 9 #include <LiquidCrystal.h> dht11 DHT11; const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd (rs, en, d4, d5, d6, d7); void setup () { } void loop () { int chk = DHT11.read (DHT11PIN); lcd.begin (16, 2); lcd.print ("ISI = "); lcd.print ((float) DHT11.temperature, 0); lcd.print (" 337C"); lcd.setCursor (0, 1); lcd.print ("NEM = "); lcd.print ("% "); lcd.print ((float) DHT11.humidity, 0); delay (1000); }
  • 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ı
  • 118. 113 Arduino Kodları #include <LiquidCrystal.h> LiquidCrystal lcd (9, 8, 3, 4, 5, 6); float vA = 0.0; float vB = 0.0; float vGiris = 0.0; float vOrtalama = 0.0; float RA = 99.2; float RB = 9.7; float RC = 9.8; void setup () { Serial.begin (9600); for (int i=16; i>3 ; i--){ int k= i + 6; lcd.begin (16, 2); lcd.setCursor (i, 0); lcd.print ("EGITIM"); lcd.setCursor (k, 1); lcd.print ("SART!"); delay (500); } lcd.clear (); delay (500); lcd.setCursor (4, 0); lcd.print ("EGITIM"); lcd.setCursor (10, 1); lcd.print ("SART!"); delay (2000); lcd.clear ();
  • 119. 114 } void loop () { float vToplam = 0.0; for (int i=0; i<30; i++) { float okunanA = analogRead (A0); float okunanB = analogRead (A1); vA = okunanA * 5 / 1024; vB = okunanB * 5 / 1024; vA = vA *((RA + RB + RC)/20); vB = vB *((RA + RB + RC)/ 10); vOrtalama = (vA + vB)/2; vToplam = vToplam + vOrtalama; delay (70); } float v = vToplam / 30; Serial.print ("Voltaj (V):"); Serial.print (v); Serial.println (); lcd.clear (); lcd.print ("DC Voltmetre"); lcd.setCursor (0, 1); lcd.print ("Voltaj(v):"); lcd.print (v); delay (1000); }
  • 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ı
  • 121. 116 Arduino Kodları #include <LiquidCrystal.h> LiquidCrystal lcd (12, 11, 5, 4, 3, 2); int echoPin = 6; int pingPin = 7; int val = 0; void setup (){ Serial.begin (9600); pinMode (pingPin, OUTPUT); pinMode (echoPin, INPUT); } void loop (){ long duration, inches, cm; digitalWrite (pingPin, LOW); delayMicroseconds (2); digitalWrite (pingPin, HIGH); delayMicroseconds (10); duration = pulseIn (echoPin, HIGH); inches = MicrosecondsToInches (duration); cm = MicrosecondsToCentimeters (duration); lcd.clear (); lcd.setCursor (0, 0); lcd.print (inches); lcd.print ("inch, "); lcd.print (cm); lcd.print ("cm"); lcd.println (); } long MicrosecondsToInches (long microseconds){
  • 122. 117 return microseconds /74/2; } long MicrosecondsToCentimeters (long microseconds){ return microseconds /29/2; }
  • 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ı
  • 124. 119 Arduino Kodları #include <Wire.h> #include <LiquidCrystal.h> LiquidCrystal lcd (12, 11, 5, 4, 3, 2); const int sensor = A0; int periyot=20; double alfa=0.75; double yenileme=0.0; void setup (void) { pinMode (sensor, INPUT); lcd.begin (16, 2); lcd.clear (); lcd.setCursor (0, 0); } void loop (void) { static double oncekideger=0; static double oncekiyenileme=0; int ritim=analogRead (sensor); double deger=alfa*oncekideger+(0-alfa)*ritim; yenileme=deger-oncekideger; lcd.setCursor (0, 0); lcd.print ("kalp monitoru"); lcd.setCursor (0,1); lcd.print (" "); lcd.setCursor (0,1); lcd.print (ritim/10); oncekideger=deger;
  • 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ı
  • 127. 122 Arduino Kodları #define trigPin 13 #define echoPin 12 #define motor 7 #define buzzer 6 void setup (){ pinMode (trigPin, OUTPUT); pinMode (echoPin, INPUT); pinMode (motor, OUTPUT); pinMode (buzzer, OUTPUT); } void loop (){ long duration, distance; digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW); duration = pulseIn (echoPin, HIGH); distance = (duration/2) / 29.1; if (distance < 30) { digitalWrite (motor, HIGH); digitalWrite (buzzer, HIGH); }else{ digitalWrite (motor, LOW); digitalWrite (buzzer, LOW); } delay (500); }
  • 128. 123 long microsecondsToCentimeters (long microseconds) { return microseconds / 29 / 2; }
  • 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ı
  • 130. 125 Arduino Kodları float derece; int redLed1 = 13; int redLed2 = 12; int buzzer = 10; int gazA1= A1; int sensordeger =750; void setup () { pinMode (redLed1, OUTPUT); pinMode (redLed2, OUTPUT); pinMode (buzzer, OUTPUT); pinMode (gazA1, INPUT); Serial.begin (9600); } void loop (){ derece= 5.0*analogRead (0)*100.0/1024; int analogSensor = analogRead (gazA1); Serial.println ("Gaz Sensörü:"); Serial.println (analogSensor); Serial.println ("derece"); Serial.println (derece); if (analogSensor>sensordeger || derece>75) { digitalWrite (redLed1, HIGH); digitalWrite (redLed2, HIGH); tone (buzzer, 1000, 200); } else {
  • 131. 126 digitalWrite (redLed1, LOW); digitalWrite (redLed2, LOW); noTone (buzzer); } delay (100); }
  • 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ı
  • 133. 128 Arduino Kodları #include <Wire.h> #include <LiquidCrystal.h> unsigned char frekansH = 0; unsigned char frekansL = 0; unsigned int frekansB; double frekans = 0; static char frekans_ekran [15]; LiquidCrystal lcd (12, 11, 5, 4, 3, 2); void setup (){ Wire.begin (); lcd.begin (16, 2); frekans = 93.0; frekansAyarla (); lcd.setCursor (3, 0); lcd.print ("FM Radyo"); } void loop (){ int reading = analogRead(0); frekans = ((double)reading * (108.0 - 87.5)) / 1024.0 + 87.5; frekans = ((int)(frekans * 10)) / 10.0; frekansAyarla (); dtostrf (frekans, 6, 2, frekans_ekran); lcd.setCursor (4, 1); lcd.print (frekans_ekran); } void frekansAyarla (){ frekansB = 4 * (frekans * 1000000 + 225000) / 32768; frekansH = frekansB >> 8;