Zaman Ayarlı Arduino Röle Devresi

Gokrtl

Gökhan Kartal
Staff member
Katılım
27 Şubat 2019
Mesajlar
7,851
Bu projemde Arduino Promini Kullanarak Zaman Ayarlı Röle yaptım.
Projeyi iki ayrı parça halinde yaptım. Buradaki amacım lcd devresini rahatca istediğim yere yerleştirmekti.
Butonlardan Saniye ve Dakikaya girip start tuşuna bastığımız da röle tetikleniyor ve geri sayım başlıyor.
Geri sayımı MAX7219 SMD entegresi kullanarak 4 Digit 7 Segment Display'e yansıttım.
Entegrenin SMD olması sizi korkutmasın 24 tane delik delmekten her halükarda daha kolay oluyor. :)
Ayrıca bacak padlerini orjinalden daha kalın çizdim ki kolay lehimleme yapılsın.
Geri sayım bittiğinde röle kendini bırakıyor ve buzzer 6 defa "BIP" leyerek sizi uyarıyor.
Dakika ve saniye sayımını amatörce "delay" fonksiyonu kullanarak ayarladım.
Rahatsız ekmeyecek kadar doğru çalışıyor ancak eğer size çok yüksek doğrulukta geri sayım gerekiyorsa bu kodu kullanmayın.
Devreyi yapmak isteyenler için baskı devrelerin pdf dosyalarını aşağı ekliyorum.


LCD Şeması
Lcd_Şema.PNG


LCD Baskı Devre Görünümü
lcd_baskı_ön.PNG


LCD Devre 3D Görüntüsü Ön Tarafı - Arka Tarafı
lcd.PNG
lcd_arka.PNG


Arduino Devre Şeması
Devre_Şeması.PNG


Arduino Baskı Devre Görünümü
devre.PNG


Arduino Devresi 3D Görüntüsü. Ön Tarafı - Arka Tarafı
devre_ön.PNG
devre_arka.PNG


Arduino Pro Mini Kodları

Arduino Pro Mini Kodları:
//We always have to include the library
#include "LedControl.h"

/*
  Now we need a LedControl to work with.
 ***** These pin numbers will probably not work with your hardware *****
  pin 12 is connected to the DataIn
  pin 11 is connected to the CLK
  pin 10 is connected to LOAD
  We have only a single MAX72XX.
*/
int dakika = 0 ; // dakika değişkenini tanımlıyoruz
int saniye = 0 ;// saniye değişkenini tanımlıyoruz
int saniye2 = 0;
int dakika2 = 0;
LedControl lc = LedControl(12, 11, 10, 1);

void setup() {
  /*
    The MAX72XX is in power-saving mode on startup,
    we have to do a wakeup call
  */
  lc.shutdown(0, false);
  /* Set the brightness to a medium values */
  lc.setIntensity(0, 4);
  /* and clear the display */
  lc.clearDisplay(0);
  lc.setDigit(0, 0, 0, false);
  lc.setDigit(0, 1, 0, true);
  lc.setDigit(0, 2, 0, false);
  lc.setDigit(0, 3, 0, false);
  //delay(5000);
  pinMode( 2 , INPUT); // Min DOWN    butonların bağlanacağı pinleri giriş olarak tanımlıyoruz
  pinMode( 3 , INPUT); // Min UP    butonların bağlanacağı pinleri giriş olarak tanımlıyoruz
  pinMode( 5 , INPUT); // Sec UP  butonların bağlanacağı pinleri giriş olarak tanımlıyoruz
  pinMode( 4 , INPUT); // Sec DOWN    butonların bağlanacağı pinleri giriş olarak tanımlıyoruz
  pinMode( 7 , INPUT); // START butonların bağlanacağı pinleri giriş olarak tanımlıyoruz
  pinMode( 6 , INPUT); // STOP butonların bağlanacağı pinleri giriş olarak tanımlıyoruz
  pinMode( 8, OUTPUT); // Rölemizin bağlanacağı pini çıkış olarak tanımlıyoruz
  pinMode( 9, OUTPUT); // Buzzerın bağlanacağı pini çıkış olarak tanımlıyoruz
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(5, LOW);
  digitalWrite(4, LOW);
  digitalWrite(7, LOW);
  digitalWrite(6, LOW);
  Serial.begin(115200);
  digitalWrite(9, HIGH); // 200ms Buzzer Aktif
  delay(200);
  digitalWrite(8, LOW); // Röle Pasif
  digitalWrite(9, LOW); // Buzzer Pasif
}

void loop() {
  /////////// Saniye Artır ve Azalt  /////////////////////
  if (digitalRead(5))    // 5. pine bağlı butona basılmışsa
  {
    if ((saniye2 == 5) && (saniye == 9))
    {
      saniye = 0;
      saniye2 = 0;
      lc.setDigit(0, 3, saniye, false);
      lc.setDigit(0, 2, saniye2, false);
      delay(200);
      saniye = -1;
    }
    if (saniye == 9)
    {
      saniye = 0;
      saniye2 = (saniye2 + 1);
      lc.setDigit(0, 3, saniye, false);
      lc.setDigit(0, 2, saniye2, false);
      delay(200);
      saniye = -1;
    }


    saniye = ( saniye + 1 ) ; // saniyeyi arttırıyoruz
    lc.setDigit(0, 3, saniye, false);
    delay( 200 );
  }
  if (digitalRead(4))    // 4. pine bağlı butona basılmışsa
  {

    if ((saniye2 > 0) && (saniye == 0))
    {
      saniye2 = (saniye2 - 1);
      saniye = 9;
      lc.setDigit(0, 3, saniye, false);
      lc.setDigit(0, 2, saniye2, false);
      saniye = (saniye + 1);
      delay(200);

    }

    saniye = ( saniye - 1 ) ; // saniyeyi azaltıyoruz
    lc.setDigit(0, 3, saniye, false);
    lc.setDigit(0, 2, saniye2, false);
    delay( 200 );
    if ((saniye <= 0) && (saniye2 <= 0))
    {
      saniye = 0;
      saniye2 = 0;
    }
  }

  ////////////// Dakika Artır ve Azalt  ////////////////////

  if (digitalRead(3))    // 3. pine bağlı butona basılmışsa
  {
    if ((dakika2 == 5) && (dakika == 9))
    {
      dakika = 0;
      dakika2 = 0;
      lc.setDigit(0, 1, dakika, true);
      lc.setDigit(0, 0, dakika2, false);
      delay(200);
      dakika = -1;
    }
    if (dakika == 9)
    {
      dakika = 0;
      dakika2 = (dakika2 + 1);
      lc.setDigit(0, 1, dakika, true);
      lc.setDigit(0, 0, dakika2, false);
      delay(200);
      dakika = -1;
    }


    dakika = ( dakika + 1 ) ; // dakikayı arttırıyoruz
    lc.setDigit(0, 1, dakika, true);
    delay( 200 );
  }
  if (digitalRead(2))    // 2. pine bağlı butona basılmışsa
  {

    if ((dakika2 > 0) && (dakika == 0))
    {
      dakika2 = (dakika2 - 1);
      dakika = 9;
      lc.setDigit(0, 1, dakika, false);
      lc.setDigit(0, 0, dakika2, false);
      dakika = (dakika + 1);
      delay(200);

    }

    dakika = ( dakika - 1 ) ; // dakikayı azaltıyoruz
    lc.setDigit(0, 1, dakika, false);
    lc.setDigit(0, 0, dakika2, false);
    delay( 200 );
    if ((dakika <= 0) && (dakika2 <= 0))
    {
      dakika = 0;
      dakika2 = 0;
    }
  }

  delay(100); // kararlı çalışması için küçük bir bekleme ekliyoruz
  if (digitalRead(7))   // 7. pine bağlı butona basılmışsa   sayacı başlatıyoruz.
  {
    while (saniye2 >= 1 || saniye >= 1 || dakika >= 1 || dakika2 > 0)
    {
      if (digitalRead(6))
      {
        saniye = 0;
        saniye2 = 0;
        dakika = 0;
        dakika2 = 0;
        lc.setDigit(0, 3, dakika, false);
        lc.setDigit(0, 2, dakika2, false);
        lc.setDigit(0, 1, dakika, true);
        lc.setDigit(0, 0, dakika2, false);
        int i = 0;
        for (i = 5; i >= 0; i--) {
          delay(100);
          digitalWrite(9, HIGH); //Buzzer Aktif
          delay(600);
          digitalWrite(9, LOW); // Buzzer Pasif
        }
        break;
      }
      digitalWrite(8, HIGH); // Röle Aktif
      saniyeSay();
      dakikaSay();

      digitalWrite(8, LOW); // Saniye ve Dakika Sıfırlandığında Sayaç Tamamlanmış Olacak ve Röleyi Pasif Yapacak
      if ((saniye2 == 0) && (saniye == 0) && (dakika == 0) && (dakika2 == 0))
      {
        int i = 0;
        for (i = 5; i >= 0; i--) {
          delay(100);
          digitalWrite(9, HIGH); // Buzzer Aktif
          delay(600);
          digitalWrite(9, LOW); // Buzzer Pasif
        }
      }
    }
  }
}
/////////// FONKSİYONLAR //////////


/////////// Saniye Sayma Fonksiyonu /////////////////

void saniyeSay() {
  if (saniye > 0)
  {
    saniye = saniye - 1;
    lc.setDigit(0, 3, saniye, false);
    delay(1000);
  }
  if ((saniye == 0) && (saniye2 > 0))
  {
    saniye = saniye - 1;
    saniye = 9;
    saniye2 = saniye2 - 1;
    lc.setDigit(0, 2, saniye2, false);
    lc.setDigit(0, 3, saniye, false);
    delay(1000);
  }
}

//////////////// Dakika Sayma Fonksiyonu  //////////////////////
void dakikaSay() {
  if ((dakika > 0) && (saniye2 == 0) && (saniye == 0))
  {
    saniyeSay();
    dakika = dakika - 1;
    lc.setDigit(0, 1, dakika, true);
    saniye = 10;
    saniye2 = 5;
    lc.setDigit(0, 2, saniye2, false);
  }
  if (dakika == 0)
  {
    saniyeSay();
  }
  if ((dakika2 > 0) && (dakika == 0) && (saniye2 == 0) && (saniye == 0))
  {
    dakika2 = dakika2 - 1;
    lc.setDigit(0, 0, dakika2, false);
    saniye = 10;
    saniye2 = 5;
    dakika = 9;
    lc.setDigit(0, 1, dakika, true);
    lc.setDigit(0, 2, saniye2, false);
  }
}
 

Ekler

  • TEK_Zaman_Ayarli_Role_7Segment.ino
    6.8 KB · Görüntüleme: 52
  • 2-4_Digit-B_Cu.pdf
    9.3 KB · Görüntüleme: 43
  • 2-4_Digit-LCD_B_Cu.pdf
    21 KB · Görüntüleme: 51
Son düzenleme:
Top