Kartlı Geçiş Uygulaması (Step ve servo motor)

Görseldeki uygulamada RFID okuyucuya geçerli bir kart okutulduğunda step motor 90 °C’lik dönüş yapar. Geçerli ve geçersiz kartlar için farklı ses sinyalleri verir. Geçersiz kartın ID’si seri ekrandan okunarak istenirse geçerli kart listesine eklenir.

#include <SPI.h> // Dahili SPI kütüphanesi
#include <MFRC522.h>  // v1.4.9

#define reset 9 // Reset pini
#define ss 10  // SS pin

MFRC522 kartOkuyucu(ss, reset);  // kartOkuyucu isimli nesne oluşturuldu.

byte i, j, k;
byte kartSayisi = 2; //Kart sayısı doğru girilmelidir.
byte kartlar[][4] = {
  {0xA6, 0x06, 0x1E, 0xF9}, // ilk kartın dört byte'lık ID'si HEX olarak tanımlandı.
  {0xA6, 0x06, 0x1E, 0xF8}, // ikinci kart...
};

void setup() {
  Serial.begin(9600);		//Bilgisayarın seri ekranıyla UART iletişimi.
  SPI.begin();			// MFRC522 kart okuyucusuyla SPI iletişimi.
  kartOkuyucu.PCD_Init();		// MFRC522'yi başlat
  Serial.println("Lütfen kartı okutunuz.");
  pinMode(4, OUTPUT); // Buzzer.
  pinMode(6, OUTPUT); // Step motor pinleri.
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
}

void loop() {
  if ( ! kartOkuyucu.PICC_IsNewCardPresent())  //Bir kart okunana kadar bekle.
    return;

  if ( ! kartOkuyucu.PICC_ReadCardSerial())  // Kartı oku.
    return;

  if (kartKontrol()) { // Kart geçerliyse yapılacaklar...
    Serial.println("Kart geçerli.");
    digitalWrite(4, 1); // Buzzer bir saniye çalar.
    delay(1000);
    digitalWrite(4, 0);
    stepMotor(); // Step motor çalıştıran fonksiyonu çağır.
  }
  else { // Kart geçerli değilse yapılacaklar...
    for (i = 0; i < 4; i++) {
      Serial.print(kartOkuyucu.uid.uidByte[i], HEX); //Geçersiz kartın ID'sini ekrana yazdır.
      Serial.print(" ");
    }
    Serial.println(" numaralı kartınız sisteme tanımlı değil!");
    digitalWrite(4, 1); // Geçersiz kart için buzzer sesi.
    delay(200);
    digitalWrite(4, 0);
    delay(200);
    digitalWrite(4, 1);
    delay(200);
    digitalWrite(4, 0);
  }
  delay(500);
  Serial.println("\n Lütfen kartı okutunuz.");
}

boolean kartKontrol() { // Kart geçerliye 1, değilse 0 döndürür.
  k = 0;
  for (j = 0; j < kartSayisi; j++) { // Kayıtlı tüm kartlara bak.
    for (i = 0; i < 4; i++) { // Her kartın ID'si dört byte.
      if (kartlar[j][i] == kartOkuyucu.uid.uidByte[i]) {//Okunan kartı kayıtlı olanlarla karşılaştır.
        k++;
        if (k == 4) { // Tüm byte'lar doğrulandıysa...
          return 1; // 1 döndür.
        }
      }
    }
  }
  return 0; // Okunan kart kayıtlı kartlarla eşleşmediyse 0 döndür.
}

void stepMotor() { // Step motor Yaklaşık 90° döner.
  int x, adimSayisi = 500, sure = 2;

  for (x = 0; x < adimSayisi / 4; x++) {
    for (byte i = 6; i <= 9; i++) { //Sağa dön.
      digitalWrite(i, 1);
      delay(sure);
      digitalWrite(i, 0);
    }
  }
  delay(1000); // Kapı açık kalma süresi.
  for (x = 0; x < adimSayisi / 4; x++) {
    for (byte i = 9; i >= 6; i--) { //Sola dön.
      digitalWrite(i, 1);
      delay(sure);
      digitalWrite(i, 0);
    }
  }
}

#include <SPI.h> // Dahili SPI kütüphanesi
#include <MFRC522.h>  // v1.4.9
#include <Servo.h>

Servo servo; // servo isimli nesne oluşturuldu.

#define reset 9 // Reset pini
#define ss 10  // SS pin

MFRC522 kartOkuyucu(ss, reset);  // kartOkuyucu isimli nesne oluşturuldu.

byte i, j, k;
byte kartSayisi = 2; //Kart sayısı doğru girilmelidir.
byte kartlar[][4] = {
  {0xA6, 0x06, 0x1E, 0xF9}, // ilk kartın dört byte'lık ID'si HEX olarak tanımlandı.
  {0xA6, 0x06, 0x1E, 0xF8}, // ikinci kart...
};

void setup() {
  servo.attach(8); // Servo motor 9 numaralı PWM çıkışına bağlı.
  Serial.begin(9600);		//Bilgisayarın seri ekranıyla UART iletişimi.
  SPI.begin();			// MFRC522 kart okuyucusuyla SPI iletişimi.
  kartOkuyucu.PCD_Init();		// MFRC522'yi başlat
  Serial.println("Lütfen kartı okutunuz.");
}

void loop() {
  if ( ! kartOkuyucu.PICC_IsNewCardPresent())  //Bir kart okunana kadar bekle.
    return;

  if ( ! kartOkuyucu.PICC_ReadCardSerial())  // Kartı oku.
    return;

  if (kartKontrol()) { // Kart geçerliyse yapılacaklar...
    Serial.println("Kart geçerli.");
    kapiAc(); // kapiAc fonksiyonunu çağır.
  }
  else { // Kart geçerli değilse yapılacaklar...
    for (i = 0; i < 4; i++) {
      Serial.print(kartOkuyucu.uid.uidByte[i], HEX); //Geçersiz kartın ID'sini ekrana yazdır.
      Serial.print(" ");
    }
    Serial.println(" numaralı kartınız sisteme tanımlı değil!");
  }
  delay(500);
  Serial.println("\n Lütfen kartı okutunuz.");
}

boolean kartKontrol() { // Kart geçerliye 1, değilse 0 döndürür.
  k = 0;
  for (j = 0; j < kartSayisi; j++) { // Kayıtlı tüm kartlara bak.
    for (i = 0; i < 4; i++) { // Her kartın ID'si dört byte.
      if (kartlar[j][i] == kartOkuyucu.uid.uidByte[i]) {//Okunan kartı kayıtlı olanlarla karşılaştır.
        k++;
        if (k == 4) { // Tüm byte'lar doğrulandıysa...
          return 1; // 1 döndür.
        }
      }
    }
  }
  return 0; // Okunan kart kayıtlı kartlarla eşleşmediyse 0 döndür.
}

void kapiAc() {
  servo.write(90); //Servo motoru 90 dereceye getirir.
  delay(3000);
  servo.write(0); //Servo motoru 0 dereceye getirir.
  delay(1000);
}

Benzer Temrinler & Yazılar

  • Röleyle Dijital Çıkış Uygulaması

    Görselde röle modülünün beslemesi Arduino kartının 5 V ve GND uçlarından verilir. Modülün sinyal girişine Arduino’nun çıkış olarak ayarlanan 13 numaralı pini bağlanır. Modülün NO-COM uçlarına 220 V’la seri bağlanan lamba normalde sönüktür. Modülün sinyal girişi Arduino’nun 13 numaralı pininden lojik 1 (5 V) bilgisini aldığında röle içinde COM ucu NO kontağıyla temas eder ve…

  • LCD Uygulaması

    Görseldeki LCD uygulamasında V0 ucuna bağlı dirençle ekran parlaklığı ayarlanmıştır. Bupine potansiyometre bağlanarak da LCD ekranın parlaklığı ayarlanabilir. LCD kütüphanesi dâhilîkütüphanelerde mevcuttur. Menülerden “Taslak  Library Ekle  LiquidCrystal” seçilerek kütüphane taslakta kullanılır. Aşağıdaki program LCD ekrana “Merhaba dünya.” yazdırmaktadır. Buprogramın bir örneğine menülerden “Dosya  Örnekler  LiquidCrystal  HelloWorld” adımlarını izleyerek de ulaşılır….

  • Bluetooth Uygulaması

    Bluetooth modülle haberleşmek için telefondan bluetooth bağlantısı açılarak hc-05 cihazı bulunur ve “Bluetooth aygıtını seç” düğmesiyle hc-05 seçilir. Varsayılan şifre “1234” veya “0000” dır.Bluetooth ile “A” harfi gönderilerek LED yakılır, “B” harfi gönderilerek LED söndürülür (Görseldeki). Bluetooth uygulama devresi Görselde görülmektedir. void setup() { pinMode(13, OUTPUT); Serial.begin(9600); // Bluetooth ile seri iletişimi başlat. } void…

  • Trafik Lambası Uygulaması

    Görselde röle modülünün beslemesi Arduino kartının 5 V ve GND uçlarından verilir. ModülünGörselde 13, 12, 11 numaralı pinlere sırasıyla kırmızı, sarı ve yeşil LED bağlanarak programda çıkış olarak ayarlanmıştır. Her durum için yanan lambalara lojik 1 bilgisi gönderilirken sönmesi istenen lambalara lojik 0 bilgisi gönderilir.Değişkenler (kirmizi, sari, yesil) byte (0-255 arası sayılar için) tipinde tanımlanarak…

  • Wi-Fi Kontrollü Araba Uygulaması NodeMCU 1.0 (ESP-12E) ve ESP32 kodu

    Görseldeki Wi-Fi kontrollü araba uygulamasında NodeMCU acces point (AP) modunda çalışmaktadır. NodeMCU’ya bağlanmak için kablosuz ağlardan “Robot” seçilir. Şifre “12345678” girilir. Bilgisayar veya akıllı telefondan tarayıcı (Chrome vb.) açılarak adres satırına 192.168.4.1 girilerek NodeMCU içindeki web server sayfasından araç kontrol edilir. /* NodeMCU Access Point (AP) modunda çalışmaktadır. Kablosuz ağlardan "Robot"a bağlanın. Şifre: 12345678 Tarayıcıdan…

Bir Yorum Yazın

E-posta adresiniz yayınlanmayacaktır. Gerekli alanlar * ile işaretlenmiştir.