RFID Türsteuerungs Problem

Hallo,

ich bin neu hier und habe ein Problem mit einer meiner Projekte.

Es handelt sich um eine Türsteuerung mit RFID erkennung, und einen Klingeltaster.

Ich habe das Problem das ich den Tür Öffner nur 1-2 mal mit dem RFID freigeben kann, danach will er nicht mehr und es funktioniert nur noch die Klingel über den Klingeltaster.

Selbst über den Serial Monitor bekomme ich keine Rückmeldung.

Skript:

#include <SPI.h>

#include <MFRC522.h>

#define SS_PIN 10

#define RST_PIN 9

MFRC522 mfrc522(SS_PIN, RST_PIN);


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

SPI.begin();

mfrc522.PCD_Init();

pinMode (7,OUTPUT); //Strom 8V (Relais)

pinMode (5,OUTPUT); //Klingel (Summer in Grundstellung) (Relais)

pinMode (3,INPUT); // Klingel Taster

digitalWrite (7,HIGH);

digitalWrite (5,HIGH);
}

void klingel()
{

if (digitalRead (3)==LOW)
{
 digitalWrite (5,LOW);
 delay (50);
 digitalWrite (7,LOW);
 delay (300);
 digitalWrite (7,HIGH);
 delay (50);
 digitalWrite (5,HIGH);
}

}

void loop()
{

klingel();
 
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}


if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}

long code=0;

for (byte i = 0; i < mfrc522.uid.size; i++)

{
code=((code+mfrc522.uid.uidByte[i])*10);
}

Serial.print("Die Kartennummer lautet:");

Serial.println(code);

if ((code=1699190) || (code=2617290) || (code=988390) || (code=2539340) || (code=1662190) || (code=1324390))

{
digitalWrite (7,LOW);
delay (2000);
digitalWrite (7,HIGH);
}

}

Und wenn ich den letzten Teil mit der if Schleife wegnehme, zeigt er mir im Serial Monitor wieder die code’s an.

Ich bin aktuell echt überfragt und ich hoffe mir kann hier jemand dabei helfen.

Wenn Bilder benötigt werden füge ich noch welche hinzu.

Was ich benutze:

Arduino Uno R3
RFID rc522
Türtaster
2 relais

Mit freundlichen Grüßen

Michael Kohrs

Wenn du statt dem Türöffner eine LED, oder einen anderen Verbraucher anschließt, was passiert dann?
Wie steuerst du den Türöffner an? Wie Wird der Arduino mit Strom versorgt? Ist es der gleiche Stromkreis, wie der Türöffner? Hast du dem Türöffner eine antiparallele Freilaufdiode verpasst, wie man das bei Relais und Motoren macht?

Hallo,

Ich habe den Türöffner über ein Relais angesteuert. Der Arduino wird über ein externes 12V netzteil versorgt, und ist vom Türöffner getrennt mit ein Extra Trafo von 8V. Und als Relais habe ich diese hier verwendent(http://www.amazon.de/Neufech-Kan%C3%A4le-Relais-Modul-Brett-Arduino/dp/B00PIMRGN4/ref=sr_1_2?ie=UTF8&qid=1460307766&sr=8-2&keywords=arduino+relais)

Mit freundlichen Grüßen

Michael Kohrs

Funktioniert es denn, wenn der Arduino nur das Relais schaltet? Hat denn das Relais die angefragte Freilaufdiode?

Der Fehler liegt in der if-Anweisung: soll sein:
Code==Zahl,
Nicht code=Zahl!

Hallo,

Das mit der if Schleife war leider nicht der Fehler es hat sich nicht geändert.

Und das Relais wird auch bei der Klingel betätigt und es funktioniert einfandfrei damit, aber bei dem RFID funktioniert es nicht nur 1 bis 2 Mal, sowie im Serial Monitor werden die Code’s auch nur 1 - 2 Mal angezeigt.

Mit freundlichen Grüßen

Michael Kohrs

Dann stell doch bitte den berichtigten Sketch hier rein, verwende dazu bitte die Code-Tags. Schaltfläche </>.

Dann ist der Sketch auch vernünftig lesbar.

Mit Mühe :wink: habe ich noch einen Fehler gefunden. (Weil schlecht lesbar)

code = ((code + mfrc522.uid.uidByte) * 10);

da hast du den Zähler vergessen,
so sollte es aussehen.

code = ((code + mfrc522.uid.uidByte[i]) * 10);

Hast du am Klingelpin (3) auch ein Pullup-Widerstand angeschlossen?

Ob noch weitere Fehler drin stecken, kann ich aktuell nicht sehen.

Hallo,

ja ich habe ein Pulldown Wiederstand beim Taster eingebaut.

Der aktuelle stand meies Skript:

#include <SPI.h>

#include <MFRC522.h>

#define SS_PIN 10

#define RST_PIN 9

MFRC522 mfrc522(SS_PIN, RST_PIN);


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

SPI.begin();

mfrc522.PCD_Init();

pinMode (7,OUTPUT); //Strom 8V

pinMode (5,OUTPUT); //Klingel (oder Summer)

pinMode (3,INPUT); // Klingel Taster

digitalWrite (7,HIGH);

digitalWrite (5,HIGH);
}

void klingel()
{
if (digitalRead (3)==LOW)
{
  digitalWrite (5,LOW);
  delay (50);
  digitalWrite (7,LOW);
  delay (300);
  digitalWrite (7,HIGH);
  delay (50);
  digitalWrite (5,HIGH);
}

}

void loop()
{

klingel();
  
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}


if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}

long code=0;

for (byte i = 0; i < mfrc522.uid.size; i++)

{
code = ((code + mfrc522.uid.uidByte[i]) *10);
}

Serial.print("Die Kartennummer lautet:");

Serial.println(code);

if ((code==1699190) || (code==2617290) || (code==988390) || (code==2539340) || (code==1662190) || (code==1324390))
{
digitalWrite (7,LOW);
delay (2000);
digitalWrite (7,HIGH);
}

}

Aber es Funktioniert immer noch nicht.

Wenn ich die if Schleife wegnehme, mit dem Code’s, dann wird auch wieder im Serial Monitor die Code’s angezeigt. Aber wenn ich die if Schleife wieder ein Bau, dann wird mir auch nicht mehr die Code’s im Serial Monitor angezeigt.

Mit freundlichen Grüßen

Michael Kohrs

Wenn du den Taster auf low abfragst ist ein Pulldown-Widerstand völliger Quatsch. Du brauchst einen Pullup-Widerstand.

Übrigens ist es keine "IF-Schleife" sondern eine "IF-Anweisung". Die Loop ist eine Schleife.

Da ich deine einzelnen Codes der Tags nicht kenne, vermute ich da den Fehler.

Fang doch mal einfach an, wenn du es nicht anders heraus findest und frage in der if-Anweisung nach einem Code ab.

z. Beispiel so:

  if (code == 1699190)
  {
    TuerOeffnen();
  }

  else if (code == 2617290)
  {
    TuerOeffnen();
  }

//usw.

Du musst natürlich auch die Funktion "TuerOeffnen" erstellen:

void TuerOeffnen()
{
  digitalWrite (7, LOW);
  delay (2000);
  digitalWrite (7, HIGH);
}

Das ist nur um den Fehler aufzuspüren. Danach kannst du es wieder so machen, wie es dir gefällt.

Und jetzt solltest du uns ein Schaltbild liefern, damit wir mal sehen wie du es aufgebaut hast.

Hallo,

ich bin durch Google auf diesen Thread aufmerksam geworden und hatte mir hier die Lösung meines Problems erhofft. Mein Schaltungsaufbau ähnelt sehr dem oben Beschriebenem, auch bei mir hängte sich der Arduino Nano nach 1 bis 2 Türöffnungen auf.... bis ich das verwendete SRD-05VDC Relais Board durch ein 1-Kanal OMRON Solid State Relais Modul ersetzte. Mit dem Solid State Relais arbeitet die Schaltung nun zuverlässig und störungsfrei, ich hoffe ich konnte jemandem mit meinem Post helfen :)

Gruß, Frank

@Frank_Niemand Na ich hoffe doch, dass der TO sein Problem in den vergangenen 3,5 Jahren gelöst hat. Ob du dein Problem damit lösen konntest, weißt du selbst am Besten, denn ein SSR ist nicht zwangsläufig die bessere Lösung. Zumal die meisten nur 230V AC schalten können.