Zamek RFID typu włącz/wyłącz

Projekt miał na celu uzyskać wynik taki że po uruchomieniu przekaźnik jest wyłączony, po przyłożeniu odpowiedniej karty bądź breloka, przekaźnik się uruchamia, a po ponownym przyłożeniu karty przekaźnik wraca do pozycji początkowej. Przełącznik ON/OFF. Zastosowanie głównie do uruchamiania światła, listw etc.

Wykorzystane elementy:

  • klon Arduino NANO V3
  • przekaźnik
  • moduł RFID-RC522

Wykorzystane biblioteki i sketche:

Schemat podłączenia w większej rozdzielczości: link

Kod na odczytanie karty:

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;

void setup() {
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
}

void loop() {
  if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial())
  {
    Serial.print("UID: {");
    Serial.print(rfid.uid.uidByte[0] < 0x10 ? "0x0" : "0x");
    Serial.print(rfid.uid.uidByte[0], HEX);
    Serial.print(rfid.uid.uidByte[1] < 0x10 ? ", 0x0" : ", 0x");
    Serial.print(rfid.uid.uidByte[1], HEX);
    Serial.print(rfid.uid.uidByte[2] < 0x10 ? ", 0x0" : ", 0x");
    Serial.print(rfid.uid.uidByte[2], HEX);
    Serial.print(rfid.uid.uidByte[3] < 0x10 ? ", 0x0" : ", 0x");
    Serial.print(rfid.uid.uidByte[3], HEX);
    Serial.println("}");
    rfid.PICC_HaltA();
    rfid.PCD_StopCrypto1();
  }
}

Po wgraniu kodu na Arduino, uruchomiamy monitor portu szeregowego, przykładamy kartę do modułu RFID i odczytujemy kod karty, w moim przypadku wygląda tak:

Następnie zapisujemy kod karty, który wpiszemy w następny kod który umożliwi wykonanie założeń projektu.

#include <SPI.h>
#include <MFRC522.h>

#define przekaznik 8
const byte UID[] = {0x00, 0x00, 0x00, 0x00}; // brelok

int stan = 0;
int poprzedni_stan = 0;

MFRC522 rfid(10, 9);
MFRC522::MIFARE_Key key;


void setup() {
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
  pinMode(przekaznik, OUTPUT);
  digitalWrite(przekaznik, HIGH);
}

void wlacz_przekaznik()
{
  digitalWrite(przekaznik, LOW);
}

void wylacz_przekaznik()
{
  digitalWrite(przekaznik, HIGH);
}

void loop() {
  if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial())
  {
    if ( rfid.uid.uidByte[0] == UID[0]  &&
         rfid.uid.uidByte[1] == UID[1]  &&
         rfid.uid.uidByte[2] == UID[2] &&
         rfid.uid.uidByte[3] == UID[3] )
    {
      if (stan == 0)
      {
        Serial.println("GOOD: LIGHT ON");
        Serial.println("");
        wlacz_przekaznik();
        poprzedni_stan = 1;
        stan = 1;
      }
      else
      {
        if (poprzedni_stan == 1)
        {
          Serial.println("GOOD: LIGHT OFF");
          Serial.println("");
          wylacz_przekaznik();
          poprzedni_stan = 0;
          stan = 0;
        }
      }



    } else
    {
      Serial.println("BAD");
    }
    rfid.PICC_HaltA();
    rfid.PCD_StopCrypto1();
  }


}

W miejsce zmiennej

const byte UID[] = {0x00, 0x00, 0x00, 0x00}; // brelok

wpisujemy kod własnej karty tak jak na moim przykładzie:

const byte UID[] = {0x96, 0x09, 0xF1, 0x30}; // brelok

W przyszłości pokaże jak wykorzystałem ww. projekt w praktyce.

Jest to mój pierwszy post i liczę w komentarzach na konstruktywną opinię pozytywną i negatywną! 🙂

5/5 - (2 votes)

Dodaj komentarz