Suchcode

Lektion 95: Verwendung eines L293D 4 DC Motor Shields | Arduino Schritt-für-Schritt Kurs

Lektion 95: Verwendung eines L293D 4 DC Motor Shields | Arduino Schritt-für-Schritt Kurs

In diesem Tutorial werden wir untersuchen, wie man vier Gleichstrommotoren mit dem L293D Motor Shield und Arduino steuert. Dieses Setup ist besonders nützlich für Robotikanwendungen, wie den Bau eines Roboterautos, bei dem eine präzise Motorsteuerung wichtig ist. Am Ende dieser Lektion werden Sie ein funktionierendes Modell haben, das mehrere Motoren gleichzeitig betreiben kann.

Das L293D-Motorenschild vereinfacht den Verkabelungsprozess und ermöglicht es Ihnen, die Motoren mit nur wenigen Verbindungen zu steuern. Sie werden lernen, wie Sie das Schild mit dem Arduino verbinden, den Code einrichten und Motorsteuerbefehle effektiv ausführen. Für eine visuellere Erklärung können Sie im Video zu bestimmten Zeitstempeln auf Verkabelungs- und Codierungsdetails verweisen (im Video bei mm:ss).

Hardware erklärt

Die Hauptkomponente dieses Projekts ist das L293D Motor Shield, das ein quadruples Halb-H-Brücken-Motortreiber ist. Das bedeutet, dass es zwei Motoren in beide Richtungen steuern kann, was eine vollständige Kontrolle über die Motorrotation ermöglicht. Das Shield wird direkt mit dem Arduino verbunden, wodurch die Verwaltung von Strom und Steuersignalen ohne unordentliche Verkabelung einfach ist.

Jeder L293D-Chip kann bis zu 600 mA Strom pro Kanal verarbeiten und arbeitet bei Spannungen von 4,5 V bis 36 V. Dieser Bereich macht ihn geeignet für eine Vielzahl von Gleichstrommotoren. Darüber hinaus verfügt das Shield über einen Jumper, der es ermöglicht, sowohl die Motoren als auch den Arduino von einer einzigen externen Stromquelle zu versorgen.

Datenblattdetails

Hersteller Texas Instruments
Teilenummer L293D
Logik/IO-Spannung 5 V
Versorgungsspannung 4,5 - 36 V
Ausgangsstrom (pro Kanal) 600 mA
Spitzenstrom (pro Kanal) 1.2 A
PWM-Frequenzanleitung 1 kHz - 20 kHz
Eingangslogikschwellen 2 V min (hoch), 0,8 V max (niedrig)
Spannungsabfall / RDS(on)/ Sättigung 1,5 V max
Thermische Grenzen 150 °C
Paket 16-DIP
Hinweise / Varianten Duale H-Brücken-Konfiguration

  • Stellen Sie sicher, dass die Motoren 600 mA nicht überschreiten, um Schäden zu verhindern.
  • Verwenden Sie ausreichende Kühlkörper für Hochstromanwendungen.
  • Schließen Sie externe Stromversorgung an, bevor Sie das Arduino einschalten.
  • Überprüfen Sie die Jumper-Platzierung zur Stromversorgung des Shields und des Arduino.
  • Teste die Motorrichtung, indem du die Verbindungen bei Bedarf tauschst.

Verdrahtungsanweisungen

L293d_Shield_wiring

Beginnen Sie damit, das L293D-Motor-Shield an Ihr Arduino Uno oder Mega anzuschließen. Richten Sie die Pins des Shields mit den Headern des Arduino aus und drücken Sie fest nach unten. Schließen Sie als Nächstes Ihre Gleichstrommotoren an die mit gekennzeichneten Anschlüsse an.M1,M2,M3, undM4auf dem Schild. Jeder Motor benötigt zwei Anschlüsse, daher stellen Sie sicher, dass Sie diese korrekt anschließen, um die richtige Drehrichtung zu gewährleisten.

Für die Stromversorgung schließen Sie eine externe Batterie oder ein externes Netzteil an die Stromanschlüsse des Shields an und stellen Sie sicher, dass die Spannung im Bereich von 4,5 V bis 36 V liegt. Vergessen Sie nicht, den Jumper auf dem Shield zu verbinden, um den Stromfluss zum Arduino zu ermöglichen. Schließen Sie schließlich die Masse des Netzteils an den Massepin des Arduinos an, um den Stromkreis zu vervollständigen.

Installieren Sie die erforderliche Bibliothek

Klicken Sie auf das Bibliothekssymbol und suchen Sie nach:Adafruit Motor Sheild Libraryund klicken Sie auf Installieren, um es zu installieren.

Codebeispiele und Anleitung

AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);

Im Code initialisieren wir vier Motorobjekte:motor1,motor2,motor3, undmotor4Jeder Motor wird einer Kanalnummer zugeordnet, die den Anschlussklemmen des Motor Shields entspricht. Dies ermöglicht es uns, jeden Motor einzeln zu steuern.

void setup() {
  Serial.begin(9600); // set up Serial library at 9600 bps
  Serial.println("Robojax L293D Example");
}

Diesetup()Die Funktion initialisiert die serielle Kommunikation, die es uns ermöglicht, Nachrichten vom Arduino IDE zu senden und zu empfangen. Dies ist nützlich für das Debuggen und Überwachen des Motorsteuerungsprozesses.

motor1.setSpeed(speed(50)); //set speed for motor 1 at 50%
motor1.run(FORWARD); //send motor 1 to Forward rotation

Um die Motoren zu steuern, stellen wir die Geschwindigkeit ein, indem wir diesetSpeed()Methode, die einen Wert zwischen 0 und 255 annimmt. Dierun()Die Methode startet dann den Motor in die angegebene Richtung, wie zum BeispielFORWARDoderBACKWARDDie Geschwindigkeit kann je nach Bedarf dynamisch angepasst werden.

Demonstration / Was zu erwarten ist

Sobald alles verkabelt und der Code hochgeladen ist, sollten die Motoren entsprechend den Befehlen im Code rotieren. Zunächst wird ein Motor eingeschaltet, gefolgt von den anderen in der Reihenfolge, wobei jeder für eine festgelegte Dauer läuft. Wenn die Motoren nicht wie erwartet funktionieren, überprüfen Sie Ihre Verkabelung, stellen Sie sicher, dass der Jumper angeschlossen ist, und vergewissern Sie sich, dass die Stromversorgung ausreichend ist (im Video bei mm:ss).

Video-Zeiten

  • 00:00 Einführung
  • 03:00 Datenblatt für L293D
  • 03:56 Verkabelung erklärt
  • 07:21 Code und Bibliothek
  • 13:51 Demonstration zur Steuerung von 4 Motoren

Bilder

L293D-Sheild-1
L293D-Sheild-1
L293D-Sheild-2
L293D-Sheild-2
L293D-Sheild-3
L293D-Sheild-3
L293d_sheild_main
L293d_sheild_main
L293d_Shield_wiring
L293d_Shield_wiring
439-Lesson 95: Using L293D 4 DC Motor Shield | Arduino Step-by-Step Course
Sprache: C++
/* 
* Lesson 95: Control 4 DC Motors for a Smart Car using a Motor Shield 
* This code works with Arduino UNO and Arduino Mega. 
* Wiring diagram and how to wire and connect the power supply is shown in the video.
 
  Watch full video instruction:  https://youtu.be/0XihwdulmDQ
 * Download this code from: http://robojax.com
 * 
* Written by Ahmad Shamshiri for Robojax.com on Jan 09, 2022
 * in Ajax, Ontario, Canada
  
This video is part of an Arduino Step by Step Course which starts here: https://youtu.be/-6qSrDUA5a8
 

If you found this tutorial helpful, please support me so I can continue creating content like this
and make a donation using PayPal http://robojax.com/L/?id=64
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>. 
 *  Library location: https://github.com/adafruit/Adafruit-Motor-Shield-library
 Adafruit Motor shield library
// copyright Adafruit Industries LLC, 2009
// this code is public domain, enjoy!
*/

#include <AFMotor.h>

AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);

void setup() {
  Serial.begin(9600); // set up Serial library at 9600 bps
  Serial.println("Robojax L293D Example");
}

void loop() {

  motor1.setSpeed( speed(50) ); //set speed for motor 1 at 50%
  motor1.run(FORWARD);//send motor 1 to Foarward rotation

  delay(2000);//wait for 2 seconds
  motor2.setSpeed( speed(100) );//set speed for motor 2 at 100%
  motor2.run(BACKWARD);//send motor 2 to Foarward rotation

  delay(2000);
  motor3.setSpeed( speed(70) );
  motor3.run(FORWARD);
  
  delay(2000);
  motor4.setSpeed( speed(90) );
  motor4.run(FORWARD);

    
  delay(2000);
  
  motor1.run(BRAKE);
  motor2.run(RELEASE);  
  motor3.run(RELEASE);
  motor4.run(RELEASE);   
  delay(2000);

  
  motor1.setSpeed(speed(100));
  motor1.run(BACKWARD);
  delay(2000);
  
  motor1.run(RELEASE);

  delay(1000);
}

/*
 * speed percent to speed converter
 * receives value between 0 to 100 and converts it to value between
 * 0 to 255 which are 8 bits Arduino PWM value
 * www.Robojax.com
 Watch full video instruction:  https://youtu.be/0XihwdulmDQ
 */
int  speed(int percent)
{
  return map(percent, 0, 100, 0, 255);
}

Ressourcen & Referenzen

Dateien📁

Keine Dateien verfügbar.