Reed-Schalter funktioniert nicht

  • Hallo zusammen,

    ich hab ein kleines Problem das meine Reed-Schalter nicht wirklich funktionieren.

    Ich hab mir zusätzlich "Raspberry Pi Das umfassende Handbuch" gekauft. In dem steht, dass ein Kabel des Reedschalter an einem GPIO Eingang deklariert werden soll und das andere
    Kabel gegen Masse oder 3,3V legen soll. Masse und 3,3V soll lediglich davon abhängen ob die logische 1 im geschlossenen Zustand oder offenen Zustand ist.

    Das sind die Reedkontakt [Anzeige] die ich gekauft habe.

    Der Pythoncode sieht wie folgt aus:

    Zitat

    import time , sys
    import RPi . GPIO as GPIO

    GPIO . setmode ( GPIO . BOARD )
    GPIO . setup (15 , GPIO .IN , pull_up_down = GPIO . PUD_UP )

    while True :
    input = GPIO . input (15)
    print ( input )
    time . sleep (1)


    Python gibt mir dauerhaft eine 1 aus, egal ob es Kontakt hat oder nicht. Ich hab auch versucht die Kabel zu tauschen, gegen masse sowie 3,3V.

    Kann mir jemand Reed Kontakte empfehlen die für den Raspberry Pi 2B funktionieren oder mache ich einen Fehler den ich übersehe?

  • Nun ist Gpio15 gerade Uart RxD, kann sein daß der Uart den blockiert.

    Nimm mal einen anderen Pin, aber nun nicht gerade die 14, 2, 3 oder andere mit speziellen Funktionen belegte Pins. Die 21, 20 oder 16 ganz am Ende der Leiste bieten sich an.

  • Hallo Timm,


    Nun ist Gpio15 gerade Uart RxD, kann sein daß der Uart den blockiert.


    Nö, das hast Du etwas übersehen.

    Die Zeile

    Code
    GPIO . setmode ( GPIO . BOARD )

    sorgt dafür, dass die Bezeichnung der Pins verwendet wird, die sich aus der physikalischen Anordnung ergibt. Die eine Leiste hat ungerade Nummern, die andere derade Nummern. Der speziell gekennzeichnete Pin trägt die Nummer 1. Deutlicher wird es z.B. hier.

    Du hättest allerdings recht, wenn dort gestanden hätte

    Code
    GPIO . setmode ( GPIO . BCM )

    (wobei mir der Leerraum vor und nach dem Punkt schon sehr stylisch vorkommt... Aber ich mag eh kein Python, was soll's)

    Welcher GPIO-Pin genommen wird, ist letztlich egal. Es darf nur keine andere Anwendung eine Alternaiv-Funktionalität aktiviert haben.

    Trafel21: Kannst Du mal Deine Schaltung posten? Das Tool Fritzing ist dafür sehr gut geeignet.

    Code
    sudo apt-get install fritzing


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    2 Mal editiert, zuletzt von Andreas (15. Oktober 2017 um 11:45)

  • Hallo Timm,


    Jetzt wäre noch interessant zu wissen, an welchem Pin der Readkontakt nun wirklich hängt.

    RICHTIG! Und deswegen habe ich ja auch nach der Schaltung gefragt. Denn einen Sensor, der an einem anderen Pin angeschlossen ist, vermag keine noch so ausgeklügelte Software auszulesen...

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • also bevor hier an der Software und dem Portdurcheinander gerätselt wird sollte der TO erst mal die Reedschalter mit einem Multimeter prüfen

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (28. März 2016 um 21:56)


  • also bevor hier an der Software und dem Portdurcheinander gerätselt wird sollte der TO erst mal die Reedschalter mit einem Multimeter prüfen


    ...aber dann mit 2. Person. TE misst, 2. Person spielt Magnetschieber ... :D

  • Danke für die Antworten und sorry für meine späte.

    Einen Multimeter besitze ich leider nicht.
    Ich bin leider ein Laie was Linux und den Raspberry betrifft. den Befehl sudo apt-get fritzing hab ich im Terminal ausgeführt, kam eine "invalid operation" zurück. ^^,

    Ich hab mich nach dem diesem Bild gehalten was die PINS betrifft:

    GPIO_Pi2.png

    Dementsprechend hab ich ihn auch gesteckt.

    12932556_674783622664534_4674973857479914595_n.jpg?oh=00c8c3fe4a36b5514200d9900318d1a6&oe=577A1C2A

  • Hi,

    und da sieht man Deinen Faux-Pas auch schon ;)


    In Deinem Programm legst Du mit "GPIO.setmode(GPIO.BOARD)" fest, dass Du die Pins über die physikalische Position am Gehäuse adressieren möchtest, d.h. es gelten dann die Nummern aus der Spalte "Pin#"

    Der Reed-Kontakt im Foto ist also über Pin1 und Pin10 (welcher GPIO15 ist) an den Raspi angeschlossen, in Deinem Programm sprichst Du aber Pin15 (GPIO22) an dem gar nichts hängt.


    Lösungsversionen:
    1.) Du kannst nun entweder die Pin-Nummern korrigieren (also statt 15 müsste dann halt 10 im Quelltext stehen).
    oder
    2.) Du legst mit "GPIO.setmode(GPIO.BCM)" fest, dass die Adressierung anhand der "Broadcom-SOC-Channel-Nummern" (also den GPIO-Nummern) erfolgen soll, dann wäre der restliche Code bereits richtig adressiert, da GPIO15 ja der von Dir benutzte physikalische Pin 10 ist.
    oder
    3.)
    Du steckst den einen Anschluss des Reed-Kontakts vom derzeitigen Pin 10 (GPIO 15) auf den Pin 15 (GPIO22).


    Das Beispiel ist ja von Seite 527 ff. (Aufl. 2 des erwähnten Buchs) und hier wird im Text vom GPIO15 gesprochen, inosfern wäre es korrekt hier Lösungsvariante 2 zu nutzen. Es dabei um einen kleinen Fehler in dem Buch, von denen es noch en paar gibt (nicht nur die hier erwähnten: http://pi-buch.info/?page_id=183). Ich persönlich sammle die Sachen die mir so auffallen und schicke sie den Autoren, dann können sie die Dinge in einer der nächsten Auflagen berücksichtigen. In diesem Fall zeigt sich aber auch, dass die Abbildungen die in dem Buch als Schaltplan genutzt werden, leider etwas ungünstig sind.


    Schau Dir noch mal an, was man mit der Zeile "GPIO.setmode(GPIO.BOARD)" bzw. "GPIO.setmode(GPIO.BCM)" macht. Es ist wichtig die richtigen Pins zu nutzen, sonst kann es nicht nur zu nicht funktionierenden Programmen, sondern auch zu zerstörten Raspis kommen. Im dem Buch (2. Aufl.) findest Du ab Seite 356 entsprechende Erläuterungen zu den Pins, ab Seite 720 findest Du Erläuterungen zur Nutzung des Python-Moduls RPi.GPIO (welches auch die setmode-Methode mitbringt).

    Welche Nummerierung man nutzt ist letztlich egal, aber es muss halt konform mit den angschlossenen Dingen und dem Quellcode sein. Ich persönlich nutze lieber die physikalischen Pin-Nummern, aber ich kann mir gut vorstellen, dass andere, für ihre jeweiligen Nutzungsformen die BCM-Bezeichnungen bevorzugen. In jedem Fall muss man sich aber bewusst sein, dass es beide Nummerierungsvarianten gibt und lieber dreimal gucken/prüfen/nachfragen. Und wie gesagt, das Buch hat leider noch an der ein oder anderen Stelle ähnliche Kleinigkeiten zu bieten, also ruhig auch kritisch lesen ;)


    Schau Dir aber bitte den Schaltplan aus dem Buch (Abb. 15.24) nochmal an - es sollte Dir sofort auffallen, dasss dort drei Pins am Raspi genutzt werden, bei Dir aber nur zwei. Außerdem siehst Du dort zwei Widerstände (R1 und R2). Im Text gibt es einen Hinweis darauf, dass man sich R1 sparen kann, wenn man einen internen Pull-Up-Widerstand im RasPi aktiviert hat (Hast Du?). Mit R2 soll der Strom begrenzt werden, denn der Reed-Kontakt selbst hat keinen großen Widerstand, besteht er im geschlossenen Zustand im Grunde nur aus einem Draht. Ob Du den Widerstand R2 in Deinem Versuchsaufbau hast, ist dem Foto nicht zweifelsfrei zu entnehmen, aber ich würde eher denken, dass Du keinen hast, oder?


    HTH & Gruß & Viel Spaß noch beim Basteln
    JC

    --
    "I know the human being and fish can coexist peacefully."
    G. W. Bush, 29. September 2000

    Einmal editiert, zuletzt von JCorey (29. März 2016 um 03:49)

  • Hallo Trafel21,


    Einen Multimeter besitze ich leider nicht.


    ... das vereinfacht aber ganz viel. Insbesondere, wenn Du ernsthaft etwas mit dem Raspberry Pi machen möchtest, dann ist das eine sehr sinnvolle Investition.


    Ich bin leider ein Laie was Linux und den Raspberry betrifft. den Befehl sudo apt-get fritzing hab ich im Terminal ausgeführt, kam eine "invalid operation" zurück. ^^,


    Da habe ich doch glatt ein install vergessen. Der korrekte Aufruf lautet - vorausgesetzt, Du hast eine stabile Internet-Vernbindung:

    Code
    sudo apt-get install fritzing

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.


  • Einen Multimeter besitze ich leider nicht.

    Das sollte die erste Anschaffung sein VOR dem Basteln.

    Ein Multimeter kann PIs retten und kostet einfach weniger als ein PI, Spannungsmessung, Kurzschlussmessung alles vor dem Einschalten!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Ich hab mich nach dem diesem Bild gehalten was die PINS betrifft:

    Und? Hab ichs nicht gesagt! Er geht auf Gpio15, was der RxD ist, nicht auf den physischen Pin 15.

    Also, Pin-Nummern falsch konfiguriert, GPIO . setmode ( GPIO . BOARD ) muß dann wohl GPIO . setmode ( GPIO . BCM ) ??? sein.

    Nimm lieber einen stino-Pin, der nicht mit einer alternativen Funktion belegt ist, wie den Gpio21 ganz unten rechts.

  • Hallo Timm,

    Und? Hab ichs nicht gesagt! Er geht auf Gpio15, was der RxD ist, nicht auf den physischen Pin 15.


    :thumbs1: Ein guter Riecher!

    ... Aber:


    Nimm lieber einen stino-Pin, der nicht mit einer alternativen Funktion belegt ist, wie den Gpio21 ganz unten rechts.


    Einen solchen GPIO-Pin gibt es nicht. Alle sind mit Alternativ-Funktionen versehen. Es geht also darum, den Pin zu wählen, der von Trafel21 aufgrund seiner Alternativ-Funktion weder in der /boot/config.txt noch über irgendwelche nachgeladenen Module reserviert wurde. Und das kann nur Trafel21 wissen oder uns verraten.

    Die einen brauchen UART - dia anderen nicht.
    Die einen brauchen I2C - die anderen nicht.
    Die einen brauchen SPI - die anderen nicht.
    Die einen brauchen oneWire - die anderen nicht.
    ...

    Also bleibt es zunächst dabei, dass alle Pins genutzt werden können, außer den berühmten Ausnahmen, die die Regel bestätigen.

    Ich mache es in der Regel so, dass ich eine LED mit passendem Vorwiderstand anschließe und mit einem Testprogramm zum Leuchten bringe. Kommt beim Ansteuern dieses GPIO-Pins eine Fehlermeldung, dass der Pin anderweitig vergeben wurde, dann kommt ein anderer dran. Bis es mal passt.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo Timm,


    Ich dürfte hier auf mein erstes Programm auf dem Raspi verweisen => http://www.lazarusforum.de/viewtopic.php?…c65d9ee8072b2ad, welches genau das macht: Gpios testen.

    Leider hat es noch eine Macke und genehmigt sich über Stunden immer mehr RAM-Speicher... :(


    hmm, tja, mit der Zeile

    Code
    txt := StringOfChar('I', Abs(scan));


    reservierst Du zwar Speicher - gibst ihn nach der Belegung in der darauffolgenden Zeile

    Code
    g_status.Panels[1].Text := txt;  // <= hier ist der Übeltäter


    aber nie wieder frei.

    Und wenn die Prozedur verlassen wird, existiert die Adresse dorthin auch nicht mehr.

    Ich würde Die Caption- oder Text-Eigenschaft eines Panels nutzen und diese direkt belegen. Soll sich das Betriebssystem doch um den Speicher kümmern.

    Kennst Du Delphipraxis? Dort sind richtig gute Einsteiger-Tutorials - u.a. auch so Sachen mit Speicher reservieren und wieder freigeben. Dann funktioniert das auch mit Lazarus besser.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (30. März 2016 um 09:12)

  • Ich hab mich für die 1. Variante entschieden, welche nun Tadellos funktioniert. Danke für deine Hilfe. :)

    Ich hatte mir den Schaltplan angeschaut, leider hab ich nur bedingt Ahnung von Elektrotechnik. Sollte ich mir, ohne die Widerstände, sorgen um meinen PI machen? Wie du geschrieben hast, hab ich keine Widerstände.


  • Ich hatte mir den Schaltplan angeschaut, leider hab ich nur bedingt Ahnung von Elektrotechnik.

    Das ist eher ungünstig


    Sollte ich mir, ohne die Widerstände, sorgen um meinen PI machen? Wie du geschrieben hast, hab ich keine Widerstände.

    JA mache dir Sorgen, wenn irgendein Programm Amok läuft oder ein Kernelupdate kommt und deinen GPIO auf Output low schaltet dann brennt die direkte Versorgung aus 3,3V ohne Widerstand deinen Prozzi durch!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Okay, dann werde das mal als nächstes angehen. Tutorials wie man Widerstände installiert gibt es bestimmt genüge.

    Kann ich mit dem PI auch irgendwie einen Alarmsound abspielen ? War am überlegen über ein Relais eine Piezosirene zu steuern, das wäre nur ein sehr heikler Weg für mich. :lol:
    Hätte jemand eine einfacheren Vorschlag für einen Alarmsound?

    :danke_ATDE:

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!