2. Kısım

Transkript

2. Kısım
GND
GND
GND
330Ω Direnç
330Ω Direnç
330Ω Direnç
+
a15
a12
a9
a6
c24
a3
-
-
c23 c24
+
-
c20 c21
+
-
c17 c18
+
-
c14 c15
+
-
c11 c12
+
-
c8 c9
+
-
c5 c6
+
c2 c3
GND
+
+
+
+
+
+
+
+
330Ω Direnç
-
-
-
-
-
-
-
-
GND
c23
Gerçek Görünüm:
330Ω Direnç
LED (5mm)
LED (5mm)
LED (5mm)
LED (5mm)
LED (5mm)
LED (5mm)
LED (5mm)
LED (5mm)
Elemanlar:
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
330Ω Direnç
330Ω Direnç
330Ω Direnç
Elemanlar:
Gerçek Görünüm:
GND
Pin
5V3
Pin 9
Pin 8
Pin 7
Pin 6
Pin 5
Pin 4
Pin 3
Pin 2
a24
a21
a18
a3
-
+
e23
e20
e17
e14
e11
e8
e5
e2
GND
GND
GND
4
Arduino Kodu:
Circuit 2
Arduino IDE 'yi Aç// File > Examples > Arduino Kod > Devre # 4
Kod Notları:
int ledPins[] = {2,3,4,5,6,7,8,9};
“array” çok fazla değişkeni gruplar haline getirerek
yönetilmesini kolaylaştıran en kullanışlı yöntemdir.
Burada sekiz eleman içeren integer değerler için bir array
oluşturuyoruz ve buna ledPins adını veriyoruz.
digitalWrite(ledPins[0], HIGH);
Array içerisindeki bir elemana bulundukları adres yardımı
ile ulaşırsınız. İlk elemanın adresi 0, ikinci elemanın adresi 1,
vs. Bir elemana ulaşmak için “ledPins[x]” komutunu
kullanarak x yerine o elamanın adresini yazarsınız. Burada
dijital pin 2' yi HIGH yapıyoruz.
index = random(8);
Bilgisayarlarlar çalışma sırasında aynı işlemleri gerçekleştirir fakat bazen
bir şeylerin rastgele olmaısnı istersiniz, örneğin bir zar atma işleminde.
Random() fonksiyonu bunu yapmak için en iyi yoldur. Daha fazla bilgi
için adresi ziyaret ediniz.
http://arduino.cc/en/Reference/Random
Ne göreceğiz?
Tek LED yerine bütün LED'lerin yanıp
söndüğünü görmeniz gerek. Eğer sorun
varsa devreyi doğru şekilde
kurduğunuzdan emin olduktan sonra
kodunuzu kontrol edin ve arıza tespit
kısmını inceleyin.
Sorun Giderme:
Gerçek Hayatta Uygulamaları:
Bazı LED'ler Işık Vermeyebilir
LED'inizi ters takmış olabilirsiniz, sıkça karşılaşılan
bir sorundur. Çalışmayan LEDinizin doğru
bağlandığından emin olun.
Kayan yazı ekranları genellikle önemli bilgiların kısa
parçalarının yayınlanması şeklinde kulanılır. Bu
ekranlar çok sayıda LED kullanılarak üretilir.
Sıralama Düzeni
Sekiz adet bağlantı ile çalıştığınız için karışıklıklar
olması gayet doğal. İlk LED'i pin 2’ye yerleştirin ve
diğer LED'leri devam edecek şekilde yerleştirin ve
tekrar kontrol edin.
Yeniden Başlayın
Farkında olmadan bağlantıyı yanlış yere
kurabilirsiniz. Genelde her şeyi çıkarıp tekrar
yerleştirmek, nerede hata yaptığınız aramaktan daha
kolaydır.
Devre #5
Buton Kullanımı
Pin 22
Pin
Pin 33
Pin
+5 Volt
Pin 13
Direnç
LED
Direnç
(330ohm)
(turuncu-turuncu-kahverengi)
5
Şu ana kadar çıktı (output) üzerine yoğunlaşmıştık.
Bundan sonraki projelerimize girdiler (inputs) ile
devam ediyoruz. Bu devrede çok yaygın olan bir
girdiye bakacağız push botton(buton). Bir butonun
Arduino üzerindeki çalışma şekli şöyledir; ne
zaman ki butona bastınız, voltaj LOW seviyesine
geçer. Arduino bunu okur ve buna göre davranır.
Bu devrede, bir adet pull-up direnç görüyoruz. Bu
direnç temiz bir voltaj oluşmasını ve butondan
gelecek yanlış okumaların önüne geçilmesini sağlar.
GND
Elemanlar::
(toprak-ground) (-)
IC Button
Push
LED
X
21
10KΩ
330Ω
Direnç
X
18
Kablo
330Ω
Wire
Direnç
X
28
19
X
X
1
X
7
p.36
p.10
Devre 5: Buton Kullanımı
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
a b c d e
a b c d e
f g h i
f g h i
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Pin 2
Pin 3
Pin 13
Atlama Kablosu
Atlama Kablosu
j20
h11
h6
i9
Atlama Kablosu
Atlama Kablosu
i4
Atlama Kablosu
+
+
j21
-
330Ω Direnç
+
h20 h21
i11
+
d9 g9
d11 g11
10KΩ Direnç
-
d4 g4
d6 g6
i6 a15
+
Gerçek Görünüm:
10KΩ Direnç
LED (5mm)
Push Buton
Push Buton
Elemanlar:
Değil
Veya
!A doğru ise A yanlıştır. Yanlış ise A doğrudur.
A || B doğru ise A veya B doğrudur.
A && B doğru ise A ve B 'nin ikiside doğrudur.
Eğer ısıtma modundaysanız ve sıcaklık düşükse bu kod ısıtıcıyı çalıştıracaktır. Bu tarz
işlemlerle Arduinoyu akıllı eylemleri gerçekleştirebilecek şekilde kodlayabilir ve dış
çevreyi kontrol altına alabilirsiniz.
if ((mode == heat) && ((temperature < threshold) || (override == true)))
{
digitalWrite(HEATER, HIGH);
}
Örneğin:
Karmaşık bir if() ifadesi oluşturmak için başka fonksiyonları kombinleyebilirsiniz.
!
||
Ve
A != B doğru ise A ve B aynı değildir.
Farklılık
!=
&&
A == B doğru ise A ve B aynıdır.
Eşitlik
==
Arduino’yu kullanışlı kılan şeylerden biri de, girdinizdeki bilgilere dayanan karmaşık
eylemleri gerçekleştirebilir. Örneğin hava fazla soğuk olduğunda ısıtıcıyı çalıştırabilir,
sıcak olduğunda vantilatörü açabilir, bitkiler kurumaya başladığında onları
sulayabilirsiniz. Bu eylemleri yerine getirebilmesi için, Arduino “if” ile kurduğunuz
karmaşık yapıları mantıklı işlemlerle gerçekleştirir.
Iron Man Olmak için Arduino:
5
Arduino Kodu:
Circuit 2
Arduino IDE 'yi Aç// File > Examples > Arduino Kod > Devre # 5
Kod Notları:
pinMode(button2Pin, INPUT);
Dijital pinler çıktılar gibi girdi olarak da kullanılabilir.
Fakat bu işlemi yapmadan önce, Arduinoya
kullandığınız yolu söylemeniz gerek.
button1State = digitalRead(button1Pin);
Dijital bir girdiyi okumak için digitalRead()
fonksinonunu kullanırız. Eğer pinde 5V varsa HIGH,
0V ise LOW olacaktır.
if (button1State == LOW)
Çünkü butonumuzu GND’ye bağlıyoruz ve butona bastığınızda
LOW olarak okunuyor. Buttonun basılmış durumda olup
olmadığını görmek için (“==”) operatörünü kullanıyoruz.
Ne göreceğiz?
Buttona bastığınızda LED'in
yanıp söndüğünü görebilirsiniz.
Eğer sorun varsa devreyi doğru
şekilde kurduğunuzdan emin
olduktan sonra kodunuzu
kontrol edin ve arıza tespit
kısmını inceleyin.
Sorun Giderme:
Işık yanmıyor
Butonuzum kare olduğu için yanlış yerleştirilmiş
olabilir. 90 derece çevirin ve çalışıyor mu tekrar
kontrol edin.
Işık sönmüyor
Sıklıkla yaptığımız bir hatadır. Işığı kapatırken LED
bağlantınızı pin 13' den pin 9' a getirmeyi unutmayın.
Gerçek Hayatta Uygulamaları:
Butonlar bir çok oyun konsolunda kontrolü
sağlamak için kullanılır.
Devre #6
Foto Direnç
Pin 9
Potansiyometreyi önceki projelerimizde direnci
değiştirmek için kullanmıştık. Bu devrede sensöre
ulaşan ışık miktarın göre direnci değişen foto
dirençleri kullanacaksınız. Arduino direnci direkt
olarak değerlendiremediği için foto direncimizi
kullanmak için voltaj bölücü kullanacağız. Voltaj
bölücü fazla ışık altında yüksek voltaj çıkışı, fazla
ışık almadığı zamanda da düşük voltaj çıkışı
verecek.
+5 Volt
Foto
Direnç
LED
Pin AØ
Direnç
(330ohm)
(turuncu-turuncu-kahverengi)
6
resistor (10k ohm)
(Kahverengi-Siyah-Turuncu)
GND
Elemanlar:
(toprak-ground) (-)
Foto Direnç
LED
X
1
Kablo
330Ω
Direnç
X
1
X
1
10KΩ
Direnç
X
6
X
1
p.40
Devre 6: Foto Direç
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
a b c d e
a b c d e
f g h i
f g h i
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
A0
Pin 9
5V
GND
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
+
-
+
i5
+
j20
j6
j5
j1
Atlama Kablosu
+
f6
h20 h21
i1
+
10KΩ Direnç
-
f5
i21
Gerçek Görünüm:
330Ω Direnç (sensör)
LED (5mm)
Foto Direnç
Elemanlar:
(toprak-ground) (-)
GND
Pin
Pin 33
Bir voltaj bölücü iki adet dirençten meydana gelir. Üst direnci 5 volta ve
alt direnci toprağa(GND) bağladığınızda, orta kısım iki direnç değerine
uygun olan bir volt çıkışı verir. Dirençlerden birinin değeri değiştiğinde
(Algıladıkları birimin değeri değiştiğinde) direnç değeri de değişecektir ve
bu yüzden çıkış voltajı da buna bağlı olarak değişecektir!
5 volt
Arduino analog giriş(input) pini direnci değil voltajı ölçer. Ama biz
Arduinomuz ile birlikte “voltaj bölücü” olarak kullanılan dirençli
sensörler kullanacağız.
Gördüğünüz bütün bu sensörlerin (potansiyometreler, fotodirençler vs.)
hepsi farklı şekillerde görünen dirençlerdir. Direnç değeri algıladıkları
şeyin değerine göre değişir. (Işık seviyesi vs.)
Direnç Ölçüm Sensörleri:
6
Arduino Kodu:
Circuit 2
Arduino IDE 'yi Aç// File > Examples > Arduino Kod > Devre # 4
Kod Notları:
lightLevel = map(lightLevel, 0, 1023, 0, 255);
lightLevel = constrain(lightLevel, 0, 255);
analogRead() kullanarak okuduğumuz bir analog sinyal,
0-1023 arasında bir değer olacaktır. Fakat anologWrite()
kullanarak bir PWM çalıştırmak istediğimizde, 0-255 arasında
bir değer isteyecektir. Bu durumda map() fonksiyonunu
kullanarak geniş alanları daha dar alanlar olacak şekilde
sıkıştırabiliriz.
Kullandığımız map() fonksiyonu sınırı daraltır fakat biz bunu
yanında constrain() komutu kullanarak sayıları bu sınır
içerisinde tutacağız. Eğer sayı bu sınırı aşarsa daha büyük bir
sayıya dönüşecek. Ama sınırın içerisindeyse aynı kalacak.
Ne göreceğiz?
Fotodirencinizin algıladığı ışık
miktarına göre LEDininiz daha
parlak veya sönük yandığını
görebilirsiniz. Eğer çalışmıyorsa
devrenizin doğru kurulduğundan
emin olun, konudunuzu yeniden
yükleyin ve arıza tespit kısmını
konrol edin.
Sorun Giderme:
Gerçek Hayatta Uygulamaları:
LED Işık Vermiyor
Foto Direnç ve LED in bağlantılarını tekrar kontrol
edin.
Sokak lambaları geceleri aydınlatmak için bu tür
sensörler kullanır.
Işığın Değişimine Tepki Vermiyor
Fotodirenç üzerinde bağlantılar standart değildir, bu
yüzden bağlantıları karıştırmış olmanız mümkün.
Doğru yerleştirildiğinden emin olmak için iki kez
kontrol edin.
Hala Çalışmıyor
Aydınlatma olarak çok aydınlık veya karanlık bir
odada olabilirsiniz. Işıkları duruma göre açın veya
kapatın. Eğer yakınınızda flaş varsa bir de onu
deneyin.
Devre #7
Sıcaklık Sensörü
5 Volt
Sıcaklık sensörü adından da anlaşıldığı gibi ortam
sıcaklığını ölçmek için kullanılır. Bu sensörümüzde 3
adet pin bulunuyor. Pozitif, toprak(GND) ve sinyal
pinleri. Bu devremizde, sıcaklık sensörünü Arduino
ile nasıl entegre edileceğini öğreneceğiz ve Arduino
IDE'deki serial monitörde sıcaklık değerini göreceğiz.
Pin AØ
+5v
signal
gnd
TMP36
(precision
temperature
sensor)
GND
Elemanlar:
(toprak-ground) (-)
Sıc. Sensör
7
Transistör ve Sıcaklık Sensörü birbirlerie
çok benzeyen devre elemanlarıdır.
Karıştırılmamaya dikkat edilmelidir.
Kablo
X
1
X
5
Ön
Arka
p.44
Devre 7: Sıcaklık Sensörü
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
a b c d e
a b c d e
f g h i
f g h i
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
A0
5V
GND
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
j7
j5
Atlama Kablosu
Atlama Kablosu
f5
Gerçek Görünüm:
Sıcaklık Sensörü
Elemanlar:
+
j6
f6
+
f7
1
3
2
Bu devre Arduino IDE’nin seri monitörünü kullanıyor. Bunu açmak için
öncelikle programı upload edip kare kutu içerisinde büyüteç gibi görünen
butona basıyoruz.
Serial Monitörü Açıyoruz
7
Arduino Kodu:
Circuit 2
Arduino IDE 'yi Aç// File > Examples > Arduino Kod > Devre # 7
Kod Notları:
Serial.begin(9600);
Seri monitörü kullanmadan önce, başlatmak için Serial.begin()
komutunu çağırmanız gerek. Bağlantı hızı veya “Baud Hızı*”
9600'dır. İki cihaz birbiriyle bağlantı kurduğunda, ikisi de aynı
hıza ayarlanmış olmalıdır.
Serial.print(degreesC);
Serial.print() komutu epey zekidir. İçine attığınız hemen hemen her
şeyin çıktısını verebilir, buna her türlü değişkenler de dahildir.
Baud: Veri iletiminde modülatör çıkışında bir saniyede meydana
gelen semboldeğişikliğidir.
Daha fazla bilgi için > http://arduino.cc/en/Serial/Print
Serial.println(degreesF);
Serial.print() her şeyi aynı satır üzerinde yazdırır. Serial.println() diğer
satıra geçiş yapar. Bu iki komutu birlikte kullanarak okunması kolay
metin ve data çıktıları oluşturabilirsiniz.
Ne göreceğiz?
Sıcaklık sensörünüzün algıladığı
sıcaklık değerini Arduino IDE
seri monitöründe okunabiliyor
olarak görebiliyor olmanız gerek.
Eğer çalışmıyorsa devrenizin
doğru kurulduğundan emin
olun, kodunuzu yeniden yükleyin
ve sorun giderme kısmını konrol
edin.
voltage: 0.73 deg C: 22.75 deg F: 72.96
voltage: 0.73 deg C: 22.75 deg F: 72.96
voltage: 0.73 deg C: 22.75 deg F: 72.96
voltage: 0.73 deg C: 22.75 deg F: 72.96
voltage: 0.73 deg C: 22.75 deg F: 72.96
Sorun Giderme:
Gerçek Hayatta Uygulamaları:
Görünürde Çalışan Bir Şey Yok
Programın çalıştığına dair bir gösterge yok mu?
Sonuçları görmek için Arduino IDE seri monitörünü
açmanız gerek. (Talimatlar önceki sayfada mevcut.)
Klima sistemlerinde sıcaklığı takip etmek ve buna göre
ayarları yapılandırmak için sıcaklık sensörleri kullanılır.
Anlamsız Ekran
Bu tür şeylerin meydana gelmesinin sebebi seri
monitörün beklenenden farklı hızda data almasından
kaynaklanıyor. Düzeltmek için ise pull-down
kutucuğuna tıklayıp “baud” yazan yeri “9600 baud”
olarak düzeltmeniz gereklidir.
Sıcaklık Değeri Değişmiyor
Sensörünüzü parmağınızın arasına sıkıştırarak ısısını
yükseltin veya buz torbası kullanarak soğutmayı deneyin.
Devre #8
Servo Motor
Pin 9
Mini Servo
signal
(beyaz)
+5v
gnd
(Kırmızı)
8
Servo motorlar gömülü elektronik uygulamalar için
son derece idealdir çünkü dönen normal motorların
aksine istenilen herhangi bir yönde dönebilir. Servoya
ulaşan voltaj değişimine göre servoyu belirli bir
pozisyona sokabilirsiniz. Örneğin 1.5 milisaniyelik bir
değişim sevoyu 90 derece hareket ettirebilir. Bu
devrede, servoyu kontrol edip yönlendirmek için
PWM kullanmayı öğreneceğiz.
(Siyah)
GND
Elemanlar:
(toprak-ground) (-)
Servo
+5 volt
(5V)
Kablo
X
1
X
8
p. 48
Devre 8: Servo Motor
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
a b c d e
a b c d e
f g h i
f g h i
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
5V
GND
Atlama Kablosu
a6
Atlama Kablosu
Atlama Kablosu
b5
Atlama Kablosu
+
+
e7
Atlama Kablosu
a7
e6
Atlama Kablosu
Pin 9
e5
Atlama Kablosu
Atlama Kablosu
e5 e6 e7
Gerçek Görünüm:
Servo Motor
Elemanlar:
File
Tools
Help
Show Sketch Folder
Add File...
Import Library
Verify / Compile
Edit Sketch
EEPROM
Ethernet
Firmata
LiquidCrystal
SD
Servo
SoftwareSerial
SPI
Stepper
Wire
Arduino’nuzu aldığınızda yeni bir cihazla kullanacaksanız, kütüphanenizi oluşturun
ve bunu bütün dünyayla paylaşın! Kütüphaneyi taslakta (sketch) kullanmak için
Sketch > Import Library kısmından seçiniz.
http://arduino.cc/playground
Herkes kendi kütüphanesini oluşturabilir, eğer yeni bir sensör veya çıktı(output)
cihazı kullanacaksanız yeni kütüphane yazabilirsiniz, tabiki şansınıza bağlı olarak daha
önce bunu birisi sizin için yapmış olabilir. Birçok Arduino kütüphanelerine ulaşmak
için Google veya Arduino Playground’ı kullanabilirsiniz.
http: //arduino.cc/en/Reference/Libraries
Arduino sağladığı kullanışlı dâhili komutlarla; basit giriş(input) ve çıkış(output)
işlemleri yapmanızı, mantık kullanarak karar vermenizi, matematik problemleri
çözmenizi sağlar. Arduino’nun asıl gücü ise bu platformu kullanan devasa
toplulukların yaptıkları çalışmaları paylaşma isteğidir. Arduino bir çok kullanışlı
kütüphaneye sahiptir. Bu örnekte kullandığımız servo kütüphanesi bunlardan biridir.
Standart kütüphaneler ve kullanım kılavuzları için siteyi ziyaret edebilirsiniz.
Kütüphaneler Kullanarak Ufkunuzu Genişletin
8
Arduino Kodu:
Circuit 2
Arduino IDE 'yi Aç// File > Examples > Arduino Kod > Devre # 8
Kod Notları:
#include kütüphaneyi (veya başka bir dosya) taslağınıza (sketch) ekleyen
özel bir önişlemcidir. Bu komutu kendiniz yazabilir veya hali hazırda
yüklü olan bir kütüphaneyi "sketch / import library" menüsünden
seçebilirsiniz.
#include <Servo.h>
Servo servo1;
servo1.attach(9);
Servo kütüphanesi servoyu kontrol etmenizi sağlayan yeni komut
imkanı sunar. Arduino’yu servo kontrolüne hazırlarken öncelikle her
servo için Servo”object” oluşturmanız gereklidir. (Biz “servo1” olarak
adlandırdık.) Ardından servoyu bir dijital pine eşleştirmeniz “attach”
gereklidir. (Biz pin 9'u kullanıyoruz.)
servo1.write(180);
Servo kütüphanesinde write() komutunu kullanarak servonun döneceği derece
aralığını (0-180) belirleyebiliriz. Şunu unutmayın, servo hareket için zaman
ihtiyaç duyar, ihtiyacınıza göre delay() komutu kullanarak kısa zaman aralıkları
tanımlayabilirsiniz.
Ne göreceğiz?
Servo motorunuzun farklı hızlarda
değişik konumlarda dönebildiğini
görebilirsiniz. Şayet motorunuz hareket
etmiyorsa bağlantılarınızı kontrol
ettikten sonra kodunuzun doğru
olduğundan emin olun ve upload edin.
Hatanın kaynağını görmek için arıza
tespit kısmına göz atın.
Sorun Giderme:
Gerçek Hayatta Uygulamaları:
Servo Dönmüyor:
Farklı renkli kabloları olmasına rağmen şaşırtıcı şekilde
motorun ters bağlanmış olması mümkün olabiliyor.
Muhtemelen sorununuz bundan kaynaklıdır.
Karşılaştığınız robot kollarda servo motorlar
kullanılmaktadır.
Çalışmamakta Israr Ediyor:
Muhtemelen (kırmızı ve kahverengi kablolar) 5 Volt ve
toprak(gnd) bağlantısı yanlış yapılmıştır.
Oldu Bitti :
Servonuz çalışıyor fakat kesik hareketler
gerçekleştiriyorsa ve Arduino üzerinde yanıp sönen bir
ışık var ise muhtemelen enerjiniz yetersizdir. Usb
yerine bir adaptör kullanmak bu sorunu çözecektir.
Devre #9
Buzzer
Pin 9
Buzzer
9
Bu devremizde dijital dünya ve analog dünya
arasında köprü kuracağız. Bunun için bir buzzer
(speaker) kullanacağız. Tek başına çok heyecan
verici bir şey olmasa da, bir saniyede yüzlerce kez
voltajı açıp kapadığınızda buzzer ses üretecektir.
Birden fazla üretilmiş sesi bir araya getirdiğinizde,
kendi müziğinizi elde edebilirsiniz! Bu devre ve
taslak klasik bir ses üretecektir. Sizi hayal kırıklığına
uğratmayacağız.
GND
Elemanlar:
(toprak-ground) (-)
Buzzer
Kablo
X
1
X
4
Buzzer kolayca breadboard
deliklerine uymazsa, hafifçe
döndürmeyi deneyin.
p. 52
Devre 9: Buzzer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
a b c d e
a b c d e
f g h i
f g h i
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Pin 9
5V
GND
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
i7
Atlama Kablosu
+
j9
Gerçek Görünüm:
Buzzer
Elemanlar:
+
j9
-
j7
return(x);
Fonksiyonunuz bir değeri alabilir. (‘’parametre”) ve başka bir değere
dönüştürebilir. Eğer fonksiyonunuza bir parametre atamak isterseniz,
fonksiyondan sonra gelen parantez içerisine bu değeri yazabilirsiniz. Eğer
parametre vermeyecekseniz parantez içerisini boş bırakabilirsiniz. Eğer
fonksiyonunuzdan bir değer çekecekseniz değer tipini fonksiyon isminizin önüne
yazın. Değeri çekmeye hazırsanız return() komutu ekleyin. Eğer değer
döndürmeyecekseniz fonksiyon isminizin önüne “void” ekleyin. ( setup() ve
loop() fonksiyonlarında görmüş olduğunuz gibi ) Kendi fonksiyonunuzu
yazdığınızda kodunuzu düzenli ve kullanımı kolay bir hale getirin.
}
x = parameter1 + parameter2;
int add(int parameter1, int parameter2)
{
int x;
Arduino içersinde her türlü şey için kullanılabilecek kocaman bir servet
barındırıyor. (Bknz: http://arduino.cc/en/Reference) Bunun yanı sıra kendi
fonksiyonlarınızı oluşturmak da oldukça basit. Örnek verecek olursak “add” iki
sayıyı bir toplayıp size sonucu verir.
Kendi Fonksiyonları Oluşturma
9
Arduino Kodu:
Arduino IDE 'yi Aç// File > Examples > Arduino Kod > Devre # 9
Kod notları:
char notes[] = "cdfda ag cdfdg gf ";
char names[] = {'c','d','e','f','g','a','b','C'};
tone(pin, frequency, duration);
Şimdiye kadar sadece sayısal verilerle çalıştık ama Arduino aynı
zamanda metinlerle de çalışabilir. Karakterlerin (tek karekterler,
harfler, numaralar, semboller) kendilerine ait tipleri mevcuttur.
Bu tipe “char” diyoruz. Bir karakter diziniz varsa çift tırnak
içerisinde tanımlanabilir. “string” olarak tanımlarsanız tek tırnak
içerisinde belirtilmelidir.
Arduino'nun kullanışlı komutlarından biri de tone()
fonksiyonudur. Bu fonksiyon bir çıkış pinini belirli bir frekansda
çalıştırabiliyor, böylece buzzer ve speakerlar için ideal hale geliyor.
Eğer belirli bir süre tanımlayacak olursanız(milisaniye cinsinden) o
süre zarfından ses oluşturacak ve ardından suracaktır. Eğer süre
belirmememişseniz, sonsuza kadar ses üretebilir.
(Tabiki noTone() komutu kullanarak bunu sonlandırabilirsiniz.)
Ne göreceğiz?
Tabi bir şey duymuyor olmanızda
mümkün. Eğer çalışmamışsa
bağlantılarınızı kontrol ettikten ve
kodunuzu gözden geçirdikten sonra
tekrar upload edin ve hata devam
ederse sorun giderme kısmına göz atın.
Sorun Giderme:
Ses Yok
Breadboard üzerindeki boşlukları karıştırmış olmanız
mümkün. Cihaz yerleşimini tekrar kontrol edin.
Müzik Çalarken Düşünemiyorum
O halde düşünürken cihazınızı sökün, kullanacağınız
zaman programı upload edip tekrar monte edin.
Twinkle Twinkle Little Stars Şarkısından Sıkıldım
Nasıl yapacağınızı öğrendiğinize göre artık kendi
şarkılarınızı upload edebilirsiniz.
Gerçek Hayatta Uygulamaları:
Modern megafonlarda güçlendirilmiş buzzerlar
kullanılıyor. Gerçekten fazla gürültülü olmalarına
rağmen insanların ilgisini çekmekte yeterince etkili.
Devre #10
Motor Döndürmek
Pin 9
Servo motorlarla oynadığınız zamanlardan öncesini
hatırlayın. Şimdi biraz da motorun dönüşüyle
uğraşacağız. Bunun için transistore ihtiyacımız var
çünkü transistorler Arduino’nun yapabildiğinden
daha büyük miktarlarda akım dönüştürebiliyor.
Transistor kullandığınızda maximum seviyesine
bakarak kullanımınız için yeterince uygun olup
olmadığına karar verin. Bu devre için 40V ve 200
mA'lık transistor işimizi görür. Oyuncak
moturumuz için yeter de artar!
Direnç
(330ohm)
(turuncu-turuncu-kahverengi)
base
transistör
P2N2222AG
emitter
collector
Multimetre
Diyot
motor
10
GND
(toprak-ground) (-)
Transistör ve Sıcaklık Sensörü birbirlerie
çok benzeyen devre elemanlarıdır.
Karıştırılmamaya dikkat edilmelidir.
+5 volt
Transistör
DC Motor
Diyot
P2N2222AG
1N4148
1
X
1
X
1
330Ω
Direnç
X
6
X
1
P2N2
222A
A18
X
Kablo
FRONT
P2N2
222A
A18
Elemanlar:
(5V)
BACK
p. 56
Devre 10: Motor Döndürmek
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
a b c d e
a b c d e
f g h i
f g h i
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Gerçek Görünüm:
e3 d11
+
5V
GND
Atlama Kablosu
Atlama Kablosu
+
Atlama Kablosu
j2
a7
Pin 9
e1
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
e2 eg2
e7
11
330Ω Direnç
5V
e7 e11
DC Motor
b11
a3
GND
b7
a1 a2 a3
Diode 1N4148
Transistor P2N2222AG
Elemanlar:
P2N2
222A
A18
Eğer yardıma ihtiyaç duyarsanız bunun için kullanabileceğiniz internet
forumları var. arduino.cc/forum adresindeki Arduino forumunu
deneyebilirsiniz. Bunun yanı sıra forum.sparkfun.com adresinden ve
forum.arduinoturkiye.com da sizlere yardımcı olacaktır. İşi ilerletmeye hazır
olduğunuzda daha ileri seviye konular için arduino.cc/en/Tutorial sayfasından
Arduino Tutorial sayfasına uğrayabilirsiniz. Sonunda, havalı bir şeyler
ürettiğiniz vakit, bunu bütün dünyayla paylaşın ki bütün dünya dahiliğinizden
faydalanabilsin. (Ve bizim bundan haberdar olmamızı sağalayın ki bunu
anasayfamızda paylaşabilelim!)
Birçok input sensörü ve output cihazının nasıl çalıştığı hakkında epey bilgi
verdik. (Bir kaç cihazımız ve sensörümüz daha var tabi) Artık öğrendiklerinizi
kendi taslağınızda özgürce kullanabilirsiniz. İşte bu “Açık Kaynak” akımının
ardında yatan fikrin ta kendisidir. Farklı taslaklardan(sketch) parçalar toplamak
ve bunları birleştirip yeni şeyler üretmek fazlasıyla kolay, tek yapmanız gereken
iki adet pencere açmak ve birinden diğerine kopyalayıp yapıştırmak. Bu yüzden
“iyi programlama alışkanlığı” fikrini aşılıyoruz. Aynı pin numaralarını
kullanmak ve taslağınızı fonksiyonlara ayırmak, kodunuzun yeniden
kullanılabilirliğini kolaylaştırır. Örneğin bir kodun iki bölümü için aynı pini
kullanıyorsanız kolaylıkla ikisinden birinin pinini değiştirebilirsiniz.(Şunu
unutmayın ki büyün pinler analogWrite() desteğine sahip değil, uyumlu olanlar
devre kartınızda işaretli bulunuyor.)
1. input denemesi yapın.
2. Bazı hesaplamalar yapın ve karar verin.
3. Output almaya çalışın.
4. Tekrar edin!(Veya etmeyin size kalmış.)
Yazdığını bir çok taslak (sketch) aşağıdakilerin bir kaçını veya hepsini içerecek:
Muhtemelen bu noktada devreniz için eğlenceli bir fikriniz veya bir sorunu
çözmeye yönelik çözüm öneriniz olabilir. Harika! O halde biz de size genel
programlama konusunda bir kaç püf noktası önerelim.
Hepsini bir araya getirirsek:
10
Arduino Kodu:
Arduino IDE 'yi Aç// File > Examples > Arduino Kod > Devre # 10
Kod Notları:
while (Serial.available() > 0)
speed = Serial.parseInt();
Arduino seri portları data gönderimi için olduğu gibi data alımı için
de kullanılabilir çünkü herhangi bir zaman da data aktarımı olabilir.
Arduino siz bu bilgiyi kullanana kadar depolar ve korur.
The Serial.available() komutu portunuza ulaşmış fakat taslağınızda
(sketch) henüz kullanılmamış olan karakter numaralarını geri getirir.
Sıfır, ulaşmış data yok anlamına gelir.
Portunuzda bekleyen hali hazırda datanız mevcut ise,
kullanacabileceğiz bir kaç yöntem var. Port içerisine sayıları
girmeye başladığımızdan beri Serial.parselnt() komutu ile
ayırma ve integer numaraları kendisini oluşturan karakterlere
ayrıştırmak için kulllanıyoruz. Eğer portunuza “1” ”0” ”0”
yazarsanız, bu fonksiyon bu numaraları 100 olarak çevirecektir.
Ne göreceğiz?
Eğer bileşenleri doğru yerleştirmişseniz DC
motorunuzun çalışması gerek. Eğer
çalışmıyorsa arıza tespit kısmını kontrol
edin.
Sorun Giderme:
Motor Dönmüyor
Kendi transistörünüzü kullanıyorsanız, data sheeti
iki kez kontrol ederek pinout’un P2N2222AG ile
uyumlu olup olmadığını tespit edin.
Çalışmamaya Devam Ediyor
Kendi motorunuzu kullanıyorsanız motorunuzu
5V ile çalıştırmayı deneyin ve daha fazla güç çekip
çekmediğini kontrol edin.
Çalışmamakta Israrcı
Bazen Arduino bilgisayarla bağlantısını koparabilir.
USB girişinizi çıkarıp tekrar takın.
Gerçek Hayatta Uygulamaları:
Radio Kontrollü RC arabalar, DC motor kullanılar.
11
Devre #11
Röle
Pin 2
Direnç
(330ohm)
(turuncu-turuncu-kahverengi)
base
5 volt
Bu devrede, röle kontrolü için Devre#10' da öğrendiklerimizi
kullanacağız. Röle basitçe söyleyecek olursak elektriksel
olarak kontrol edilen mekanik bir anahtardır. Bu zararsız
görünen plastik kutunun içerisinde elektromagnet
bulunuyor. Ne zaman ki fazla enerji ile yüklenirse anahtarı
açıyor. Bu devrede Arduino’nuza daha güçlü yetenekler
kazandırmayı ve bir röleyi profesyonelce kullanmayı
öğreneceksiniz.
transistör
P2N2222AG
emitter
collector
Direnç
(330ohm)
(turuncu-turuncu-kahverengi)
com
coil
Diyot
NC
NO
LED
Röle kapalıyken, COM(common) pini NC
(Normally Closed) pinine bağlanır.
Röle açıkken, COM(common) pini NO
(Normally Open) pinine bağlanır.
LED
5 volt
GND
Elemanlar:
(toprak-ground) (-)
Röle
Transistör
Diyot
P2N2222AG
X
1
X
8
X
1
LED
330Ω
Direnç
1N4148
X
1
X
2
Kablo
X
2
14
X
p. 60
Devre 11: Röle
Emre A.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
a b c d e
a b c d e
f g h i
f g h i
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Gerçek Görünüm:
i13 e22
i15 e19
Atlama Kablosu
Atlama Kablosu
+
h9
j9
Atlama Kablosu
j3
j5
j7
Pin 2
e2
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
5V
330Ω Direnç
e2 eg2
e7
11
e3 eg3
e7
11
b11
a3
-
5V
+
-
c22 c23
+
c19 c20
330Ω Direnç
+
+
a2 a3 a4
GND
b7
-
-
e9 f9
e15 f15
Diyot 1N4148
LED (5mm)
LED (5mm)
Transistör P2N2222AG
Röle
Elemanlar:
P2N2
222A
A18
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
5V
GND
+
e4 e9
a7 a9
Atlama Kablosu
+ e19
+
a23
e15
+ e19
e15
f7
f5 f6e19
e15
+
a20
b14 e19
Gerçek Görünüm:
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Elemanlar:
11
Arduino Kodu:
Arduino IDE 'yi Aç// File > Examples > Arduino Kod > Devre # 11
Kod Notları:
digitalWrite(relayPin, HIGH);
digitalWrite(relayPin, LOW);
Transistör çalışmaya başladığında röle bobinine enerji sağlar.
Böylece röle anahtarı(switch) kapanır. Bu kapanma ile rölenin
COM pini NO(Normally Open) pinine bağlanmış olur. Bağlantı
sağlandıktan sonra pinler çalışmaya başlayacaktır. (Biz çalıştığını
görmeniz için LED kullandık ama başka bir şey de kullanılabilir
tabi ki.)
Röle NC denen ilave bir bağlantıya sahiptir. Röle kapalı olduğunda
NC pini COM pini ile bağlantı kurar. Rölenin açık veya kapalı
olmasına bağlı olarak iki pinden birini kullanabilirsiniz. Aynı
zamanda bu iki pini iki cihazın enerjisini değiştirmek için de
kullanabilirsiniz.
Ne göreceğiz?
Röle bağlantı klik sesini duymuş
olmanız gerek ve ardından 1
saniyelik aralıkta LED'leri
aydınlıklarını kendi aralarında
değiştirdiklerini görebilirsiniz. Eğer
devreniz çalışmamışsa devre
kurulumunuzu kontrol edin,
kodlarınızı tekrar upload edin.
Sorun Giderme:
Gerçek Hayatta Uygulamaları:
LED Işık Vermiyor
LEDi doğru taktığınızdan emin olun. Uzun olan uç
pozitif uçtur.
Garaj kapılarını açmak için röle kullanılır. Eğer
dikkatli dinlerseniz klik sesini duyabilirsiniz.
Klik Sesi Gelmiyor
Transistör veya bobin çalışmıyorsa transistörün doğru
şekilde takılı olduğundan emin olun.
Çalışmamakta Israrcı
Röle breadboard ile kullanılmak için değil
lehimlenmek için dizayn edilmiş olabilir. Breadboard
deliklerine tam oturması için gerektiği kadar ittirmeyi
deneyin.
12
Devre #12
Shift Register
+5 volt
+5 volt
Şimdi de entegre devrelere adım atıyoruz. Bu devremizde
shift register hakkında her şeyi öğreneceksiniz. Shift register
Arduinonuza ilaveten 8 output verir ve Arduino'nun sadece
3 pini kullanılır. Bu devrede 8 adet LED 'i kontrol etmek için
shift register kullanacağız.
(330ohm)
Direnç
LED'ler
(turuncu-turuncu-kahverengi)
15 16 10
1
11
2
12
3
14
Pin 3
clock
44
Pin
latch
Pin 2
data
4
5
6
7
8
13
GND
Elemanlar:
(toprak-ground) (-)
IC
LED
X
1
Kablo
330Ω
Direnç
X
8
X
8
19
X
QB
1
16
QC
2
15
VCC
QA
QD
3
14
SER
QE
4
13
OE
QF
5
12
RCLK
QG
6
11
SRCLK
QH
7
10
SRCLR
GND
8
9
QH’
Breadboard üzerinde “e5”
ve “f5” arasında çentiği
hizalayın.
Bacakları 90° bükün.
p. 64
Devre 14: Shift Register
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
a b c d e
a b c d e
f g h i
f g h i
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
GND
j18
GND
j21
GND
j24
GND
+
330Ω Direnç
330Ω Direnç
330Ω Direnç
Atlama Kablosu
+
a3
c24
a3
c24
a3
c24
a3
c24
a3
a24
a3
a21
a3
GND
j15
-
330Ω Direnç
+
h23 h24
-
GND
c23
+
+
h20 h21
-
330Ω Direnç
-
LED (5mm)
+
+
h17 h18
-
GND
c23
-
LED (5mm)
+
+
h14 h15
-
330Ω Direnç
-
LED (5mm)
+
+
c23 c24
a18
a3
-
LED (5mm)
+
-
GND
c23
-
LED (5mm)
+
-
c20 c21
+
c17 c18
-
330Ω Direnç
-
LED (5mm)
+
+
+
c14 c15
a15
a3
-
LED (5mm)
+
f5 f6 f7 f8 f9 f10 f11 f12
e5 e6 e7 e8 e9 e10 e11 e12
330Ω Direnç
-
Gerçek Görünüm:
LED (5mm)
IC
Elemanlar:
GND
Atlama Kablosu
Pin 3
Pin 4
Pin 2
5V
Gerçek Görünüm:
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Atlama Kablosu
Elemanlar:
a14
a3
+
a3
+
a3
a14
a3
j6
a3
a5
a3
a6
a3
a7
a3
a
11
a3
a
10
a3
a9
a3
a8
a3
+
a14
a3
+
j10
GND
a14
GND
a17
GND
a20
GND
a23
GND
f23
GND
f20
GND
f17
GND
f14
GND
j11
j10
j9
GND
j8
j7
GND
j6
GND
j5
GND
+
12
Arduino Kodu:
Arduino IDE 'yi Aç// File > Examples > Arduino Kod > Devre # 2
Kod Notları:
SPI(Serial Peripheral Interface) arayüzünü kullanmak için shift register
(ve birçok farklı parça) ile iletişim kuracaksınız. MSBFIRST parametresi
shiftOut(datapin, clockpin, MSBFIRST, data);
bireysel bitlere gönderilen komutları belirler, bu durumda MSBFIRST
gönderiyoruz.
Bitler bilgisayar hafızasının en küçük yapı taşlarıdır, her bit 1 veya 0
depolayabilir. Daha büyük sayılar bitlerden oluşan dizilerle depolanır. Bazen
bitWrite(data,desiredPin,desiredState);
bu bitler üzerinde oynama yapmak isteriz. Örneğin 8 biti shift register'a
gönderiyoruz ve LED'i açıp kapatması için 1 veya 0 yapmasını istiyoruz.
Arduino bitWrite() gibi basit komutlarıyla bu işlemi gerçekleştirebiliyor.
Ne göreceğiz?
Devre 4’ te olduğu gibi LED 'in
yandığını görmeniz gerek (Tek fark
shift register kullandık.) Eğer LED
ışık vermiyorsa bağlantılarınızı
kontrol edin ve kodunuzu tekrar
upload edin.
Sorun Giderme:
LED Patladı
Bu bir çok kez başımıza geldi. Sebebi entegrenin ters
takılmasından kaynaklanıyor. Eğer hemen
düzeltirseniz hiçbir şeyi bozmadan durumu
kurtarabilirsiniz.
Çalışmamaya Devam Ediyor
Sürekli aynı şeyi söylüyoruz ama muhtelemen
kablolar yanlış takılmıştır.
Gerçek Hayatta Uygulamaları:
Devre 4 mantığı ile, birden çok LED kullanarak kayan
yazı ekranları yapabilirsiniz.
Ve Sonuna Geldik.
Sitemizi ziyaret edebilirsiniz!
Mühendisler, Teknik Elemanlar, Maker'lar, Hacker'lar, hobi
elektronik seven herkes için açık kaynaklı bir çok yerli ve yabancı
kaynaktan yararlanarak sizler "AkademikPort Arduino
Başlangıç Projeleri" eğitimini hazırladık. Daha çok eğitim ve
projelere ulaşmak için www.akademikport.com adresini ziyaret
edebilirsiniz. Bir sonraki eğitimde görüşmek üzere.
Emre ARSLAN
AkademikPort Kurumsal İllişkiler Koordinatörü
Kaynak
Sparkfun SIK GUIDE
Adafruit.com
Arduino - Coşkun Taşdemir
Instructables.com
NOTLAR
11
Ve Sonuna Geldik.
Sitemizi ziyaret edebilirsiniz!
Mühendisler, Teknik Elemanlar, Maker'lar, Hacker'lar, hobi
elektronik seven herkes için açık kaynaklı bir çok yerli ve yabancı
kaynaktan yararlanarak sizler "AkademikPort Arduino Başlangıç
Projeleri" eğitimini hazırladık. Daha çok eğitim ve projelere
ulaşmak için www.akademikport.com adresini ziyaret
edebilirsiniz. Bir sonraki eğitimde görüşmek üzere.
Emre ARSLAN
AkademikPort Kurumsal İllişkiler Koordinatörü
Kaynak
Sparkfun SIK GUIDE
Adafruit.com
Arduino - Coşkun Taşdemir
Instructables.com
NOTLAR
11

Benzer belgeler

11 - E-Kitap - AkademikPort

11 - E-Kitap - AkademikPort Bu proje, bir önceki bölümde yaptığımız "Saatli Bomba" projesi ile aynı mantıkla çalışmaktadır. Farklı olan nokta ise 555 entegresinden gelen sinyalin, BC547 transistörünün anahtarlamasını aktif ed...

Detaylı