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 und einen IR-Sensor gemacht, mit einer RG-LED wird der Zustand angezeigt und mit einem Servo 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 Servo servo1; //Der Servo1 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 ///////////////////////////////////*SETUP*/////////////////////////////////// void setup() { Serial.begin(9600); //Startet die serielle Kommunikation /*SERVO*/ servo1.attach(SERVOPIN1); //Definition, welcher Pin (SERRVOPIN1) den Servo1 steuert servo1.write(0); //Startposition des Servo1 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 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 } ///////////////////////////////////*WEITERE FUNKTIONEN*/////////////////////////////////// void Oeffnen(){ servo1.write(90); //Servo1 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"); 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 /*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"); 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 Schliessen2(); 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 } }