home
erste Version am 08.09.2016
letzte Änderung am 13.09.2016

Kühlschrank Alarm


Eine nicht korrekt geschlossene Kühlschranktür kann aus zwei Gründen vorkommen:
  1. Der Kühlschrank ist so voll oder ungeschickt beladen, dass die Tür nicht mehr von alleine zufallen kann.
  2. Die Kinder sind mittlerweile so cool, dass es unter ihrer Würde ist, sowas profanes wie Kühlschranktüren bewusst zu schließen.
Beide Gründe alleine können schon reichen - treten sie jedoch in Kombination auf, kann man sich schon fast darauf verlassen, dass die Kühlschranktür offen bleibt.

Speziell wenn ein Kindlein regelmäßig erst nach Hause kommt, wenn die Eltern bereits schlafen und sich dann noch am Kühlschrank bedient, bleibt die Kühlschranktür schon gerne mal die ganze Nacht offen.
Abgesehen von der Strom-Verschwendung wird der Kühlschrank-Inhalt davon auch nicht gerade besser.
Noch viel unerfreulicher sieht das selbe Spiel bei der Gefrierfach-Tür aus.

Die Brut macht das nicht mit Absicht....das liegt an der Coolness....um nicht zu sagen: Schlampigkeit.
Und damit bekommt man dieses Verhalten am ehesten mit Technik in den Griff.



Die Lösung ist eigentlich sehr einfach.
Pro Tür braucht es einen Schnappschalter mit Hebel, eine Auslöse-Mechanik und eine Elektronik zur verzögerten Ansteuerung eines Piezo-Beepers.
Was mich bisher von dessen Umsetzung abgehalten hat, war die [nach]-justierbare Auslöse-Mechanik - bzw. deren Herstellung. Sie war auch der Grund, warum ich mich gegen Reed-Sensoren entschieden habe.

Nun habe ich mir zwei Alu-Profilschienen (1xWinkelprofil und 1xVierkantrohr) besorgt, diese zurecht-gesägt, ein paar Löcher gebohrt und M3-Gewinde geschnitten.
Die Schalter befinden sich in einem Kabelkanal, die Elektronik mit dem ATmega und dem Piezo-Beeper liegt samt Akku-Pack quasi unsichtbar auf dem Kühlschrank.
Sieht dann so aus (und natürlich habe ich keine Schrauben in die Kühlschranktür gebohrt - da sind nochmal Holztüren davor):
Kühlschrank Alarm, Foto der
        Auslösemechanik

Die Schaltung ist diese hier:
Kühlschrank Alarm, Schaltplan

Die vermeintlich sinnlos drei-polige Verkabelung der zwei Schalter ist darin begründet, dass ich mir die Option offen halten wollte, unterschiedlich auf eine offene Kühlschrank- oder Gefrierfach-Tür reagieren zu können.
Außerdem sind Buchse und Stecker natürlich um 180° gedreht zu verbinden - bzw. Plus vom Akku muss auf dem gemeinsamen Kontakt der beiden Öffner liegen, so dass Strom genau dann fließt, wenn einer der Schalter nicht geschlossen ist.

Auf dem ATmega läuft folgendes Programm:
#include <avr/sleep.h>
#include <avr/wdt.h>


#define PIEZO_PIN 11

/* ##################################################################
 * Es folgen 2 Funktionen für den Tiefschlaf-Modus.
 *  
 * Quelle: http://gammon.com.au/power (Sketch I)
 */
/* -------------------------------------------------------------------
 * Aufwachen
 */
ISR(WDT_vect) {
   wdt_disable();  // disable watchdog
}

/* -------------------------------------------------------------------
 * Schlafen
 *
 *  WDP3  WDP2  WDP1  WDP0
 *   0     0     0     0      16 ms
 *   0     0     0     1      32 ms
 *   0     0     1     0      64 ms
 *   0     0     1     1      0.125 s
 *   0     1     0     0      0.25 s
 *   0     1     0     1      0.5 s
 *   0     1     1     0      1.0 s
 *   0     1     1     1      2.0 s
 *   1     0     0     0      4.0 s
 *   1     0     0     1      8.0 s
 */
void sleep_PWR_DOWN(unsigned char dur=0) {
  // disable ADC
  ADCSRA=0;  

  // clear various "reset" flags
  MCUSR=0;     
  // allow changes, disable reset
  WDTCSR=bit(WDCE) | bit(WDE);
  // set interrupt mode and an interval
  WDTCSR=bit(WDIE) | dur;
  wdt_reset();  // pat the dog
 
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  noInterrupts();           // timed sequence follows
  sleep_enable();
 
  // turn off brown-out enable in software
  MCUCR=bit(BODS) | bit(BODSE);
  MCUCR=bit(BODS);
  interrupts();             // guarantees next instruction executed
  sleep_cpu();  
 
  // cancel sleep as a precaution
  sleep_disable();
}


void setup() {
  pinMode(PIEZO_PIN, OUTPUT);
}

void loop() {
  sleep_PWR_DOWN(bit(WDP2) | bit(WDP1) | bit(WDP0));  // 2 s

  // die ersten 60 Sekunden
  for(int i=0; i<15; i++) {
    digitalWrite(PIEZO_PIN, HIGH);
    sleep_PWR_DOWN();  // 16 ms
    digitalWrite(PIEZO_PIN, LOW);
    sleep_PWR_DOWN(bit(WDP3));  // 4 s
  }

  for(int i=0; i<15; i++) {
    digitalWrite(PIEZO_PIN, HIGH);
    sleep_PWR_DOWN(bit(WDP2) | bit(WDP0));  // 0.5 s
    digitalWrite(PIEZO_PIN, LOW);
    sleep_PWR_DOWN(bit(WDP2) | bit(WDP1) | bit(WDP0));  // 2 s
  }

  for(int i=0; i<15; i++) {
    digitalWrite(PIEZO_PIN, HIGH);
    sleep_PWR_DOWN(bit(WDP2) | bit(WDP1));  // 1 s
    digitalWrite(PIEZO_PIN, LOW);
    sleep_PWR_DOWN(bit(WDP2) | bit(WDP1));  // 1 s
  }

  while(1)  {
    digitalWrite(PIEZO_PIN, HIGH);
    sleep_PWR_DOWN(0);  // 32 ms
    digitalWrite(PIEZO_PIN, LOW);
    
    sleep_PWR_DOWN(bit(WDP3) | bit(WDP0));  // 8 s
  }
}
Während der ersten Minute nach Tür-Öffnung wird alle vier Sekunden kurz (für 16ms) gepiept.
Das nervt noch wenig und soll verhindern, dass man die Küche schon wieder verlassen hat, bevor die erste Warnung wegen nicht [richtig] geschlossener Kühlschranktür kommt.
Ist die Tür nach einer Minute immer noch offen, werden stärkere Geschütze aufgefahren. Das soll jetzt nerven.
Irgendwann wird dann aufgegeben und nur noch alle acht Sekunden kurz gepiept. Das ist für den Fall gedacht, dass niemand mehr im Haus ist.
Zum Abtauen des Kühlschrankes ist vorgesehen, den Batterie-Clip vom Akku-Pack abzuziehen.

Die Stromversorgung erfolgt über ein Akku-Pack mit vier Mignon-Zellen.
Weil nur dann Strom fließt, wenn eine der Türen offen steht, erwarte ich den nächsten Akku-Wechsel erst in ein paar Jahren.

Die einzigen (diesbezüglichen) Sorgen mache ich mir jetzt nur wegen der verwendeten Billig-Schalter.
Vielleicht hätte ich lieber dieses Modell verwenden sollen, das laut Spec. 10 Mio. Schaltzyklen schafft.

Viele Kühlschranktüren haben keinen klar definierten Anschlag und durch zusammendrücken dieser Gummi-Isolierung an der Tür-Innenseite kann der Hebel des Schalters verbogen werden.
Es ist unbedingt sicherzustellen, dass der Punkt, an dem die Tür geschlossen ist, nicht überschritten werden kann.
In meinem Fall war ein Stück Klebe-Filz nicht ausreichend.
Erst ein 4mm starkes Stück Sperrholz hat für den eindeutigen und (auch mit roher Gewalt) nicht überschreitbaren Anschlag gesorgt.
Nach finaler Justierung des Schaltpunktes kann die den Schalter auslösende Schraube mit einem Klecks Nagellack am Gewinde fixiert werden.