markusneg
19.02.2011, 21:53
Ich lese schon ne ganze Weile in diesem Forum und dachte mir, ich könnte mal ein fertiges Projekt von mir hier vorstellen:
Am vorletzten Freitag hatte meine Freundin Geburtstag und ich wollte ihr was Tolles basteln...
Erst ist mir ein hochauflösendes, von polar zu kartesischen Koordinaten transformiertes Rotordisplay durch den Kopf gegangen, das an den USB Port kommt und auf dem ein hüpfender Smiley zu sehen ist O:). Da die Zeit aber sehr knapp wurde habe ich mich für was einfacheres entschieden: eine selbstschließende Schatulle, die sich erst nach einer bestimmten Zeit öffnet und ihren Inhalt preisgibt.
"das sollte doch in einem Nachmittag zu schaffen sein" dachte ich mir. Also am Donnerstag auf zu Conrad um einen kleinen Servo zu kaufen und in einen Bastellladen für eine kleine Holztruhe. Zuhause habe ich die AVR toolchain installiert und mit dem Programmieren angefangen. Ich dachte, das geht doch schnell! ... aber erst um 23:00 saß ich dort mit dem ersten beta-Programm. Die Realität hatte mich dann spätestens um 1:00 eingeholt, als der Parallelport für mein STK200-Verschnitt streikte 8-[
[...]
Gestern, also 9 Tage später habe ich das Geschenk dann überreicht: den Traumtresor! Ich habe mich ziemlich verschätzt, was den Arbeitsaufwand anging. Pro Tag saß ich ca. 3 Stunden an dem Apperat. Mich hat da ziemlich der Ehrgeiz gepackt.
Was kann es, was hat es
Mechanik
- eine ca. 130x130x50 mm Holztruhe, an den Wänden ca. 8 mm stark, Deckel ca. 5 mm und der Boden ca. 2 mm
- das eingestanzte Blechscharnier wurde durch ein selbstgeleimtes, solides Holzscharnier ersetzt, das was aushält
- ein Servo schiebt einen Holzbolzen vor und zurück, der den Deckel verschließt und wieder freigibt
- an der Vorderseite ist eine duo-LED angebracht, die rot und grün leuchten kann
- an der Vorderseite ist außerdem ein abgerundeter Holzbolzen, der innen auf einen herkömmlichen Taster drückt
- von innen und außen ist die Truhe mit Pastellkreiden angemalt und dann mit Fixationsspray fixiert. Die Kreiden ergeben sehr leuchtende Farben. Ich habe Grasgrün- und Brauntöne genommen
Elektronik:
- ATMega8 mit internem 1 MHz Schwingkreis betrieben
- 5 in Reihe geschaltete AAA Alkaline Primärzellen mit jeweils 1,5 V
- ein LP2950 - 5V - Spannungsregler (hat einen geringen Eigenverbrauch, was ich sehr stark gewichtet habe. Und low-drop, wodurch die Elektronik selbst bei 4 V Batteriepegel noch ca. 4 V bekommt)
- zwei BS170 N-MOSFETs zur Ansteuerung des Servos (einer für die Versorgungsspannung bzw. GND zwecks Stromsparen und einer für das Steuersignal. Ich wollte als Steuersignal denselben Pegel wie VCC (7,5 - 4 V von den Batterien), weswegen die Steuerleitung direkt von einem 7k Widerstand hochgezogen wird. Der MOSFET zieht die Leitung dann bei Bedarf herunter)
- um bei einem Programmfehler im Controller oder Batterieversagen die Truhe ohne Gewalt aufzubekommen, sind GND und RESET direkt nach außen geführt (in einer Einsparung unter der Truhe). VCC ist über eine Diode nach außen geführt, so dass nichts falsch gepolt werden und kein Kurzschluss entstehen kann.
- die Elektronik sitzt auf einer Einschubplatine
Software
Über Interrupts werden Ereignisse gesteuert und in der main-Schleife nur die Zustandswechsel. Wurde ein Ereignis abgearbeitet, wird sofort in den IDLE bzw. POWERDOWN (aus-Zustand) Modus gewechselt.
Zustände des Tresors:
- aus (controller ist in power down und wacht durch einen Tastendruck auf)
- bereit (led blinkt grün im Sekundentakt. Wenn man die Taste lang gedrückt hält (genau 1,2 s), geht es nach "schließend")
- schließend (servo schließt die Truhe, LED leuchtet derweil rot)
- geschlossen (die Zeit wird heruntergezählt. Es gibt: Wochen, Tage, Stunden, Minuten, Sekunden. Wenn die Zeit vorrüber ist, geht es nach "öffnend")
- öffnend (servo öffnet die Truhe, LED leuchtet grün. Danach: "offen")
- offen (LED leuchtet im 2-sekundentakt GRÜN und zeigt damit "schau mal, ich bin endlich auf!". Ein langer Tastendruck führt zu "aus")
- "Showtime": wenn bei "geschlossen" einmal kurz gedrückt wird, zeigt die Truhe die verbleibende Zeit: es werden Wochen, Tage, Stunden/2, Minuten/6 und Sekunden/6 durch die entsprechende Anzahl an Blinkern (ca 2 Hz) mitgeteilt mit jeweils einmal Pause dazwischen. Es wird immer die Anzahl + 1 gezeigt, damit "0" auch angezeigt werden kann
- Codeeingabe: wird bei "geschlossen" ein langer Tastendruck gemacht, geht es zur codeeingabe. Hier blinkt die LED rot mit ca. 3 Hz. Der erste Tastendruck danach startet die eigentliche Codeeingabe: bei jedem mal Blinken wird eine Eingabe entgegen genommen. Bei einem Tastendruck wird heraufgezählt, bei keinem Tastendruck wird die nächste Stelle genommen. Der Code ist insgesamt 6-stellig. Wenn der Code richtig war, geht es direkt zu "öffnend". Sonst gehts zurück nach "geschlossen"
- Zeiteingabe: bei "bereit" hat man die Gelegenheit, die Zeit einzustellen. Drückt man einmal kurz, leuchtet die LED einmal für 600 ms grün als Eingabeaufforderung. Ein kurzer Tastendruck zählt herauf, ein langer wählt die nächste Zeiteinheit. Man kann von Wochen herunter nach Minuten einstellen. O:)
Problem(e)
Theoretisch sollte der Energieverbrauch minimal sein. Das war mir besonders beim closed-Zustand wichtig, da nicht schon nach einer Woche der Strom leer sein soll.
Bei 1 MHz internal RC sollten laut Datenblatt im IDLE Betrieb nur 500 µA verbraucht werden. Leider sind es aber um die 5 mA (!). Man könnte jetzt vermuten, es ist die externe Peripherie aber im Powerdown Modus schafft die Schaltung ohne sonstige Veränderungen die 500 µA. Im closed-Zustand wacht der Controler nur einmal pro Sekunde auf und läuft dann eine Berechnung von maximal 1000 Zyklen ab (um die Zeit herunterzuzählen). Der lineare Spannungsregler sollte es eigentlich auch nicht sein, da er bei 0.5 mA nur einen zu vernachlässigenden Eigenverbrauch hat.
Tja, das ist mir ein Rätsel und deswegen musste ich auch die Zeit von 2 Wochen auf 3 Tage heruntersetzen :frown:
Aussicht
- bessere Energiespareigenschaften
- ein "nur-Verschlossen" - Modus, in dem der Controller in power-down weilt bis die Taste gedrückt und die Codeeingabe gestartet wird (längere Batterielebensdauer)
- eine Möglichkeit, den Code zu ändern und in den EEPROM schreiben zu lassen
- mechanische Verstärkung der Truhe, insbesondere des dünnen Bodens
- Batteriespannung messen und Batterielebensdauer vorraussagen. Womöglich Öffnung, wenn Batterieversagen bald ansteht
Reaktion der Freundin O:)
- Mustern der Truhe.... "da gucken Drähte unten raus!"
- Versuch, den Deckel so zu öffnen. "Es klemmt!"
- "Da ist ein Knopf!"
- "Es blinkt!" ...... "Ein Morsecode!!"
- Mitschreiben der Blinkanzahlen. Andauerndes Verzählen, weil die Blinkfrequenz zu hoch ist..
- am nächsten Tag und nach vielen erfolglosen Theorien, wie die Truhe aufgeht: "muss man da denn präzise herangehen?" .... "naja, also muss man da präzise arbeiten um den aufzubekommen?"
Bilder gibt es bislang nur vom kompletten Tresor. Wenn ich ihn mal wieder für eine Generalüberholing in die Hände bekommen sollte, stelle ich detailiertere Bilder rein.
PS:
Der Tresor heißt Traumtresor weil neben Elektronik+Mechanik eigentlich fast nur Träume reinpassen
Am vorletzten Freitag hatte meine Freundin Geburtstag und ich wollte ihr was Tolles basteln...
Erst ist mir ein hochauflösendes, von polar zu kartesischen Koordinaten transformiertes Rotordisplay durch den Kopf gegangen, das an den USB Port kommt und auf dem ein hüpfender Smiley zu sehen ist O:). Da die Zeit aber sehr knapp wurde habe ich mich für was einfacheres entschieden: eine selbstschließende Schatulle, die sich erst nach einer bestimmten Zeit öffnet und ihren Inhalt preisgibt.
"das sollte doch in einem Nachmittag zu schaffen sein" dachte ich mir. Also am Donnerstag auf zu Conrad um einen kleinen Servo zu kaufen und in einen Bastellladen für eine kleine Holztruhe. Zuhause habe ich die AVR toolchain installiert und mit dem Programmieren angefangen. Ich dachte, das geht doch schnell! ... aber erst um 23:00 saß ich dort mit dem ersten beta-Programm. Die Realität hatte mich dann spätestens um 1:00 eingeholt, als der Parallelport für mein STK200-Verschnitt streikte 8-[
[...]
Gestern, also 9 Tage später habe ich das Geschenk dann überreicht: den Traumtresor! Ich habe mich ziemlich verschätzt, was den Arbeitsaufwand anging. Pro Tag saß ich ca. 3 Stunden an dem Apperat. Mich hat da ziemlich der Ehrgeiz gepackt.
Was kann es, was hat es
Mechanik
- eine ca. 130x130x50 mm Holztruhe, an den Wänden ca. 8 mm stark, Deckel ca. 5 mm und der Boden ca. 2 mm
- das eingestanzte Blechscharnier wurde durch ein selbstgeleimtes, solides Holzscharnier ersetzt, das was aushält
- ein Servo schiebt einen Holzbolzen vor und zurück, der den Deckel verschließt und wieder freigibt
- an der Vorderseite ist eine duo-LED angebracht, die rot und grün leuchten kann
- an der Vorderseite ist außerdem ein abgerundeter Holzbolzen, der innen auf einen herkömmlichen Taster drückt
- von innen und außen ist die Truhe mit Pastellkreiden angemalt und dann mit Fixationsspray fixiert. Die Kreiden ergeben sehr leuchtende Farben. Ich habe Grasgrün- und Brauntöne genommen
Elektronik:
- ATMega8 mit internem 1 MHz Schwingkreis betrieben
- 5 in Reihe geschaltete AAA Alkaline Primärzellen mit jeweils 1,5 V
- ein LP2950 - 5V - Spannungsregler (hat einen geringen Eigenverbrauch, was ich sehr stark gewichtet habe. Und low-drop, wodurch die Elektronik selbst bei 4 V Batteriepegel noch ca. 4 V bekommt)
- zwei BS170 N-MOSFETs zur Ansteuerung des Servos (einer für die Versorgungsspannung bzw. GND zwecks Stromsparen und einer für das Steuersignal. Ich wollte als Steuersignal denselben Pegel wie VCC (7,5 - 4 V von den Batterien), weswegen die Steuerleitung direkt von einem 7k Widerstand hochgezogen wird. Der MOSFET zieht die Leitung dann bei Bedarf herunter)
- um bei einem Programmfehler im Controller oder Batterieversagen die Truhe ohne Gewalt aufzubekommen, sind GND und RESET direkt nach außen geführt (in einer Einsparung unter der Truhe). VCC ist über eine Diode nach außen geführt, so dass nichts falsch gepolt werden und kein Kurzschluss entstehen kann.
- die Elektronik sitzt auf einer Einschubplatine
Software
Über Interrupts werden Ereignisse gesteuert und in der main-Schleife nur die Zustandswechsel. Wurde ein Ereignis abgearbeitet, wird sofort in den IDLE bzw. POWERDOWN (aus-Zustand) Modus gewechselt.
Zustände des Tresors:
- aus (controller ist in power down und wacht durch einen Tastendruck auf)
- bereit (led blinkt grün im Sekundentakt. Wenn man die Taste lang gedrückt hält (genau 1,2 s), geht es nach "schließend")
- schließend (servo schließt die Truhe, LED leuchtet derweil rot)
- geschlossen (die Zeit wird heruntergezählt. Es gibt: Wochen, Tage, Stunden, Minuten, Sekunden. Wenn die Zeit vorrüber ist, geht es nach "öffnend")
- öffnend (servo öffnet die Truhe, LED leuchtet grün. Danach: "offen")
- offen (LED leuchtet im 2-sekundentakt GRÜN und zeigt damit "schau mal, ich bin endlich auf!". Ein langer Tastendruck führt zu "aus")
- "Showtime": wenn bei "geschlossen" einmal kurz gedrückt wird, zeigt die Truhe die verbleibende Zeit: es werden Wochen, Tage, Stunden/2, Minuten/6 und Sekunden/6 durch die entsprechende Anzahl an Blinkern (ca 2 Hz) mitgeteilt mit jeweils einmal Pause dazwischen. Es wird immer die Anzahl + 1 gezeigt, damit "0" auch angezeigt werden kann
- Codeeingabe: wird bei "geschlossen" ein langer Tastendruck gemacht, geht es zur codeeingabe. Hier blinkt die LED rot mit ca. 3 Hz. Der erste Tastendruck danach startet die eigentliche Codeeingabe: bei jedem mal Blinken wird eine Eingabe entgegen genommen. Bei einem Tastendruck wird heraufgezählt, bei keinem Tastendruck wird die nächste Stelle genommen. Der Code ist insgesamt 6-stellig. Wenn der Code richtig war, geht es direkt zu "öffnend". Sonst gehts zurück nach "geschlossen"
- Zeiteingabe: bei "bereit" hat man die Gelegenheit, die Zeit einzustellen. Drückt man einmal kurz, leuchtet die LED einmal für 600 ms grün als Eingabeaufforderung. Ein kurzer Tastendruck zählt herauf, ein langer wählt die nächste Zeiteinheit. Man kann von Wochen herunter nach Minuten einstellen. O:)
Problem(e)
Theoretisch sollte der Energieverbrauch minimal sein. Das war mir besonders beim closed-Zustand wichtig, da nicht schon nach einer Woche der Strom leer sein soll.
Bei 1 MHz internal RC sollten laut Datenblatt im IDLE Betrieb nur 500 µA verbraucht werden. Leider sind es aber um die 5 mA (!). Man könnte jetzt vermuten, es ist die externe Peripherie aber im Powerdown Modus schafft die Schaltung ohne sonstige Veränderungen die 500 µA. Im closed-Zustand wacht der Controler nur einmal pro Sekunde auf und läuft dann eine Berechnung von maximal 1000 Zyklen ab (um die Zeit herunterzuzählen). Der lineare Spannungsregler sollte es eigentlich auch nicht sein, da er bei 0.5 mA nur einen zu vernachlässigenden Eigenverbrauch hat.
Tja, das ist mir ein Rätsel und deswegen musste ich auch die Zeit von 2 Wochen auf 3 Tage heruntersetzen :frown:
Aussicht
- bessere Energiespareigenschaften
- ein "nur-Verschlossen" - Modus, in dem der Controller in power-down weilt bis die Taste gedrückt und die Codeeingabe gestartet wird (längere Batterielebensdauer)
- eine Möglichkeit, den Code zu ändern und in den EEPROM schreiben zu lassen
- mechanische Verstärkung der Truhe, insbesondere des dünnen Bodens
- Batteriespannung messen und Batterielebensdauer vorraussagen. Womöglich Öffnung, wenn Batterieversagen bald ansteht
Reaktion der Freundin O:)
- Mustern der Truhe.... "da gucken Drähte unten raus!"
- Versuch, den Deckel so zu öffnen. "Es klemmt!"
- "Da ist ein Knopf!"
- "Es blinkt!" ...... "Ein Morsecode!!"
- Mitschreiben der Blinkanzahlen. Andauerndes Verzählen, weil die Blinkfrequenz zu hoch ist..
- am nächsten Tag und nach vielen erfolglosen Theorien, wie die Truhe aufgeht: "muss man da denn präzise herangehen?" .... "naja, also muss man da präzise arbeiten um den aufzubekommen?"
Bilder gibt es bislang nur vom kompletten Tresor. Wenn ich ihn mal wieder für eine Generalüberholing in die Hände bekommen sollte, stelle ich detailiertere Bilder rein.
PS:
Der Tresor heißt Traumtresor weil neben Elektronik+Mechanik eigentlich fast nur Träume reinpassen