Türöffner auslösen wenn 3 mal klingeln

Hallo zusammen,

ich will dass unser Türöffner automatisch öffnet, sobald jemand innerhalb von 2 Sekunden 3 mal klingelt. Der Code (sketch) ist kein Problem für mich. Eher was ich dann triggern muss wenn die Bedingungen zutreffen.

Es handelt sich um eine ganz normale Klingelanlage mit Gegensprechfunktion. Ich hatte mir das eigentlich ganz einfach gedacht, der Klingelknopf wird gleichzeitig mit dem Arduino als Input verbunden. Wenn dann dreimal ein Signal innerhalb von 2 Sekunden rein kam, würde ich über einen digitalen Ouput das auslösen des "Türöffner-Summer-Knopfes" triggern.

Und genau da ist jetzt die Frage, wie? Dazu braucht man dann sicher ein Relais oder? Was würde sich da anbieten?

Fällt euch auf anhieb irgendetwas auf wo ich auf Probleme stoßen könnte? Da es eine wohnung im Miethaus ist würde ich ungern die ganze Anlage zerschießen.

Über Anregungen würde ich mich freuen!

Viele Grüße
Andi

Die meisten Klingelanlagen arbeiten mit Wechselspannung.

Wenn du die direkt auf den Arduino legst wirst du den töten.

Du mußt das Eingangssignal zuerst gleichrichten (diode), dann glätten (kondensator) und auf Arduino taugliche Werte runterteilen (Spannungsteiler) und sicherheitshalber noch eine Z-Diode zum Schutz.
Der Ausgang, wie du schon richtig geschreiben hast, über ein Relais.

Hallo Andi1982,

eventuell kann ich dir als "alter Postler" weiterhelfen. Gibt es zu der Gegensprechstelle ein Typenschild und/ oder Name (Bezeichnung)? Vor DIREKTEN Eingriffen in die Anlage sei gewarnt ... schlimmstenfalls ist der Kauf einer neuen nötig - zudem können durch äußere Einwirkungen der Arduino (und somit DEINE Arduino-Anlage) zerstört werden. Zur Potentialtrennung zwischen beiden ist also mindestens ein Relais nötig, eventuell kann das Signal auch "direkt" in der Sprechanlage abgenommen werden.

Mit Gruß aus Badisch-Landen
Michel

Hey,

danke für die schnelle Antwort. Es war wohl etwas zu naiv zu glauben dass der Klingelknopf wirklich nur ein Knopf ist der durchschaltet oder auch nicht. Hast du einen Link für ein Relais?

Andi1982:
Hey,

danke für die schnelle Antwort. Es war wohl etwas zu naiv zu glauben dass der Klingelknopf wirklich nur ein Knopf ist der durchschaltet oder auch nicht. Hast du einen Link für ein Relais?

Manchmal hilft Google

Und hier hat das jemand schonmal gelöst:
http://www.mikrocontroller.net/topic/269913

und es gibt auch fertige Module mit Relais zu kaufen:
2 Kanal 5V Relais Module

Also,

ich habe das ganze jetzt mal auf einem Steckbrett simuliert. Als "Klingelschalter" habe ich nun erstmal einen push-button benutzt der über einen Digital-Pin eingelesen wird. Bei drei mal drücken innerhalb von 2 Sekunden wird dann über einen anderen Digital-Pin ein Relais (JRC-21F 5VDC / 220VAC 3A) geschalten. Das funktioniert auf dem Steckbrett alles bestens.

Nun habe ich mir Gedanken gemacht wie ich den Push-Button durch das Schaltsignal an der Sprechanlage ersetzen kann. Das ganze ist ja eigentlich ein anderer Stromkreis den ich eigentlich nicht unterbrechen will. ich möchte ja nur das Signal abfangen wenn in dem Stromkreis strom fließt und dem Aruino über ein Digital-Pin mitteilen dass da jetzt was rein kommt.

Kann ich mich in den Stromkreis der Türklingel einfach parallel schalten mit Diode und Spannungsteiler um dann in den Pin des Arduinos gehen?

Gruß
Andi

Optokoppler + Vorwiderstand. Danach ein Tiefpass mit ausreichend großer Zeitkonstante. Den Tiefpass kann man auch in Software abbilden (z.B. wie hier: Binary DCF77 Clock | Blinkenlight).

Ggf. musst Du mit der Auslöseschwelle etwas spielen, also statt dem Originalcode eher so:

void low_pass_filter() {
    // http://en.wikipedia.org/wiki/Low-pass_filter#Continuous-time_low-pass_filters
 
    // I will use fixed point arithmetics with 5 decimals
    const uint16_t decimal_offset = 10000;
    static uint32_t smoothed = 0*decimal_offset;
 
    const uint32_t input = digitalRead(sample_pin) * decimal_offset;
 
    // compute N such that the smoothed signal will always reach 50% of
    // the input after at most 50 samples (=50ms).
    // N = 1 / (1- 2^-(1/50)) = 72.635907286
    const uint16_t N = 72;
    smoothed = ((N-1) * smoothed + input) / N;
 
    // introduce some hysteresis
    static uint8_t square_wave_output = 0;
 
    if ((square_wave_output == 0) == (smoothed >= decimal_offset/3)) {
        // smoothed value more >= 33% 
        // ==> switch output
        square_wave_output = 1-square_wave_output;
        // ==> max the smoothed value in order to introduce some
        //     hysteresis, this also ensures that there is no
        //     "infinite memory"
        smoothed = square_wave_output? decimal_offset: 0;
    }
 
    digitalWrite(filtered_pin, square_wave_output);   
}

In Hardware brauchst Du stattdessen einfach einen Kondensator und einen Widerstand. Wie man die Zeitkonstanten ausrechnet findest Du im Netz ("RC Filter").

Andi1982:
Kann ich mich in den Stromkreis der Türklingel einfach parallel schalten mit Diode und Spannungsteiler um dann in den Pin des Arduinos gehen?

ja, kannst du.

die beiden Drähte, die an der Kingel angeschlossen sind kanst du einfach anzapfen.
Dann, wie du geschrieben hast, mit Diode gleichrichten und über Spannungsteiler runterteilen.
Unbedingt nötig: Kondensatur zum glätten, sonst kriegst du alle 20ms einen Puls (Weil Wechselspannung)
Sehr empfehlenswert: Eine Z-Diode, um den Arduino zu schützen.

sicherer ist der von Udo vorgeschlagene Optokoppler, der braucht aber die gleiche Eingangsspannung wie der Arduino.

der braucht aber die gleiche Eingangsspannung wie der Arduino

Nicht ganz richtig:
Ein Optokoppler ist eingangsseitig eine LED, käme also auch mit weniger aus als der Arduino, verträgt aber auch bei entsprechendem Vorwiderstand mehr als der Arduino. Ein Klingeltrafo liefert eigentlich immer genug/zuviel Spannung für den Arduino direkt.

Einen Optokoppler kannst du ausgangsseitig als "Open Collector" direkt an den Input-Pin mit internem Pullup anschliessen.

Die 50 Hz Pulse kannst du auch ausnutzen, um zu zählen, wie lang die Klingel gedrückt wurde. Das vereinfacht die elektrische Seite, und ob du millis() oder 20millis Einheiten benutzt, ist ja praktisch egal.

Das Problem ist eher die zulässige Sperrspannung der Opto-LED --> Die erwähnte Diode (oder eine echte LED, dann sieht man auch was) antiparallel.

Nachtrag: s. Bild.
EasyOpto.PNG

Danke michael_x für die Zeichnung, das macht es schon viel einfacher für mich. Anfangs habe ich nur Bahnhof verstanden als der Optokoppler ins Spiel kam.

Ich habe das mit dem Signal aus einem anderen Stromkreis jetzt mal ganz schlicht versucht zu simulieren auf dem Steckbrett. Dazu habe ich einen 9V-Stromkreis (gleichstrom) mit einer LED, Pushbutton und Vorwiderstand aufgesetzt.

Vom PushButton geht dann noch eine Leitung zum Digitalen-Eingangspin des Arduinos.

Das sollte einfach nur mal zum Ausprobieren sein. Aber wenn ich mir mal im Serial-Monitor anzeigen lasse was da so rein kommt über den Pin, dann sehe ich ganz viele 1 und 0 abwechselnd. Muss ich da noch irgendwas zum GRND des Arduinos legen? Also eine Art pulldown-Widerstand?

Tasten prellen

ne das war kein prellen, sonst hätte nach spätestens einer Sekunde drücken ein vernünftiges Signal kommen müssen. Aber die 0 und 1 kam auch wenn garnicht gedrückt wurde. Ich nehm heute mittag wenn ich zu Hause bin mal einen Widerstand zu Ground mit rein. Vielleicht bringt das dann was:

Normalerweise verbindet man den Minus einer Batterie mit GND. Die + 9V sind aber zuviel für den Arduino.

Ich würde den R1 z.B. in einen 470 Ohm und einen 220 Ohm Widerstand aufteilen.
Also 9V Batterie + an 470 an (x) an 220 an LED + und LED - mit Batterie - and GND.
Wenn die LED ca.2V Spannungsabfall hat, teilen sich die restlichen 7 V ca 5 : 2 auf.
An (x) ist dann etwas mehr als 4V, das ist genau richtig für den Arduino.

So wie du es vorher hattest, war das Ganze ohne GND- Verbindung, d.h. mehr eine Antenne für irgendwas.
Sorry, hab ich nicht genau hingeguckt...


Der LED2 fehlt auch ein Vorwiderstand!

Danke michael_x,

das model mit dem 9V Stromkreis durchschalten hat wunderbar funktioniert.

Nun habe ich an der Türklingel gemessen, da kommen 13,8V Wechselstrom an. Diese müsste ich gleichrichten und auf die knapp über 4V herunterbrechen. Ich habe das mit PSPice probiert zu simulieren. Dazu eine Diode und einen Kondensator genommen:

R2 ist quasi die Türklingel, da hätte ich mich dran gehängt.

Mit diesem Beispiel bin zwar bei Gleichstrom angekommen, aber knapp über 13V. Ich habe nun auch schon mit verschiedenen Widerständen herumgespielt (vor der Diode, hinter der Diode, vor dem Kondensator, usw.). Ich glaube ich stehe nun einfach auf dem Schlauch.

Wie müsste ich hier eingreifen um rechts bei 4,x V herauszukommen und dennoch einigermaßen geglättete Kurven zu haben?

Gruß
Andi

Na, mit einem Spannungsteiler. Der darf bei dir natürlich nicht deine 13V peak dritteln, sondern muss auf den Effektivwert einer Halbwellen-Gleichrichtung angepasst sein.

( oder -- mit LTspice -- hinfummeln: statt 1/3 der Eingangsspannung (2:1 teilen) eher 2/3 (also 1:2 teilen ) )

Kannst auch 2 Kondensatoren nehmen, ich würde es allerdings ganz ohne machen und eher per Software prüfen: wenn seit 50 msec kein Puls mehr kommt, ist die Klingel aus.

Noch ein Nachtrag: 4.8 oder 5.1 V Zenerdiode parallel zum Kondensator, wie gunther empfohlen hat...

Hey,

danke nochmal michael :slight_smile:

Ich hab das jetzt auch mal bei mir simuliert. Bis eben wusste ich noch nicht wirklich was eine z-Diode überhaupt macht, habe auch keine da aber trotzdem mal mit vorgesehen. Ich habe das so verstanden, dass sie nur Strom ab einer bestimmten Spannung durchlässt und vorher einfach dicht macht.

So sieht es bei mir jetzt aus:

Ich habe auch mit den Spannungsteiler-Widerständen rechts etwas herumgespielt. Solange das Verhältnis der Ohmwerte gleich bleibt, bleibt auch die Spannung gleich (3000 und 2000, oder 300 und 200). Die stärken sind nur für den Strom ausschlaggebend oder? Konnte mit PSpice leider keinen Stromfluss messen.

Ist die Kapazität des Kondensators hier eigentlich egal?

Gruß
Andi

Ich habe das so verstanden, dass sie nur Strom ab einer bestimmten Spannung durchlässt und vorher einfach dicht macht.

Ja, aber schade dass du den Strom durch die ZenerDiode nicht anschaust...
Ich stelle mir eine ZenerDiode so vor, dass sie in Durchlassrichtung - wie eine normale Diode - nicht viel macht und alles durchlässt, bis auf eine kleine Vorwärtsspannung. In Sperr-Richtung bricht allerdings ab der Zener-Spannung die Sperr-Wirkung zusammen, und es fliesst Strom (so viel dass durch die anderen Bauteile die Spannung an der Zenerdiode auf die ZenerSpannung absinkt.
Strom mal der jeweiligen Spannung ist die Leistung, die die ZenerDiode aushalten muss.
Bei dir im Kurzschluss sollten die Ströme in der Simulation sogar noch größer als in Wirklichkeit sein, wo die Diode gleich hin ist, vorausgesetzt der Klingeltrafo ist stark genug :wink:
Ausserdem willst du primär nicht die 13 .. 14 V begrenzen, sondern die Spannung am Arduino Pin.

Die Größe des Kondensators und dessen Auswirkung kannst du bei der Simulation dann auch besser abschätzen, wenn du keine unendlichen Kurschschluss - Ströme hast. Generell werden mit großem Kondensator die Sägezähne flacher.

Da bei mir der Kondensator nur parallel zur "unteren Hälfte" des Spannungsteilers liegt ( dort wäre auch bei mir die zDiode ), begrenzt der obere Widerstand des Spannungsteilers den Strom im Kondensator und der ZenerDiode.

Ausserdem braucht der Arduino Eingang selbst keinen Strom, daher sind höhere Widerstände besser, damit die zDiode nicht überlastet wird. Der Kondensator muss dann auch kleiner werden, damit das Ganze nicht zu träge wird.

Wie man mit PSpice Strom misst, weiss ich nicht ( bei LTSpice sucht man sich den Strom durch ein Bauteil raus, anstelle der Spannung an einer Leitung. )

Ok,

ich habe den ersten Widerstand des Spannungsteilers jetzt vor die z-Diode gezogen. Der Strom ist dort minimal, hoffe dass meine Simulation stimmt. Vor den Transistor konnte ich ihn nicht machen, dann wäre hinten die Spannung auf 1-2 V abgefallen. Auch das aufteilen von R5 auf vor unt hinter den Kondensator hat nicht so die gewünschte Spannung hinten heraus gebracht.

Ich werde das am Wochenende so mal aufbauen und mit dem Arduino das Signal auslesen und schauen wie stabil es ist und vorallem ob alles überlebt (inklusive mir beim anschließen).

Hab den aktuellen Plan mal angehängt und hier hochgeladen.

Vielen Dank nochmal für die Hilfe, falls dir noch was auffällt woran es scheitern könnte darfst dich gerne nochmal einmischen :slight_smile:

Hey,

nur zur Info. Ich habe das jetzt gestern fertig gelötet. Noch drei Leuchtdioden und einen Summer dazu damit auch optische und akkustische Rückmeldung vorhanden ist und dann auch gleich angeschlossen. Es funktioniert perfekt :slight_smile:

Anbei mal die Schaltpläne für die die es interessiert.

Danke auch an alle die mir hier mit ihren Tipps geholfen haben! Ich habe einiges neues gelernt.

Viele Grüße
Andi

Außer daß das Schaltbild fast unleserlich ist...

Q2 funktioniert nicht. Schalte das Relais wie Du den Lautsprecher verschaltet hast.
R2 R1 ist viel zu niederohmig nimm einen 10kOhm Widerstand.
AREF darfst Du nicht auf +5V schalten . Laß es offen und verbinde mit einen 0,1µF Kondensator und Masse.
Ich vermisse die 0,1µF Kondensatoren an der Versorgungspannung in der Nähe des ATmega.

Grüße Uwe