5101+ beoordelingen
Bestel voor 16:00 voor dezelfde dag verzending
14 dagen retour
NL
Particulier
Zakelijk
In dit project leer je hoe je een geluidsensor gebruikt om een motor te bedienen. De geluidsensor detecteert geluiden (bijvoorbeeld een klap) en stuurt een signaal naar de Raspberry Pi, waarmee een motor wordt geactiveerd.
GPIO | Pin # | Functie | Aansluiting |
GPIO 17 | Pin 11 | Digitale invoer | Geluidssensor DO |
GPIO 27 | Pin 13 | Stepper motor | ULN2003 IN1 |
GPIO 22 | Pin 15 | Stepper motor | ULN2003 IN2 |
GPIO 23 | Pin 16 | Stepper motor | ULN2003 IN3 |
GPIO 24 | Pin 18 | Stepper motor | ULN2003 IN4 |
3.3V | Pin 1 | Voeding | Geluidssensor VCC |
5V | Pin 2 | Voeding | ULN2003 VCC |
GND | Pin 6 | Aarde (Ground) | Geluidssensor en ULN2003 |
Open de Thonny Python IDE en voer de volgende code in:
import RPi.GPIO as GPIO
from time import sleep
from collections import deque
# Geluidssensor en motor-pinnen
IN1 = 17
IN2 = 27
IN3 = 22
IN4 = 23
SOUND_SENSOR_PIN = 24
# GPIO instellen
GPIO.setmode(GPIO.BCM)
GPIO.setup(SOUND_SENSOR_PIN, GPIO.IN) # Geluidssensor als input
GPIO.setup(IN1, GPIO.OUT)
GPIO.setup(IN2, GPIO.OUT)
GPIO.setup(IN3, GPIO.OUT)
GPIO.setup(IN4, GPIO.OUT)
# Stepper motor sequentie (4-fase stappen)
step_sequence = [
[1, 0, 0, 0],
[1, 1, 0, 0],
[0, 1, 0, 0],
[0, 1, 1, 0],
[0, 0, 1, 0],
[0, 0, 1, 1],
[0, 0, 0, 1],
[1, 0, 0, 1]
]
# Instellingen voor piekdetectie
HISTORY_SIZE = 10 # Hoeveel metingen we bijhouden
THRESHOLD = 7 # Aantal HIGH's in HISTORY_SIZE om als piek te zien
MINIMUM_ACTIVE_TIME = 1 # Minimal actief blijven (seconden)
# Historie van geluidmetingen
sound_history = deque([1] * HISTORY_SIZE, maxlen=HISTORYSIZE)
def set_step(w1, w2, w3, w4):
"""Stel de status van de motorpinnen in."""
GPIO.output(IN1, w1)
GPIO.output(IN2, w2)
GPIO.output(IN3, w3)
GPIO.output(IN4, w4)
def step_motor(steps, delay):
"""Draai de motor een aantal stappen."""
for _ in range(steps):
for step in step_sequence:
set_step(*step)
sleep(delay)
try:
while True:
# Lees de huidige status van de geluidssensor
current_state = GPIO.INPUT(SOUND_SENSOR_PIN)
# Voeg de huidige meting toe aan de historie
sound_history.append(current_state)
# Tel hoeveel keer HIGH (1) in historie
low_count = sound_history.count(0)
# Controleer of er een piek is
if low_count >= THRESHOLD:
print("Piek in geluid gedetecteerd! Steppermotor draait.")
step_motor(512, 0.002) # Draai 512 stappen vooruit
sound_hitory.clear() # Reset de historie na een plek
sound_history.extend([1] * HISTORY_SIZE) # Vermijd snelle heractivatie
sleep(MINIMUM_ACTIVE_TIME) # Zorg dat de motor niet constant triggert
sleep(0.01)
except KeyboardInterrupt:
print("\nProgramma gestopt.")
finally:
GPIO.cleanup() # Reset de GPIO-instellingen
Klik op Bestand > Opslaan als en noem het bestand sound_controlled_motor.py.
Klik op de groene Run-knop (▶) bovenin de Thonny-interface.