Skocz do zawartości

Elektrozamek otwierany kartą (problem)


Pomocna odpowiedź

Napisano

Cześć

Pracuję nad projektem elektrozamka otwieranego kartą (arduino uno, rfid-rc522, SRD-05VDC-SL, elektrozamek 12V, zasilacz 12V). 
Jednak, jak na razie, nie działa to prawidłowo. Zamek nie zawsze reaguje na kartę. Gdy zamek otworzy się ok. 3 razy to przestaje działać.
Wysyłam kod i połączenia. Proszę o rady. Gdzie jest błąd?


Podłączenie RFID-RC522 do arduino uno

SDA - PIN 10
SCK - 13
MOSI - 11
MISO - 12
GND - GND
RST - 9
3,3V - 3,3V

Podłączenie prezkaźnika SRD-05VDC-SL do arduino uno

S - 4
+ - 5V
- - GND

Podłączenie przekaźnika do elektrozamka 12V i zasilacza 12V

NC przekaźnika - - (minus) zasilacza
N przekaźnika - - (minus) elektrozamka
+ (plus) zasilacza - + (plus) elektrozamka

#include <SPI.h>

#include <MFRC522.h>

#define SS_PIN 10

#define RST_PIN 9

#define RELAY_PIN 4  // Pin do sterowania przekaźnikiem

MFRC522 mfrc522(SS_PIN, RST_PIN);  // Utwórz instancję MFRC522

void setup() {
  Serial.begin(9600);

  SPI.begin();  // Zainicjuj magistralę SPI

  mfrc522.PCD_Init();  // Zainicjuj MFRC522

  pinMode(RELAY_PIN, OUTPUT);

  digitalWrite(RELAY_PIN, LOW);  // Upewnij się, że zamek jest zamknięty na
                                 // start (przy logice LOW dla cewki)

  Serial.println("Skanuj karte RFID...");
}

void loop() {
  // Sprawdź, czy znaleziono nową kartę

  if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {
    // Odczytaj UID karty

    String cardUID = "";

    for (byte i = 0; i < mfrc522.uid.size; i++) {
      cardUID += String(mfrc522.uid.uidByte < 0x10 ? "0" : "");

      cardUID += String(mfrc522.uid.uidByte, HEX);
    }

    cardUID.toUpperCase();

    // Sprawdź, czy UID pasuje do autoryzowanej karty

    if (cardUID == "8E349804") {  // Zastąp "TWOJ_AUTORYZOWANY_UID" własnym

      Serial.println("Dostep przyznany!");

      digitalWrite(RELAY_PIN,
                   HIGH);  // Otwórz elektrozaczep (aktywuj przekaźnik)

      delay(3000);  // Pozostaw otwarty na 3 sekundy

      digitalWrite(RELAY_PIN, LOW);  // Zamknij zamek (deaktywuj przekaźnik)

    } else {
      Serial.println("Dostep zabroniony!");
    }

    mfrc522.PICC_HaltA();  // Zatrzymaj komunikację z kartą

    mfrc522.PCD_StopCrypto1();  // Zatrzymaj szyfrowanie
  }
}

1.jpg

4.jpg

3.jpg

2.jpg

Ogólnie moduły rc522 są kapryśne. Pracowałem nad przemysłowym wykorzystaniem tego chipa, gdzie czytane jest nie tylko UID, ale też dane z kilku bloków, a sama karta też jest jeszcze szyfrowana i wnioski takie, że różne partie tych układów potrafią mieć własne unikalne problemy. Bardzo często potrzebne były krótkie opóźnienia między konkretnymi funkcjami, albo soft resetu po jakiejkolwiek operacji, ale nie we wszystkich przypadkach, bo dla odmiany niektóre przy tych opóźnieniach nie chciały działać. Wydaje mi się, że chipy na tych modułach niekoniecznie zawsze muszą być prawdziwe, choć funkcjonalność jest zachowana. Ściągałem kilka bezpośrednio od NXP i z tymi nie miałem żadnych problemów. 

Co się dzieje gdy zamek przestaje działać? Czy Arduino wysyła dane portem szeregowym czy milczy całkowicie? Bo to może dać konkretnie odpowiedź czy to procek się zawiesza, czy sam moduł rfid.

Na początek możesz sprawdź zasilanie, to znaczy, 5V daj z zewnętrznego źródła a nie samego Arduino. Nie powinno to mieć wielkiego wpływu, ale jest to jednak przekaźnik, który zawsze jakieś zakłócenia będzie generować, a moduł rfid może na nie reagować. 

  • Lubię! 1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...