Hallo zusammen,
ich habe mir einen Arduino als Türöffner gebaut (das haben sicher schon ganz viele gemacht). Allerdings hat meiner eine kleine Eigenheit. Den genauen "Auslöser" konnte ich bisher nicht feststellen. Aber den Workaround um Ihn wieder in gang zu bekommen.
IST-Zustand (Code folgt unten):
Hauseingangstüre mit elektrischem Schloss
Arduino Nano mit MFRC522
RFID Tag zum auslesen
Ich halte z.B. meinen Token an den MFRC522 und die Türe öffnet für eine Sekunde. Irgendwann funktioniert dies aber nicht mehr. EIne genaue Situation wann, kann wie gesagt bisher nicht genauer definiert werden. Einzig KANN es passieren das der Fehler auftritt wenn der Arduino mal neustartet weil z.B. der Strom weg war.
Die USB Verbindung beenden und somit einen Neustart des Arudinos erzwingen funktioniert leider nicht. Und jetzt kommt das, was ich nicht verstehe.
Ich muss den Arduino per USB an meinen Rechner stecken und einmal den Seriellen Monitor öffnen. Dann startet das Script ja automatisch neu und voilá es läuft wieder.
Ich stecke den Arduino ab und wieder in die USB Stromversorgung und er läuft wieder für mal nen Monat mal zwei/drei Monate.
Woran kann das liegen?
Was kann ich dagegen machen?
Ich habe überlegt die Serial Befehle auszukommentieren außer zum Debuggen oder hinzufügen eines neuen Token.
Alles andere funktioniert einwandfrei.
Den Arduino nur an meinen Rechner stecken brachte auch nichts. Es muss wirklich der Serielle Monitor aufgemacht werden.
Nochmal aufspielen um Aufspielfehler auszuschließen habe ich auch.
Ich freue mich auf eure Rückmeldungen.
Hier nun der Code:
#include <SPI.h> // SPI-Bibiothek hinzufügen
#include <MFRC522.h> // RFID-Bibiothek hinzufügen
#define SS_PIN 10 // SDA an Pin 10
#define RST_PIN 9 // RST an Pin 9
#define PIN_Tuermotor 8 // Türöffner an PIN 8
MFRC522 mfrc522(SS_PIN, RST_PIN); // RFID-Empfänger initialisieren
void setup(){
Serial.begin(9600); // Serielle Verbindung starten (Monitor)
SPI.begin(); // SPI-Verbindung aufbauen
mfrc522.PCD_Init(); // Initialisierung des RFID-Empfängers
pinMode(PIN_Tuermotor,OUTPUT);
//digitalWrite(PIN_Tuermotor, HIGH);
//delay(5000);
digitalWrite(PIN_Tuermotor, LOW);
Serial.println("Beginn des Scripts");
}
void loop(){
String Token_ID;
String Token_Byte;
if ( ! mfrc522.PICC_IsNewCardPresent()) // Wenn keine Karte in Reichweite ist...
{
return; // ...springt das Programm zurück vor die if-Schleife, womit sich die Abfrage wiederholt.
}
if ( ! mfrc522.PICC_ReadCardSerial()) // Wenn kein RFID-Sender ausgewählt wurde
{
return; // ...springt das Programm zurück vor die if-Schleife, womit sich die Abfrage wiederholt.
}
Serial.print("Die ID des RFID-TAGS lautet:");
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Token_Byte=(mfrc522.uid.uidByte[i]);
Serial.print(mfrc522.uid.uidByte[i]); // Dann wird die UID ausgelesen, die aus vier einzelnen Blöcken besteht und der Reihe nach an den Serial Monitor gesendet.
//Serial.print(mfrc522.uid.uidByte[i], HEX); // Dann wird die UID ausgelesen, die aus vier einzelnen Blöcken besteht und der Reihe nach an den Serial Monitor gesendet. Die Endung Hex bedeutet, dass die vier Blöcke der UID als HEX-Zahl (also auch mit Buchstaben) ausgegeben wird
Serial.print(" ");
Token_ID=Token_ID+Token_Byte;
}
Serial.println();
delay(1000);
//Serial.print("Die ID lautet:");
//Serial.println(Token_ID);
if(Token_ID == "XXX"){ // Smartwatch
Serial.println("Token ist registriert. Tür wird geöffnet");
digitalWrite(PIN_Tuermotor, HIGH);
delay(1000);
digitalWrite(PIN_Tuermotor, LOW);
Serial.println("Tür wieder geschlossen");
}
if(Token_ID == "XXX"){ // Implantat
Serial.println("Token ist registriert. Tür wird geöffnet");
digitalWrite(PIN_Tuermotor, HIGH);
delay(1000);
digitalWrite(PIN_Tuermotor, LOW);
Serial.println("Tür wieder geschlossen");
}
}