Forum: Mikrocontroller und Digitale Elektronik Magnet/Türöffnungssensor am Raspi


von Walter (Gast)


Lesenswert?

Hallo zusammen!

Ich habe einen namenlosen "Türöffnungssensor" (zweiteilig: am einen 
Stück führen zwei gleichfarbige Drähte raus, die Gegenseite scheint der 
Magnet zu sein, laut Bildern im Netz evtl MC38). Den würde ich gerne an 
meinen Raspi anschliessen. Nun frag ich mich, was kann man da groß 
falsch machen?

Beide Kabel an den Raspi, einmal Masse und einmal GPIO und einen 
Widerstand dazwischen, Softwareseitig seh ich kein Problem, nur mit 
Hardware hab ichs nicht so. Aber man will ja lernen, daher meine Bitte 
um Hilfestellung. Verstanden hab ichs bisher Folgendes. Der Sensor 
sendet 1 wenn der Schalter geschlossen ist, dazu muss der eine Draht auf 
GRD, der andere an einen GPIO gelegt werden. Man sollte aber 
vorsichtshalber an einem der Kabel einen Widerstand dazwischen setzen.
Nun meine Frage warum nur an einem und nicht an beiden Enden? Hier 
spielt es wahrscheinlich keine Rolle, aber wenn man empfindlichere 
Technik hätte, würde man dann zwei Widerstände verbauen? Und welche 
Widerstandsgröße wäre hier angemessen? 10k?

von Mick (Gast)


Lesenswert?

Der Schalter (geschlossen) bildet einen geschlossenen Stromkreis. Wenn 
du diesen an GND und einen GPIO hängst und keinen Widerstand in Serie 
schaltest, zerstörst du u.U. den GPIO, wenn dieser als Output definiert 
ist und Logic HIGH ausgibt.
Wenn der GPIO aber nur als Input (in deinem Fall ja auch nötig) 
betrieben wird, brauchst du keinen Widerstand.

Jedoch benötigst du einen Pull-Up Widerstand, damit deine Schaltung 
funktioniert - entweder den internen des GPIO oder manuell zugeschaltet. 
Siehe: 
https://www.elektronik-kompendium.de/sites/raspberry-pi/2006051.htm

Bei geschlossenem Schalter liest der GPIO 0 (LOW) und bei geöffnetem 
Zustand eine 1 (HIGH).

Widerstandswert spielt keine Rolle. Ich verwende dazu immer 10k (1k - 
50k sollten funktionieren)

von Walter (Gast)


Lesenswert?

Danke. Aber leider bin ich nun verwirrter als vorher. Das mit den Pull 
up/down hatte ich schon mal gelesen, daher ja die Idee 10.000 Ohm zu 
nehmen.

Nochmal nachgefragt:
Widerstand mit 10k wäre richtig?
Widerstand gehört zwischen Schalter und GIO?
Ein Widerstand reicht?
Was würde passieren, wenn man mehrere Widerstände einbaut?

Das zweite Kabel auf GRD? Nicht auf 3.3V?

von GEKU (Gast)


Lesenswert?

Mick schrieb:
> Der Schalter (geschlossen) bildet einen geschlossenen Stromkreis.
> Wenn du diesen an GND und einen GPIO hängst und keinen Widerstand in
> Serie schaltest, zerstörst du u.U. den GPIO, wenn dieser als Output
> definiert ist und Logic HIGH ausgibt.
> Wenn der GPIO aber nur als Input (in deinem Fall ja auch nötig)
> betrieben wird, brauchst du keinen Widerstand.
>
> Jedoch benötigst du einen Pull-Up Widerstand, damit deine Schaltung
> funktioniert - entweder den internen des GPIO oder manuell zugeschaltet.
> Siehe:
> https://www.elektronik-kompendium.de/sites/raspberry-pi/2006051.htm
>
> Bei geschlossenem Schalter liest der GPIO 0 (LOW) und bei geöffnetem
> Zustand eine 1 (HIGH).
>
> Widerstandswert spielt keine Rolle. Ich verwende dazu immer 10k (1k -
> 50k sollten funktionieren)

10k sind auch bei längeren Leitungen ok (Pull-Up und Leiterschleife 
bilden einen Spannungsteiler und reduzieren damit den Highpegel).
Ich würde noch zwischen den 10k Pull-Up und den GPIO einen gleich großen 
Vorwiderstand einfügen und einen Kondensator von 100nF zwischen GPIO und 
GND schalten. (der interne Pull Widerstand sollte abgeschaltet sein)
10k und 100nF ergeben eine Zeitkonstante von 1ms und sollten 
Kontaktprellen und kurze Störungen unterdrücken. Bei Bedarf kann der 
Kondensator und/oder Vorwiderstand noch größer gewählt werden.

von GEKU (Gast)


Lesenswert?

Walter schrieb:
> Widerstand gehört zwischen Schalter und GIO?

Der Pull-Up gehört zwischen Eingang und positiver Versorgungsspannung. 
Zwischen Eingang und GPIO kann noch ein Vorwiderstand geschaltet werden 
(wie in meinem vorangegangenen Post beschrieben).
Diese RC Kombination schützt den GPIO vor Störimpulse, Überspannung und 
Kontaktprellen.

Walter schrieb:
> Das zweite Kabel auf GRD? Nicht auf 3.3V?

Der zweite Anschluss der Leitung gehört bei einem Pull-Up auf GND.

von HildeK (Gast)


Lesenswert?

Walter schrieb:
> Nochmal nachgefragt:
> Widerstand mit 10k wäre richtig?
> Widerstand gehört zwischen Schalter und GIO?
> Ein Widerstand reicht?
> Was würde passieren, wenn man mehrere Widerstände einbaut?
>
> Das zweite Kabel auf GRD? Nicht auf 3.3V?

Du hast es nicht verstanden.
In deinem Sensor ist vermutlich ein Reedkontakt drin. Wenn dem so ist, 
dann sollte es etwa so aussehen:
1
          VCC        VCC
2
           +          +
3
           |          |
4
    ------------+    .-.
5
                |    | |
6
                |    | | 2k2 ... 4k7
7
                |    '-'
8
                |     |     ___
9
           GPIO o-----o----|___|----.
10
                |                   |
11
                |           220R    o
12
    ------------+                   '\
13
          |                           \
14
         ===                        o  \
15
         GND                        |
16
                                   ===
17
                                   GND
18
(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)
Der Pullup (2k2...4k7) ist notwendig, um bei offenem Schalter am Eingang 
HIGH zu erzeugen.
Der 220R ist sinnvoll, falls du nicht garantieren kannst, dass der 
GPIO immer ein Eingang ist zum Schutz vor einem Kurzschluss durch den 
Schalter. Kannst du das, ist er überflüssig.
Natürlich kann man das auch umgekehrt beschalten: den PU als PD nach 
GND, dafür den Schalter in Richtung VCC. Fur die Auswertung ist das 
egal, in SW kann man beide Varianten dem richtigen Zustand zuordnen.
Übrigens: den obigen Vorschlag mit den internen PUs oder extern relativ 
hochohmig kann ich nicht unterstützen. Oft ist der Schalter mit einem 
längeren Kabel angeschlossen und da sind niederohmige Widerstände als 
PU/PD besser, weil sie Störeinflüsse verringern. Aus dem selben Grund 
auch die Verwendung der internen PUs nicht.

von HildeK (Gast)


Lesenswert?

GEKU schrieb:
> Ich würde noch zwischen den 10k Pull-Up und den GPIO einen gleich großen
> Vorwiderstand einfügen und einen Kondensator von 100nF zwischen GPIO und
> GND schalten.

Ja, es ist besser, zwischen dem PU und dem Eingang den R zu legen. Der 
kann dann schon hochohmiger sein.
Die 10k PU halte ich für zu hoch. Bei der Variante würde ich dann max. 
1k wählen.
Auch die 100nF sind nur zulässig, wenn die Anstiegszeit dadurch nicht 
außerhalb der Eingangsspezifikation des µC kommt.

von Walter (Gast)


Lesenswert?

@HildeK: "Du hast es nicht verstanden." stimmt. Sonst hätte ich ja auch 
nicht gefragt ;)

Was ich in Deiner Zeichnung noch nicht verstanden habe: warum der 
2k2/4k7 und warum der 220er. Gehe ich richtig in der Annahme, dass ich 
mit dem oberen Widerstand den Stromfluss von der Stromquelle zu den GPIO 
begrenze? Sind dann 4k nicht zu viel Freiraum? Ich meine gelesen zu 
haben, dass man in solchen Fällen 1k verbauen soll (aber keine Ahnung 
wieso und ob das überhaupt stimmt). Was ist dann der 220?

@GEKU: Danke für die Erklärung, ich glaube damit komme ich noch besten 
klar. Transitoren habe ich aber nicht hier. Schlimm? Mich würde ein 
"false postive" Fehlalarme erstmal nicht weiter stören. Mir kommt es nur 
darauf an, mitzubekommen, wenn der Kontakt unterbrochen wird.


@Alle: Was ist an folgendem Bild falsch? Und vorallem warum? Was 
passiert wenn ich das so baue?


    -------------
                |          _
     Raspi GPIO |---------|___|-----
                |                  |
                |     R1: 220 Ohm  |
   Raspi 3.3 V  |                  |
                ++++               |\
                |  +                 \   Schalter
     ------------  +               |  \
                   +       _     |
                   +++++++|___|++++|
                       R3: 1k Ohm  |
                                   -
                                  | |  R2: 10k Ohm
                                   -
                                   |
                                   |

                                   ===
                                   GND

von Karl B. (gustav)


Lesenswert?

Hi,
kenne Raspi nicht.
Aber mit anderen µPs wird es wohl ähnlich sein.
General purpose Input output = GPIO
Also, ein Port an einem µP kann als Eingang oder Ausgang geschaltet 
werden.
Das hängt von Deinem Programm ab.
Die "Software" kann aber auch im Verlauf des Programms/Betriebs 
"umfunktionieren". Dann wird ein Eingang zu einem Ausgang und umgekehrt.
Bei auch irgendwie aufteten könnender Fehlfunktion sollte eine 
Vorsichtsmaßnahme getroffen werden, damit der Port nicht kaputt geht.
Deswegen nie den Port direkt ohne Widerstand nach Vss oder Vcc mit einem 
Schalter schalten.
Das und noch viel mehr war alles oben schon gesagt worden.


> @Alle: Was ist an folgendem Bild falsch? Und vorallem warum? Was
> passiert wenn ich das so baue?
>
Wozu den R2 noch reinbauen?
Und, Du hast doch überhaupt kein "Potenzial", wenn der Schalter geöffnet 
ist. Der Port hängt dann völlig in der Luft. Es sei denn, Du hast 
softwaremäßig einen Pullup-Widerstand "enabled". Der reicht aber oft 
nicht aus, um eine einwandfreie Funktion zu gewährleisten.

Wie sehen die High/Low-Pegel beim Raspi überhaupt aus?
Wann schaltet der Eingang auf High, wann aud Low.
Die Spec. muss ich auch erst einmal lesen. Solltest Du auch.
Bis dann...

ciao
gustav

: Bearbeitet durch User
von HildeK (Gast)


Lesenswert?

Walter schrieb:
> Was ich in Deiner Zeichnung noch nicht verstanden habe: warum der
> 2k2/4k7 und warum der 220er.

Die 2k2/4k7 ist der Pullup. Wenn dein Schalter offen ist, liefert der 
HIGH-Pegel an den GPIO.
Die 220R sollen verhindern, dass der GPIO kaputt geht, wenn du folgendes 
fehlerhaft machst:
- der GPIO ist (temporärer Programmierfehler) auf Ausgang geschaltet und 
es liegt HIGH an. Du drückst die Taste: Kurzschluss des GPIO nach GND.
Das hat aber GEKU besser gelöst.

Walter schrieb:
> Was ist an folgendem Bild falsch? Und vorallem warum? Was
> passiert wenn ich das so baue?

Wenn dein Taster offen ist, dann ist der GPIO unbestimmt. Kann also HIGH 
oder LOW oder irgendwo dazwischen sein oder sich Störsignale einfangen. 
Also: Zufallsfunktion :-).

R2 und R3 sorgen für einen dauerhaften Stromfluss. Also nochmal, unter 
Berücksichtigung von GEKUs Variante sollte es so aussehen:
1
          VCC                VCC
2
           +                  +
3
           |                  |
4
    ------------+            .-.
5
                |            | |
6
                |            | | 1k
7
                |      10k   '-'
8
                |       ___   |
9
           GPIO o---o--|___|--o
10
                |   |         |
11
                |  ---        o
12
    ------------+  --- 1n     '\
13
          |         |           \
14
         ===        |         o  \
15
         GND       ===        |
16
                   GND       ===
17
                             GND
18
(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)
- 1k ist ein niederohmiger Pullup, der dafür sorgt, dass bei offenem 
Schalter ein sicheres HIGH am GPIO liegt, auch wenn die Leitung zum 
Kontakt länger ist. Kann auch 5k oder 10k sein, je höher, desto weniger 
Strom und desto störanfälliger.
- wenn der Schalter geschlossen ist, fließen dann VCC/1k an Strom. Es 
ist also sinnvoll, den Kontakt im Ruhezustand offen zu haben, alternativ 
den 1k zu erhöhen. Wenn dann allerdings Fehlauslösungen passieren, ist 
die Grenze erreicht. Man kann alternativ auch den 1k an einen weiteren 
GPIO (Ausgang) anschließen und den nur kurz auf HIGH schalten, wenn man 
den Kontaktzustand lesen will. Das spart Strom, wenn er im Ruhezustand 
geschlossen sein sollte.
- 10k schützt den GPIO vor den o.g. Fehlern. Zusammen mit dem 1n (kann 
auch 10n sein) bildet er ein Filter gegen Störspitzen.

In dem Bild kannst du auch den Kontakt und den 1k vertauschen. Dann ist 
halt die Logik invertiert.

von GEKU (Gast)


Angehängte Dateien:

Lesenswert?

HildeK schrieb:
> Auch die 100nF sind nur zulässig, wenn die Anstiegszeit dadurch nicht
> außerhalb der Eingangsspezifikation des µC kommt.

Ich habe die Schaltung mit LtSpice simuliert.

Ich bin von einer Leiterschleife von 200 Ohm (2x 100 Ohm) ausgegangen.
Das Prellen der Reedkontakte habe ich mit 0,2ms angenommen.

10nF liegen fürs Entprellen an der Grenze, daher bin ich von 100nF 
ausgegangen.

Bei einem Schmitt Triggereingang sollte aufgrund der Mitkopplung die 
Anstiegszeit kein Problem darstellen (das Ausgangssignal kann nur 0 oder 
3.3V sein, siehe Simulation)

Der Schmitt-Trigger wurde in der Simulation mit einbezogen.

Die ASC Datei liegt bei, somit könne die Werte bei Bedarf noch variiert 
werden.

Der Kontakt wurde mit einer geschalteten Spannungsquelle mit 
Schottkydiode simuliert. Ist die Spannungsquelle 0V, dann ist der 
Kontakt geschlossen, hat die Spannungsquelle 3,3V, dann ist die 
Schottkydiode gesperrt und somit der Kontakt offen.

von Joachim B. (jar)


Lesenswert?

Karl B. schrieb:
> kenne Raspi nicht.
> Aber mit anderen µPs wird es wohl ähnlich sein.


aber Raspis sind sensibel, die internen Schutzdioden sind fast nicht 
vorhanden oder nur parasitär!
Der Raspi kann i.d.R. nur 3mA schalten und Ports können auch mal Output 
und low sein, ist der pullup kleiner als 1k fliesst halt zu viel Strom 
in den Port.
Deswegen nicht mit anderen µC zu vergleichen.

Karl B. schrieb:
> Wozu den R2 noch reinbauen?

eben überflüssig!

den pullup größer zu machen oder den internen zu nutzen ist möglich 
lässt aber mehr Störimpulse auf langen Leitungen durch.

Die Abfrage auf 0V also Kontakt nach GND geschlossen ist für alle 
sicherer.

von GEKU (Gast)


Angehängte Dateien:

Lesenswert?

Diese Schaltung habe ich für einen extern Türkontakt realisiert.

Die Schaltung sollte folgende Eigenschaften aufweisen:

- unempfindlich gegen Störungen
- sicher bis 48V Spannungen am Eingang, kurzzeitig mehr
- über 200 Ohm Schleifenwiderstand
- Erkennung von Änderungen des Kontaktzustandes innerhalb von 10ms

Der Kontakt hängt am Eingang P1.0 des MSP430, so das auch die Spannung 
gemessen werden kann. Damit wären eine Überwachung der Kontaktschleife 
möglich.

von GEKU (Gast)


Lesenswert?

GEKU schrieb:
> Erkennung von Änderungen des Kontaktzustandes innerhalb von 10ms

Korrektur : innerhalb von 20ms

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.