SW-420 Vibrationssensor mit dem Raspberry Pi Pico

Erfahre, wie du den SW-420 Vibrationssensor mit dem Raspberry Pi Pico verbindest und programmierst. Kreiere daraus einen Vibrationsalarm oder andere spannende Projekte!

Was brauchst du?

  • Raspberry Pi Pico
  • SW-420 Vibrationssensor
  • Breadboard & Jumper-Kabel
  • LED (optional)
  • Piezo-Buzzer (optional)

Schritt 1: Anschließen des SW-420 an den Raspberry Pi Pico

Der SW-420 hat zwei Pins für die Spannungsversorgung (VCC und GND) sowie einen digitalen Ausgang (DO). Der digitale Ausgang liefert entweder ein HIGH (Vibration wurde erkannt) oder ein LOW (keine Vibration).

SW-420 PinRaspberry Pi Pico
VCC3.3V (Pin 36)
GNDGND
D0GPIO 20

Schritt 2: Einfaches erkennen einer Vibration

Mit diesem einfachen Code kannst du testen, ob der Sensor richtig angeschlossen ist. Der Code überprüft laufend, ob eine Vibration erkannt wurde. Zum programmieren kannst du zum Beispiel Thonny verwenden!

from machine import Pin
import time

sensor = Pin(20, Pin.IN)

while True:
    if sensor.value() == 1:
        print("Vibration erkannt!")
        time.sleep(1)

Erklärung des Codes:

  • from machine import Pin: Importiert das Pin-Modul, um GPIOs zu verwenden.
  • sensor = Pin(20, Pin.IN): Setzt GPIO 20 als Eingang, an dem der Sensor hängt.
  • sensor.value(): Gibt den aktuellen Zustand des Sensors zurück – 1 (HIGH), wenn eine Vibration erkannt wird.
  • print("Vibration erkannt!"): Gibt bei erkannter Erschütterung eine Meldung aus.
  • time.sleep(1): Wartet eine Sekunde, bevor erneut geprüft wird – das verhindert zu häufiges Auslösen bei starken Vibrationen.

Klopfe nun auf den Tisch oder aufs Breadboard, um eine Reaktion auszulösen!

Schritt 3: Empfindlichkeit des SW-240 einstellen

Die Empfindlichkeit des SW-420 Sensors lässt sich direkt am Modul über ein kleines blaues Potentiometer (Drehregler) einstellen. Dreht man im Uhrzeigersinn, reagiert der Sensor empfindlicher auf leichte Vibrationen. Dreht man gegen den Uhrzeigersinn, wird er unempfindlicher und reagiert nur noch auf stärkere Erschütterungen.

Schritt 4: Vibrationserkennung per Interrupt

Die bisherige einfache Lösung funktioniert zwar, hat aber einen Nachteil: Der Mikrocontroller überprüft den Sensor ständig in einer Schleife (Polling), was unnötig Ressourcen verbraucht und bei schnellen Vibrationen möglicherweise nicht schnell genug reagiert.

Besser ist es, den Sensor per „Interrupt“ auszulesen. Dabei registriert man eine Funktion, die automatisch aufgerufen wird, sobald eine Vibration erkannt wird – ganz ohne ständiges Nachfragen im Code.

from machine import Pin
import time

sensor = Pin(20, Pin.IN)

cooldown_ms = 2000  
last_trigger_time = 0

def vibration(pin):
    global last_trigger_time
    now = time.ticks_ms()
    
    if time.ticks_diff(now, last_trigger_time) > cooldown_ms:
        last_trigger_time = now
        print("Vibration erkannt!")

sensor.irq(trigger=Pin.IRQ_FALLING, handler=vibration)

while True:
    pass

Erklärung des Codes:

  • Interrupt (IRQ): Statt ständig nachzufragen, registrieren wir eine Funktion (vibration), die bei Vibration automatisch aufgerufen wird.
  • Pin.IRQ_FALLING: Bedeutet, dass reagiert wird, wenn das Sensorsignal von HIGH auf LOW fällt – das passiert bei einer Vibration.
  • Cooldown-Funktion: Mit time.ticks_ms() und ticks_diff() wird sichergestellt, dass der Sensor nicht mehrmals hintereinander sofort auslöst.
  • LED und Buzzer: Beide schalten sich für 0,5 Sekunden ein, wenn eine Erschütterung erkannt wird.
  • while True: pass: Die Endlosschleife ist leer, weil die Reaktion nun automatisch über den Interrupt läuft.

Schritt 5: Vibrationsalarm mit LED und Buzzer

Nachdem wir den Sensor bereits effizient per Interrupt auslesen, können wir nun das Projekt etwas erweitern: In dieser Version wird bei jeder erkannten Vibration nicht nur eine Meldung ausgegeben, sondern auch eine LED zum Blinken gebracht und ein Buzzer piept – ideal für ein kleines Alarmsystem oder zur visuellen Rückmeldung bei Bewegung.

Hier findest du ausführliche Anleitungen für das Ansteuern eines Piezo-Buzzers mit dem Pi Pico auf unserem Blog!

Hier ist der vollständige Code für die Variante mit LED und Piezo-Buzzer:

from machine import Pin
import time

# Pins definieren
sensor = Pin(20, Pin.IN)  # Eingang für den Vibrationssensor
led = Pin(16, Pin.OUT)    # Ausgang für die LED
buzzer = Pin(17, Pin.OUT) # Ausgang für den Piezo-Buzzer

# Cooldown-Zeit: 2 Sekunden (zum Entprellen)
cooldown_ms = 2000  
last_trigger_time = 0

# Funktion, die bei Vibration ausgelöst wird
def alarm(pin):
    global last_trigger_time
    now = time.ticks_ms()
    
    # Nur auslösen, wenn seit letzter Aktion genug Zeit vergangen ist
    if time.ticks_diff(now, last_trigger_time) > cooldown_ms:
        last_trigger_time = now
        for _ in range(3):
            led.value(1)
            buzzer.value(1)
            time.sleep(0.2)
            led.value(0)
            buzzer.value(0)
            time.sleep(0.2)

# Interrupt aktivieren (FALLING-Flanke → Vibration erkannt)
sensor.irq(trigger=Pin.IRQ_FALLING, handler=alarm)

# Haupt-Loop – durch Interrupts ist keine ständige Überwachung nötig
while True:
    pass

Diese Version eignet sich perfekt als einfacher Vibrationsalarm, etwa zur Überwachung von Türen, Maschinen oder empfindlichen Flächen. Sie funktioniert ganz ohne Abfrage und reagiert sofort, sobald Bewegung erkannt wird.

Fazit

Der SW-420 Vibrationssensor lässt sich mit dem Raspberry Pi Pico einfach und vielseitig einsetzen – von der einfachen Erkennung bis zur reaktiven Alarmfunktion mit LED und Buzzer. Hier findest du weitere spannende Raspberry Pi Pico Projekte auf unserem Blog!