ESP32 - DC Motor

Deze tutorial legt uit hoe u een ESP32 gebruikt om een DC motor aan te sturen met behulp van de L298N Motor Driver. We leren gedetailleerd hoe u de snelheid en de draairichting van een DC motor regelt. U leert eerst een enkele DC motor te besturen, daarna twee DC motoren met één L298N motor driver.

Hardware Vereist

1×ESP-WROOM-32 ontwikkelmodule
1×USB-kabel Type-C
1×L298N Motordriver Module
1×5V DC motor
1×5V voedingadapter voor 5V DC motor
1×Breadboard (experimenteerprint)
1×Jumper wires (verbindingsdraden)
1×(Optioneel) DC power jack
1×(Aanbevolen) Schroefklem Uitbreidingsboard voor ESP32
1×(Aanbevolen) Breakout Expansion Board for ESP32
1×(Aanbevolen) Stromsplitter voor ESP32

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 DC Motor

DC Motor Pinout

Een DC motor heeft twee draden: Negatief (zwart) en Positief (rood)

DC Motor Pinout

Hoe een DC Motor Werkt

De richting en snelheid van de DC motor worden bepaald door de wijze waarop de stroom wordt aangeleverd. Onderstaande afbeelding laat de gedetailleerde relatie zien tussen de voeding en snelheid/richting.

How to control DC motor

Bij gebruik van PWM geldt: hoe groter de duty cycle van het PWM-signaal, hoe hoger de snelheid van de motor.

Hoe de snelheid en richting van een DC motor te regelen met ESP32

De DC motor werkt op een hogere spanning die de ESP32 kan beschadigen. Daarom kunt u een DC motor niet rechtstreeks op de ESP32 aansluiten. Er is een hardware driver nodig tussen de DC motor en ESP32. De driver heeft drie hoofdtaken:

  • De ESP32 beschermen tegen de hoge spanning
  • Signaleren van de ESP32 om de polariteit van de stroomtoevoer te wisselen en zo de draairichting van de motor te bepalen
  • Het PWM-signaal van de ESP32 versterken (stroom en spanning) om de motorsnelheid te regelen
ESP32 control DC motor

Er zijn veel DC motor drivers beschikbaar. In deze tutorial gebruiken we de L298N driver.

Over L298N Driver

Een L298N driver kan twee DC motoren of een stappenmotor aansturen. Deze tutorial gebruikt deze driver om de DC motor te besturen.

L298N Driver Pinout

Onderstaande afbeelding toont de pinout van de L298N driver.

L298N Driver Pinout

Een uitgebreide uitleg van elke pin vindt u in deze Arduino - DC motor tutorial.

Een enkele L298N driver kan twee DC motoren onafhankelijk aansturen:

  • Motor A wordt bestuurd via de IN1, IN2, ENA, OUT1, OUT2 pinnen
  • Motor B wordt bestuurd via de IN3, IN4, ENB, OUT3, OUT4 pinnen

Hoe de snelheid van een DC motor te regelen via de L298N driver

De snelheid van een DC motor is eenvoudig te regelen door een PWM-signaal naar de ENA/ENB pin van de L298N te sturen. Dit doet u door:

  • Een digitale outputpin van de ESP32 te verbinden met de ENA/ENB pin van de L298N
  • Een PWM-signaal naar de ENA/ENB pin te genereren met behulp van de analogWrite() functie. Het PWM-signaal wordt versterkt door de L298N driver en stuurt zo de stroom en spanning naar de motor.
analogWrite(PIN_ENA, speed); // motor A aansturen analogWrite(PIN_ENB, speed); // motor B aansturen

De speed is een waarde tussen 0 en 255. Bij 255 draait de motor op maximale snelheid. Bij 0 stopt de motor.

Hoe de draairichting van de DC motor te regelen via de L298N driver

De draairichting van motor A wordt geregeld via IN1 en IN2 pinnen. Onderstaande tabel toont de relatie tussen de signalen op IN1, IN2 en de draairichting.

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

Overeenkomstig is de onderstaande tabel voor motor B:

IN3 pin IN4 pin Richting
HIGH LOW Motor B draait met de klok mee
LOW HIGH Motor B draait tegen de klok in
HIGH HIGH Motor B stopt
LOW LOW Motor B stopt

Laten we leren hoe dit te programmeren. We gebruiken motor A als voorbeeld, motor B werkt vergelijkbaar.

  • Motor A richting met de klok mee aansturen
digitalWrite(PIN_IN1, HIGH); digitalWrite(PIN_IN2, LOW);
  • Motor A richting tegen de klok in aansturen
digitalWrite(PIN_IN1, LOW); digitalWrite(PIN_IN2, HIGH);

※ Notiz:

De draairichting van de DC motor is omgekeerd als de bekabeling tussen DC motor en L298N driver is omgedraaid. In dat geval verwissel OUT1 en OUT2.

Hoe een DC motor te stoppen

Er zijn twee manieren om een DC motor te stoppen:

  • Snelheid regelen naar 0
analogWrite(PIN_ENA, 0);
  • IN1 en IN2 pinnen beide op LOW of HIGH zetten
digitalWrite(PIN_IN1, HIGH); digitalWrite(PIN_IN2, HIGH);
  • Of
digitalWrite(PIN_IN1, LOW); digitalWrite(PIN_IN2, LOW);

Hoe een DC motor aan te sturen met L298N driver

Bedradingsschema

De L298N module heeft drie jumpers. Verwijder ze alle drie voordat u gaat bedraden.

ESP32 DC Motor L298N Driver Wiring Diagram

This image is created using Fritzing. Click to enlarge image

ESP32 Code

Bekijk onderstaande code die het volgende een voor een doet:

  • ESP32 verhoogt de snelheid van de DC motor.
  • ESP32 draait de draairichting van de DC motor om.
  • ESP32 verlaagt de snelheid van de DC motor.
  • ESP32 stopt de DC motor.
/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/esp32/esp32-dc-motor */ #define PIN_IN1 19 // ESP32 pin GPIO19 connected to the IN1 pin L298N #define PIN_IN2 18 // ESP32 pin GPIO18 connected to the IN2 pin L298N #define PIN_ENA 17 // ESP32 pin GPIO17 connected to the EN1 pin L298N // the setup function runs once when you press reset or power the board void setup() { // initialize digital pins as outputs. pinMode(PIN_IN1, OUTPUT); pinMode(PIN_IN2, OUTPUT); pinMode(PIN_ENA, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(PIN_IN1, HIGH); // control the motor's direction in clockwise digitalWrite(PIN_IN2, LOW); // control the motor's direction in clockwise for (int speed = 0; speed <= 255; speed++) { analogWrite(PIN_ENA, speed); // speed up delay(10); } delay(2000); // rotate at maximum speed 2 seconds in clockwise direction // change direction digitalWrite(PIN_IN1, LOW); // control the motor's direction in anti-clockwise digitalWrite(PIN_IN2, HIGH); // control the motor's direction in anti-clockwise delay(2000); // rotate at maximum speed for 2 seconds in anti-clockwise direction for (int speed = 255; speed >= 0; speed--) { analogWrite(PIN_ENA, speed); // speed down delay(10); } delay(2000); // stop motor 2 second }

Snelle stappen

  • Als u ESP32 voor het eerst gebruikt, bekijk dan hoe u de omgeving instelt voor ESP32 in Arduino IDE.
  • Verwijder alle drie jumpers van de L298N module.
  • Kopieer de bovenstaande code en plak deze in Arduino IDE.
  • Compileer en upload de code naar de ESP32 door op de Upload knop in Arduino IDE te klikken.
  • Kijk naar de DC motor. U zult zien:
    • De DC motor versnelt en draait 2 seconden op maximale snelheid.
    • De draairichting van de DC motor wordt omgekeerd.
    • De DC motor draait 2 seconden in de tegenovergestelde richting op maximale snelheid.
    • De DC motor vertraagt.
    • De DC motor stopt 2 seconden.
  • Dit proces wordt oneindig herhaald.

※ Notiz:

In deze tutorial wordt uitgelegd hoe u de relatieve motorsnelheid regelt. Om de absolute snelheid (omwentelingen per seconde) te regelen, is een PID-controller en terugkoppeling van een encoder nodig.

Hoe u twee DC motoren aanstuurt via L298N driver

(komt binnenkort)

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 videotutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten en helpt u stap-voor-stap.

Opmerkingen

※ 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!