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
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...