Wie kann ich einen nicht verbundenen Pin erkennen?


7

Ich versuche ein System aufzubauen, bei dem eine Aktion ausgeführt wird, wenn ein Kabel von einem Pin (einem beliebigen Pin) getrennt wird.

Ich frage mich, wie ich das einrichten soll. Kann ich die 5V einfach an einen Pin anschließen und dessen Status ablesen oder wird dies den Arduino durcheinander bringen? Soll ich Widerstände verwenden? Wie soll ich das mit dem GND verbinden?

Bitte denken Sie daran, dass ich in all dem ziemlich neu bin.


Bitte geben Sie an, ob diese Pins für die Eingabe oder Ausgabe verwendet werden sollen. Wenn ausgegeben, was fahren sie? z.B. LEDs. Wenn eingegeben, von welchem ​​Gerät lesen Sie?
Nick Gammon

Ich bin mir nicht sicher, ob ich sie als Eingabe oder Ausgabe verwenden soll. Die Idee ist, dass es ein Software-Ereignis und kein physisches Ereignis (Hardware) auslöst. Alles, was ich wirklich brauche, ist ein Signal an den Computer (obwohl derzeit USB), das besagt, dass das Kabel nicht angeschlossen ist.
Karim Stekelenburg

Antworten:


8

Der Weg dazu, da zwischen HIGH und LOW kein digitaler Wert liegt, besteht darin, aktiv ein Signal an dem Pin zu erzeugen, den Sie erkennen können. Beachten Sie, dass wenn das an den Pin eingehende Signal ein Datenstrom ist (eine Folge von HIGH und LOW), der ständig läuft, dies möglicherweise nicht zuverlässig funktioniert, aber für Dinge wie Tasten und andere einfache Sensoren gut ist.

Jedes Signal auf einem Draht hat eine Antriebsstärke . Dies ist im Grunde genommen, wie stark das Signal ist und wie gut es andere Dinge überschreibt, die auf demselben Draht geschehen. Es hängt eng mit der Ausgangsimpedanz der Quelle zusammen (was das Signal sendet). Für Dinge wie Tasten und Schalter ist dies im Grunde der Wert des verwendeten Pullup-Widerstands.

Um aktiv sinnvoll , wenn ein Stift nicht angeschlossen ist oder nicht müssen Sie es vorübergehend zu einem bekannten Signalpegel verbinden zugleich , wie es mit dem Draht verbunden ist (oder nicht verbunden , wenn es passiert nicht angeschlossen werden). Dieser bekannte Signalpegel muss um mehrere Größenordnungen schwächer als das Quellensignal sein. Dies stellt sicher, dass, wenn Sie versuchen, Ihr Testsignal dem eingehenden Signal zu überlagern, das eingehende Signal das Testsignal überflutet und Sie es überhaupt nicht sehen. Wenn Ihre Quelle beispielsweise eine Impedanz von 10 kΩ hat (z. B. eine Taste mit einem Pullup-Widerstand von 10 kΩ), ist ein Testsignal mit einer Quellenimpedanz von 1 MΩ geeignet.

Jeder zu testende Pin kann an einen eigenen 1 MΩ-Widerstand (in diesem Beispiel) angeschlossen werden, und diese Widerstände sind alle an denselben zusätzlichen E / A-Pin angeschlossen:

Geben Sie hier die Bildbeschreibung ein

In diesem Beispiel ist Pin D2 der Test-Pin und Pin D4-D7 sind Ihre Eingänge.

Unter normalen Umständen wird Pin D2 als Eingang gesetzt und vollständig ignoriert. Wenn Sie jedoch die Pins testen, legen Sie sie als Ausgang fest.

Sie setzen dann D2 auf HIGH und lesen jeweils D4 bis D7. Alle, die als HIGH gelesen werden, sind Kandidaten dafür, nicht verbunden zu sein.

Sie setzen dann D2 auf LOW und lesen die Pins, die zuvor HIGH lesen. Alle, die jetzt als LOW gelesen werden, werden getrennt.

Anschließend setzen Sie D2 wieder auf einen Eingang, damit der normale Betrieb nicht beeinträchtigt wird.


Wenn Sie nur wissen möchten, ob in einem Draht Strom fließt, können Sie einen sogenannten Shunt-Widerstand verwenden . Dies ist ein kleiner Widerstand (möglicherweise 1 Ω), der in einer Linie mit dem Draht angeordnet ist, und Sie messen die Spannung (unter Verwendung von Arduino-Analogeingängen) auf beiden Seiten des Widerstands. Die am Widerstand abfallende Spannung ist dank des Ohmschen Gesetzes direkt proportional zum durch ihn fließenden Strom:

I = V / R.

Zum Beispiel:

Geben Sie hier die Bildbeschreibung ein

Wenn die Spannung von 5 V A1 gelesen werden soll (die Spannung der Draht verbunden ist) und die Spannung gelesen , indem A0 4.93V sein sollte, ist die Spannung fiel durch den Widerstand würde 5-4,93 = 0.07v sein. Mit dem 1Ω-Widerstand wäre der Strom 0,07 / 1 = 0,07 A oder 70 mA.

Wenn das Kabel an OUT getrennt ist, fließt kein Strom, da kein Stromkreis vorhanden ist. Wenn wir also die obige Formel neu anordnen, können wir beweisen, dass wir feststellen können, dass sie nicht verbunden ist.

Wenn I = V / R, dann ist V = RI. Daher ist V = 1Ω × 0A = 0V. Die am Widerstand abfallende Spannung wäre also 0 V, also wären A0 und A1 gleich (ohne jegliches Rauschen). A0 und A1 würden beide 5 V anzeigen. In ähnlicher Weise würden A0 und A1 beide 0 V anzeigen, wenn stattdessen der Draht IN getrennt würde.

Zum Erfassen höherer Ströme verwenden Sie einen kleineren Widerstand und zum Erfassen kleinerer Ströme verwenden Sie einen größeren Widerstand. Dadurch kann ein Spannungsabfall erzeugt werden, der innerhalb eines geeigneten Bereichs für die Empfindlichkeit des ADC liegt, der den Messwert ausführt. Für den Arduino ist das ein 10-Bit-ADC, so dass er (mit einem 5V V REF ) 5/1024 = 4,882813 mV pro LSB erfassen kann.

Beachten Sie, dass Sie diese Spannungen trennen oder auf andere Weise skalieren müssen, wenn Sie mit Spannungen arbeiten, die über denen liegen, bei denen der Arduino arbeitet. Es gibt spezielle Geräte, die speziell für diese Aufgabe entwickelt wurden und als Hochseitenstrom-Shunt-Verstärker bezeichnet werden . Sie ermöglichen es Ihnen auch, einen kleineren Widerstand zu verwenden, als Sie sonst benötigen würden, was für Ihre Schaltung weniger störend ist (weniger Spannungsabfall).


1

Sie können alle Pins über einen 1M-Widerstand mit einer Schiene verbinden. Hin und wieder stellen Sie alle Ihre Ausgänge auf Eingänge ein und schalten die Schiene auf HIGH und LOW um. Wenn die Eingänge in der Reihenfolge, in der Sie die Schiene umgeschaltet haben, HIGH und LOW sind, gibt es kein Kabel. Die gleiche Frage wurde in den Arduino-Foren gestellt. Lesen Sie diesen Thread.

Die Antwort auf diese Frage wurde von johnwasser@forum.arduino.cc gegeben.


1
Vielen Dank, aber das sieht viel komplizierter aus, als es für meinen Zweck sein sollte. Ich verwende keine externen Geräte und / oder Sensoren. Was ich suche, ist eine Möglichkeit zu erkennen, ob Strom von 5 V nach GND fließt (Kabel angeschlossen) oder nicht (Kabel nicht angeschlossen). Sie können sich das als eine seltsame elektronische Halskette vorstellen, die Geräusche macht, wenn sie getrennt wird. Wie bestimme ich nun, wann ich das Geräusch machen soll?
Karim Stekelenburg

1

Wenn es sich um einen digitalen Eingang handelt, können Sie alternativ einfach einen Pull-Up- oder Pull-Down-Widerstand verwenden, um dem Eingangspin einen Standardwert zu geben. Angenommen, Sie verwenden einen Pull-up-Widerstand, um den Standardwert hoch zu setzen. Dann schließen Sie ein Low-Kabel an diesen Eingang an, sodass der Eingang Low anzeigt. Wenn das Kabel hoch geht oder nicht angeschlossen ist, erhalten Sie einen hohen Wert im Eingangspin.

Ich weiß, dass dies nicht ganz das war, was Sie gefragt haben, aber vielleicht könnte eine solche Lösung bei Ihrem ursprünglichen Problem helfen. In meinem Fall habe ich ein Flammenerkennungsmodul, das standardmäßig eine niedrige Leistung liefert und bei einer Flamme hoch wird. Ich möchte die Flamme nicht verpassen, weil mein Kabel getrennt ist. Deshalb verwende ich einen Pull-up-Widerstand, der den Eingang nicht nur bei einer Flamme, sondern auch bei einer Unterbrechung hoch macht. Auf diese Weise stelle ich sicher, dass ich kein Feuer verpasse, weil das Sensorkabel abgezogen wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.