Home > Zuhause > Super Secret Verschluss-Kasten mit kapazitivem Touch

Super Secret Verschluss-Kasten mit kapazitivem Touch

Advertisement

Super Secret Verschluss-Kasten mit kapazitivem Touch

Super Secret Verschluss-Kasten mit kapazitivem Touch

Super Secret Verschluss-Kasten mit kapazitivem Touch

Hey Leute, ich wollte ein Projekt teilen, das ich gerade beendet habe. Ich baute eine super geheime Sperre für meine Freundinnen kleinen Bruder. Er hat ein Händchen für kreatives Lego-Gebäude, so dass ich es für eine gute Idee halte, ihn so schnell wie möglich zum Arduino zu öffnen. Die Super-Secret-Sperre wird nur für diejenigen mit dem richtigen Passwort zu öffnen oder es gibt eine versteckte Möglichkeit, den Passcode zurücksetzen, so dass keine prügelnde kleine Schwester jemals in der Lage sein, es herauszufinden. Das heißt, es sei denn, sie findet diese instructable. Die geheime Methode beinhaltet die Verwendung einiger kapazitiver Touch Sensing.

Der Arduino bleibt eingeschlafen, um die Batterie zu schonen und weckt nur, wenn die Taste gedrückt wird. Nach dem Aufwachen gibt es zwei Wege zu gehen, blinken die grüne LED, entsperren, und gehen Sie zurück zu schlafen ODER leuchten die rote LED und warten für 20 Sekunden für die richtige Passcode, dann schlafen gehen. Wenn Sie die Taste 5 Sekunden lang nicht gedrückt halten, wird der Passcode in dem Zeitraum, in dem er schlafen gelassen wird, auf den aktuellen Code eingestellt. Es wird dann entsperren und wieder schlafen gehen. Der 20-Sekunden-Timer wird jedes Mal neu gestartet, wenn die Taste gedrückt wird.

Teile
ATmega168 / 328 auf einer Leiterplatte oder ein Arduino mit einem Steckbrett
Holzkiste
Kleiner Servo
3x Potentiometer & Drehknöpfe
Knopf drücken
RGB-LED
2x 100 Ohm Widerstände
150 Ohm Widerständen
Batteriepack
Draht
Je nachdem, wie Sie die Verriegelung machen, diese Teile werden bis zu Ihnen, ich verwendet 1/4 "Quadrat Dübel, um die Verriegelung und unterstützt

Werkzeuge
Fertigkeiten mit einem Dremmel
Lötkolben
Heißklebepistole
Holz Leim (ich empfehle Gorilla Holz Leim, die nicht schäumende Art)

Wenn jemand die vermuteten japanischen Zeichen entziffern kann, würde ich wirklich gerne wissen, die ursprüngliche Zweck der Box.

AKTUALISIEREN:
Er liebte es!

Schritt 1: schneiden und verdrahten!

Super Secret Verschluss-Kasten mit kapazitivem Touch

Super Secret Verschluss-Kasten mit kapazitivem Touch

Sie müssen herauszufinden, wo zu schneiden 5 Löcher für die Töpfe, LED und Knopf. Achten Sie darauf, Platz für entweder die Arduino oder ein Steckbrett / PCB-Standalone zu lassen. Ich wählte eine ATmega 328P-PU Standalone Betrieb 8MHz interne Uhr verwenden, um den Batterieverbrauch zu minimieren. Im Sleep-Modus sollte theoretisch nur ein paar uA, die Welten ist besser, dass die 25mA die UNO verbraucht.
Wenn Sie planen, die Arduino-Entwicklungsplatine anstelle einer Standalone-Version zu verwenden, achten Sie darauf, den 5V-Regler zu umgehen, indem Sie den 5V-Pin verwenden, um ihn anstelle von VIN oder der Laufbuchse anzutreiben. Der Versuch, jede Batterie zu sparen ist sinnlos, wenn sie verwendet wird.

Verbinden Sie 5V, GND und Datenleitungen mit den entsprechenden Pins. Denken Sie daran, Widerstände auf der LED verwenden, braucht Red 150 Ohm, während blau und grün 100 Ohm-Widerstände benötigen.

Denken Sie daran, die Töpfe müssen mit analogen Pins verbinden.

Welcher Akkupack Sie wählen, muss eine maximale Spannung von 5,5 V und ein Minimum von 4,5 V ausgeben. (3AA in Serie verdrahtet sollte funktionieren). Der ATmega328 läuft nett überall von 1,8 bis 5,5 V, aber der Servo benötigt ein bisschen mehr Saft. Das Datenblatt für eine 9g Servo sagt 4.8V Minimum. Da es häufiger ist, Packungen mit 4 Batterien zu finden, die 6v erzeugen würden, kann eine Shottkey-Diode verwendet werden, um auf Spannung auf 5,6 V abzusinken. Ich glaube nicht, dass ein extra .1v wird das ATmega beschädigen.

BEARBEITEN:
3x 1.5v alkalisches AA verkabelt in der Reihe = 4.5v
Ich benutzte 4x 1.2v Lithiumbatterien für 4.8v

Schritt 2: Code

Super Secret Verschluss-Kasten mit kapazitivem Touch

Super Secret Verschluss-Kasten mit kapazitivem Touch

Interrupts können schwierig sein, digitaler Pin 2 ist auch PCINT0. Deshalb ist die Taste mit Pin 2 verbunden, aber der Interrupt ist an 0 angeschlossen.

#include <Servo.h>

#include <CapacitiveSensor.h>

#include <avr / sleep.h>

Const-Byte rot = 6;
Konst. Byte grün = 7;
Const-Byte blau = 8;

Const byte pot1 = A0;
Const byte pot2 = A1;
Const Byte pot3 = A2;

Const-Byte-Taste = 2;

Int code1 = 1;
Int code2 = 1;
Int code3 = 1;

Int pot_val1 = 0;
Int pot_val2 = 0;
Int pot_val3 = 0;

Int button_val = 0;

Int. Berührung;

Unsigned long currentMillis = 0;
Unsigned long codeMillis = 0;
Unsigned long buttonMillis = 0;
Unsigned long sleepMillis = 0;

KapazitiverSensor cs_10_11 = KapazitiverSensor (3, 4);

Servo myservo;

Int sleepCounter = 0;
Boolescher Zustand = LOW;

Void setup ()
{
Serial.begin (9600);
PinMode (rot, AUSGANG);
PinMode (grün, AUSGANG);
PinMode (blau, AUSGANG);
PinMode (Taste, INPUT);
PinMode (pot1, INPUT);
PinMode (pot2, INPUT);
PinMode (pot3, INPUT);
Cs_10_11.set_CS_AutocaL_Millis (20000);
DigitalWrite (Taste, HIGH);
AttachInterrupt (0, Interrupt, RISING);

aufrechtzuerhalten.
Void Schleife ()
{
GetPots (); // in Topfwerte lesen
MapAllPots (); // passen sie auf die richtige Skala an
If (pot_val1 == code1 && pot_val2 == code2 && pot_val3 == code3) // wenn das Passwort korrekt ist
{
Serial.println ("Erfolg!");
G(); // hellgrün LED
Unlock (); // Entsperren Sie die Verriegelung
Schlaf jetzt(); //Geh schlafen
aufrechtzuerhalten.
sonst
{
Serial.println ("Ausfall");
R (); // rote LED einschalten
aufrechtzuerhalten.

CurrentMillis = millis ();
Button_val =! DigitalRead (Schaltfläche); // den Button-Wert lesen
//Serial.println(button_val);
//Serial.println(sleepCounter);

If (button_val == 1) Wenn die Taste gedrückt wird, stellen Sie die Timer zurück.
{
SleepMillis = currentMillis;
CodeMillis = currentMillis;
aufrechtzuerhalten.

If ((currentMillis - sleepMillis)> 20000) // Wenn der Timer abläuft, gehen Sie schlafen
{
SleepMillis = currentMillis;
Schlaf jetzt();
aufrechtzuerhalten.

Touch = highLow (cs_10_11.capacitiveSensor (30)); // Lesekapazität lesen und auf Binär HIGH oder LOW abbilden
Serial.println (touch);
CurrentMillis = millis ();
Wenn (touch == 1)
{
If ((currentMillis - codeMillis)> 5000) // wenn Berührung für 5 Sekunden 1 ist
{
B (); // Licht th blaue LED
StoreCode (); // Code aus Pot-Werten speichern
Verzögerung (300);
CodeMillis = currentMillis;
aufrechtzuerhalten.
aufrechtzuerhalten.
If (touch == 0) // wenn kein Touch-Reset-Timer, um Zeitansammlung zu verhindern
{
CodeMillis = currentMillis;
aufrechtzuerhalten.

aufrechtzuerhalten.

// Ende der Schleife
///////////////////////////////

Void interrupt ()
{
CurrentMillis = millis ();

Wenn ((currentMillis - buttonMillis)> 200)
{

ButtonMillis = currentMillis;
aufrechtzuerhalten.
aufrechtzuerhalten.
Void sleepNow () // Hier legen wir den arduino schlafen
{
aus(); // alle LEDs ausschalten

Set_sleep_mode (SLEEP_MODE_PWR_DOWN); // Der Sleep-Modus wird hier eingestellt

Sleep_enable (); // aktiviert das Sleep-Bit im mcucr-Register
// so schlafen ist möglich. Nur eine Sicherheitsnadel

AttachInterrupt (0, Interrupt, RISING); // Interrupt 0 (Pin 2) verwenden und Funktion ausführen
// wakeUpNow, wenn Pin 2 LOW erhält
MCUCR = Bit (BODS) | Bit (BODSE); // Schalten Sie die Brown-Out-Freigabe ein
MCUCR = Bit (BODS); // dies muss innerhalb von 4 Taktzyklen erfolgen

Schlafmodus(); // hier ist das Gerät tatsächlich eingeschlafen !!
// DAS PROGRAMM BETRACHT VON HIER NACH DEM WACHEN

Sleep_disable (); // Erstes nach dem Aufwachen:
// deaktivieren ...
DetachInterrupt (0); // sperrt den Interrupt 0 auf Pin 2, so dass die
// wakeUpNow-Code wird nicht ausgeführt
// während der normalen Laufzeit

aufrechtzuerhalten.
Int highLow (unsigned long x)
{
Wenn (x> = 300)
{
Rückkehr 1;
aufrechtzuerhalten.
sonst
{
Return 0;
aufrechtzuerhalten.

aufrechtzuerhalten.

Void getPots ()
{
Pot_val1 = analogRead (pot1);
Pot_val2 = analogRead (pot2);
Pot_val3 = analogRead (pot3);
aufrechtzuerhalten.
Void mapAllPots ()
{
Pot_val1 = mapPot (pot_val1);
Pot_val2 = mapPot (pot_val2);
Pot_val3 = mapPot (pot_val3);
aufrechtzuerhalten.
Int mapPot (int in)
{
Wenn (in> 1010) {
Rückkehr 1;
aufrechtzuerhalten.
Sonst if (in> 950) {
Rückkehr 2;
aufrechtzuerhalten.
Sonst wenn (in> 900) {
Rückkehr 3;
aufrechtzuerhalten.
Sonst if (in> 630) {
Rückkehr 4;
aufrechtzuerhalten.
Sonst wenn (in> 480) {
Rückkehr 5;
aufrechtzuerhalten.
Sonst wenn (in> 190) {
Rückkehr 6;
aufrechtzuerhalten.
Sonst wenn (in> 80) {
Rückkehr 7;
aufrechtzuerhalten.
Sonst if (in> 30) {
Rückkehr 8;
aufrechtzuerhalten.
Sonst wenn (in> 3) {
Rückkehr 9;
aufrechtzuerhalten.
aufrechtzuerhalten.
Void storeCode ()
{
Code1 = pot_val1;
Code2 = pot_val2;
Code3 = pot_val3;
aufrechtzuerhalten.
Void r ()
{
DigitalWrite (rot, HIGH);
DigitalWrite (grün, LOW);
DigitalWrite (blau, LOW);
aufrechtzuerhalten.
Void g ()
{
DigitalWrite (rot, LOW);
DigitalWrite (grün, HIGH);
DigitalWrite (blau, LOW);
aufrechtzuerhalten.
Void b ()
{
DigitalWrite (rot, LOW);
DigitalWrite (grün, LOW);
DigitalWrite (blau, HIGH);
aufrechtzuerhalten.
Void off ()
{
DigitalWrite (rot, LOW);
DigitalWrite (grün, LOW);
DigitalWrite (blau, LOW);
aufrechtzuerhalten.
Void unlock ()
{
Myservo.attach (9);
Myservo.write (75);
Verzögerung (750);
Myservo.write (96);
Verzögerung (250);
Myservo.detach ();
aufrechtzuerhalten.

Schritt 3: Verriegelung

Super Secret Verschluss-Kasten mit kapazitivem Touch

Es gibt viele Latch-Systeme gibt. Ich ging fast mit dem Stäbchen zwischen den Schalenhaken Methoden in diesem Projekt verwendet http://arduiniana.org/projects/the-reverse-geo-cache-puzzle/ . Das Problem mit der Essstäbchen-Methode ist, dass es warten muss, bis das Feld geschlossen wird, bevor es wieder schlafen kann. Ich wollte int so schnell wie möglich schlafen und verschwenden keine Zeit warten auf eine unentschlossene Moment. So kombinierte ich die beiden Ideen aus diesem Projekt und diesem http://www.instructables.com/id/Super-Secret-Lock-Box/.

In meinem Riegel ist das Servo nicht mit dem Riegel verbunden. Es schiebt es einfach und hält es für eine kurze Zeit offen. Ein Wäscheklammerartfrühling, den ich von einer Papierklammer verbiege, hält die Klinke unten und verschlossen zu jeder Zeit. Sie müssen mit der Spannung der Feder zu verwirren, so dass es nicht kämpfen den Servo zu hart, aber immer noch sicher verriegelt.

Ich benutzte Holzleim, um Stücke von 1/4 "Dübelstäben zu verbinden und sie mit einem dremmel zu schnitzen, um das Verriegelungssystem zu bilden. Es wird an der Kiste mit Holzleim gesichert.

Related Reading