Search Code

ESP32 Tutorial 15/55 - DC-motorsnelheidsregeling met ESP32 L293D | SunFounder's ESP32 IoT-leerkit

ESP32 Tutorial 15/55 - DC-motorsnelheidsregeling met ESP32 L293D | SunFounder's ESP32 IoT-leerkit

ESP32-zelfstudie 15/55 - DC-motor snelheidsregeling met ESP32 L293D | SunFounder's ESP32 IoT-leerkit

Het aansturen van een DC-motor met een ESP32 kan ontmoedigend lijken, maar het is heel goed te doen met de juiste componenten en kennis. In deze zelfstudie bouwen we een project waarmee we de snelheid en richting van een DC-motor kunnen regelen met behulp van de L293D-motorstuurmodule. Aan het einde heb je een werkende opstelling die de motor vooruit en achteruit kan laten draaien terwijl je de snelheid aanpast. Voor een visuele referentie, bekijk zeker de video (in video op 00:00).

ESP32-15_L293D_motor_schematic

Hardware uitgelegd

De belangrijkste componenten van dit project zijn de ESP32-microcontroller en de L293D-motorstuurmodule. De ESP32 is een krachtige microcontroller met ingebouwde Wi-Fi- en Bluetooth-mogelijkheden, waardoor deze geschikt is voor IoT-toepassingen. Het kan verschillende hardwarecomponenten aansturen, waaronder motoren, via de GPIO-pinnen. De L293D is een dubbele H-brug motorstuurmodule waarmee je de richting en snelheid van twee DC-motoren kunt regelen. Elke H-brug kan een motor in beide richtingen laten draaien door de polariteit van de spanning op de motorklemmen om te keren. Bovendien kan de L293D een stroom tot 600 mA per kanaal verwerken, waardoor deze geschikt is voor kleine tot middelgrote motoren.

L293D-Motor-Driver-IC

Datasheet-details

Fabrikant Texas Instruments
Onderdeelnummer L293D
Logica/IO-spanning 2,5 – 7 V
Voedingsspanning 4,5 – 36 V
Uitgangsstroom (per kanaal) 600 mA (typ.)
Piekstroom (per kanaal) 1,2 A (max.)
PWM-frequentierichtlijn 20 kHz (typ.)
Ingangslogische drempels 0,8 V (hoog), 2,0 V (laag)
Spanningsval / RDS(on) / verzadiging 1,5 V (max.)
Thermische limieten 150 °C (max.)
Behuizing 16-DIP
Opmerkingen / varianten Vierdubbele half-H-stuurmodule

 

  • Zorg voor voldoende koeling voor toepassingen met hoge stroomsterkte.
  • Ontkoppel de voeding met condensatoren om spanningspieken te voorkomen.
  • Wees voorzichtig met de bedrading om omgekeerde polariteit te voorkomen.
  • Gebruik PWM voor snelheidsregeling om oververhitting te voorkomen.
  • Controleer de nominale spanning van de motor om schade te voorkomen.

Bedradingsinstructies

ESP32-15_L293D_motor_wiring

Om de ESP32 en de L293D-motorstuurmodule te bedraden, begin je met het aansluiten van de voeding. Verbind pin 16 van de L293D met de positieve pool van je voeding en pin 4 met de aarde. Verbind vervolgens de motor: de ene klem op pin 3 en de andere op pin 6 van de L293D. Voor stuursignalen verbind je GPIO-pin 13 van de ESP32 met pin 2 op de L293D en GPIO-pin 14 met pin 7. Zorg er ten slotte voor dat je de aarde van de ESP32 verbindt met de aarde van de L293D om een gemeenschappelijk referentiepunt te garanderen. Als de video alternatieve bedrading vermeldt (in video op 05:00), volg dan de specifieke wijzigingen die worden getoond.

Codevoorbeelden & uitleg

De code voor het aansturen van de motor bestaat uit het definiëren van de pinnen voor de motor en het instellen van hun modi. Hier is een fragment uit de setup-functie:

#define motor1A 13
#define motor2A 14

void setup() {
  pinMode(motor1A, OUTPUT);
  pinMode(motor2A, OUTPUT);  
}

In dit fragment definiëren we de motorstuurpinnen als constanten en stellen we ze in als uitgangen in de setup-functie. Dit is cruciaal omdat het de pinnen voorbereidt op het aansturen van de motor. De loop-functie is waar het gedrag van de motor wordt geregeld. Hier is een belangrijk deel van de loop:

void loop() {
  digitalWrite(motor1A, HIGH);     
  digitalWrite(motor2A, LOW);   
  delay(2000); 

  digitalWrite(motor1A, LOW);     
  digitalWrite(motor2A, HIGH);    
  delay(2000); 

  digitalWrite(motor1A, LOW);     
  digitalWrite(motor2A, LOW);    
  delay(3000);
}

Deze code laat de motor 2 seconden in één richting draaien, keert vervolgens de richting om voor nog eens 2 seconden, en stopt ten slotte de motor gedurende 3 seconden. Deze loop herhaalt zich oneindig, waardoor continue aansturing mogelijk is. Voor meer gedetailleerde inzichten en de volledige code, raadpleeg het volledige programma dat onder het artikel wordt geladen.

Demonstratie / Wat te verwachten

Na succesvolle bedrading en het uploaden van de code, zou je de motor in één richting moeten zien draaien gedurende 2 seconden, van richting moeten zien veranderen voor nog eens 2 seconden, en dan 3 seconden stoppen. Als de motor niet reageert zoals verwacht, controleer dan op veelvoorkomende valkuilen zoals omgekeerde polariteit of onjuiste pinverbindingen (in video op 08:00). Deze opstelling biedt een eenvoudige manier om de snelheid en richting van een DC-motor te regelen met behulp van de ESP32 en L293D.

Videotijdstempels

  • 00:00 Start
  • 2:01 Inleiding tot DC-motor
  • 6:14 L293D-motorstuurmodule
  • 9:17 Projectdocumentatie
  • 11:04 Bedrading uitgelegd
  • 14:41 Arduino-motorregeling met ESP32
  • 17:10 Arduino-poorten selecteren voor ESP32-bord
  • 18:52 Projectdemonstratie
  • 22:08 Motorsnelheidsregeling met ESP32
  • 26:22 Snelheidsregeling demo
  • 28:01 Arduino-code voor snelheids- en richtingsregeling
  • 29:05 Demonstratie van snelheid en richting

Afbeeldingen

L293D-Motor-Driver-IC
L293D-Motor-Driver-IC
ESP32-15_L293D_motor_schematic
ESP32-15_L293D_motor_schematic
ESP32-15_L293D_motor_wiring
ESP32-15_L293D_motor_wiring
814-ESP32 Tutorial 15/55- Arduino code for L293D motor control
Taal: C++
#define motor1A 13
#define motor2A 14

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin as an output.
  pinMode(motor1A, OUTPUT);
  pinMode(motor2A, OUTPUT);  
}

// the loop function runs over and over again forever
void loop() {
  
  // Rotate
  digitalWrite(motor1A, HIGH);     
  digitalWrite(motor2A, LOW);   
  delay(2000); 

  // Rotate in the opposite direction
  digitalWrite(motor1A, LOW);     
  digitalWrite(motor2A, HIGH);    
  delay(2000); 

  // Stop
  digitalWrite(motor1A, LOW);     
  digitalWrite(motor2A, LOW);    
  delay(3000);
}

Dingen die je misschien nodig hebt

Hulpmiddelen en referenties

Bestanden📁

Datasheet (pdf)