GPIO Project 8 - Geluid gestuurde motor
Beginner
30 Minuten
€ 169,90
In dit project leer je hoe je een geluidsensor (die vindt je in de GPIO kit) 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.

Aansluitschema
Verbind de geluidssensor:
- VCC: Verbind met 3.3V (pin 1).
- GND: Verbind met GND (pin 6).
- DO (digitale uitgang): Verbind met GPIO 17 (pin 11).
Verbind de ULN2003 driver met de steppermotor:
- Steppermotor: Sluit de connector van de steppermotor aan op de header van de ULN2003-driver.
- ULN2003 driver:
- IN1: Verbind met GPIO 27 (pin 13).
- IN2: Verbind met GPIO 22 (pin 15).
- IN3: Verbind met GPIO 23 (pin 16).
- IN4: Verbind met GPIO 24 (pin 18).
- VCC: Verbind met 5V (pin 2).
- GND: Verbind met GND (pin 6).
Pinout Referentie
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 |

Python-code in Thonny
Stap 1: Schrijf je code
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
Stap 2: Sla het bestand op
Klik op Bestand > Opslaan als en noem het bestand sound_controlled_motor.py.
Stap 3: Voer het script uit
Klik op de groene Run-knop (▶) bovenin de Thonny-interface.
Hoe werkt het?
- Geluidssensor:
- De sensor detecteert geluiden zoals klappen en stuurt een hoog signaal (HIGH) naar GPIO 17.
- Stepper motor:
- Zodra geluid wordt gedetecteerd, draait de motor 512 stappen (vooruit).
- Snelheid en stappen aanpassen:
- Pas de waarde van delay en steps in de step_motor()-functie aan om de snelheid en afstand van de motorrotatie te veranderen.
Resultaat
- Geluid gedetecteerd: De steppermotor draait één volledige rotatie (512 stappen).
- Geen geluid gedetecteerd: De motor blijft stil.
Experimenteren
- Richting aanpassen:
- Laat de motor achteruit draaien door de volgorde van de step_sequence-lijst om te keren.
- Licht of andere sensoren gebruiken:
- Vervang de geluidssensor door een andere input, zoals een LDR of een drukknop.
- Knipperende LED toevoegen:
- Voeg een LED toe die knippert als de motor draait.

