GPIO-Eingang schwankt zwischen hoch und niedrig, wenn kein Eingang empfangen wird

Ich habe dies auf dem Raspberry Pi StackExchange gepostet, aber ich habe das Gefühl, dass es hier besser geeignet ist, da die SE sowieso ziemlich inaktiv ist.

Ich habe eine ziemlich einfache Schaltung, die ich gemacht habe, wo ein Bewegungsmelder über eine ziemlich lange Kabelstrecke von ~ 30 Fuß mit einem Raspberry Pi B + GPIO verbunden ist. Der Detektor wird von einer 9-V-Batterie gespeist und das Schema sieht wie folgt aus:

PIL-Schema

Ich führe ein Python-Skript aus, um die Bewegung aufzunehmen, und es lautet wie folgt:

import RPi.GPIO as gpio
import time
gpio.setmode(gpio.BCM)
gpio.setup(17, gpio.IN)
while True:
  print ("LOW","HIGH")[gpio.input(17)]
  time.sleep(.5)

Ich erhielt eine Ausgabe, die konstant 9-11 HIGHs war, dann 9-11 LOWs und sich dann wiederholte, und ich fragte mich, was los war, also trennte ich den PIR-Bewegungsmelder und ließ das Kabel an nichts angeschlossen, und ich erhielt das gleiche Ergebnis : eine beständige Schwankung zwischen niedrig und hoch.

Nach meinen Recherchen ist LOW für GPIO ungefähr <0,54 V, während HIGH > 2 V ist. Das Messen der Spannungsdifferenz zwischen dem Kabel und dem GND-Pin des Raspberry Pi (PIN 39) ergibt konstant 0,32 V ohne Schwankungen. Warum passiert das und wie kann ich es beheben?

Haben Sie versucht, das Kabel nicht zu verwenden? Ihr Sensor ist möglicherweise nicht in der Lage, die kapazitive Last zu treiben, die das 30-Fuß-Kabel einführt. Versuchen Sie, den Sensor viel näher zu bringen, und sehen Sie, wie er sich verhält.
@sherrellbc Es funktioniert gut, wenn es direkt verbunden ist. Die Entfernung des Kabels kann nicht verringert werden, und ich würde es vorziehen, es verkabelt zu haben, anstatt ein drahtloses Signal zu senden. Irgendwelche Ideen, wie man das umgehen kann?
Wenn dies tatsächlich das Problem ist, benötigen Sie einen zusätzlichen Leitungstreiber, damit dies funktioniert. Es kann jedoch sein, dass der Draht seine nicht idealen Antenneneigenschaften zeigt und EMI aufnimmt. In diesem Fall können Sie versuchen, ein abgeschirmtes Kabel zu verwenden. Trotzdem kann ich mir nicht vorstellen, dass Ihr PIR-Sensor viel Laufwerkskapazität hat.
Senden Sie wirklich 9 V an einen Pin am RPi?

Antworten (2)

Fügen Sie einen Pull-up- oder Pull-down-Widerstand hinzu. Versuchen Sie es mit 10k. Wenn das nicht funktioniert, versuchen Sie es mit 1k. Ich vermute, dass Ihr langer Draht einige EMI aufnimmt und der GPIO-Pin mit sehr hoher Impedanz diese in eine Spannung umwandelt, die hoch genug ist, um den Pin-Status zu ändern. Ein Pull-up- oder Pull-down-Widerstand erschwert dies.

Basierend auf dem von Ihnen gelieferten Schaltplan ist Ihr Bewegungsmelder entweder als Kurzschluss verbunden, wobei der GPIO schwebend bleibt, oder er wendet VCC an den GPIO an. Es zeigt nicht, dass es einen gemeinsamen Massebezug gibt. Vielleicht ist die Schaltung falsch.

Stellen Sie zunächst sicher, dass die Schaltkreise an beiden Enden Ihres Kabels eine gemeinsame Referenz (GND) haben. Die Spannung muss relativ zu einer Referenz gemessen werden. Wenn jede Seite des Kabels ihre eigene ungewöhnliche Referenz hat, schwebt der Sensor im Wesentlichen immer auf dem GPIO-Eingang.

Wenn an beiden Enden Ihres Stromkreises tatsächlich eine gemeinsame Masse vorhanden ist, sollten Sie den Eingang mit einem Widerstand entweder hoch oder niedrig ziehen, um sicherzustellen, dass er nicht schwebend bleibt, wenn er offen bleibt. Das angeschlossene Gerät hat möglicherweise bereits einen Pull-up/down, aber einer ist im Schaltplan nicht dargestellt. Selbst wenn Sie ~0 V DC messen, werden am schwebenden Eingang wahrscheinlich einige AC-EMI erfasst, insbesondere wenn ein 30-Fuß-Kabel angeschlossen ist.

Mit einem so langen angeschlossenen Kabel können Sie, selbst wenn der Eingang nicht erdfrei ist, genug EMI aufnehmen, um die schwache Antriebsstärke Ihres Sensors zu überwältigen.

Um den Eingang nach unten zu ziehen, könnte ich einfach einen 10k-Widerstand vom Steuerkabel an gnd anschließen, bevor er auf das gpio trifft?
@globby, wenn Sie einen PIR-Sensor verwenden und die Leitung mit der "Ausgabe" dieses Sensors ansteuern, wurde dies wahrscheinlich bereits für Sie erledigt. Überprüfen Sie das Datenblatt, um sicherzugehen, aber ich würde vermuten, dass der Ausgang entweder hoch oder niedrig ist und niemals schwimmt.
@sherrellbc Das stimmt, hängt natürlich von der Schaltung / dem angeschlossenen Gerät ab. Basierend auf dem einfachen Schema in der Frage sieht es aus wie ein Schwimmer (könnte durchaus etwas anderes sein).
Der PIR-Sensor ist direkt von Adafruit. adafruit.com/products/189 Sie liefern kein endgültiges Datenblatt, das ich finden kann, außer diesem: learn.adafruit.com/system/assets/assets/000/010/136/original/… das wenig Informationen enthält und ist nicht das genaue Modell, das sie verkaufen (obwohl sie darauf verweisen)
Kaufen Sie keinen Sensor ohne definitives Datenblatt.