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

  • Kesme Uygulaması

    Görseldeki programda ana döngüde blink uygulaması çalışırken butona basıldığında kesme aktifedilmekte ve haricî LED anında yanmaktadır. Haricî LED’in sönme komutu ise ana döngüde verildiğinden sönme işlemi ana programda icra edilen komut satırına bağlı olarak 0 ile 2 saniyearasında süre alır. const byte dahiliLED = 13; const byte hariciLED = 12; const byte kesmePini = 2;…

  • DC Motor Uygulaması

    Elektrik enerjisini hareket enerjine çevirmeye yarayan mekanik aygıtlara motor denir. Elektrikmotorları AC ve DC olarak iki gerilim türünde çalışacak şekilde üretilir. Diğer birçok motor modelibu iki motor türünden geliştirilmiştir. AC motorlar genel olarak asenkron motor olarak iki türdeüretilir. Bunlar bir fazlı ve üç fazlı motorlar olmak üzere iki türdedir. Bu motorların dönüş yönünüdeğiştirmek için farklı…

  • 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…

  • Seri Port Ekran Uygulaması

    Görseldeki çıktılarda seri port ekranına Serial.println() fonksiyonuyla “MerhabaDünya” yazdırılmaktadır.İkinci programda butonla dijital giriş uygulamasında butonun durumu seri port ekranına yazdırılmaktadır void setup() { Serial.begin(9600); //Seri iletişim baudrate ayarı yapıldı. } void loop() { Serial.println("Merhaba Dünya!"); } const byte buton = 2; void setup() { Serial.begin(9600); //Seri iletişim baudrate ayarı yapıldı. pinMode(buton, INPUT_PULLUP); } void loop()…

  • Wi-Fi Uygulaması NodeMCU 1.0 (ESP-12E) nem sensörü

    Bu uygulamada NodeMCU 1.0 (ESP-12E) kullanılarak Arduino IoT Cloud üzerinden başka birkonumdaki LED’i yakıp söndürme ve ortamın nem ve sıcaklık bilgisini bilgisayar veya akıllı telefon üzerinden görüntüleme yapılmaktadır. #include "thingProperties.h" #include "DHT.h" //Adafruit DHT Sensor Library v1.2.3 #define DHTpin 4 // Sensörün bağlandığı pin. NodeMCU 1.0 (ESP-12E) D2 pini. #define DHTtipi DHT11 // Sensör tipi:…

Bir Yorum Yazın

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