Elektrik Elektronik Teknolojisi Alanı Temrinleri

 
Hoşgeldiniz Ziyaretçi. Lütfen giriş yapın veya kayıt olun.

Kullanıcı adınızı, şifrenizi ve aktif kalma süresini giriniz

İletileri Göster

Bu özellik size üyenin attığı tüm iletileri gösterme olanağı sağlayacaktır . Not sadece size izin verilen bölümlerdeki iletilerini görebilirsiniz


Mesajlar - Hasan ERTÜRK

Sayfa: 1 ... 29 30 [31] 32 33 ... 45
452
Projeler / 6. PIR Sensör Kontrollü Çakar Lamba Uygulaması
« : 26 Eylül 2015, 21:22:01 »
<iframe width="640" height="385" src="//www.youtube.com/embed/sa9ofckCLbw?fs=1&start=" frameborder="0" allowfullscreen></iframe>

Bu dersimizde PIR sensör kontrollü çakar lamba uygulaması yaparken PIR sensör ve röle modülünün de nasıl kullanılacağını öğreneceğiz.

Soru:
Sistemde hareket algılamak üzere 1 adet PIR sensör ve 2 adet lamba bulunmaktadır. PIR sensör hareket algıladığında birinci lamba 250'şer ms aralıklarla 3 defa yanıp sönerken, ikinci lambanın sönük kalması ve birinci lamba 3 kere flash çaktıktan sonra ikinci lambanın 3 kere 250 ms aralıklarla yanıp sönerken birinci lambanın sönük kalması istenmektedir. Bu senarya 6 kere tekrarlanacak ve ortaamdaki hareketlilik sona erdiyse sistem duracaktır. Hareketlilik devam ediyorsa yukarıdaki senarya tekrar uygulamaya sokulacaktır.

Çözüm:
Öncelikle bizden ne istendiğinin net bir şekilde anlaşılması için söz konusu senaryoya ait akış diyagramını hazırlayalım. Daha sonra oluşturduğumuz bu akış diyagramından program yazarken faydalanacağız.



Bu akış diyagramına göre yazılması gereken program şu şekilde olacaktır:
int pir_sensor_cikisi=A0;               // A0 PİNİNE pir_sensor_cikisi ADI VERİLDİ
int lamba=0;                            // D0 PİNİNE lamba ADI VERİLDİ
int lamba2=1;                           // D1 PİNİNE lamba2 ADI VERİLDİ

void setup() 
{
  pinMode(pir_sensor_cikisi, INPUT);    // A0 PİNİ PIR SENSÖRÜNÜ BAĞLAMA AMACIYLA GİRİŞ YAPILDI
  pinMode(lamba, OUTPUT);               // D0 PİNİ BİRİNCİ LAMBAYI BAĞLAMA AMACIYLA ÇIKIŞ YAPILDI  
  pinMode(lamba2, OUTPUT);              // D1 PİNİ İKİNCİ LAMBAYI BAĞLAMA AMACIYLA ÇIKIŞ YAPILDI  
}

void loop() 
{
// DİKKAT RÖLE SHILD LOW AKTİF ÇALIŞMAKTADIR
if (digitalRead(pir_sensor_cikisi) == HIGH ) // PIR SENSOR ÇIKIŞI AKTİF İSE
    {
    for (int yak_sondur = 1; yak_sondur <= 6;  yak_sondur ++)      
      { 
       digitalWrite(lamba, LOW);           // BİRİNCİ LAMBAYI YAK
       digitalWrite(lamba2, HIGH);         // İKİNCİ LAMBAYI SÖNDÜR       
       delay(250);                         // 250ms BEKLE
       digitalWrite(lamba, HIGH);          // BİRİNCİ LAMBAYI SÖNDÜR
       digitalWrite(lamba2, HIGH);         // İKİNCİ LAMBAYI SÖNDÜR       
       delay(250);                         // 250ms BEKLE
       digitalWrite(lamba, LOW);           // BİRİNCİ LAMBAYI YAK
       digitalWrite(lamba2, HIGH);         // İKİNCİ LAMBAYI SÖNDÜR       
       delay(250);                         // 250ms BEKLE
       digitalWrite(lamba, HIGH);          // BİRİNCİ LAMBAYI SÖNDÜR
       digitalWrite(lamba2, HIGH);         // İKİNCİ LAMBAYI SÖNDÜR       
       delay(250);                         // 250ms BEKLE
       digitalWrite(lamba, LOW);           // BİRİNCİ LAMBAYI YAK
       digitalWrite(lamba2, HIGH);         // İKİNCİ LAMBAYI SÖNDÜR       
       delay(250);                         // 250ms BEKLE
       digitalWrite(lamba, HIGH);          // BİRİNCİ LAMBAYI SÖNDÜR
       digitalWrite(lamba2, HIGH);         // İKİNCİ LAMBAYI SÖNDÜR       
       delay(250);                         // 250ms BEKLE

       digitalWrite(lamba, HIGH);          // BİRİNCİ LAMBAYI SÖNDÜR
       digitalWrite(lamba2, LOW);          // İKİNCİ LAMBAYI YAK       
       delay(250);                         // 250ms BEKLE
       digitalWrite(lamba, HIGH);          // BİRİNCİ LAMBAYI SÖNDÜR
       digitalWrite(lamba2, HIGH);         // İKİNCİ LAMBAYI SÖNDÜR       
       delay(250);                         // 250ms BEKLE
       digitalWrite(lamba, HIGH);          // BİRİNCİ LAMBAYI SÖNDÜR
       digitalWrite(lamba2, LOW);          // İKİNCİ LAMBAYI YAK       
       delay(250);                         // 250ms BEKLE
       digitalWrite(lamba, HIGH);          // BİRİNCİ LAMBAYI SÖNDÜR
       digitalWrite(lamba2, HIGH);         // İKİNCİ LAMBAYI SÖNDÜR       
       delay(250);                         // 250ms BEKLE
       digitalWrite(lamba, HIGH);          // BİRİNCİ LAMBAYI SÖNDÜR
       digitalWrite(lamba2, LOW);          // İKİNCİ LAMBAYI YAK       
       delay(250);                         // 250ms BEKLE
       digitalWrite(lamba, HIGH);          // BİRİNCİ LAMBAYI SÖNDÜR
       digitalWrite(lamba2, HIGH);         // İKİNCİ LAMBAYI SÖNDÜR       
       delay(250);                         // 250ms BEKLE
    
      }
     }
    else
      { 
       digitalWrite(lamba, HIGH);           // BİRİNCİ LAMBAYI SÖNDÜR
       digitalWrite(lamba2, HIGH);          // İKİNCİ LAMBAYI SÖNDÜR   
       delay(250);                         // 250ms BEKLE    
      }    
  
}









PIR sensörünün Vcc pini arduinonun 5V pinine ve ya 3,5Volt pinine
PIR sensörünün GND pini arduinonun GND pinine
PIR sensörünün OUT pini arduinonun A0 pinine
Röle modülünün Vcc pini arduinonun 5V pinine
Röle modülünün GND pini arduinonun GND pinine
Röle modülünün IN1 pini arduinonun D0 pinine
Röle modülünün IN2 pini arduinonun D1 pinine bağlanmalıdır.

Ayrıca röle modülünün RL1 ve RL2 çıkışlarına birer lamba bağlanır. Nasıl bağlanacağını bilmeyenler sorabilirler.Yanlış bağlantı yapılması durumunda devrede kullanılan malzemelerin zarar görmesi muhtemeldir.

453
<iframe width="640" height="385" src="//www.youtube.com/embed/PjmMJm6Qrto?fs=1&start=" frameborder="0" allowfullscreen></iframe>



Bu dersimizde ileride yapacağımız bazı uygulamalarda da lazım olacak olan joystick ile dc motor hız ayarının yapılmasını öğreneceğiz.

Devrenin çalışma prensibi:
Arduinomuzun analog 5. girişe Joystick modülünün Y çıkışı bağlanmıştır. Aslında Joystick modül 2 adet potansiyometreden ibarettir. Joysticke müdahale edilmediğinde içindeki her iki potansiyometre orta konumdadır. Potansiyometrelerin birer uçları +VCC'ye,diğer uçları da GND'ye bağlandığında orta uçlarında 5 voltun yarısı olan 2,5 volt görünür. O halde Joystick kolunu aşağıya doğru indirdiğimizde analog 5. girişe giden orta uçtaki gerilim 2,5 Volt ile 0 Volt arasında değişim gösterir. Bu değişim de arduino içindeki program tarafından değerlendirilerek dijital 5. çıkışta dc motoru sürecek olan pwm sinyalini elde etmiş oluruz. Değişken bir pwm sinyali de motoru da değişik hızlarda dönmesini sağlar.

Arduino kodlarımız:
Kod: [Seç]
int gaz_pedali=A5;                    // GAZ PEDALI ANALOG 5 PİNİNE BAĞLANACAK
int motor=5;                          // MOTORA DİJİTAL 5 PİNİNDEN ENERJİ VERİLECEK
int hiz;                              // HIZ TANIMLAMASI

void setup()
{
 
}

void loop()
{
  // MOTOR HIZI AYARI BURADA BAŞLADI
  hiz= analogRead(gaz_pedali);        // GAZ PEDALINDAKİ VOLTAJI OKU
  hiz= map(hiz, 511, 0, 0, 255);      // OKUNAN 5 VOLT İLE 0 VOLT ARASINDAKİ VOLTAJI HIZA DÖNÜŞTÜR
  analogWrite(motor, hiz);            // HESAPLANAN HIZI MOTORA AKTAR
  delay(10);                          // 10 ms BEKLE
  // MOTOR HIZI AYARI BURADA BİTTİ
}

ISIS devre şeması:
Devre şemasına ait dosyakonu ekinde mevcuttur.



454
Projeler / 5. Sobadan kalorifer yapalım
« : 21 Eylül 2015, 06:22:27 »
Bu dersimizde kömür sobasını kalorifer olarak kullanmayı öğreneceğiz.

Yapacağımız sistemin özellikleri:
1. Sistemin çalışması ve güvenlik tedbirleri arduino ile kontrol edilmektedir.

2. Sistemin elektrik kesilmelerine karşı güvenlik tertibatı mevcut olup, elektrik kesintisi durumunda kesintisiz güç kaynağı ile beslenmektedir.

3. Sistemde suyun aşırı ısınması durumunda suyun buhar basıncı oluşturması önlenmiş böylece kazanın patlama riskinin önüne geçilmiştir. Alışıla gelmiş sistemlerde suyun aşırı ısınması sonucunda buhar basıncı oluşmakta ve bu basınçlı buhar bazı güvenlik tedbirleriyle dışarıya atılmaktadır. Oysa ki bu sistemde kesinlikle buhar basıncı oluşmamaktadır ve daha güvenlidir.

4. Kazan suyunun her hangi bir nedenle eksilmesi durumunda sistem bir selenoid valfi açarak şehir şebekesinden otomatik olarak su takviyesi yapmaktadır.

5. Yapılan gözlemlerde kazanda ısınan suyun 5 dakikada en son peteğe ulaştığı gözlenmiştir. Yapılan denemeler neticesinde su pompasının 5'şer dakika aralıklarla çalıştırılıp durdurulmasıyla peteklerin daha fazla ısındığı gözlendi. Bu nedenle arduino programı pompayı 5'şerdakika aralıklarla çalıştırıp durduracak şekilde hazırlanmıştır.

6. Sistem 100 metrekarelik bir dairede denenmiş ve peteklerin üzerindeki maksimum sıcaklık 70 derece olarak ölçülmüştür.

7. Sistem 1 KASIM - 20 MAYIS aralığında çalıştırılmış olup 2 ton kömür tüketmiştir.

8. Sistem; suyun eksik olması, suyun takviyesinin yapıldığı, pompanın çalıştığı ya da durduğu gibi olası periyotlar lcd ekranda görüntülenmekte olup kullanıcıyı bilgilendirmektedir.

9. Sistem deneme yanılma yoluyla bu halini almıştır. Tuğlalı soba yerine kovalı soba kullanılması durumunda sistemin daha verimli çalışacağı kanaati oluşmuş olup bu durumda üst kazan kullanmaya gerek yoktur.

10. Sistem bu haliyle 100 metrekarelik dairedeki 8 metrelik peteği besleyebilmiştir.

11. İsteğe bağlı olarak petek sıcaklığı lcd displayde görüntülenebilmektedir.

Malzeme ve araç gereç listesi:
1. 2 tabaka sac
2. Yemek kazanı (36 litre)
3. Kesintisiz güç kaynağı
4. Kömür sobası
5. Arduino uno
6. 16 x 2 lcd shild
7. BC 238 transistör
8. BC 307 transistör
9. Devirdaim pompası
10. Selenoid valf
11. Led (2 adet)
12. 470R direnç (2 adet)
13. 1N4148 diyot (2 adet)
14. 5Volt röle (2 adet)
15. 100nF kondansatör
16. Köprü diyot
17. 220/9Volt 4 watt trafo
18. 1M direnç
19. Muhtelif iletkenler, kablolar
20. Born vidası (2 adet)
21. Kutu
22. Kablo kanalı
23. Lehimleme araç ve gereçleri
24. Baskı devre araç ve gereçleri
25. El ve güç aletleri
26. LM35

Arduino kodlarımız:
Bu kodlarla arduinomuzu programlıyoruz. İhtiyaç halinde arduino dosyasını konu ekinden indirebilirsiniz.
Kod: [Seç]
// TASARIM: HASANA ERTURK TRABZON MESLEKI VE TEKNIK ANADOLU LISESI 2015 EYLUL

// ALT PROGRAM SU EKSİK OLDUGUNDA POMPAYI DURDUR BASLADI
void su_kes()
{
  digitalWrite(0, HIGH); 
}
// ALT PROGRAM SU EKSİK OLDUGUNDA POMPAYI DURDUR BITTI

// LIKID KRISTAL KUTUPHANESİ EKLENIYOR
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int lcd_key     = 0;
int adc_key_in  = 0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5
// LIKID KRISTAL KUTUPHANESİ EKLENMESI TAMAMLANDI

int sensor=1;
const int sensorpini = 13;                // 13 NOLU PIN SENSOR PINIDIR
int sensor_durum = 0;
int SicaklikPin = 5;   // LM35 sensöre bağlı pin (Analog 0)
int OkunanDeger;       // Analog 0'dan okunacak değer (0-1023) LM35'in vereceğı en büyük okuma değeri 1V=205 olacak.
int Sicaklik;          //

// PIN TANIMLAMALARI BURADA BASLADI
void setup()
{
  lcd.begin(16, 2);             
  lcd.setCursor(0,0);
  lcd.print("temrinlerim.org");                   // ACILISTA LCDDE OKUNACAK YAZI
  pinMode(0, OUTPUT);                             // 0 NOLU PIN SELONOIDI KONTROL EDER
  pinMode(1, OUTPUT);                             // 1 NOLU PIN POMPAYI KONTROL EDER
  pinMode(2,INPUT);                               // INTERPUT KESME ISLEMI GİRİSİ
  pinMode(13,INPUT);                              // 13 NOLU PIN SENSOR GIRIS PINIDIR
  attachInterrupt(0, su_kes, RISING);             // 2 NOLU PIN LOJIK 1 OLDUGUNDA KESMEYI DEVREYE SOKAR su_kes FONKSIYONU CALISMAYA BASLAR
}
// PIN TANIMLAMALARI BURADA BITTI

// ANA PROGRAM BURADA BASLADI
 void loop()
{
  sensor_durum = digitalRead(sensorpini);
  if (sensor_durum == HIGH)
  {
  sensor = digitalRead(13);                       // 13 NOLU PINDEKI LOJIK SEVİYEYI OKU
  digitalWrite(0, sensor);                        // 13 NOLU PINDEKI LOJIK SEVİYE NE İSE 0 NOLU PINE AKTAR
  digitalWrite(1, sensor);                        // 13 NOLU PINDEKI LOJIK SEVİYE NE İSE 1 NOLU PINE AKTAR
  lcd.clear();                                    // LCD TEMIZLE
  OkunanDeger = analogRead(SicaklikPin); 
  Sicaklik = map (OkunanDeger, 0, 205, 0, 100);   //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR
  lcd.setCursor(0,0);                             // ILK SATIRA YAZ   
  lcd.print("PETEK: ");                           // ILK SATIRA PETEK: YAZILDI       
  lcd.print(Sicaklik);                            // DEVAMINA HESAPLANAN SICAKLIK YAZILDI
  lcd.print(" DERECE");                           // DEVAMINA SICAKLIK BİRİMİ YAZILDI
  lcd.setCursor(0,1);                             // IKINCI SATIRA YAZ
  lcd.print("POMPA CALISIYOR");                   // IKINCI SATIRA POMPA START YAZILDI
  delay(60000);                                    // 1 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER)

    lcd.clear();                                    // LCD TEMIZLE
  OkunanDeger = analogRead(SicaklikPin); 
  Sicaklik = map (OkunanDeger, 0, 205, 0, 100);   //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR
  lcd.setCursor(0,0);                             // ILK SATIRA YAZ   
  lcd.print("PETEK: ");                           // ILK SATIRA PETEK: YAZILDI       
  lcd.print(Sicaklik);                            // DEVAMINA HESAPLANAN SICAKLIK YAZILDI
  lcd.print(" DERECE");                           // DEVAMINA SICAKLIK BİRİMİ YAZILDI
  lcd.setCursor(0,1);                             // IKINCI SATIRA YAZ
  lcd.print("POMPA CALISIYOR");                   // IKINCI SATIRA POMPA START YAZILDI
  delay(60000);                                    // 1 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER)

    lcd.clear();                                    // LCD TEMIZLE
  OkunanDeger = analogRead(SicaklikPin); 
  Sicaklik = map (OkunanDeger, 0, 205, 0, 100);   //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR
  lcd.setCursor(0,0);                             // ILK SATIRA YAZ   
  lcd.print("PETEK: ");                           // ILK SATIRA PETEK: YAZILDI       
  lcd.print(Sicaklik);                            // DEVAMINA HESAPLANAN SICAKLIK YAZILDI
  lcd.print(" DERECE");                           // DEVAMINA SICAKLIK BİRİMİ YAZILDI
  lcd.setCursor(0,1);                             // IKINCI SATIRA YAZ
  lcd.print("POMPA CALISIYOR");                   // IKINCI SATIRA POMPA START YAZILDI
  delay(60000);                                    // 1 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER)

    lcd.clear();                                    // LCD TEMIZLE
  OkunanDeger = analogRead(SicaklikPin); 
  Sicaklik = map (OkunanDeger, 0, 205, 0, 100);   //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR
  lcd.setCursor(0,0);                             // ILK SATIRA YAZ   
  lcd.print("PETEK: ");                           // ILK SATIRA PETEK: YAZILDI       
  lcd.print(Sicaklik);                            // DEVAMINA HESAPLANAN SICAKLIK YAZILDI
  lcd.print(" DERECE");                           // DEVAMINA SICAKLIK BİRİMİ YAZILDI
  lcd.setCursor(0,1);                             // IKINCI SATIRA YAZ
  lcd.print("POMPA CALISIYOR");                   // IKINCI SATIRA POMPA START YAZILDI
  delay(60000);                                    // 1 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER)

    lcd.clear();                                    // LCD TEMIZLE
  OkunanDeger = analogRead(SicaklikPin); 
  Sicaklik = map (OkunanDeger, 0, 205, 0, 100);   //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR
  lcd.setCursor(0,0);                             // ILK SATIRA YAZ   
  lcd.print("PETEK: ");                           // ILK SATIRA PETEK: YAZILDI       
  lcd.print(Sicaklik);                            // DEVAMINA HESAPLANAN SICAKLIK YAZILDI
  lcd.print(" DERECE");                           // DEVAMINA SICAKLIK BİRİMİ YAZILDI
  lcd.setCursor(0,1);                             // IKINCI SATIRA YAZ
  lcd.print("POMPA CALISIYOR");                   // IKINCI SATIRA POMPA START YAZILDI
  delay(60000);                                    // 1 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER)

    lcd.clear();                                    // LCD TEMIZLE
  OkunanDeger = analogRead(SicaklikPin); 
  Sicaklik = map (OkunanDeger, 0, 205, 0, 100);   //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR
  lcd.setCursor(0,0);                             // ILK SATIRA YAZ   
  lcd.print("PETEK: ");                           // ILK SATIRA PETEK: YAZILDI       
  lcd.print(Sicaklik);                            // DEVAMINA HESAPLANAN SICAKLIK YAZILDI
  lcd.print(" DERECE");                           // DEVAMINA SICAKLIK BİRİMİ YAZILDI
  lcd.setCursor(0,1);                             // IKINCI SATIRA YAZ
  lcd.print("POMPA CALISIYOR");                   // IKINCI SATIRA POMPA START YAZILDI
  delay(60000);                                    // 1 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER)

    lcd.clear();                                    // LCD TEMIZLE
  OkunanDeger = analogRead(SicaklikPin); 
  Sicaklik = map (OkunanDeger, 0, 205, 0, 100);   //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR
  lcd.setCursor(0,0);                             // ILK SATIRA YAZ   
  lcd.print("PETEK: ");                           // ILK SATIRA PETEK: YAZILDI       
  lcd.print(Sicaklik);                            // DEVAMINA HESAPLANAN SICAKLIK YAZILDI
  lcd.print(" DERECE");                           // DEVAMINA SICAKLIK BİRİMİ YAZILDI
  lcd.setCursor(0,1);                             // IKINCI SATIRA YAZ
  lcd.print("POMPA CALISIYOR");                   // IKINCI SATIRA POMPA START YAZILDI
  delay(60000);                                    // 1 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER)

    lcd.clear();                                    // LCD TEMIZLE
  OkunanDeger = analogRead(SicaklikPin); 
  Sicaklik = map (OkunanDeger, 0, 205, 0, 100);   //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR
  lcd.setCursor(0,0);                             // ILK SATIRA YAZ   
  lcd.print("PETEK: ");                           // ILK SATIRA PETEK: YAZILDI       
  lcd.print(Sicaklik);                            // DEVAMINA HESAPLANAN SICAKLIK YAZILDI
  lcd.print(" DERECE");                           // DEVAMINA SICAKLIK BİRİMİ YAZILDI
  lcd.setCursor(0,1);                             // IKINCI SATIRA YAZ
  lcd.print("POMPA CALISIYOR");                   // IKINCI SATIRA POMPA START YAZILDI
  delay(60000);                                    // 1 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER)

    lcd.clear();                                    // LCD TEMIZLE
  OkunanDeger = analogRead(SicaklikPin); 
  Sicaklik = map (OkunanDeger, 0, 205, 0, 100);   //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR
  lcd.setCursor(0,0);                             // ILK SATIRA YAZ   
  lcd.print("PETEK: ");                           // ILK SATIRA PETEK: YAZILDI       
  lcd.print(Sicaklik);                            // DEVAMINA HESAPLANAN SICAKLIK YAZILDI
  lcd.print(" DERECE");                           // DEVAMINA SICAKLIK BİRİMİ YAZILDI
  lcd.setCursor(0,1);                             // IKINCI SATIRA YAZ
  lcd.print("POMPA CALISIYOR");                   // IKINCI SATIRA POMPA START YAZILDI
  delay(60000);                                    // 1 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER)

 

  digitalWrite(1, LOW);                        // POMPA DURDU 
  lcd.clear();                                    // LCD TEMIZLE
  OkunanDeger = analogRead(SicaklikPin); 
  Sicaklik = map (OkunanDeger, 0, 205, 0, 100);   //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR
  lcd.setCursor(0,0);                             // ILK SATIRA YAZ   
  lcd.print("PETEK: ");                           // ILK SATIRA PETEK: YAZILDI       
  lcd.print(Sicaklik);                            // DEVAMINA HESAPLANAN SICAKLIK YAZILDI
  lcd.print(" DERECE");                           // DEVAMINA SICAKLIK BİRİMİ YAZILDI
  lcd.setCursor(0,1);                             // IKINCI SATIRA YAZ
  lcd.print("POMPA DURDU");                       // IKINCI SATIRA POMPA STOP YAZILDI
  delay(300000);                                    // 5 DAKIKA BEKLE (BU SURE SU ISINIRKEN POMPANIN DEVREDEN CIKACAGI SUREYI BELIRLER
  }
  else
  {
    delay(500);                                   // 500 ms BEKLE
    lcd.clear();                                  // LCD TEMIZLE
    digitalWrite(0, LOW);                         // 0 NOLU CIKIS LOJIK 0 OLDU SELONOID ACTI SU ALMA ISLEMI GERCEKLESIYOR
    lcd.setCursor(0,0);                           // ILK SATIRA YAZ
    lcd.print("SU NOKSAN");                       // ILK SATIRA SU NOKSAN YAZILDI
    lcd.setCursor(0,1);                           // IKINCI SATIRA YAZ
    lcd.print("SU TAMAMLANIYOR");                 // IKINCI SATIRA SU TAMAMLANIYOR YAZILDI
  }
}
// ANA PROGRAM BURADA BITTI

Devre şeması:
ISIS ve hex dosyasını konu ekinden indirebilirsiniz.


Baskı devremiz:
ARES dosyasını konu ekinden indirebilirsiniz.


Montaj aşamaları:














































Montajı tamamlanmış kartın test edilmesi:
Test işlemi sırasında 5'şer dakikalık gecikmeler 3 saniye yapılmıştır.
<iframe width="640" height="385" src="//www.youtube.com/embed/YSjF08ofT68?fs=1&start=" frameborder="0" allowfullscreen></iframe>

<iframe width="640" height="385" src="//www.youtube.com/embed/9Qsc4G-wqmA?fs=1&start=" frameborder="0" allowfullscreen></iframe>

<iframe width="640" height="385" src="//www.youtube.com/embed/RGQUHl9cvmA?fs=1&start=" frameborder="0" allowfullscreen></iframe>



Buraya kadar olan işlem basamakları tamamlandığında elektronik kartımız kullanıma hazır hale gelmiş oluyor.

Displeyde SU SOGUDU ve SU ISINDI şeklinde bilgilendirmeler görüntülenmekte. Bu ifadelerin yerine isteğe bağlı olarak petek suyu sıcaklığını gösterebiliriz. Bunun için programda ve devre şemasında bazı değişiklikler yapmamız gerekmekte. Devreye LM35 ısı sönsörünü aşağıdaki şemada gösterildiği şekilde ekliyoruz ve mevcut programımızı değiştiriyoruz.

Kod: [Seç]
// TASARIM: HASANA ERTURK TRABZON MESLEKI VE TEKNIK ANADOLU LISESI 2015 EYLUL

// ALT PROGRAM SU EKSİK OLDUGUNDA POMPAYI DURDUR BASLADI
void su_kes()
{
  digitalWrite(0, HIGH); 
}
// ALT PROGRAM SU EKSİK OLDUGUNDA POMPAYI DURDUR BITTI

// LIKID KRISTAL KUTUPHANESİ EKLENIYOR
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int lcd_key     = 0;
int adc_key_in  = 0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5
// LIKID KRISTAL KUTUPHANESİ EKLENMESI TAMAMLANDI

int sensor=1;
const int sensorpini = 13;                // 13 NOLU PIN SENSOR PINIDIR
int sensor_durum = 0;
int SicaklikPin = 5;   // LM35 sensöre bağlı pin (Analog 0)
int OkunanDeger;       // Analog 0'dan okunacak değer (0-1023) LM35'in vereceğı en büyük okuma değeri 1V=205 olacak.
int Sicaklik;          //

// PIN TANIMLAMALARI BURADA BASLADI
void setup()
{
  lcd.begin(16, 2);             
  lcd.setCursor(0,0);
  lcd.print("temrinlerim.org");                   // ACILISTA LCDDE OKUNACAK YAZI
  pinMode(0, OUTPUT);                             // 0 NOLU PIN SELONOIDI KONTROL EDER
  pinMode(1, OUTPUT);                             // 1 NOLU PIN POMPAYI KONTROL EDER
  pinMode(2,INPUT);                               // INTERPUT KESME ISLEMI GİRİSİ
  pinMode(13,INPUT);                              // 13 NOLU PIN SENSOR GIRIS PINIDIR
  attachInterrupt(0, su_kes, RISING);             // 2 NOLU PIN LOJIK 1 OLDUGUNDA KESMEYI DEVREYE SOKAR su_kes FONKSIYONU CALISMAYA BASLAR
}
// PIN TANIMLAMALARI BURADA BITTI

// ANA PROGRAM BURADA BASLADI
 void loop()
{
  sensor_durum = digitalRead(sensorpini);
  if (sensor_durum == HIGH)
  {
  sensor = digitalRead(13);                       // 13 NOLU PINDEKI LOJIK SEVİYEYI OKU
  digitalWrite(0, sensor);                        // 13 NOLU PINDEKI LOJIK SEVİYE NE İSE 0 NOLU PINE AKTAR
  digitalWrite(1, sensor);                        // 13 NOLU PINDEKI LOJIK SEVİYE NE İSE 1 NOLU PINE AKTAR
  lcd.clear();                                    // LCD TEMIZLE
  OkunanDeger = analogRead(SicaklikPin); 
  Sicaklik = map (OkunanDeger, 0, 205, 0, 100);   //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR
  lcd.setCursor(0,0);                             // ILK SATIRA YAZ   
  lcd.print("PETEK: ");                           // ILK SATIRA PETEK: YAZILDI       
  lcd.print(Sicaklik);                            // DEVAMINA HESAPLANAN SICAKLIK YAZILDI
  lcd.print(" DERECE");                           // DEVAMINA SICAKLIK BİRİMİ YAZILDI
  lcd.setCursor(0,1);                             // IKINCI SATIRA YAZ
  lcd.print("POMPA CALISIYOR");                   // IKINCI SATIRA POMPA START YAZILDI
  delay(3000000);                                    // 5 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER)
  lcd.clear();                                    // LCD TEMIZLE
  OkunanDeger = analogRead(SicaklikPin); 
  Sicaklik = map (OkunanDeger, 0, 205, 0, 100);   //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR
  lcd.setCursor(0,0);                             // ILK SATIRA YAZ   
  lcd.print("PETEK: ");                           // ILK SATIRA PETEK: YAZILDI       
  lcd.print(Sicaklik);                            // DEVAMINA HESAPLANAN SICAKLIK YAZILDI
  lcd.print(" DERECE");                           // DEVAMINA SICAKLIK BİRİMİ YAZILDI
  lcd.setCursor(0,1);                             // IKINCI SATIRA YAZ
  lcd.print("POMPA DURDU");                       // IKINCI SATIRA POMPA STOP YAZILDI
  delay(3000000);                                    // 5 DAKIKA BEKLE (BU SURE SU ISINIRKEN POMPANIN DEVREDEN CIKACAGI SUREYI BELIRLER
  }
  else
  {
    delay(500);                                   // 500 ms BEKLE
    lcd.clear();                                  // LCD TEMIZLE
    digitalWrite(0, LOW);                         // 0 NOLU CIKIS LOJIK 0 OLDU SELONOID ACTI SU ALMA ISLEMI GERCEKLESIYOR
    lcd.setCursor(0,0);                           // ILK SATIRA YAZ
    lcd.print("SU NOKSAN");                       // ILK SATIRA SU NOKSAN YAZILDI
    lcd.setCursor(0,1);                           // IKINCI SATIRA YAZ
    lcd.print("SU TAMAMLANIYOR");                 // IKINCI SATIRA SU TAMAMLANIYOR YAZILDI
  }
}
// ANA PROGRAM BURADA BITTI








Mekanik aksam ve su tesisatı














Yukarıda şeilde verilen ölçülerde kömür sobasının tuğlasının etrafına 14 litrelik bir alt kazan yaptırılır. Üst kazan 36 litredir. Yine yukarıda verilen ölçülerde bir boru yaptırılır.

Sistem üst kazandaki su eksildiğinde selenoid valfi devreye sokarak suyun şehir şebekesinden otomatik olarak tamamlanmasını sağlar.

Isınan suyun izlediği yol:
1. Isınan su şekilde 1 ile gösterilen noktadan üst kazandan devir daim pompasına
2. Devir daim pompasından peteklere
3. Petekleri dolaşan su borunun 2 ile gösterilen noktasına
4. Borunun 3 nolu noktasından alt kazanın 4 nolu girişine
5. Alt kazanın 5 nolu çıkışından üst kazanın 6 nolu girişine gider ve bu durum devir daim pompası çalıştığı sürece sonsuza dek devam eder.

455
Çalışmalar devam etmekte. Çalışmalar tammalandığında ayrıntılarıyla paylaşacağım.

<iframe width="640" height="385" src="//www.youtube.com/embed/0cBmC6Y8ulY?fs=1&start=" frameborder="0" allowfullscreen></iframe>


















456
Bir başka forumda ihtiyaç hasıl olmuştu. O nedenle hazırladım. Paylaşıyorum. 6 sargılı doğrusal motora ait arduino programı.

Motorda toplamda 6 sargı mevcut. Sargılar şu düzende enerji alacak:
Toplamda bu 6 sargıya ait 12 çıkış ve bu çıkışlara ait 12 klemens mevcut.
Klemenslere sırasıyla şu polariteleri alıyor.

Klemens 1 = +
Klemens 2 = +
Klemens 7 = -
Klemens 8 = -

Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır)

Klemens 2 = +
Klemens 3 = +
Klemens 8 = -
Klemens 9 = -

Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır)

Klemens 3 = +
Klemens 4 = +
Klemens 9 = -
Klemens 10 = -

Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır)

Klemens 4 = +
Klemens 5 = +
Klemens 10 = -
Klemens 11 = -

Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır)

Klemens 5 = +
Klemens 6 = +
Klemens 11 = -
Klemens 12 = -

Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır)

Klemens 6 = +
Klemens 7 = +
Klemens 12 = -
Klemens 1 = -

Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır)

Klemens 7 = +
Klemens 8 = +
Klemens 1 = -
Klemens 2 = -

Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır)

Klemens 8 = +
Klemens 9 = +
Klemens 2= -
Klemens 3 = -

Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır)

Klemens 9 = +
Klemens 10 = +
Klemens 3 = -
Klemens 4 = -

Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır)

Klemens 10= +
Klemens 11 = +
Klemens 4 = -
Klemens 5 = -

Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır)

Klemens 11 = +
Klemens 12 = +
Klemens 5 = -
Klemens 6 = -

Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır)

Klemens 12= +
Klemens 1 = +
Klemens 6 = -
Klemens 7 = -

Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır)

Buradan sonra başlangıca dönüyor.

Bu senaryoya göre
1. ve 7 klemensler 1. sargıya
2. ve 8. klemesler 2. sargıya
3. ve 9. klemesler 3. sargıya
4. ve 10. klemensler 4. sargıya
5. ve 11. klemensler 5. sargıya
6. ve 12. klemensler ise 6. sargıya enerji sağlar.

Yine bu senaryoya göre mikrodenetleyici (arduino) programımız şöyle olacaktır:

Kod: [Seç]
// DIJITAL CIKIS PIN TANIMLAMALARI BASLADI
int CIKIS1 = 1; // DİJİTAL 1 PİNİ
int CIKIS2 = 2; // DİJİTAL 2 PİNİ
int CIKIS3 = 3; // DİJİTAL 3 PİNİ
int CIKIS4 = 4; // DİJİTAL 4 PİNİ
int CIKIS5 = 5; // DİJİTAL 5 PİNİ
int CIKIS6 = 6; // DİJİTAL 6 PİNİ
int CIKIS7 = 7; // DİJİTAL 7 PİNİ
int CIKIS8 = 8; // DİJİTAL 8 PİNİ
int CIKIS9 = 9; // DİJİTAL 9 PİNİ
int CIKIS10 = 10; // DİJİTAL 10 PİNİ
int CIKIS11 = 11; // DİJİTAL 11 PİNİ
int CIKIS12 = 12; // DİJİTAL 12 PİNİ
// DIJITAL CIKIS PIN TANIMLAMALARI BITTI

// DIJITAL GIRIS / CIKISLARIN CIKIS MI YOKSA GIRIS MI OLDUKLARININ BELİRTİLMESİ BURADA BAŞLADI
void setup()
{
pinMode(CIKIS1, OUTPUT);  // DİJİTAL 1 PİNİ ÇIKIŞ YAPILDI
pinMode(CIKIS2, OUTPUT);  // DİJİTAL 3 PİNİ ÇIKIŞ YAPILDI
pinMode(CIKIS3, OUTPUT);  // DİJİTAL 3 PİNİ ÇIKIŞ YAPILDI
pinMode(CIKIS4, OUTPUT);  // DİJİTAL 4 PİNİ ÇIKIŞ YAPILDI
pinMode(CIKIS5, OUTPUT);  // DİJİTAL 5 PİNİ ÇIKIŞ YAPILDI
pinMode(CIKIS6, OUTPUT);  // DİJİTAL 6 PİNİ ÇIKIŞ YAPILDI
pinMode(CIKIS7, OUTPUT);  // DİJİTAL 7 PİNİ ÇIKIŞ YAPILDI
pinMode(CIKIS8, OUTPUT);  // DİJİTAL 8 PİNİ ÇIKIŞ YAPILDI
pinMode(CIKIS9, OUTPUT);  // DİJİTAL 9 PİNİ ÇIKIŞ YAPILDI
pinMode(CIKIS10, OUTPUT); // DİJİTAL 10 PİNİ ÇIKIŞ YAPILDI
pinMode(CIKIS11, OUTPUT); // DİJİTAL 11 PİNİ ÇIKIŞ YAPILDI
pinMode(CIKIS12, OUTPUT); // DİJİTAL 12 PİNİ ÇIKIŞ YAPILDI
}
// DIJITAL GIRIS / CIKISLARIN CIKIS MI YOKSA GIRIS MI OLDUKLARININ BELİRTİLMESİ BURADA BITTI

// ANA PROGRAM BURADA BASLADI
void loop() {
digitalWrite(CIKIS1, HIGH);
digitalWrite(CIKIS2, HIGH);
digitalWrite(CIKIS7, LOW);
digitalWrite(CIKIS8, LOW);
delay(1000); // 1s BEKLE
digitalWrite(CIKIS1, LOW);
digitalWrite(CIKIS2, LOW);

digitalWrite(CIKIS2, HIGH);
digitalWrite(CIKIS3, HIGH);
digitalWrite(CIKIS8, LOW);
digitalWrite(CIKIS9, LOW);
delay(1000); // 1s BEKLE
digitalWrite(CIKIS2, LOW);
digitalWrite(CIKIS3, LOW);

digitalWrite(CIKIS3, HIGH);
digitalWrite(CIKIS4, HIGH);
digitalWrite(CIKIS9, LOW);
digitalWrite(CIKIS10, LOW);
delay(1000); // 1s BEKLE
digitalWrite(CIKIS3, LOW);
digitalWrite(CIKIS4, LOW);

digitalWrite(CIKIS4, HIGH);
digitalWrite(CIKIS5, HIGH);
digitalWrite(CIKIS10, LOW);
digitalWrite(CIKIS11, LOW);
delay(1000); // 1s BEKLE
digitalWrite(CIKIS4, LOW);
digitalWrite(CIKIS5, LOW);

digitalWrite(CIKIS5, HIGH);
digitalWrite(CIKIS6, HIGH);
digitalWrite(CIKIS11, LOW);
digitalWrite(CIKIS12, LOW);
delay(1000); // 1s BEKLE
digitalWrite(CIKIS5, LOW);
digitalWrite(CIKIS6, LOW);

digitalWrite(CIKIS6, HIGH);
digitalWrite(CIKIS7, HIGH);
digitalWrite(CIKIS12, LOW);
digitalWrite(CIKIS1, LOW);
delay(1000); // 1s BEKLE
digitalWrite(CIKIS6, LOW);
digitalWrite(CIKIS7, LOW);

digitalWrite(CIKIS7, HIGH);
digitalWrite(CIKIS8, HIGH);
digitalWrite(CIKIS1, LOW);
digitalWrite(CIKIS2, LOW);
delay(1000); // 1s BEKLE
digitalWrite(CIKIS7, LOW);
digitalWrite(CIKIS8, LOW);

digitalWrite(CIKIS8, HIGH);
digitalWrite(CIKIS9, HIGH);
digitalWrite(CIKIS2, LOW);
digitalWrite(CIKIS3, LOW);
delay(1000); // 1s BEKLE
digitalWrite(CIKIS8, LOW);
digitalWrite(CIKIS9, LOW);

digitalWrite(CIKIS9, HIGH);
digitalWrite(CIKIS10, HIGH);
digitalWrite(CIKIS3, LOW);
digitalWrite(CIKIS4, LOW);
delay(1000); // 1s BEKLE
digitalWrite(CIKIS9, LOW);
digitalWrite(CIKIS10, LOW);

digitalWrite(CIKIS10, HIGH);
digitalWrite(CIKIS11, HIGH);
digitalWrite(CIKIS4, LOW);
digitalWrite(CIKIS5, LOW);
delay(1000); // 1s BEKLE
digitalWrite(CIKIS10, LOW);
digitalWrite(CIKIS11, LOW);

digitalWrite(CIKIS11, HIGH);
digitalWrite(CIKIS12, HIGH);
digitalWrite(CIKIS5, LOW);
digitalWrite(CIKIS6, LOW);
delay(1000); // 1s BEKLE
digitalWrite(CIKIS11, LOW);
digitalWrite(CIKIS12, LOW);

digitalWrite(CIKIS12, HIGH);
digitalWrite(CIKIS1, HIGH);
digitalWrite(CIKIS6, LOW);
digitalWrite(CIKIS7, LOW);
delay(1000); // 1s BEKLE
digitalWrite(CIKIS12, LOW);
digitalWrite(CIKIS1, LOW);
}
// ANA PROGRAM BURADA BITTI


Sarı ve kırmızı ledler ters paralel bağlanmıştır. Kırmızı yandığında sargı klememnslerinde doğru polarize, sarı yandığında ters polarize vardır. Sargı klemenslerine güç transistörleri ile tamponlanmalıdır. Devre bu haliyle sargıları sürmek için yeterli değildir. Konu ekinde devreye ait ilgili program dosyaları mevcuttur.



<iframe width="640" height="385" src="//www.youtube.com/embed/c_fVm9WMC6c?fs=1&start=" frameborder="0" allowfullscreen></iframe>

<iframe width="640" height="385" src="//www.youtube.com/embed/mO90ZHnjeng?fs=1&start=" frameborder="0" allowfullscreen></iframe>

ISIS Devre Şeması


457
Arduino Genel / 10. Arduino Interrupt (Kesinti) İşlemleri
« : 18 Eylül 2015, 12:54:26 »
Bugünkü dersimizde arduino bir programı yürütürken yürümekte olan programı duraklatıp araya başka bir program sıkıştırmasını öğreneceğiz. Araya sıkıştırdığımız program komutları yerine getirildiğinde ana program kaldığı yerden devam edecektir.
ANA PROGRAM AKIŞ DİYAGRAMI





















Bir arduino programı pic ve plc programları gibi alt alta yazılan komutlardan oluşur. Arduino çalışmaya başladığında ilk komuttan itibaren tüm komutlar yukarıdan aşağıya doğru sırayla çalıştırılır. Arduinoya bağlı sensör, buton, röle kontakları gibi çevresel birimlerden gelen verilersürekli kontrol edildiğinden program son komuta geldiğinde tekrar başa döner ve bir döngü halinde sürekli çalışır.

Örneğin bir yürüyen ışık için yandaki gibi bir akış diyagramı söz konusudur. Yandaki akış diyagramında görüldüğü gibi program tüm komutları yukarıdan aşağıya sırayla çalıştırmak ve en alttaki komutu uyguladıktan sonra tekrar başa dönüp bu işlemi sonsuz bir döngü haline getirmekten ibarettir.

Akış diyagramına ait arduino kodlarımız:
// DIJITAL CIKIS PIN TANIMLAMALARI BASLADI
int birinci_led = 1;
int ikinci_led = 2;
int ucuncu_led = 3;
// DIJITAL CIKIS PIN TANIMLAMALARI BITTI

// DIJITAL GIRIS / CIKISLARIN CIKIS MI YOKSA GIRIS MI OLDUKLARININ BELİRTİLMESİ BURADA BAŞLADI
void setup() 
{
pinMode(birinci_led, OUTPUT);   // DİJİTAL 1 PİNİNE 1. LED BAĞLANACAK
pinMode(ikinci_led, OUTPUT);   // DİJİTAL 2 PİNİNE 2. LED BAĞLANACAK
pinMode(ucuncu_led, OUTPUT);   // DİJİTAL 3 PİNİNE 3. LED BAĞLANACAK
}
// DIJITAL GIRIS / CIKISLARIN CIKIS MI YOKSA GIRIS MI OLDUKLARININ BELİRTİLMESİ BURADA BITTI

// ANA PROGRAM BURADA BASLADI
void loop() {
digitalWrite(birinci_led, HIGH); // DİJİTAL 1 PİNİNDEKİ LED YAKILDI
delay(500); // 500 ms BEKLE
digitalWrite(birinci_led, LOW); // DİJİTAL 1 PİNİNDEKİ LED SÖNDÜRÜLDÜ
digitalWrite(ikinci_led, HIGH); // DİJİTAL 2 PİNİNDEKİ LED YAKILDI
delay(500); // 500 ms BEKLE
digitalWrite(ikinci_led, LOW); // DİJİTAL 2 PİNİNDEKİ LED SÖNDÜRÜLDÜ
digitalWrite(ucuncu_led, HIGH); // DİJİTAL 3 PİNİNDEKİ LED YAKILDI
delay(500); // 500 ms BEKLE
digitalWrite(ucuncu_led, LOW); // DİJİTAL 3 PİNİNDEKİ LED SÖNDÜRÜLDÜ
}
// ANA PROGRAM BURADA BITTI


Ana programa ait montajı yapılmış devre


Ana programa ait fritzing çizimi


Ana programa ait isis çizimi


Ana programa ait çalışma videosu:
<iframe width="640" height="385" src="//www.youtube.com/embed/db_FnKTNviU?fs=1&start=" frameborder="0" allowfullscreen></iframe>

Ana programa ait isis simülasyonu videosu:
<iframe width="640" height="385" src="//www.youtube.com/embed/IlemIp1TzP8?fs=1&start=" frameborder="0" allowfullscreen></iframe>

Arduinonun belli bir pinine gelen sinyalle belli bir fonksiyonun ya da önceden belirlenmiş bir alt programın çalıştırılmasını sağlamak için attachInterrupt komutu kullanılır.

Kullandığımız arduinonun sürümüne göre dijital pinlerden bazıları attachInterrupt pini olarak da işlev görür. Aşağıdaki tabloda farklı arduino modellerine göre kullanılabilir attachInterrupt pinleri listelenmiştir.

KART INTO INT1 INT2 INT3 INT4 INT5
Uno, Nano, Mini PIN2 PIN3        
Mega, Mega2560, MegaADK PIN2 PIN3 PIN18 PIN19 PIN20 PIN21
Micro, Leonardo PIN0 PIN1 PIN2 PIN3 PIN7  
Zero DİJİTAL 4 PİNİ HARİÇ TÜM DİJİTAL PİNLER
Due TÜM DİJİTAL PİNLER

Şimdi program çalışırken programın her hangi bir aşamasında dijital 2. pine bağlı olan butona basıldığında 4., 5. ve 6. ledlerin yanmasını, dijital 3. pine bağlı olan butona basıldığında 4., 5. ve 6. ledlerin sönmesini isteyelim. Burada yapacağımız işleme interrupt (kesinti) denir.

Arduino unonun dijital2 ve dijital3 pinleri (INT0 ve INT1) kesme komutu pinleridir. Yukarıdaki programda bu pinlere led bağlamıştık. Bu pinleri kullanabilmemiz için aşağıdaki şemada görüldüğü gibi 1., 2., ve 3. pinlerdeki ledleri 4., 5. ve 6. pinlere taşıyoruz. 7., 8. ve 9. pinlere de sırasıyla 4., 5. ve 6. ledleri bağlayacağız. INT0 ve INT1 girişlerine de birer adet buton bağlayıp programımızı hazırladığımız devre şemasına uygun olarak düzenleyeceğiz.

Ana programa ek program eklenmiş devreye ait isis çizimi


Ana programa ek program eklenmiş devreye ait fritzing çizimi


Bitmiş devreye ait video:
<iframe width="640" height="385" src="//www.youtube.com/embed/8RwwHQB9OE8?fs=1&start=" frameborder="0" allowfullscreen></iframe>

Bitmiş devreye ait isis simülasyonu:
<iframe width="640" height="385" src="//www.youtube.com/embed/coKMnGWMlIw?fs=1&start=" frameborder="0" allowfullscreen></iframe>

Bitmiş devreye ait program:
// DIJITAL CIKIS PIN TANIMLAMALARI BASLADI
int birinci_led = 4;
int ikinci_led = 5;
int ucuncu_led = 6;
int dorduncu_led = 7;
int besinci_led = 8;
int altinci_led = 9;

// DIJITAL CIKIS PIN TANIMLAMALARI BITTI

// DIJITAL GIRIS / CIKISLARIN CIKIS MI YOKSA GIRIS MI OLDUKLARININ BELİRTİLMESİ BURADA BAŞLADI
void setup() 
{
pinMode(birinci_led, OUTPUT);   // DİJİTAL 4 PİNİNE 1. LED BAĞLANACAK
pinMode(ikinci_led, OUTPUT);   // DİJİTAL 5 PİNİNE 2. LED BAĞLANACAK
pinMode(ucuncu_led, OUTPUT);   // DİJİTAL 6 PİNİNE 3. LED BAĞLANACAK
pinMode(dorduncu_led, OUTPUT);   // DİJİTAL 7 PİNİNE 4. LED BAĞLANACAK
pinMode(besinci_led, OUTPUT);   // DİJİTAL 8 PİNİNE 5. LED BAĞLANACAK
pinMode(altinci_led, OUTPUT);   // DİJİTAL 9 PİNİNE 6. LED BAĞLANACAK
pinMode(2, INPUT);   // DİJİTAL 4 PİNİNE 1. LED BAĞLANACAK
pinMode(3, INPUT);   // DİJİTAL 5 PİNİNE 2. LED BAĞLANACAK
attachInterrupt(0, kesme, RISING); // INT0 pini (dijital2 pini) 1 yapılırsa program kesme isimli fonksiyonu yürütür.
attachInterrupt(1, kesme2, RISING); // INT1 pini (dijital3 pini) 1 yapılırsa program kesme2 isimli fonksiyonu yürütür.
}
// DIJITAL GIRIS / CIKISLARIN CIKIS MI YOKSA GIRIS MI OLDUKLARININ BELİRTİLMESİ BURADA BITTI

// ANA PROGRAM BURADA BASLADI
void loop() {
digitalWrite(birinci_led, HIGH); // DİJİTAL 4 PİNİNDEKİ LED YAKILDI
delay(2000); // 500 ms BEKLE
digitalWrite(birinci_led, LOW); // DİJİTAL 4 PİNİNDEKİ LED SÖNDÜRÜLDÜ
digitalWrite(ikinci_led, HIGH); // DİJİTAL 5 PİNİNDEKİ LED YAKILDI
delay(2000); // 500 ms BEKLE
digitalWrite(ikinci_led, LOW); // DİJİTAL 5 PİNİNDEKİ LED SÖNDÜRÜLDÜ
digitalWrite(ucuncu_led, HIGH); // DİJİTAL 6 PİNİNDEKİ LED YAKILDI
delay(2000); // 500 ms BEKLE
digitalWrite(ucuncu_led, LOW); // DİJİTAL 6 PİNİNDEKİ LED SÖNDÜRÜLDÜ
}
// ANA PROGRAM BURADA BITTI

void kesme()
{
digitalWrite(dorduncu_led, HIGH); // DİJİTAL 4 PİNİNDEKİ LED YAKILDI
digitalWrite(besinci_led, HIGH); // DİJİTAL 5 PİNİNDEKİ LED YAKILDI
digitalWrite(altinci_led, HIGH); // DİJİTAL 6 PİNİNDEKİ LED YAKILDI
}
void kesme2()
{
digitalWrite(dorduncu_led, LOW); // DİJİTAL 4 PİNİNDEKİ LED SÖNDÜRÜLDÜ
digitalWrite(besinci_led, LOW); // DİJİTAL 5 PİNİNDEKİ LED SÖNDÜRÜLDÜ
digitalWrite(altinci_led, LOW); // DİJİTAL 6 PİNİNDEKİ LED SÖNDÜRÜLDÜ
}


Böylece bir program yürütülürken araya başka bir programı sıkıştırıp her iki programı da yürütmüş olduk.

458
Bu dersimizde arduino çıkışları lojik sıfır olduğunda çıkışı aktif yapmayı öğreneceğiz. Buna neden gerek var derseniz açıklayalım. Normal şartlarda arduino çıkışları lojik 1 (5Volt) olduğunda çıkışına aaşağıdaki şekilde görüldüğü gibi bir led bağlarız. Çıkış lojik 1 olduğunda led yanar, çıkış lojik 0 olduğunda ise led sönecektir.



Bu şemaya ait yazılım:
Kod: [Seç]
void setup()
{
pinMode(13, INPUT);   // DİJİTAL 0 PİNİNE BUTON BAĞLANACAK
pinMode(0, OUTPUT);  // DİJİTAL 13 PİNİNE LED BAĞLANACAK
}
int sensor=1;
void loop()
{
sensor = digitalRead(13);  // BUTONDAKİ LOJİK SEVİYEYİ OKU
digitalWrite(0, sensor); // BUTONDAKİ SEVİYEYİ ÇIKIŞA AKTAR
}

Buraya kadar her şey normal.  Ancak dikkat ederseniz arduinoya ilk defa besleme gerilimi uygulandığında ya da arduino resetlendiğinde arduino çıkışları istem dışı 1 saniye gibi çok kısa bir sürelojik 1 seviyesini almakta ve sonra kendiliğinden normale dönmekte. Bu durum eğitim ortamlarında bir sorun olarak görünmese de özellikle ticari ve endüstriyel kullanımlarda büyük güvenlik risklerine ve hesapta olmayan donanımsal arızalara neden olabilir. Bunun önüne geçebilmek devre şemasında ve yazılımda aşağıdaki örnekte görüldüğü gibi bir değişiklik yaparak arduino çıkışları lojik 0 olduğunda çıkış almamız gerekir. Belki bu problemi çözmek için yazılımsal ya da donanımsal başka çözümler de vardır. Ancak şu an benim bilgim dahilinde değil. Eğer ki daha bir çözüm yolu öğrenirsem yine bu konu altından çözümüpaylaşırım.




Bu bağlantıya ait yazılım:
Kod: [Seç]
void setup()
{
pinMode(13, INPUT);   // DİJİTAL 0 PİNİNE BUTON BAĞLANACAK
pinMode(0, OUTPUT);  // DİJİTAL 13 PİNİNE LED BAĞLANACAK
}
int sensor=1;
void loop()
{
sensor = digitalRead(13);  // BUTONDAKİ LOJİK SEVİYEYİ OKU
digitalWrite(0, !sensor); // BUTONDAKİ SEVİYEYİ ÇIKIŞA AKTAR
}

Her iki bağlantı ve yazılımda da devremiz aynı işlevi yerine getirmektedir.

İhtiyaç olması halinde konuya ait dosyalar konu ekinde mevcuttur.


459
Bu dersimizde 2 eksen XY Joystick Modül ile 2 adet servo motoru kontrol edeceğiz.

<iframe width="640" height="385" src="//www.youtube.com/embed/V8qpAuchFkg?fs=1&start=" frameborder="0" allowfullscreen></iframe>



Fritzing çizimi:
Fritzing çizimini konu ekinden indirebilirsiniz.


Arduino kodlarımız:
Arduino dosyasını konu ekinden indirebilirsiniz.
Kod: [Seç]
#include <Servo.h>

const int servo1 = 3;       // first servo
const int servo2 = 10;       // second servo
const int joyH = 3;        // L/R Parallax Thumbstick
const int joyV = 4;        // U/D Parallax Thumbstick

int servoVal;           // variable to read the value from the analog pin

Servo myservo1;  // create servo object to control a servo
Servo myservo2;  // create servo object to control a servo



void setup() {

  // Servo 
  myservo1.attach(servo1);  // attaches the servo
  myservo2.attach(servo2);  // attaches the servo

  // Inizialize Serial
  Serial.begin(9600);
}


void loop(){

    // Display Joystick values using the serial monitor
    outputJoystick();

    // Read the horizontal joystick value  (value between 0 and 1023)
    servoVal = analogRead(joyH);         
    servoVal = map(servoVal, 0, 1023, 0, 180);     // scale it to use it with the servo (result  between 0 and 180)
    myservo2.write(servoVal);                         // sets the servo position according to the scaled value   

    // Read the horizontal joystick value  (value between 0 and 1023)
    servoVal = analogRead(joyV);           
    servoVal = map(servoVal, 0, 1023, 180, 0);     // scale it to use it with the servo (result between 70 and 180)

    myservo1.write(servoVal);                           // sets the servo position according to the scaled value

    delay(30);                                       // waits for the servo to get there

}


/**
* Display joystick values
*/
void outputJoystick(){

    Serial.print(analogRead(joyH));
    Serial.print ("---");
    Serial.print(analogRead(joyV));
    Serial.println ("----------------");
}

460
Haberşme Temelleri (perşembe gününe göre)
Haberleşme Cihazları (perşembe gününe göre)
Alarm ve Geçiş Kontrol Sistemleri (Salı gününe göre)
Mobil sistemler 4 saat cuma gününe göre
Dijital elektronik 4 saatcuma gününe göre
Endüstriyel Kontrol Sistemleri (Seçmeli 4 saat)
Elektrik elektronik ölçme (eml)
Elektrik elektronik ölçme (tl)
Mikrodenetleyiciler
Alıntı çalıntı değildir. Emek vardır. Konu ekinden indirebilirsiniz.

461
Projeler / 4. 2 Eksen Arduino Shild Güneş Paneli
« : 04 Eylül 2015, 21:11:29 »
Bu dersimizde güneş panelinden mümkün olabilen maksimum seviyede enerji alabilmek için güneş panelini otomatik olarak güneşe yönlendiren platform yapmayı öğreneceğiz. Güneş konumunu değiştirdikçe platformumuz güneşin konumunu takip edecektir. Paltformun üzerine bir güneş pili yerleştirilmiştir. Güneş pili de bir bataryayı şarz etmektedir. Bu şekilde gündüzleri bataryamızı maksimum seviyede şarz edip, geceleri bataryamızdan enerji alabiliriz.

Güneşin pozisyonunu tespit edebilmek için sistemde 4 adet ldr (foto direnç) kullanmıştır. Bunlardan ikisi yatay kontrol, diğer ikisi dikey kontrol içindir. Her bir ldrye devre şemasında görüldüğü şekilde birer tane 10klık direnç seri bağlanmıştır. Bu bağlantı sayesinde arduinonun analog A0, A1, A2 ve A3 girişlerine güneşin pozisyonuna göre yaklaşık 0 volt ile yaklaşık 5 volt arasında birbirinden farklı gerilimler düşer. Hangi ldr daha fazla ışık alıyorsa o ldrye ait analog girişte diğer analog girişlere nazaran daha fazla gerilim düşümü olacaktır. Arduino programımız sayesinde analog girişlere düşen gerilimler değerlendirilerek servolara sağa ya da sola dönmeleri için sinyal yollanır. A0 ve A1 girişlerindeki gerilimler yatay kontrolü, A2 ve A3 girişlerindeki gerilimler ise dikey kontrolü sağlayacaktır. Servoların harekete geçmesiyle ldrlerin üzerine düşen ışık şiddetleri eşitlendiğinde ldrlerin üzerine düşen dolayısıyla A0 ve A1 (yatay kontrol) pinleri ile A2 ve A3 (dikey kontrol) pinlerine düşen gerilimler birbirine eşit olacaktır. Yani A0 gerilimi = A1 gerilimi ve A2 gerilimi = A3 gerilimi olana kadar servolar hareket edecek ve platformun güneşe göre uygun pozisyon alması sağlanacaktır.

Malzeme listesi:
Arduino uno
Pan tilt servo motor montaj kiti
Bakırlı pertinaks
Baskı devre malzemeleri
4 adet 10 k direnç
4 adet ldr
2 adet servo
Güneş pili
Batarya
Bilgisayar
Bağlantı iletkenleri
El ve güç aletleri
Muhtelif vida ve civatalar

<iframe width="640" height="385" src="//www.youtube.com/embed/1K_LSgkT6h4?fs=1&start=" frameborder="0" allowfullscreen></iframe>







ISIS çizimi
ISIS çizimini konu ekinden indirebilirsiniz.


Arduino Shild ARES çizimi
Ares dosyasını konu ekinden indirebilirsiniz.




Fritzing çizimi:
Fritzing dosyasını konu ekinden indirebilirsiniz.


Arduino kodlarımız:
Arduino kodlarına ait dosyayı konu ekinden indirebilirsiniz.
Kod: [Seç]
    #include <Servo.h>
     
    Servo yatay;
    int pos = 90;   // Başlama pozisyonu
    int sens1 = A0; // LRD 1 pin
    int sens2 = A1; //LDR 2 pin
    int tolerance = 2;
   
    Servo dikey;
    int pos2 = 90;   // Başlama pozisyonu
    int sens3 = A2; // LRD 3 pin
    int sens4 = A3; //LDR 4 pin
    int tolerance2 = 2;
    void setup()
    {
      yatay.attach(9);  // Dijital 9 pini yatay servoya bağlanacak
      dikey.attach(10);  // Dijital 10 pini dikey servoya bağlanacak
      pinMode(sens1, INPUT);
      pinMode(sens2, INPUT);
      pinMode(sens3, INPUT);
      pinMode(sens4, INPUT);     
      yatay.write(pos);
      dikey.write(pos2);     
      delay(2000); // a 2 seconds delay while we position the solar panel
    } 
     
    void loop()
    {
      int val1 = analogRead(sens1); // sensor 1 oku
      int val2 = analogRead(sens2); // sensor 2 oku
      int val3 = analogRead(sens3); // sensor 3 oku
      int val4 = analogRead(sens4); // sensor 4 oku   
      if((abs(val1 - val2) <= tolerance) || (abs(val2 - val1) <= tolerance)) {

      } else {   
        if(val1 > val2)
        {
          pos = --pos;
        }
        if(val1 < val2)
        {
          pos = ++pos;
        }
      }
     
      if(pos > 180) { pos = 180; }
      if(pos < 0) { pos = 0; }
     
      yatay.write(pos);
      delay(60);



      if((abs(val3 - val4) <= tolerance2) || (abs(val4 - val3) <= tolerance2)) {

      } else {   
        if(val3 > val4)
        {
          pos2 = --pos2;
        }
        if(val3 < val4)
        {
          pos2 = ++pos2;
        }
      }
     
      if(pos2 > 180) { pos2 = 180; }
      if(pos2 < 0) { pos2 = 0; }
     
      dikey.write(pos2);
      delay(60);     
    }

462
Projeler / 3. Mause ile 2 eksen kontrol
« : 26 Ağustos 2015, 22:35:13 »
Bu dersimizde bir platformu mause ile 2 eksen (sağ - sol ve yukarı - aşağı) hareket ettirmeyi öğreneceğiz. Platforma ben örnek olarak bir kaç tane led bağladım. Led yerine kamera ya da projektör gibi başka metaryeller bağlayarak bu metaryalleri 2 eksen kontrol edebilirsiniz. PC arayüzü olarak processingi kullanacağız. İhtiyaç duyulması halinde konuya ait dosyaları konu ekinden indirebilirsiniz.

<iframe width="640" height="385" src="//www.youtube.com/embed/tYJIHWJWGV0?fs=1&start=" frameborder="0" allowfullscreen></iframe>



Malzeme listesi:
Arduino uno
2 adet servo motor
Pan tilt servo motor montaj kiti
DC güç kaynağı (Pil ya daadaptör 6 Volt)
Bağlantı kaboları
Deney bordu

Fritzing çizimi:


Arduino kodlarımız:
Kod: [Seç]
#include <Servo.h>

Servo yservo;  Servo xservo; // servos for x and y
//set initial values for x and y
int ypos = 0;
int xpos= 0;

void setup(){
  xservo.attach(14); //(analog pin 0) for the x servo
  yservo.attach(15);  //(analog pin 1) for the y server
 
  Serial.begin(19200); // 19200 is the rate of communication
  Serial.println("Rolling"); // some output for debug purposes.
 
}

void loop() {
  static int v = 0; // value to be sent to the servo (0-180)
  if ( Serial.available()) {
    char ch = Serial.read(); // read in a character from the serial port and assign to ch
    switch(ch) { // switch based on the value of ch
      case '0'...'9': // if it's numeric
        v = v * 10 + ch - '0';
        /*
           so if the chars sent are 45x (turn x servo to 45 degs)..
           v is the value we want to send to the servo and it is currently 0
           The first char (ch) is 4 so
           0*10 = 0 + 4 - 0 = 4;
           Second char is 4;
           4*10 = 40 + 5 = 45 - 0 = 45;
           Third char is not a number(0-9) so we  drop through...
        */
        break;
      case 'x': // if it's x
      /*
       ....and land here
       where we send the value of v which is now 45 to the x servo
       and then reset v to 0
      */
        xservo.write(v);
        v = 0;
        break;
      case 'y':
        yservo.write(v);
        v = 0;
        break;
    }
  }
}

Processing kodlarımız:
Kod: [Seç]
import processing.serial.*;       

int xpos=90; // set x servo's value to mid point (0-180);
int ypos=90; // and the same here
Serial port; // The serial port we will be using

void setup()
{
  size(360, 360);
  frameRate(100);
  println(Serial.list()); // List COM-ports
  //select second com-port from the list (COM3 for my device)
  // You will want to change the [1] to select the correct device
  // Remember the list starts at [0] for the first option.
  port = new Serial(this, Serial.list()[0], 19200);
}

void draw()
{
  fill(175);
  rect(0,0,360,360);
  fill(255,0,0); //rgb value so RED
  rect(180, 175, mouseX-180, 10); //xpos, ypos, width, height
  fill(0,255,0); // and GREEN
  rect(175, 180, 10, mouseY-180);
  update(mouseX, mouseY);
}

void update(int x, int y)
{
  //Calculate servo postion from mouseX
  xpos= x/2;
  ypos = y/2;
  //Output the servo position ( from 0 to 180)
  port.write(xpos+"x");
  port.write(ypos+"y");
}

463
Arduino Öğreniyorum / Ynt: Balık yemleme
« : 19 Ağustos 2015, 01:10:36 »
Merhaba şuradaki linkte daha basit malzemelerle ve daha kolay yapılan bir örnek mevcut.

Arduino ile yapmak daha kolay olacaktır. Neticede arduino da içerisinde pic bulunduran bir karttır.


464
Aşağıdaki resimdeki gibi bağlantıları yaptıktan sonra aşağıdaki bağlantılardan indirebileceğiniz dht11 kütüphanesini yüklüyoruz. (dht11 klasörünü Arduino>libraries klasörüne kopyalıyoruz.) Kütüphane klasörünü konu ekinden indirebilirsiniz.





Arduino kodlarımız:
Kod: [Seç]
// Arduinoturkiye.com DHT11 Test Programı
// Yazar: Joseph Dattilo (Virtuabotix LLC) - Version 0.4.5 (11/11/11)
// Düzenleme: İsmail BUÇGÜN

#include <dht11.h> // dht11 kütüphanesini ekliyoruz.
#define DHT11PIN 2 // DHT11PIN olarak Dijital 2"yi belirliyoruz.

dht11 DHT11;

void setup()
{
  Serial.begin(9600); // Seri iletişimi başlatıyoruz.
  Serial.println("Arduinoturkiye.com DHT11 Test Programi");
}

void loop()
{
  // Bir satır boşluk bırakıyoruz serial monitörde.
  Serial.println();
  // Sensörün okunup okunmadığını konrol ediyoruz.
  // chk 0 ise sorunsuz okunuyor demektir. Sorun yaşarsanız
  // chk değerini serial monitörde yazdırıp kontrol edebilirsiniz.
  int chk = DHT11.read(DHT11PIN);

  // Sensörden gelen verileri serial monitörde yazdırıyoruz.
  Serial.print("Nem (%): ");
  Serial.println((float)DHT11.humidity, 2);

  Serial.print("Sicaklik (Celcius): ");
  Serial.println((float)DHT11.temperature, 2);

  Serial.print("Sicaklik (Fahrenheit): ");
  Serial.println(DHT11.fahrenheit(), 2);

  Serial.print("Sicaklik (Kelvin): ");
  Serial.println(DHT11.kelvin(), 2);

  // Çiğ Oluşma Noktası, Dew Point
  Serial.print("Cig Olusma Noktasi: ");
  Serial.println(DHT11.dewPoint(), 2);

  // 2 saniye bekliyoruz. 2 saniyede bir veriler ekrana yazdırılacak.
  delay(2000);

}

Bu yazı arduinoturkiye.com sitesinden alınmıştır.

465
Bu dersimizde birservo motoru 180 dereceden başlayarak 2'şer derece aralıklarla 180 derece ile 10 derece arasında konumlandırmayı öğreneceğiz. Servo, aldığı her konumda 50 ms bekleyecek, 180 derece konumuna geldiğinde ise 1 saniye bekleyip kaldığı yerden sonsuza dek 10 derece ile 180 derece arasında çift rakamlı tüm açısal değerleri alacaktır.

<iframe width="640" height="385" src="//www.youtube.com/embed/fLtzZtVXQDk?fs=1&start=" frameborder="0" allowfullscreen></iframe>



Fritzing çizimi:
Çizime ait dosyayı konu ekinden indirebilirsiniz.



Arduino kodlarımız:
Arduino dosyasınıkonu ekinden indirebilirsiniz.
Kod: [Seç]
/* servo motor kontrolü www.temrinlerim.org */
#include <Servo.h>
Servo myservo;
void setup() {
myservo.attach(11);         // servo 11 nolu pin kontrol edecektir
}
void loop() {
myservo.write(180);
delay(1000);
myservo.write(178);
delay(50);
myservo.write(176);
delay(50);
myservo.write(174);
delay(50);
myservo.write(172);
delay(50);
myservo.write(170);
delay(50);
myservo.write(168);
delay(50);
myservo.write(166);
delay(50);
myservo.write(164);
delay(50);
myservo.write(162);
delay(50);
myservo.write(160);
delay(50);
myservo.write(158);
delay(50);
myservo.write(156);
delay(50);
myservo.write(154);
delay(50);
myservo.write(152);
delay(50);
myservo.write(150);
delay(50);
myservo.write(148);
delay(50);
myservo.write(146);
delay(50);
myservo.write(144);
delay(50);
myservo.write(142);
delay(50);
myservo.write(140);
delay(50);
myservo.write(138);
delay(50);
myservo.write(136);
delay(50);
myservo.write(134);
delay(50);
myservo.write(132);
delay(50);
myservo.write(130);
delay(50);
myservo.write(128);
delay(50);
myservo.write(126);
delay(50);
myservo.write(124);
delay(50);
myservo.write(122);
delay(50);
myservo.write(120);
delay(50);
myservo.write(118);
delay(50);
myservo.write(116);
delay(50);
myservo.write(114);
delay(50);
myservo.write(112);
delay(50);
myservo.write(110);
delay(50);
myservo.write(108);
delay(50);
myservo.write(106);
delay(50);
myservo.write(104);
delay(50);
myservo.write(102);
delay(50);
myservo.write(100);
delay(50);
myservo.write(98);
delay(50);
myservo.write(96);
delay(50);
myservo.write(94);
delay(50);
myservo.write(92);
delay(50);
myservo.write(90);
delay(50);
myservo.write(88);
delay(50);
myservo.write(86);
delay(50);
myservo.write(84);
delay(50);
myservo.write(82);
delay(50);
myservo.write(80);
delay(50);
myservo.write(78);
delay(50);
myservo.write(76);
delay(50);
myservo.write(74);
delay(50);
myservo.write(72);
delay(50);
myservo.write(70);
delay(50);
myservo.write(68);
delay(50);
myservo.write(66);
delay(50);
myservo.write(64);
delay(50);
myservo.write(62);
delay(50);
myservo.write(60);
delay(50);
myservo.write(58);
delay(50);
myservo.write(56);
delay(50);
myservo.write(54);
delay(50);
myservo.write(52);
delay(50);
myservo.write(50);
delay(50);
myservo.write(48);
delay(50);
myservo.write(46);
delay(50);
myservo.write(44);
delay(50);
myservo.write(42);
delay(50);
myservo.write(40);
delay(50);
myservo.write(38);
delay(50);
myservo.write(36);
delay(50);
myservo.write(34);
delay(50);
myservo.write(32);
delay(50);
myservo.write(30);
delay(50);
myservo.write(28);
delay(50);
myservo.write(26);
delay(50);
myservo.write(24);
delay(50);
myservo.write(22);
delay(50);
myservo.write(20);
delay(50);
myservo.write(18);
delay(50);
myservo.write(16);
delay(50);
myservo.write(14);
delay(50);
myservo.write(12);
delay(50);
myservo.write(10);
delay(50);
}

Sayfa: 1 ... 29 30 [31] 32 33 ... 45