webwinkelkeur logo

4.7 gem.

5101+ beoordelingen
webwinkelkeur logoBekijk alles

5101+ beoordelingen

5101+ beoordelingen

Bestel voor 16:00 voor dezelfde dag verzending

14 dagen retour

NL

Particulier

Zakelijk

GPIO Project 8 - Geluid gestuurde motor

Beginner
30 Minuten
114,90

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.

Aansluitschema

Verbind de geluidssensor:

  1. VCC: Verbind met 3.3V (pin 1).
  2. GND: Verbind met GND (pin 6).
  3. DO (digitale uitgang): Verbind met GPIO 17 (pin 11).

Verbind de ULN2003 driver met de steppermotor:

  1. Steppermotor: Sluit de connector van de steppermotor aan op de header van de ULN2003-driver.
  2. 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 17Pin 11Digitale invoerGeluidssensor DO
GPIO 27Pin 13Stepper motorULN2003 IN1
GPIO 22Pin 15Stepper motorULN2003 IN2
GPIO 23Pin 16Stepper motorULN2003 IN3
GPIO 24Pin 18Stepper motorULN2003 IN4
3.3VPin 1VoedingGeluidssensor VCC
5VPin 2VoedingULN2003 VCC
GNDPin 6Aarde (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?

  1. Geluidssensor:
    • De sensor detecteert geluiden zoals klappen en stuurt een hoog signaal (HIGH) naar GPIO 17.
  2. Stepper motor:
    • Zodra geluid wordt gedetecteerd, draait de motor 512 stappen (vooruit).
  3. 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

  1. Richting aanpassen:
    • Laat de motor achteruit draaien door de volgorde van de step_sequence-lijst om te keren.
  2. Licht of andere sensoren gebruiken:
    • Vervang de geluidssensor door een andere input, zoals een LDR of een drukknop.
  3. Knipperende LED toevoegen:
    • Voeg een LED toe die knippert als de motor draait.