Frage zum Thema Reed Kontakte und Widerstände

Hallo,

ich habe vor ca. einem Jahr mit Hilfe 2 er Arduino's, Bluetooth Module, Led's und Reedkontakt für meine Eltern eine Anzeige, ob das Garagentor offen oder zu ist, gebastelt.

Das funktioniert so:

Der Reedkontakt und ein Widerstand sind zusammen an den Arduino in der Garage angeschlossen.

Ist das Tor geschlossen, dann ist auch der Reed Kontakt geschlossen und der Arduino mißt die Kompletten 5V.

Ist das Tor geöffnet, fließt über den Widerstand weniger Strom.

Ist das Kabel beschädigt, fließt kein Strom.

Der Arduino in der Garage sendet das ganze(entprellt) an den Arduino im Wohnzimmer.

Funktioniert sehr gut und zuverlässig.

Nachdem bei uns öfters mal Leute Tagsüber und auch Nachts im Garten rumschleichen ...
soll das ähnlich für das Gartenhaus, Keller usw. aber ohne Bluetooth nachgebaut werden.

Dabei dachte ich mir, ich könnte verschieden starke Widerstände an einem Kabel benutzen und das Signal hinterher auswerten.

Ich brauche ca. 10 Stellen.

Bewegungsmelder scheiden aus - zuviele Katzen.

Hat da jemand einen Tipp, z.B. welche Widerstände ich dafür benutzen sollte oder andere Ideen?

Mattes:
Der Reedkontakt und ein Widerstand sind zusammen an den Arduino in der Garage angeschlossen.

Ist das Tor geschlossen, dann ist auch der Reed Kontakt geschlossen und der Arduino mißt die Kompletten 5V.

Ist das Tor geöffnet, fließt über den Widerstand weniger Strom.

Wenn der Reed-Konatakt offen ist fleißt (fast) kein Strom. Nur weniger als 1µA, der Leckstrom eines Eingangs. Da siehst Du nicht ob der Kabel kaputt ist oder nicht.

Mehrere Kontakte mittels Spannungsteiler auszulesen ist möglich aber 10 sind zuviel für einen analogen Eingang. Außerdem erkennst Du nicht ob 1 oder mehrere Kontakte offen sind oder nicht. Es könnte ja mal sein daß eine Tür willentlich offen bleiben soll, die anderen aber dennoch kontrolliert werden sollen.

Grüße Uwe

uwefed:
Wenn der Reed-Konatakt offen ist fleißt (fast) kein Strom. Nur weniger als 1µA, der Leckstrom eines Eingangs. Da siehst Du nicht ob der Kabel kaputt ist oder nicht.

Mehrere Kontakte mittels Spannungsteiler auszulesen ist möglich aber 10 sind zuviel für einen analogen Eingang. Außerdem erkennst Du nicht ob 1 oder mehrere Kontakte offen sind oder nicht. Es könnte ja mal sein daß eine Tür willentlich offen bleiben soll, die anderen aber dennoch kontrolliert werden sollen.

Grüße Uwe

Ich vermute, der Widerstand ist parallel zum Reedkontakt geschaltet. Das mit den Spannungsteilern (One-Wire-Tastatur am Analogeingang) ist mir auch eingefallen, aber da hat Uwe absolut Recht, das geht nur wenn ein Kontakt zur Zeit geschlossen wird.

Mein Vorschlag ist hier, den I2C-Bus mit einem I2C-Expander (PCF8574 - 8Port oder MCP23017 - 16 Port) einzusetzen. Du benötigst allerdings bei längeren Leitungen noch min. 2 Extender (P82B715) dazu. Auf der Arduino-Seite einen und 2 oder mehr auf der Expander-Seite, je nachdem wie weit die auseinander sind. Allerdings reichen dafür 2 Adern nicht mehr aus. Ist in der Nähe der Kontakte keine Spannungsversorgung möglich, werden 4 Adern zwischen den Extendern benötigt.

Statt I2C ist besser RS232
Grüße Uwe

ich erhöhe auf RS485...

uwefed:
Statt I2C ist besser RS232
Grüße Uwe

Ja, ok das ist bei einer größeren Kabellänge nicht so kritisch, aber wie sollen dann "10" verschiedene Kontakte ausgewertet werden. Da muss dann auch eine Lösung her. Die gibt es sicherlich, aber erfordert auch entsprechende Hardware.

Deswegen war meine Idee mit I2C, weil es hier mit der Porterweiterung so simpel ist.

RS485 kann mehrere Teilnehmer + lange Kabellänge

hi,

schon richtig, bei der idee mit I2C brauchst Du nur in der zentrale intelligenz, aber bei den entfernungen (auch zwischen den stationen) ist I2C nicht wirklich geeignet.

mit RS485 braucht jede stelle einen atmel und einen RS485-wandler, aber das sind nur kosten von drei, vier euro pro station. ubd die abstände untereinander und insgesamt sind egal (ich glaube es sind 1200m).

mit einem vierpoligen kabel könnte man dann alles verbinden.

gruß stefan

hallo,

danke für die schnellen antworten.

HotSystems hat recht "der Widerstand ist parallel zum Reedkontakt geschaltet"

hab mal ein das ganze als grafik erstellt.

bitte nicht stören, die beschriftung etc ist nicht 100% und der attiny auch mehr eine art lückenfüller, bzw. überlege ich, das ggf. doch anders zu lösen, falls es doch nicht mit nur einem kabel geht.

i2c wollte ich eigentlich nicht mit anfangen - wäre denke ich zu komplex für so ein kleines projekt.

was die steuerung / alarm etc betrifft wird das später vermutlich in das andere (noch zu erstellende) projekt integriert.

angefangen hat alles vor vielen jahren mit einem arduino zur heizkreissteuerung.
dann die rücklaufanhebung - war ähnlich.
dann zeitgesteuerte und sensorabhängige änderungen der parameter.

als ich das ganze netzwerkfähig machen wollte, um dort parameter ändern zu können, war erst einmal ende.
funktioniert ansonsten seit gut 3 jahren ohne große probleme.

jetzt(wenn ich zeit finde, kommt immer was neues dazwischen) wird der parameterteil (auch die zeitschaltung) etc. auf einen raspberry verschoben und der arduino per usb angesprochen.

ich muss sagen, das alles rund um arduino ganz gut funktioniert, aber der letzte schritt, was hardware, platinen und gehäuse betrifft, fehlt mir noch immer.

da wird man echt erschlagen, was es alles gibt ... und im grunde ist dieses problem hier fast schon peinlich.

mal schauen, ggf. werde ich mein steckbrett rauskramen und das ganze einfach mal ausprobieren.

Eisebaer:
ich erhöhe auf RS485...

Ich erniedrige wieder auf RS232 weil es Vollduplex ist. RS485 ist halbduplex und darum muß man den Fluß programmieren oder ein Bussystem verwenden. RS422 in vollduplex ist möglich aber braucht mehr Leitungen.
RS232 mit serial.print ist viel einfacher. und 100m sollten reichen
Grüße Uwe

i2c wollte ich eigentlich nicht mit anfangen - wäre denke ich zu komplex für so ein kleines projekt.

was die steuerung / alarm etc betrifft wird das später vermutlich in das andere (noch zu erstellende) projekt integriert.

So komplex, wie es auf den ersten Blick scheint, ist es nicht. Wenn du mit div. Sensoren und LCD-Display und vieles andere arbeitest, ist es schon ein saubere und "einfache" Lösung. Darauf aufbauend die Verbindung zu den Schaltern, die du einsetzt, ist es auch nicht sehr viel aufwändiger. Und es benötigt immer "nur" zwei Ports deines Arduino.

Ich setze es bei mir in vielen Projekten ein, z.B. auch zur Lichtsteuerung, um entfernte Punkte zu steuern und bedienen. Und I2C ist ja in jedem (fast) Arduino enthalten. :wink:

Allerdings muss ich allen anderen recht geben, für große Entfernungen (bei mir sind es ca. 30 m., geht aber auch deutlich mehr) sollte man doch andere Schnittstellen einsetzen.

30 m sind für den I2C Bus schon sehr viel. Da braucht man schon I2C-Extender und I2C-Accelerator damit das sicher funktioniert.

Der Bus wurde ja ursprünglich für die Komunikation von ICs die auf der selben Platine montiert sind entwickelt.

Grüße Uwe

uwefed:
30 m sind für den I2C Bus schon sehr viel. Da braucht man schon I2C-Extender und I2C-Accelerator damit das sicher funktioniert.

Der Bus wurde ja ursprünglich für die Komunikation von ICs die auf der selben Platine montiert sind entwickelt.

Grüße Uwe

Ja, das ist richtig, habe ich auch in meinem Post #2 angemerkt.
Und bei mir läuft es seit einigen Jahren sicher. Früher mit dem AT89C20151 und aktuell mit Arduino. Und da ich auf meinen Leitungen nur "langsame" Schaltvorgänge sende, komme ich aktuell ohne den Accelerator aber mit Extender aus.

Und für die vorgenannten Schaltvorgänge hab ich auch schon Tests mit 75 m langem Telefonkabel (nicht aufgerollt) durchgeführt. Das hat auch funktioniert.

Hallo,

laut meiner Logik müßte das funktionieren mit 10 Eingänge abfragen und unterscheiden auf einem analogen Eingang. Wenn alles über eine Widerstandsleiter läuft. Wie beim selbstgebauten D/A Wandler nur umgekehrt. Dann kann man jeden Signalzustand genau einem analogen Spannungswert zuordnen. Die 5V Referenz am Analog sollten jedoch konstant sein. Entweder ist die 5V Spannungsversogung konstant oder mittels extra 5V Referenzspannung. Oder man setzt noch eine 4,096V Referenz ein, die sich aus den 5V Ub speist.

Dann hätte man, ausgehend von den 4,096V, eine 10 Bit Auflösung von 4mV. Die 10 Signal machen aber entsprechend Sprünge von 400mV. Wäre locker unterscheidbar. Entsprechend der dann auch möglichen Kombinationen kann man rückschließen welche(r) Schalter getätigt sind und welche nicht.

Die größte Herausforderung sehe ich in der Programmierung. Nämlich dann, wenn ein Schalter/Tür bewußt mal offen bleiben soll, wie schon angesprochen wurde, dann mußte dem Arduino irgendwie sagen, dass das Signal aktuell okay ist und er dann nur die restlichen Differenzen auswerten soll. Wenn es keine reine Anzeigetafel der Schalterzustände im Haus gibt.

Doc_Arduino:
Hallo,

laut meiner Logik müßte das funktionieren mit 10 Eingänge abfragen und unterscheiden auf einem analogen Eingang. Wenn alles über eine Widerstandsleiter läuft. Wie beim selbstgebauten D/A Wandler nur umgekehrt. Dann kann man jeden Signalzustand genau einem analogen Spannungswert zuordnen. Die 5V Referenz am Analog sollten jedoch konstant sein. Entweder ist die 5V Spannungsversogung konstant oder mittels extra 5V Referenzspannung. Oder man setzt noch eine 4,096V Referenz ein, die sich aus den 5V Ub speist.

Dann hätte man, ausgehend von den 4,096V, eine 10 Bit Auflösung von 4mV. Die 10 Signal machen aber entsprechend Sprünge von 400mV. Wäre locker unterscheidbar. Entsprechend der dann auch möglichen Kombinationen kann man rückschließen welche(r) Schalter getätigt sind und welche nicht.

Die größte Herausforderung sehe ich in der Programmierung. Nämlich dann, wenn ein Schalter/Tür bewußt mal offen bleiben soll, wie schon angesprochen wurde, dann mußte dem Arduino irgendwie sagen, dass das Signal aktuell okay ist und er dann nur die restlichen Differenzen auswerten soll. Wenn es keine reine Anzeigetafel der Schalterzustände im Haus gibt.

Schwierig wird es nur, wenn mehrere Kontakte gleichzeitig geschlossen sind.

Die 5V Referenz am Analog sollten jedoch konstant sein. Entweder ist die 5V Spannungsversogung konstant oder mittels extra 5V Referenzspannung. Oder man setzt noch eine 4,096V Referenz ein, die sich aus den 5V Ub speist.

Vcc reicht bei Vcc = Aref
Die Werte ändern sich ja nicht, egal ob vcc jetzt 5V oder 4,5V ist.

Ich würde empfehlen, zu jedem Sensor ein Kabelpaar zu legen.

  1. bei einem Kabelbruch/Manipulation bleiben die anderen "scharf"
  2. an der Alarmanlage kann man für jedes Fenster eine "auf" Anzeige bauen (nicht durchs ganze Haus laufen müssen)
  3. Ein Widerstand in Reihe zum Schalter und einen parallel dazu (Einbrecher überbrückt Sensor Erkennung)

uwefed:
Ich erniedrige wieder auf RS232 weil es Vollduplex ist.

RS232 ist aber nur Point-to-Point. Er braucht doch mehrere Bus-Teilnehmer so wie ich das verstehe

HotSystems:
Schwierig wird es nur, wenn mehrere Kontakte gleichzeitig geschlossen sind.

Hallo,

eben nicht, sonst gebe es keine D/A Wandler. Guck Dir mal einen diskret aufgebauten D/A Wandler an. Das Teil mit dem Widerstandsnetzwerk. Genau nach dem Prinzip klappt das hier auch. Alle erdenklichen digital Kombinationen ergeben genau einen analogen Wert und eben auch umgekehrt.

Nur was mit gerade durch die Birne sackt ist, er würde das ja dann wieder im µC analog nach digital wandeln. Wäre sinnlos. Da wäre dann schon die Variante mit 10 digital I/Os einlesen und auswerten doch einfacher. Selbst wenn er dafür noch eine Porterweiterung nehmen muß.

Wegen der Kabelbrucherkennung. Kann man da nicht wie in der SPS Technik verwendet wird, die Variante mit 0, 4 und 20mA verwenden? Damit wäre alles abgedeckt. So mal in die Runde gewurfen. :slight_smile:

Doc_Arduino:
Hallo,

eben nicht, sonst gebe es keine D/A Wandler. Guck Dir mal einen diskret aufgebauten D/A Wandler an. Das Teil mit dem Widerstandsnetzwerk. Genau nach dem Prinzip klappt das hier auch. Alle erdenklichen digital Kombinationen ergeben genau einen analogen Wert und eben auch umgekehrt.

Nur was mit gerade durch die Birne sackt ist, er würde das ja dann wieder im µC analog nach digital wandeln. Wäre sinnlos. Da wäre dann schon die Variante mit 10 digital I/Os einlesen und auswerten doch einfacher. Selbst wenn er dafür noch eine Porterweiterung nehmen muß.

Wegen der Kabelbrucherkennung. Kann man da nicht wie in der SPS Technik verwendet wird, die Variante mit 0, 4 und 20mA verwenden? Damit wäre alles abgedeckt. So mal in die Runde gewurfen. :slight_smile:

Doc_Arduino:
Hallo,

eben nicht, sonst gebe es keine D/A Wandler. Guck Dir mal einen diskret aufgebauten D/A Wandler an. Das Teil mit dem Widerstandsnetzwerk. Genau nach dem Prinzip klappt das hier auch. Alle erdenklichen digital Kombinationen ergeben genau einen analogen Wert und eben auch umgekehrt.

Nur was mit gerade durch die Birne sackt ist, er würde das ja dann wieder im µC analog nach digital wandeln. Wäre sinnlos. Da wäre dann schon die Variante mit 10 digital I/Os einlesen und auswerten doch einfacher. Selbst wenn er dafür noch eine Porterweiterung nehmen muß.

Wegen der Kabelbrucherkennung. Kann man da nicht wie in der SPS Technik verwendet wird, die Variante mit 0, 4 und 20mA verwenden? Damit wäre alles abgedeckt. So mal in die Runde gewurfen. :slight_smile:

Ok, technisch ist mir das schon klar, wie es funktionieren kann. Aber ich habe in einem anderen Post gelesen, dass die Auflösung des Ardu da nicht ausreicht. Erfahrung habe ich da noch nicht gesammelt und gehe dann lieber den "digitalen" Weg. Mein Favorit ist eben I2C. :wink:

Bin mir aber sicher, das geht nicht für alles.

Liese sich das nicht auch per Wifi mit direkt programmierten ESP8266 ohne Arduino lösen? Es müsste halt überall Strom vorhanden sein.
Arduino dann erst bei der Auswertung.
Wo es mit der Reichweite kritisch wird, Module mit externer Antenne.

Nur mal so als Vorschlag.