Raspberry Pi - DC Motor

Deze handleiding leert u hoe u met een Raspberry Pi een DC motor kunt aansturen. We zullen in detail behandelen:

Benodigdheden Hardware

1×Raspberry Pi 5
1×L298N Motordriver Module
1×5V DC-Motor
1×(optioneel) 12V DC Motor
1×5V Voedingsadapter voor 5V DC motor
1×DC-Stroomaansluiting
1×Jumperdraden
1×(Aanbevolen) Schroefklem Block Shield voor Raspberry Pi
1×(Aanbevolen) Raspberry Pi Prototyping Basisplaat & Breadboard Kit
1×(Aanbevolen) HDMI-Touchscreen-Monitor voor Raspberry Pi

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over de DC Motor

DC Motor Pinout

Een DC motor heeft twee draden, waarbij de positieve meestal rood is en de negatieve meestal zwart.

DC Motor pinout

Hoe Het Werkt

Bij de aanschaf van een DC motor is het belangrijk om te weten bij welke spanning deze werkt. We nemen als voorbeeld een 12V DC motor.

Als u de 12V DC motor aansluit op een 12V voeding:

  • Wanneer u 12V en GND respectievelijk aansluit op de positieve en negatieve draad, zal de DC motor met maximale snelheid met de klok mee draaien.
  • Wanneer u 12V en GND respectievelijk aansluit op de negatieve en positieve draad, zal de DC motor met maximale snelheid tegen de klok in draaien.

Zoals eerder vermeld, keert het omwisselen van de polariteit tussen de twee draden de draairichting van de motor om. Dit is een methode om de draairichting te regelen, maar niet handmatig, echter via programmering.

Als de voedingsspanning lager is dan 12V, zal de motor nog steeds draaien, maar niet met maximale snelheid. Dit betekent dat we door de spanning te veranderen ook de snelheid van de motor kunnen regelen. Deze methode wordt echter meestal niet gebruikt omdat het lastig is om de voedingsspanning nauwkeurig te regelen. Daarom wordt de voedingsspanning constant gehouden en wordt de snelheid geregeld met een PWM-signaal. Hoe hoger de duty cycle van het PWM-signaal, hoe sneller de DC motor draait.

Hoe een DC motor te regelen

Hoe een DC motor aansturen met Raspberry Pi

Het aansturen van een DC motor hangt af van twee factoren: snelheid en draairichting. De Raspberry Pi kan een PWM-signaal genereren, maar dit signaal is van lage spanning en stroom, waardoor het niet direct geschikt is om de motor aan te sturen. U heeft daarom een hardware driver tussen de Raspberry Pi en de DC motor nodig. Deze driver voert twee taken uit:

  • Het versterken van het PWM-signaal van de Raspberry Pi (zowel in spanning als stroom) om de snelheid te regelen
  • Het ontvangen van het besturingssignaal van de Raspberry Pi om de polariteit van de voeding te schakelen en daarmee de draairichting te bepalen
Raspberry Pi stuurt DC motor aan

※ Notiz:

  • Deze handleiding is toepasbaar op elke DC motor. We gebruiken een 12V DC motor als voorbeeld.
  • Bij een 5V DC motor, ook al levert de Raspberry Pi pin 5V (wat gelijk is aan de spanning van de motor), is een driver toch nodig, omdat de Raspberry Pi pin niet genoeg stroom kan leveren voor de motor.

Er zijn veel verschillende chips en modules die als driver voor DC motoren kunnen dienen. In deze handleiding gebruiken we de L298N module.

Over de L298N Driver

De L298N driver kan gebruikt worden om zowel DC motoren als stappenmotoren aan te sturen. Deze handleiding legt uit hoe u deze module kunt gebruiken voor het besturen van een DC motor.

L298N Driver Pinout

L298N Driver pinout

De L298N driver kan twee DC motoren onafhankelijk en gelijktijdig aansturen, aangeduid als Motor A en Motor B. Deze driver heeft in totaal 13 pinnen.

De algemene pinnen voor beide motoren:

  • VCC pin: Levert de voeding voor de motor en kan een spanning leveren van 5V tot 35V.
  • GND pin: Aarde (0V), gemeenschappelijke massa.
  • 5V pin: Levert spanning aan de L298N module zelf, kan afkomstig zijn van de 5V output van de Raspberry Pi.

Motor A pinnen (Kanaal A):

  • ENA pinnen: Hiermee regelt u de snelheid van Motor A. Door de jumper te verwijderen en deze pin aan te sluiten op een PWM-ingang, kunt u de snelheid regelen.
  • IN1 & IN2 pinnen: Deze pinnen regelen de draairichting van Motor A. Als één van deze pinnen HIGH is en de andere LOW, draait Motor A. Zijn beide pinnen HIGH of LOW, dan stopt de motor.
  • OUT1 & OUT2 pinnen: Verbonden met Motor A.

Motor B pinnen (Kanaal B):

  • IN3 & IN4 pinnen: Regelen de draairichting van Motor B. Wanneer één HIGH is en de andere LOW, draait Motor B. Zijn beide HIGH of LOW, dan stopt Motor B.
  • ENB pinnen: Voor snelheidsregeling van Motor B, hetzelfde principe als bij ENA.
  • OUT3 & OUT4 pinnen: Verbonden met Motor B.

De L298N driver heeft twee voedingssignalen:

  • Eén voor de DC motoren (VCC en GND pinnen) tussen 5 en 35V.
  • Eén voor de interne werking van de L298N module (5V en GND pinnen) tussen 5 en 7V.

Verwijder alle jumpers van de L298N driver voor eenvoudige bediening. Jumpers worden voor geavanceerd gebruik of specifieke toepassingen ingezet.

U kunt dus twee DC motoren onafhankelijk aansturen met een Raspberry Pi en L298N driver. Per motor zijn hiervoor maar drie Raspberry Pi pinnen nodig.

※ Notiz:

De rest van deze handleiding richt zich op het bedienen van een DC motor via kanaal A. Voor motor B gelden vergelijkbare stappen.

Snelheid regelen van DC Motor via L298N Driver

Het regelen van de snelheid van een DC motor is eenvoudig door een PWM signaal op de ENA pin van de L298N te geven:

  • Verbind een Raspberry Pi pin met de ENA pin van de L298N
  • Genereer een PWM signaal op de ENA pin met de functie pwm.ChangeDutyCycle(). De L298N versterkt dit signaal en stuurt het naar de DC motor.
pwm.ChangeDutyCycle(speed) # speed is een waarde van 0 tot 100

De snelheid heeft een bereik van 0 tot 100. Bij 0 zal de motor niet draaien, bij 100 draait de motor op maximale snelheid.

Draairichting van DC Motor regelen via L298N Driver

De draairichting kan worden geregeld door het sturen van logische HIGH/LOW signalen naar de IN1 en IN2 pinnen. Onderstaande tabel laat zien hoe de richting geregeld wordt op kanaal A:

IN1 pin IN2 pin Richting
LOW LOW Motor A stopt
HIGH HIGH Motor A stopt
HIGH LOW Motor A draait met de klok mee
LOW HIGH Motor A draait tegen de klok in

Daarmee:

  • Raspberry Pi code om Motor A met de klok mee te laten draaien:
GPIO.output(IN1_PIN, GPIO.HIGH) GPIO.output(IN2_PIN, GPIO.LOW)
  • Raspberry Pi code om Motor A tegen de klok in te laten draaien:
GPIO.output(IN1_PIN, GPIO.LOW) GPIO.output(IN2_PIN, GPIO.HIGH)

※ Notiz:

De draairichting van de motor kan ook omgekeerd worden door de OUT1 en OUT2 draden van de motor om te wisselen. Dit kan ook bereikt worden door in de code de signalen op IN1 en IN2 om te wisselen.

DC Motor stoppen

Er zijn twee manieren om een DC motor te stoppen:

  • De snelheid terugbrengen naar nul
pwm.ChangeDutyCycle(0)
  • Beide IN1 en IN2 pinnen op dezelfde waarde zetten, zowel LOW als HIGH werkt:
GPIO.output(IN1_PIN, GPIO.LOW) GPIO.output(IN2_PIN, GPIO.LOW)
  • Of
GPIO.output(IN1_PIN, GPIO.HIGH) GPIO.output(IN2_PIN, GPIO.HIGH)

DC Motor aansturen met L298N driver

Bedradingsschema

Verwijder alle drie de jumpers van het L298N module voordat u begint met aansluiten.

Raspberry Pi DC Motor L298N Driver bedradingsschema

This image is created using Fritzing. Click to enlarge image

Code voor Raspberry Pi

We schrijven Python-code die op de Raspberry Pi draait en het volgende doet:

  • De snelheid van een DC motor verhogen
  • De draairichting wijzigen
  • De snelheid van de DC motor verlagen
  • De motor stoppen

Snelle stappen

  • Verwijder alle drie de jumpers van het L298N module.
  • Zorg dat u Raspbian of een ander compatibel besturingssysteem op uw Raspberry Pi heeft geïnstalleerd.
  • Zorg dat uw Raspberry Pi verbonden is met hetzelfde lokale netwerk als uw pc.
  • Zorg dat uw Raspberry Pi verbonden is met internet als u bibliotheken moet installeren.
  • Als dit uw eerste keer is met de Raspberry Pi, zie hoe u de Raspberry Pi configureert
  • Verbind uw pc met de Raspberry Pi via SSH, gebruik hiervoor de ingebouwde SSH client op Linux/macOS of PuTTY op Windows. Zie hoe u via SSH met Raspberry Pi verbindt.
  • Zorg dat u de RPi.GPIO bibliotheek hebt geïnstalleerd. Als deze ontbreekt, installeer deze dan met het volgende commando:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Maak een Python script aan met de naam dc_motor.py en voeg onderstaande code toe:
# Deze Raspberry Pi code is ontwikkeld door newbiely.nl # Deze Raspberry Pi code wordt zonder enige beperking aan het publiek beschikbaar gesteld. # Voor volledige instructies en schema's, bezoek: # https://newbiely.nl/tutorials/raspberry-pi/raspberry-pi-dc-motor import RPi.GPIO as GPIO import time # Constants ENA_PIN = 25 # GPIO pin connected to the EN1 pin L298N IN1_PIN = 8 # GPIO pin connected to the IN1 pin L298N IN2_PIN = 7 # GPIO pin connected to the IN2 pin L298N # Setup GPIO.setmode(GPIO.BCM) GPIO.setup(ENA_PIN, GPIO.OUT) GPIO.setup(IN1_PIN, GPIO.OUT) GPIO.setup(IN2_PIN, GPIO.OUT) # Create PWM object pwm = GPIO.PWM(ENA_PIN, 100) # 100 Hz frequency # Main loop try: while True: # Motor A spins clockwise GPIO.output(IN1_PIN, GPIO.HIGH) GPIO.output(IN2_PIN, GPIO.LOW) # Increase speed gradually for speed in range(0, 101): pwm.ChangeDutyCycle(speed) time.sleep(0.01) time.sleep(1) # Rotate at maximum speed for 1 second in clockwise direction # Change direction to anti-clockwise GPIO.output(IN1_PIN, GPIO.LOW) GPIO.output(IN2_PIN, GPIO.HIGH) time.sleep(1) # Rotate at maximum speed for 1 second in anti-clockwise direction # Decrease speed gradually for speed in range(100, -1, -1): pwm.ChangeDutyCycle(speed) time.sleep(0.01) time.sleep(1) # Stop motor for 1 second except KeyboardInterrupt: pass finally: # Stop PWM and cleanup GPIO on program exit pwm.stop() GPIO.cleanup()
  • Sla het bestand op en start het script door in de terminal het volgende commando uit te voeren:
python3 dc_motor.py

Het script draait continu in een oneindige lus totdat u Ctrl + C indrukt in de terminal.

U zult het volgende zien gebeuren:

  • De DC motor versnelt en draait 1 seconde op maximale snelheid.
  • De draairichting van de DC motor verandert.
  • De DC motor draait 1 seconde op maximale snelheid in de tegenovergestelde richting.
  • De DC motor vertraagt.
  • De DC motor staat 1 seconde stil.
  • Dit proces herhaalt zich voortdurend.

※ Notiz:

Deze handleiding leert u hoe u de snelheid van een DC motor ten opzichte van de maximale snelheid aanpast. Om de absolute snelheid (rotaties per seconde) te regelen, is een PID-controller met encoder vereist. Dat onderwerp wordt besproken in een aparte handleiding.

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten en helpt u stap voor stap door de bediening van de DC motor met Raspberry Pi en L298N driver.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!