Ein Briefkasten sollte melden, wenn der Postmann ihn gefüttert hat.
So ein Briefkasten ist schon eine komische Sache. Man schaut mehrmals am Tag, also wenn ich vorbei gehe, hinein und sieht meistens nichts. Schön wäre es doch, wenn das Ding sich melden würde, wenn er gefüttert wurde.
Also habe ich erst einmal meine Freundin google gefragt, ob so ein Projekt schon jemand durchgeführt hat. Und siehe da, es gibt immer jemanden, der schon einmal meine Ideen verwirklicht hat. Schatz, du hast Post ist eine super Lösung. Aber brauche ich ein Display? Mein Briefkasten hat eh eine Scheibe. Ich sehe beim vorbeigehen die Post im Kasten.
Ich versuche das mal anders zu lösen. Pushbenachrichtung auf iPhone und Apple Watch. Das finde ich irgendwie besser. Dann kann ich mich schon auf meine Post freuen. Sind zwar eh meistens Rechnungen, aber gut.
Also frisch ans Werk. Ich verwende einen ESP8266 zuerst mit NodeMCU. Da gibt es hier eine tolle Beschreibung. Aber bis der aus China angekommen ist, teste ich erst einmal mit einem Arduino Nano.
Das funktioniert schon einmal super. Im Video ist nicht zu sehen, das ich den Vorgang mit einem Schalter auslöse. Ich stelle mir das so vor, der Postbote wirft die Post in den Kasten. Dabei löst er mit einem Schalter ein Signal aus. Der Arduino dreht einige Schleifen, bis die Post auch sicher gelandet ist, dann wird per Ultraschall die Entfernung zum Boden gemessen. Ist der Abstand kleiner als normal wird ein Programmcode ausgeführt, der meldet, das Post eingetroffen ist. Wird die Entnahme-Klappe geöffnet, wird das auch per Schalter gemeldet und die Entfernung gemessen. Dann wird Programmcode ausgeführt, das der Briefkasten leer ist. Also brauche ich zur Erkennung nur zwei Schalter parallel schalten.
Nun habe ich die Hardware schon mal „zusammengefrickelt“ und das Programm um Pushover erweitert. Das sieht auch schon recht nett aus. Die Benachrichtigung wird gesendet, wenn der Abstand einen bestimmten Wert unterschreitet.
#include <SPI.h>
#include <ESP8266WiFi.h>
#include „Pushover.h“
const int in_button1 = 2; // An den Pin D4 ist der Taster angeschlossen.cons
const int hoehe = 270; // Briefkastenhöhe in mm
const char* ssid = „SSID“; //Hier SSID eures WLAN Netzes eintragen
const char* password = „WLAN-PW“; //Hier euer Passwort des WLAN Netzes eintragen
int i_buttonState1 = 1; // In dieser Variablen speichern wir den Status des Eingangs.
int trigger=5;
int echo=4;
long dauer=0;
long entfernung=0;
WiFiClient espClient;
Pushover po = Pushover(„xyz“,“123″); // Pushover Zugangsdaten
void setup() {
Serial.begin (9600);
Serial.println();
Serial.println();
Serial.print(„Verbinde mich mit Netz: „);
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(„.“);
}
Serial.println(„“);
Serial.println(„WiFi Verbindung aufgebaut“);
Serial.print(„Eigene IP des ESP-Modul: „);
Serial.println(WiFi.localIP());
pinMode(in_button1, INPUT); // Der Pin des Tasters wird als Eingang initialisiert.
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
}
void loop(){
// Wir lesen den Status des Eingangs aus und
// speichern den Wert in der Variablen
i_buttonState1 = digitalRead(in_button1);
if (i_buttonState1 == 0) { // Ist der Taster gedrückt,
digitalWrite(trigger, LOW);
delay(5);
digitalWrite(trigger, HIGH);
delay(10);
digitalWrite(trigger, LOW);
dauer = pulseIn(echo, HIGH);
entfernung = (dauer/2) * 0.3432;
if (entfernung >= 5000 || entfernung <= 0)
{
Serial.println(„Kein Messwert“);
}
else
{
delay(5000);
if (entfernung < hoehe)
{
Serial.print(„Post im Kasten „);
Serial.print(i_buttonState1);
po.setDevice(„selma“);
po.setMessage(„Sie haben Post!“);
Serial.println(po.send());
}
else
{
Serial.print(„Keine Post im Kasten „);
}
Serial.print(entfernung);
Serial.println(“ mm“);
i_buttonState1 = 1;
}
}
else { // Ansonsten
}
delay(500);
}