Raspberry Pi Pico: Erschütterung oder Vibration erkennen mit dem Vibration Sensor 801S

Erschütterungen oder Vibrationen erkennen basiert auf dem Prinzip der Erkennung von Bewegungsänderungen. Beispielsweise durch Beschleunigung, Bremsung oder Druck. Der Vibration Sensor vom Typ 801S ist ein Sensor, mit dem man Erschütterungen oder Vibrationen erkennen kann.

Das Vibration Sensor Modul vom Typ 801S hat den Vorteil, dass sich der eigentliche Erschütterungssensor mit etwas Elektronik und Anschlüssen auf einer Platine befindet. Die Platine hat zusätzlich in der Mitte eine Bohrung, mit der sie mittels einer Schraube irgendwo befestigt werden kann. Genau das ist der Knackpunkt. Wenn man das Modul prüft, dann muss man es schon in die Lage und Position bringen, in der es auch in der praktischen Anwendung kommt. Denn nur dann wirst Du feststellen können, ob bei einer bestimmten Kraft oder Bewegung eine Vibration ausgelöst wird, die auf diese Weise detektiert werden kann.

Im folgenden Aufbau und Programmcode verwenden wir das Vibration Sensor Modul vom Typ 801S. Wir kalibrieren den Sensor, um den digitalen Ausgang zu nutzen. Und wir probieren unterschiedliche Programmcodes aus, um die sinnvolle Nutzung herauszufinden.

Aufbau und Bauteile

Raspberry Pi Pico: Erschütterung oder Vibration erkennen mit dem Vibration Sensor 801S

Raspberry Pi Pico 801S
Pin 38 GND GND
Pin 36 3V3 +3,3V VCC
Pin 31 GPIO 26 A0
Pin 29 GPIO 22 D0

Programmcode zum Testen und Kalibrieren des digitalen Signalausgangs

In diesem Programmcode wird nur der digitale Signalausgang des Sensormoduls abgefragt. Der Programmcode dient auch nur zum Testen und Kalibrieren mit Hilfe des Potentiometers.

# Bibliotheken laden
from machine import Pin, Timer
from utime import sleep

# Initialisierung von GPIO als Eingang
sensor = Pin(22, Pin.IN)

print('Ruhe')

# Wiederholung (Endlos-Schleife)
while True:
    value = sensor.value()
    if value == 1:
        print('Bewegung')
        sleep(3)
        value = sensor.value()
        if value == 0:
            print('Ruhe')

Der Nachteil dieses Programmcodes ist, dass eine Erschütterung als solche nicht erkannt wird, wenn die Zustandsänderung vom Signalausgang nicht erkannt wird, weil sie in dem Moment der Änderungen nicht abgefragt wurde.

Programmcode zum Testen des analogen und digitalen Signalausgangs

In diesem Programmcode wird der digitale und der analoge Signalausgang des Sensormoduls abgefragt.
Das analoge Signal ist dann sinnvoll, wenn die Kalibrierung durch das Potentiometer auf dem Modul nicht möglich ist oder es darum geht die Intensität einer Erschütterung zu messen.

# Bibliotheken laden
from machine import Pin, ADC
from utime import sleep

# Initialisierung ADC-Eingang
sensor_a = ADC(0)

# Initialisierung von GPIO als Eingang
sensor_d = Pin(22, Pin.IN)

print('Ruhe')
print()

# Wiederholung (Endlos-Schleife)
while True:
    value_a = sensor_a.read_u16()
    print('ADC:', value_a)
    value_d = sensor_d.value()
    if value_d == 1:
        print()
        print('Bewegung')
        print()
    sleep(0.2)

Der Nachteil dieses Programmcodes ist, dass eine Erschütterung als solche nicht erkannt wird, wenn die Zustandsänderung an den Signalausgängen nicht erkannt wird, weil sie in dem Moment der Änderungen nicht abgefragt wurden.

Programmcode mit Entprell-Funktion und Interrupt-Auswertung

In diesem Programmcode wird nur der digitale Signalausgang des Sensormoduls abgefragt. Die Software-seitige Auswertung des Sensors erfolgt mit einem Interrupt zur Erkennung einer Zustandsänderung und einem Timer-Auslösung zur Vermeidung mehrfacher Auslösungen (Entprellen) in kurzer Zeit.

# Bibliotheken laden
from machine import Pin, Timer

# Initialisierung von GPIO als Eingang
sensor = Pin(22, Pin.IN, Pin.PULL_DOWN)

# Timer erstellen
timer = Timer()

# Funktion: Meldung/Alarmierung
def alarm(timer):
    print()
    print('Bewegung')
    print()
    print('Ruhe')

# Funktion: Vibration
def shake(pin):
    # Entprellfunktion: Timer setzen (200 ms)
    timer.init(mode=Timer.ONE_SHOT, period=200, callback=alarm)

# Initialisierung Interrupt
sensor.irq(trigger=Pin.IRQ_FALLING, handler=shake)

print('Ruhe')

Dieser Programmcode hat den Vorteil, dass er ohne Endlos-Schleife auskommt und somit universeller einsetzbar ist.

Experimente

Wie kann man Vibrationen sinnvoll auslösen?

  • Du kannst den Sensor schütteln.
  • Du kannst mit dem Finger gegen den Sensor schnippen.

In der Regel wird nicht der Sensor selber, sondern ein Gegenstand oder das Objekt erschüttert. Deshalb wird man das Sensor-Modul am Objekt befestigen müssen. Möglichst direkt und entkopplungsfrei.

Beobachtungen und Erklärungen

Wenn man Vibrationen über den digitalen Signalausgang detektieren will, dann wird man feststellen, dass während der Dauer einer tatsächlichen Erschütterung, diese mehrmals erkannt wird. Aus diesem Grund wird man nach der Erkennung einer Erschütterung eine Pause für die zu erwartende Zeit der Erschütterung im Programmcode vorsehen müssen. Wie lange diese Zeit sein muss, musst Du in der Praxis ausprobieren.

Beim Experimentieren wirst Du feststellen, dass nicht jede von Dir verursachte Erschütterung erkannt wird. Das wird daran liegen, dass die Sensor-Kalibrierung von Dir nicht empfindlich genug eingestellt ist. Es kann aber auch noch daran liegen, dass die Erschütterung in einem Zeitraum zweier Software-seitiger Auswertungen des Signaleingangs stattgefunden hat. Wenn jede Erschütterung exakt festgestellt werden muss, dann sollte der Programmcode mit der IRQ-Auswertung verwendet werden. Die Lösung mit der Endlos-Schleife ist in der Praxis wenig brauchbar.

In der Praxis wird der digitale Signalausgang des Sensor-Moduls zum Erkennen von Bewegungsänderungen und Vibrationen ausreichend sein. Aber dann bitte mit Interrupt (IRQ). Für kaum merkliche Vibrationen wird man den analogen Ausgang abfragen müssen. Das muss dann aber in kurzen Abständen erfolgen und der Raspberry Pi Pico darf dann im Prinzip nichts anderes mehr tun.

Darf es ein bisschen mehr sein?

Der Vibration Sensor vom Typ 801S und das dazugehörige Modul sind vergleichsweise teuer. Für einfache Anwendungen tut es vielleicht auch das Vibration Switch Module vom Typ KY-002.

Weitere verwandte Themen:

Teilen:

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

Das "Elektronik-Set Pico Edition" ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Entprellen und Zustände anzeigen
  • LED mit Taster einschalten und ausschalten
  • Ampel- und Lauflicht-Steuerung
  • Elektronischer Würfel
  • Eigene Steuerungen programmieren

Online-Workshop Mehr Informationen Elektronik-Set jetzt bestellen

Programmieren mit dem Raspberry Pi Pico
Online-Workshop

Programmieren mit dem Raspberry Pi Pico

Online-Workshop mit einer Einführung ins Physical Computing mit Leuchtdioden, Taster und Temperatursensor.

  • Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython ohne Vorkenntnisse
  • Optimaler Einstieg, um eigene Ideen zu verwirklichen und Steuerungen zu programmieren
  • Inklusive Elektronik-Set mit einem Raspberry Pi Pico, Zubehör und elektronischen Bauteilen

Für Ihre Fragen zu unseren Online-Workshops mit dem Raspberry Pi Pico besuchen Sie unseren PicoTalk (Online-Meeting). (Headset empfohlen)

Zum PicoTalk Mehr Informationen Am Online-Workshop teilnehmen

Elektronik-Set Pico Edition
Elektronik-Set Pico Edition

Hardware-nahes Programmieren mit dem Raspberry Pi Pico

Das "Elektronik-Set Pico Edition" ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Entprellen und Zustände anzeigen
  • LED mit Taster einschalten und ausschalten
  • Ampel- und Lauflicht-Steuerung
  • Elektronischer Würfel
  • Eigene Steuerungen programmieren

Online-Workshop Mehr Informationen Elektronik-Set jetzt bestellen