Aus den einzelnen Grundlagen kannst du dein eigenes Programm zusammensetzen und mit Hilfe der Schemen die Tresorsteuerung selbst entwickeln. Damit du eine Vorstellung davon bekommst, wie dein Endprodukt aufgebaut werden kann, gibt es schon 3 Vorschläge. Lass dich inspirieren!
In diesem Vorschlag wird die Steuerung über einen LDR, einen IR-Sensor, einen Taster und ein RFID-Leser gemacht, mit einer RGB-LED wird der Zustand angezeigt und mit zwei Servos wird geöffnet und geschlossen.
///////////////////////////////////*DEFINITIONEN*/////////////////////////////////// /*SERVO-DEFINITIONEN*/ #include <Servo.h> //Bibliotheke des Servo wird eingefügt #define SERVOPIN1 2 //Hier wird der Pin definiert, wo der Servo1 angeschlossen ist #define SERVOPIN2 3 //Hier wird der Pin definiert, wo der Servo2 angeschlossen ist Servo servo1; //Der Servo1 muss auch definiert werden Servo servo2; //Der Servo2 muss auch definiert werden /*Zustandsanzeige*/ #define LED_GREEN 5 //Die grüne LED wird am Pin5 angesteuert #define LED_RED 6 //Die rote LED wird am Pin6 angesteuert /*IR-DEFINITONEN*/ #include <IRremote.h> //Bibliotheke des IR-Empfängers wird eingefügt /* WICHTIG: Der PIN darf keine Zifferwiederholungen nacheinander ausfeisen. Beispiel 1122 geht nicht. 1212 geht.*/ unsigned long PINZAHL1 = 0xFF30CF; //Pinzahl 1 entspricht der Taste 1 (0xFF30CF), was nach belieben verändert werden kann unsigned long PINZAHL2 = 0xFF18E7; //Pinzahl 2 entspricht der Taste 2 (0xFF18E7), was nach belieben verändert werden kann unsigned long PINZAHL3 = 0xFF7A85; //Pinzahl 3 entspricht der Taste 3 (0xFF7A85), was nach belieben verändert werden kann unsigned long PINZAHL4 = 0xFF10EF; //Pinzahl 4 entspricht der Taste 4 (0xFF10EF), was nach belieben verändert werden kann unsigned long MUTE_TASTE = 0xFFE21D; //Definition der MUTE-Taste unsigned long POWER_TASTE = 0xFFA25D; //Definition der POWER-Taste int cnt = 0; //den counter braucht es bei der PIN-Überprüfung int reciver = 4; //An diesem Pin wird der IR-Empfänger ausgelesen IRrecv irrecv(reciver); decode_results results; /*LICHT-DEFINITIONEN*/ #define LICHTPIN A0 //Der Begriff LICHTPIN hat den Wert A0 /*RFID-DEFINITIONEN*/ #include <SPI.h> #include <RFID.h> #define SDA_PIN 10 //über Pin10 laufen die SDA-Daten #define RST_PIN 9 //Pin9 wird als Reset-Pin definiert RFID rfid(SDA_PIN, RST_PIN); byte pendant[5] = {0xA9,0xFA,0x1F,0xA3,0xEF}; //Beispielwerte für eine ID-Karte byte card[5] = {0x10,0x60,0xD9,0xA4,0xD}; //Beispielwerte für einen ID-Anhänger byte serNum[5]; byte data[5]; /*TASTER-DEFINITIONEN*/ #define TASTER 8 //Der Begriff TASTER hat den Wert 8 ///////////////////////////////////*SETUP*/////////////////////////////////// void setup() { Serial.begin(9600); //Startet die serielle Kommunikation /*SERVO*/ servo1.attach(SERVOPIN1); //Definition, welcher Pin (SERRVOPIN1) den Servo1 steuert servo2.attach(SERVOPIN2); //Definition, welcher Pin (SERRVOPIN2) den Servo2 steuert servo1.write(0); //Startposition des Servo1 wird eingestellt (0°) servo2.write(0); //Startposition des Servo2 wird eingestellt (0°) /*Zustandsanzeige*/ pinMode(LED_GREEN, OUTPUT); //Definert den PIN der grünen LED als Ausgang pinMode(LED_RED, OUTPUT); //Definiert den PIN der roten LED als Ausgang /*IR*/ irrecv.enableIRIn(); //Wird benötigt um den IR-Empfänger auszulesen /*LICHT*/ //Die Lichtkontrolle braucht keine Befehle im setup-Teil /*RFID*/ SPI.begin(); rfid.init(); /*TASTER*/ pinMode(TASTER, INPUT_PULLUP); //Definiert den TASTER als PULLUP-Input, wo Daten gelesen werden Schliessen(); //Der Tresor soll bei einem Neustart immer zuerst geschlossen werden } ///////////////////////////////////*LOOP*/////////////////////////////////// void loop() { /*IR*/ KNOPFKontrolle_1(); //Startet Funktion, welche prüft, ob ein bestimmter Knopf an der Fernsteuerung gedrückt wurde KNOPFKontrolle_2(); //Startet Funktion, welche prüft, ob ein bestimmter Knopf an der Fernsteuerung gedrückt wurde PINKontrolle(); //Durchläuft die PIN-Kontrolle /*LICHT*/ LICHTKontrolle(); //Führt ein Programm aus, welches prüft, ob der Lichtwert (160) unterschritten wurde /*RFID*/ RFIDKontrolle_1(); //Startet Funktion, welche prüft, ob eine bestimmt ID-Card am RFID-Leser erkannt wurde RFIDKontrolle_2(); //Startet Funktion, welche prüft, ob eine bestimmt ID-Card am RFID-Leser erkannt wurde /*TASTER*/ Taster(); //Führt ein Programm aus, welches prüft, ob der Taster gedückt wurde } ///////////////////////////////////*WEITERE FUNKTIONEN*/////////////////////////////////// void Oeffnen(){ servo1.write(90); //Servo1 wird auf 90° gedreht servo2.write(90); //Servo2 wird auf 90° gedreht /*Dieser Abschnitt lässt die grüne LED leuchten und löscht die rote LED*/ digitalWrite(LED_GREEN, HIGH); digitalWrite(LED_RED, LOW); Serial.println("Pin korrekt oder MUTE-TASTE gedrückt oder viel Licht erkannt oder ID-Card erkannt"); delay(2000); //2 Sekunden Pause, damit der Servo genügend Zeit zum Drehen hat } void Schliessen (){ servo1.write(0); //Servo1 wird auf Startposition (0°) gedreht servo2.write(0); //Servo2 wird auf Startposition (0°) gedreht /*Dieser Abschnitt lässt die rote LED leuchten und löscht die grüne LED*/ digitalWrite(LED_GREEN, LOW); digitalWrite(LED_RED, HIGH); Serial.println("POWER-TASTE gedrückt oder Anhänger erkannt oder Taster gedrückt"); delay(2000); //2 Sekunden Pause, damit der Servo genügend Zeit zum Drehen hat } /*IR*/ void KNOPFKontrolle_1(){ if (irrecv.decode(&results)){ irrecv.resume(); } if (results.value == MUTE_TASTE){ Oeffnen(); //Wird ausgeführt, wenn die MUTE-Taste gedrückt wurde results.value = 0xFFFFFF; //results.value braucht diesen Wert, damit die Funktion "Oeffnen" nicht ohne erneute Überprüfung ausgeführt wird } } void KNOPFKontrolle_2(){ if (irrecv.decode(&results)){ irrecv.resume(); } if (results.value == POWER_TASTE){ Schliessen(); //Wird ausgeführt, wenn die POWER-Taste gedrückt wurde results.value = 0xFFFFFF; //results.value braucht diesen Wert, damit die Funktion "Schliessen" nicht ohne erneute Überprüfung ausgeführt wird } } void PINKontrolle(){ /*Aufbau: Auslesen des Werts im IR-Empfänger. Anschliessend Vergleich des IR-Werts mit dem gespeicherten PIN. Abhängig vom PIN-Code und der momentanen Eingabe schreitet das Porgramm voran. Ist der PIN korrekt, wird die Funktion Oeffnen(); ausgeführt.*/ if (irrecv.decode(&results)){ irrecv.resume(); } if (results.value == PINZAHL1 && cnt == 0 && results.value != 0xFFFFFFFF){ cnt++; } if (results.value == PINZAHL2 && cnt == 1 && results.value != PINZAHL1 && results.value != 0xFFFFFFFF){ cnt++; } else if (results.value != PINZAHL1 && cnt == 1 && results.value != 0xFFFFFFFF){ cnt = 0; } if (results.value == PINZAHL3 && cnt == 2 && results.value != PINZAHL2 && results.value != 0xFFFFFFFF){ cnt++; } else if (results.value != PINZAHL2 && cnt == 2 && results.value != 0xFFFFFFFF){ cnt = 0; } if (results.value == PINZAHL4 && cnt == 3 && results.value != PINZAHL3 && results.value != 0xFFFFFFFF){ Oeffnen(); cnt = 0; } else if (results.value != PINZAHL3 && cnt == 3 && results.value != 0xFFFFFFFF){ cnt = 0; } } /*LICHT*/ void LICHTKontrolle(){ if (analogRead(LICHTPIN) < 160){ Oeffnen(); //Wenn der Lichtwert unterschritten wurde, wird das Unterprogramm "Oeffnen" ausgeführt } } /*RFID*/ void RFIDKontrolle_1(){ /*Dieses Programm überprüft ständig, ob am RFID-Leser der Wert mit dem von "card" übereinstimmt. Ist dies der Fall, wird Oeffnen(); ausgeführt*/ boolean card_card = true; if (rfid.isCard()) { if (rfid.readCardSerial()) { for (int j = 0; j < 5; j++){ data[j] = rfid.serNum[j]; } } for (int i = 0; i < 5; i++){ if (data[i] != card[i]) card_card = false; } if (card_card){ Oeffnen(); } } rfid.halt(); } void RFIDKontrolle_2(){ /*Dieses Programm überprüft ständig, ob am RFID-Leser der Wert mit dem von "pendant" übereinstimmt. Ist dies der Fall, wird Schliessen(); ausgeführt*/ boolean card_card = true; if (rfid.isCard()) { if (rfid.readCardSerial()) { for (int j = 0; j < 5; j++){ data[j] = rfid.serNum[j]; } } for (int i = 0; i < 5; i++){ if (data[i] != pendant[i]) card_card = false; } if (card_card){ Schliessen(); } } rfid.halt(); } /*TASTER*/ void Taster(){ if (digitalRead(TASTER) == LOW){ Schliessen(); //Wenn der Taster gedrückt wurde, wird das Unterprogramm "Schliessen" ausgeführt } }