dominoFiber     domiRobot     Forum


Projeler - RFID bariyer açma kapama

Senaryo
Geçerli kartla bariyerin açılması ve arzu edilen bir süre sonra da kendiliğinden kapanması isteniyor. Kart kimliği geçersiz ise bariyer açılmayacak. Devre çalışırken de yapılan işlemler lcd ekran üzerinden takip edilecek.

ISIS Devre şeması

Şema 1: ISIS devre şeması

ARES baskı devre şeması

Şema 2: ARES baskı devre şeması

FRITZIG devre şeması

Şema 3: Fritzing devre şeması

Malzeme listesi

Çalışma Prensibi ve devrenin kullanılması
Devreye enerji uygulandığında LCD ekranda hoş geldin ve kartı okutunuz mesajları görüntülenir.
Doğru kartın okutulmasıyla beraber bariyer açılır ve durur, önceden belirlenmiş süre kadar bekler ve tekrar kapanır. Bariyerin açılması ve kapanması sırasında gelişen olaylar LCD ekrandan gözlenebilir.
Bariyerin açılıp kapanması bir dc motor tarafından yapılmaktadır. DC motorun ileri yön hareketinde bariyer açılır, ters yön hareketinde ise kapanır.

Bu işlem için ISIS devre şemasında görüldüğü gibi 4 transistörden meydana gelen bir motor sürücü devre kullanılmıştır. Arduinonun dijital 2. Ve 3.pinleri motor sürücüyü kontrol eden pinlerdir. Bu pinlere lojik 0 uygulandığında devredeki transistörlerin beyz polarmaları olmayacağından tüm transistörler yalıtımdadır ve motor enerji almaz.
Sisteme önceden tanımlanmamış bir kart okutturulursa bariyer her hangi bir tepki vermez ve LCD ekranda geçersiz kart uyarısı görünür.

Doğru kartın okutulmasıyla beraber D3 pini lojik 1 ve D2 pini lojik 0 seviyesine çekilir. Bu anda Q1 ve Q4 transistörleri D3 pini üzerinden beyz polarması alır ve iletime geçerler. Q1 ve Q4’ün iletime geçmesiyle beraber ISIS devre şeması baz alınarak belirtiyorum motorun sol ucu +, sağ ucu 2 olacak şekilde BAT1 kaynağı  tarafından beslenir. Bariyerin açılmasıyla beraber D3 ve D2 pinleri tekrar lojik 0 seviyesine çekilir ve tüm transistörlerin yalıtıma geçmesi nedeniyle de motor durur.

Programda belirtilen süre sonunda bu sefer D3 pini lojik 0, D2 pini lojik 1 seviyesine çekilir. Bu durumda Q2 ve Qş transistörleri beyz polarması sağlar. Q2 ve Q3’ün iletime geçmesiyle beraber motorun sol ucu negatif, sağ ucu pozitif olur ve motor bir öncekinin ters yönünde dönerek bariyerin kapanmasını sağlar.
Bariyerin açılıp kapanması esnasında güvenlik amacıyla bir buzzer devreye girerek bariyerin hareket halinde olduğu hakkında sesli uyarı verir.

Motorun durup bariyerin kapanmasıyla beraber bu sürece ait periyot başa alınır. Anlatılanlar periyodik olarak devam eder.

Arduino kodu
Kod: [Seç]
#include <SPI.h>  // SPIkütüphanesi eklendi
#include <RFID.h> // Rfid kütüphanesi eklendi
#include <LiquidCrystal.h>  // LCD ekran kütüphanesi eklendi
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);  // LCD ekran bu pinleri kullanacak. Gerekli durumlarda değiştirilebilir.
const byte motor_pin1 = 3;  // Motor sürücü kontrol pini D3
const byte motor_pin2 = 2;  // Motor sürücü kontrol pini D2
const byte buzzer = 13; // Buzzer pini
RFID rfid(53,49); // Rfid modülünün bağlanacağı pinler belirlendi
byte kart[5] = {117,85,177,101,244};  // rfid kart kimliği
boolean izin = true;  // izin isminde değişken oluşturuldu
void setup()
{
  Serial.begin(9600); // seri haberleşme başlatıldı
  SPI.begin();  // Rfid ile haberleşebilmek için SPI haberleşme protokolü başlatıldı
  rfid.init();
  pinMode(motor_pin1, OUTPUT);  // Motor sürücü girişlerinin bağlanacağı dijital pin çıkış olarak atandı
  pinMode(motor_pin2, OUTPUT);  // Motor sürücü girişlerinin bağlanacağı dijital pin çıkış olarak atandı
  pinMode(buzzer, OUTPUT);  // buzzer pini çıkış olarak atandı
  lcd.begin(16,4);  // LCD ekranın karekter ve satır sayıları girildi
}
void loop()
{
  hosgeldiniz_mesaji();   // Hoşgeldiniz fonksiyonunu çalıştır
  kart_oku(); // Kart oku isimli fonksiyonu çalıştır
  izin=true;  // izin isimli değişkeni doğru yap

  // Burada kart kimliği okunuyor
  if(rfid.isCard())
  {
    if(rfid.readCardSerial())
    {
      Serial.print("Kart bulundu ID: ");
      Serial.print(rfid.serNum[0]);
      Serial.print(",");
      Serial.print(rfid.serNum[1]);
      Serial.print(",");
      Serial.print(rfid.serNum[2]);
      Serial.print(",");
      Serial.print(rfid.serNum[3]);
      Serial.print(",");
      Serial.println(rfid.serNum[4]);
    }
    for(int i=0; i<5; i++)
    {
      if(rfid.serNum[i] != kart[i])
      {
        izin = false;
      }
    }
    if(izin==true)
    {
      bariyeri_ac();
      bariyer_acilinca_bekle();
      bariyeri_kapat();
      bariyer_kapaninca_bekle();
    }
    else
    {
      gecersiz_kart(); // kart kimliği geçersizse geçersiz kart fonksiyonun yürüt
    }
    rfid.halt();
  }
}
// kart kimliğini okuma işlemeri burada tamamlandı

void kart_oku()
{
  Serial.println("Karti okutunuz.");
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("KARTI OKUTUNUZ"); 
  lcd.setCursor(0,1);                           
  lcd.print("Baturay BOZKAYA"); 
  lcd.setCursor(0,2);                           
  lcd.print("Karadeniz Teknik"); 
  lcd.setCursor(0,3);                           
  lcd.print("Universitesi"); 
  delay(2000); // Kartı okuduktan sonra 2 saniye bekle
}

void bariyeri_ac()  // bariyeri açma kodları
{
  digitalWrite(motor_pin1, HIGH);
  digitalWrite(motor_pin2, LOW);
  digitalWrite(buzzer, HIGH);
  Serial.println("Bariyer aciliyor.");
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("BARiYER ACiLiYOR"); 
  lcd.setCursor(0,1);                           
  lcd.print("Baturay BOZKAYA"); 
  lcd.setCursor(0,2);                           
  lcd.print("Karadeniz Teknik"); 
  lcd.setCursor(0,3);                           
  lcd.print("Universitesi"); 
  delay(750); // Bariyer açılırken motorun enerjili kalacağı süre
}

void bariyer_acilinca_bekle() // Bariyer açıldıktan sonra yapılacak işlemler
{
  digitalWrite(motor_pin1, LOW);
  digitalWrite(motor_pin2, LOW);
  digitalWrite(buzzer, LOW);
  Serial.println("Bariyer acildi.");
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("BARiYER ACiLDI"); 
  lcd.setCursor(0,1);                           
  lcd.print("Baturay BOZKAYA"); 
  lcd.setCursor(0,2);                           
  lcd.print("Karadeniz Teknik"); 
  lcd.setCursor(0,3);                           
  lcd.print("Universitesi"); 
  delay(5000);  // Bariyer açıldıktan sonraki bekleme süresi
}

void bariyeri_kapat() // bariyeri kapatma kodları
{
  digitalWrite(motor_pin1, LOW);
  digitalWrite(motor_pin2, HIGH);
  digitalWrite(buzzer, HIGH);
  Serial.println("Bariyer kapaniyor.");
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("BARiYER KAPANiYO"); 
  lcd.setCursor(0,1);                           
  lcd.print("Baturay BOZKAYA"); 
  lcd.setCursor(0,2);                           
  lcd.print("Karadeniz Teknik"); 
  lcd.setCursor(0,3);                           
  lcd.print("Universitesi"); 
  delay(750);  // Bariyer kapanırken motorun enerjili kalacağı süre 
}

void bariyer_kapaninca_bekle()  // Bariyer kapandıktan sonra yapılacak işlemler
{
  digitalWrite(motor_pin1, LOW);
  digitalWrite(motor_pin2, LOW);
  digitalWrite(buzzer, LOW);
  Serial.println("Bariyer kapandi.");
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("BARiYER KAPANDi"); 
  lcd.setCursor(0,1);                           
  lcd.print("Baturay BOZKAYA"); 
  lcd.setCursor(0,2);                           
  lcd.print("Karadeniz Teknik"); 
  lcd.setCursor(0,3);                           
  lcd.print("Universitesi"); 
  delay(1000);  // Bariyer kapandıktan sonra bekleme süresi         
  Serial.println("Karti okutunuz.");   
}

void gecersiz_kart()  // kart kimliği geçersiz ise yapılacak işlemler
{
 Serial.println("Gecersiz kart");
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("GECERSiZ KART"); 
  lcd.setCursor(0,1);                           
  lcd.print("Baturay BOZKAYA"); 
  lcd.setCursor(0,2);                           
  lcd.print("Karadeniz Teknik"); 
  lcd.setCursor(0,3);                           
  lcd.print("Universitesi");
 delay(2000);
 Serial.println("Karti okutunuz."); 
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("KARTI OKUTUNUZ"); 
  lcd.setCursor(0,1);                           
  lcd.print("Baturay BOZKAYA"); 
  lcd.setCursor(0,2);                           
  lcd.print("Karadeniz Teknik"); 
  lcd.setCursor(0,3);                           
  lcd.print("Universitesi");   
}

void hosgeldiniz_mesaji()
{
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("Hosgeldiniz"); 
  lcd.setCursor(0,1);                           
  lcd.print("Baturay BOZKAYA"); 
  lcd.setCursor(0,2);                           
  lcd.print("Karadeniz Teknik"); 
  lcd.setCursor(0,3);                           
  lcd.print("Universitesi"); 
  delay(2000);     
}

İhtiyaç duyulması halinde projeye ait dosyaları download bölümünden indirebilirsiniz.

Proje hakkında daha fazla bilgi almak ve sorularınız için buraya tıklayıp forum sayfamızdan faydalanabilirsiniz.