Servus, schon etwas länger spiele ich auf circuits.io herum. Nun habe ich endlich einen eigenen Arduino Uno und Spontan kam mir gestern die Idee: „Es Nervt wenn die Leute den Finger auf den Klingeltaster halten! – Ich brauche einen Dauerklinglerstopper!!“

Also auf dem Breadboard mal eben Taster und Summer aufgesteckt und so eine kleine „Klingel“ Simuliert. Am ende ist was ganz praktisches Herausgekommen.

Als Klingeltaster verwende ich hier noch einen kleinen Button. Den kann man allerdings dann durch ein Relais -welches an stelle der Klingel angeschlossen wird- ersetzen. Für den Ausgang zur eigentlichen Klingel bräuchte es ein 5v-Relais statt Summer. Hier muss dann aber 9v-AC geschaltet werden.

#include <Wire.h>
#include <DS3231.h>
DS3231 clock;
RTCDateTime uz;
 
int pin = 2;           // Taster-Pin
int busyled = 13;      // Status-LED. Ein wenn aus. U know? :-)
int buzz = 11;         // Buzzer/Piezo/Relais/Klingel-Output-Pin
int sekunden = 1500;   // hier die Klingel-Millisekunden eintragen
int klingelpause = 10000;       
// Hier der Wert, an dem die Klingel Pausert/nicht Reagiert
 
void setup()
{
Serial.begin(115200);  // Starte Seriellen port
Serial.println("Initialisieren...");
pinMode(pin, INPUT_PULLUP);
pinMode(buzz, OUTPUT);
pinMode(busyled, OUTPUT);
 
// Uhr
clock.begin();                          // Uhr Starten
clock.setDateTime(__DATE__, __TIME__);  // Aktuelle Uhrzeit aus RTC holen
Serial.println("ok!");                  // Ok! schreiben :-)
Serial.println(" ");                    // und noch eine leerzeile hinterher
}
 
long offAt = 0;
 
void loop()
{
if( (digitalRead(buzz) == LOW ) && (digitalRead(pin) == LOW) ) 
// Wenn LED/SUMMER Aus ...
{ uz = clock.getDateTime();
Serial.println("*************************");
Serial.println("*  Es Klingelte am/um   *");
Serial.print("* ");
//  clock.setDateTime(__DATE__, __TIME__); 
Serial.print(clock.dateFormat("d.m.Y - H:i:s", uz));
Serial.print(" *");    
Serial.println(" ");
digitalWrite(buzz, HIGH);
offAt = millis() + sekunden;      // Variable JETZT + $sekunden Speichern
}
 
if(digitalRead(buzz) == HIGH)       // Wenn LED/SUMMER ein:
{
if(millis() >= offAt)           // Nachsehen, wie lange noch ein
{
digitalWrite(busyled, HIGH); // Status/Warte-LED einschalten.... 
digitalWrite(buzz, LOW);     // Zeit abgelaufen, LED/SUMMER aus
delay(klingelpause);        // $Klingelpause Abwarten ... 
digitalWrite(busyled, LOW);  // Status/Warte-LED einschalten.... 
Serial.println("*************************");
Serial.println(" ");
}
}
}

Die Serielle Ausgabe:

Meine Idee war nun, und die habe ich im groben und ganzen auch umgesetzt, das wenn unten jemand Klingelt und Gefühlte 798793 Sekunden den Finger aufm Taster hält, der Arduino das unterbindet, in dem er nur $sekunden klingelt und dann ersma $klingelpause abwartet bevor er wieder ein klingeln durchlässt. Gerade fiel mir noch auf, dass es einen weiteren Vorteil gibt: Wenn unten jemand den Taster und anhaucht und es hier oben nur 0,1s Klingeln würde, würde es nun auch $sekunden klingeln. Die ganze serielle Ausgabe KANN man weg machen. Schließt man aber zB einen esp8266 mit an, kann man sich zB unterwegs per Telegram-Bot benachrichtigen lassen, das zuhaus gerade jemand klingelt. Die Möglichkeiten sind schier unbegrenzt.

Wie ich das ganze noch nutzbar umsetze, weiß ich noch nicht genau. Aber ich denke, es wird auf einen attiny oder sowas herauslaufen. Später mal NI Multisim anwerfen und schauen, ob ich eine Kompakte Schaltung hin bekomme :-)

Den Part mit der Uhr (RTC) kann man sich auch Sparen, aber ich hab das Modul nun einmal hier und dann wird auch Verbaut :-)

Flattr this!