Sunfounder Sensor Kit – Der Hall-Switch-Sensor

v.l.n.r: Hall-Switch-Sensor, Analoger Hall-Sensor, erweiterter analoger Hall-Sensor

v.l.n.r: Hall-Switch-Sensor, Analoger Hall-Sensor, erweiterter analoger Hall-Sensor

Nach meinem Einleitungstext über das 37-sensor-kit der Firma Sunfounder folgt auch gleich das erste Experiment und die erste Herausforderung. Die Kommentare in den Online-Shops haben nicht zu viel versprochen. Die Dokumentation ist wirklich abenteuerlich. Schaltpläne sucht man vergeblich, die Code-Beispiele (auf der beiliegenden CD) sind alle in C und der Anschluss der Bauteile ist mitunter relativ „mutig“ (LED ohne Vorwiderstand) und die Bezeichnung der GPIO-Pins im Handbuch ist auch mit Vorsicht zu genießen. Blind zusammenstecken und hoffen, dass alles klappt, wird hier nicht funktionieren. Mitdenken ist gefragt.

Das erste Experiment im Handbuch beschäftigt sich mit Hall-Sensoren, mit denen man Magnetfelder detektieren kann. Es gibt im Kit 3 Hall-Sensoren. Sie sind zu erkennen an dem flachen, schwarzen Bauteil mit 3 Anschlüssen, welches etwas über die Platine hinausragt.

v.l.n.r: Hall-Switch-Sensor, Analoger Hall-Sensor, erweiterter analoger Hall-Sensor

v.l.n.r: Hall-Switch-Sensor, Analoger Hall-Sensor, erweiterter analoger Hall-Sensor

Zunächst soll der digitale Hall-Sensor benutzt werden. Er ist zu erkennen an den beiden SMD-Bauteilen auf der Platine (Widerstand und LED).

Außerdem wird eine 2-Farben-LED, das Steckbrett und ein paar Jumper-Kabel verwendet. Ich empfehle außerdem dringend, noch 2 Vorwiderstände für die LED einzubauen. Zwar ist der Strom, den die GPIO-Pins abgeben, begrenzt, aber ohne Widerstand ist eine LED quasi ein Kurzschluss und auf Dauer kann das nicht gut für die LED oder gar den Raspberry sein.

Laut Handbuch soll das ganze nun wie folgt verdrahtet werden:
– GPIO0 => Hall-Sensor-Signal
– GPIO1 => Dual-Color-LED „S“
– Gnd => Hall-Sensor-Ground
– Gnd => Dual-Color-LED ground
– 3.3V => Hall-Sensor-„+“
– 3.3V => Dual-Color-LED +

Ich verwende einen Raspberry Pi Version 2 und dort entspricht das den folgenden Pins:

GPIO0 (Anleitung) => GPIO17 (BCM-Layout) => Pin 11 (Board Layout)
GPIO1 (Anleitung) => GPIO18 (BCM-Layout) => Pin 12 (Board Layout)

Wer hier nur Bahnhof versteht, sollte sich vorher unbedingt mit den unterschiedlichen Bezeichnungen der Pins beschäftigen.

Außerdem verwende ich noch zwei Vorwiderstände zwischen dem GPIO und der LED, sowie zwischen 3.3V und der LED.

Zusammengesteckt sieht das ganze dann so aus:

DSCN3283

Das Programm dazu soll folgendes bewirken:
– Wenn kein Magnetfeld vom Hall-Sensor erkannt ist, soll die LED grün leuchten
– Sobald sich ein Magnet in der Nähe des Sensors befindet, soll die LED rot leuchten
– Außerdem soll ein Text („Magnetfeld erkannt“) ausgegeben werden.
– Entfernt man den Magneten wieder, soll die LED wieder grün leuchten
– Außerdem soll auch hier wieder eine Nachricht ausgegeben werden.

Auf der CD befindet sich nur Programmcode in C. Sunfounder hat aber ein Github-Repository, wo man Code-Beispiele in Python findet:
https://github.com/sunfounder/Sunfounder_SensorKit_Python_code_for_RaspberryPi. Die erste Version des Codes arbeitete mit einer Endlosschleife, welche ständig die Messwerte ausgegeben hat. Schöner wäre allerdings eine Ausgabe nur im Falle einer Änderung des Zustandes. Sundounder hat meinen Code-Vorschlag deshalb übernommen und nun nutzt das erste Beispiel einen Interrupt, sobald sich der Zustand des Pins am Hall-Sensor ändert. Zum Zeitpunkt dieses Blog-Posts fehlte allerdings noch der Teil, der die LED schaltet. Deshalb hier einmal der vollständige Quellcode:

#!/usr/bin/env python
import RPi.GPIO as GPIO

HALL = 11 #Hall sensor is connected to pin 11 (BOARD-Layout!)
LED  = 12 #LED is connected to pin 12 (BOARD-Layout!)

GPIO.setmode(GPIO.BOARD) #Set pin-layout to BOARD
GPIO.setwarnings(False)

GPIO.setup(HALL,GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(LED, GPIO.OUT)

GPIO.output(LED, GPIO.LOW) #red LED off, green is constantly on

#This function will be called if a change is detected
def change_detected(channel):
    if GPIO.input(HALL) == GPIO.LOW:
        print 'Magnetic material detected: LED on'
        GPIO.output(LED, GPIO.HIGH) #LED on
    else:
        print 'No magnetic material: LED off'
        GPIO.output(LED, GPIO.LOW) # LED off

# Register event-listener on falling and raising
GPIO.add_event_detect(HALL, GPIO.BOTH, change_detected, bouncetime=25)

try:
    while True:
        pass

except KeyboardInterrupt:
    print "Ctrl-C - quit"

finally:
    GPIO.cleanup()

Und hier noch ein Video von dem ganzen in Aktion:

2 Gedanken zu „Sunfounder Sensor Kit – Der Hall-Switch-Sensor

  1. Micha

    Hallo, in der Beschreibung steht: 3.3V => Dual-Color-LED +
    die LED müßte folgende Anschlüsse haben (kann mich aber irren, bin ein Anfänger):
    links –
    mitte +
    rechts S(ignal)
    Im Bild ist der rechte Pin mit +3V verbunden.
    Ist das korrekt? (egal)

    Antworten
    1. martin Beitragsautor

      Hallo,

      Ich bin mir nicht mehr sicher, aber ich glaube ich habe das damals so gemacht, dass die grüne LED immer leuchtet und die rote über den digitalen Ausgang der Raspberry gesteuert wird.

      Zur Dual-Color-LED:
      sf-rg-led Die hat 3 Anschlüsse: G (Ground), R (Red) und Y (Yellow). Im Prinzip stecken da 2 LEDs drin, die sich eine Kathode teilen. G muss also an Minus und je nachdem, welche der beiden anderen du an Plus legst, leuchtet die LED mal rot und mal grün oder beides gleichzeitig.

      Achtung: Sunfounder hat jede menge Fallstricke eingebaut:

      1) Die Anschlüsse des Boards sind nicht parallel zu denen der LED. Dort ist die Kathode nämlich in der Mitte. Auf der kleinen Platine läuft der linke Pin also zum mittleren Beinchen der LED und der mittlere Pin läuft zum linken Beinchen. Das ist bei mehreren Platinen so. Also bloß nicht auf das Datenblatt des Bauteiles verlassen, sondern immer in der Anleitung gucken, welcher Pin welche Bedeutung hat.

      2) Auf der Platine ist ein SMD Widerstand eingebaut. Man könnte jetzt denken: Prima, dann brauch ich keinen eigenen. Aber das ist FALSCH. Der aufgelötete „Widerstand“ hat 0 (NULL!) Ohm. Das sieht man aber nur, wenn man genau hinguckt. Also auf jeden Fall immer einen eigenen Vorwiderstand mit einbauen.

      3) Sunfounder nimmt das ganze mit den 3V und 5V nicht so genau. Das liegt wohl daran, dass die eher aus der Arduino-Welt kommen. Der Raspberry verträgt an den Eingängen aber nur 3V, bei 5V könnte er beschädigt werden. Ich würde bei allen Schaltungen deshalb ausschließlich 3V benutzen, auch wenn in der Anleitung evtl. 5V steht. Bisher lief damit auch jeder Sensor, den ich probiert habe.

      Es ist ziemlich ärgerlich, dass den Sensoren keine Schaltpläne und Datenblätter beiliegen. Es gibt allerdings inzwischen ein neues Sensor-Kit, da ist die Dokumentation wesentlich besser.

      Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.