Suchcode

Verwendung des 28BYJ-48 Schrittmotors mit einem ULN2003 Treiber und Arduino

Verwendung des 28BYJ-48 Schrittmotors mit einem ULN2003 Treiber und Arduino

In diesem Tutorial werden wir lernen, wie man einen 28BYJ-48 Schrittmotor mit einem ULN2003 Treiber und einem Arduino steuert. Dieses Setup ermöglicht eine präzise Kontrolle der Position und Geschwindigkeit des Motors. Am Ende dieses Projekts werden Sie in der Lage sein, den Motor in beide Richtungen zu drehen und seine Schritte effektiv zu steuern.

Wir werden den 28BYJ-48 Schrittmotor verwenden, der aufgrund seiner geringen Kosten und Benutzerfreundlichkeit eine beliebte Wahl für verschiedene Robotik- und Automatisierungsprojekte ist. Die ULN2003 Treiberplatine verbindet den Schrittmotor mit dem Arduino, sodass wir Schritt-Signale senden können, die die Bewegung des Motors steuern. Dieses Tutorial wird Sie durch die erforderlichen Verdrahtungen und den Code führen, um Ihren Motor zum Drehen zu bringen.

Zur weiteren Klärung beziehen Sie sich bitte auf das Video, das mit diesem Tutorial verbunden ist (im Video bei 0:45).

Hardware erklärt

Die Hauptkomponenten dieses Projekts sind der 28BYJ-48 Schrittmotor und die ULN2003 Treiberplatine. Der Schrittmotor besteht aus mehreren Spulen, die in einer bestimmten Reihenfolge aktiviert werden können, um eine Drehung zu erzeugen. Der ULN2003 Treiber fungiert als Schalter und ermöglicht es dem Arduino, die Leistung zu steuern, die jeder Spule zugeführt wird.

Der ULN2003-Treiber verwendet ein Darlington-Transistor-Array, um den höheren Strom zu bewältigen, der vom Schrittmotor benötigt wird. Wenn ein Pin des Arduino ein HIGH-Signal ausgibt, ermöglicht er den Stromfluss zur entsprechenden Spule im Motor, wodurch dieser sich bewegt. Dies ermöglicht eine präzise Steuerung des Drehwinkels und der Geschwindigkeit des Motors.

Datenblattdetails

HerstellerULN2003
TeilenummerULN2003
Logik/IO-Spannung5 V
Versorgungsspannung5-30 V (max)
Ausgangsstrom (pro Kanal)500 mA max
Spitzenstrom (pro Kanal)2 A max
PWM-FrequenzrichtlinienN/A
Eingangslogikschwellen0,8 V (niedrig), 2,4 V (hoch)
Spannungsabfall / RDS(on)/ Sättigung1,5 V max
Thermische Grenzen70 °C max
PaketDIP-16
Hinweise / VariantenHäufig verwendet mit 5V-Schrittmotoren.

  • Stellen Sie sicher, dass der Treiber die aktuellen Anforderungen Ihres Motors erfüllen kann.
  • Verwenden Sie bei Bedarf Kühlkörper, um die thermischen Grenzen zu verwalten.
  • Überprüfen Sie, ob alle Verbindungen sicher sind, um schwebende Eingänge zu vermeiden.
  • Testen Sie den Motor, indem Sie einfache Schrittfolgen ausführen, bevor Sie ihn in größere Projekte integrieren.
  • Stellen Sie sicher, dass der Motor mit einer angemessenen Versorgungsspannung betrieben wird.

Verdrahtungsanweisungen

Um den 28BYJ-48 Schrittmotor mit dem ULN2003 Treiber und Arduino zu verdrahten, befolgen Sie diese Schritte:

Zuerst verbinden Sie den Motor mit dem ULN2003-Treiber. Der Motor hat vier Drähte, die typischerweise farblich kodiert sind als orange, gelb, pink und blau. Verbinden Sie diese Drähte mit den entsprechenden Ausgangspins des ULN2003-Treibers. Die Verbindungen sind wie folgt:

  • Orangedraht zuOUT1
  • Yellowdraht zuOUT2
  • Pinkdraht zuOUT3
  • Bluedraht zuOUT4

Als nächstes verbinden Sie den ULN2003-Treiber mit dem Arduino. Die Eingangs-Pins des Treibers entsprechen vier digitalen Pins am Arduino. Zum Beispiel:

  • IN1zuPin 10
  • IN2zuPin 11
  • IN3zuPin 12
  • IN4zuPin 13

Schließlich verbinden Sie die Strom- und Masseanschlüsse des ULN2003-Treibers mit dem Arduino. Verbinden Sie dieVCCPin an den 5V-Ausgang des Arduino und denGNDPin an den Arduino-Masse. Stellen Sie sicher, dass alle Verbindungen sicher sind, bevor Sie das System einschalten.

Codebeispiele und Anleitung

Im Setup-Bereich des Arduino-Codes definieren wir die Pins, die mit dem ULN2003-Treiber verbunden sind:

int Pin1 = 10; 
int Pin2 = 11; 
int Pin3 = 12; 
int Pin4 = 13; 

Hier erklären wir vier Ganzzahlvariablen:Pin1,Pin2,Pin3, undPin4, die den digitalen Pins auf dem Arduino entsprechen. Diese Pins steuern die Bewegung des Schrittmotors.

In dersetup()Funktion, wir konfigurieren diese Pins als Ausgänge:

void setup() { 
 pinMode(Pin1, OUTPUT);  
 pinMode(Pin2, OUTPUT);  
 pinMode(Pin3, OUTPUT);  
 pinMode(Pin4, OUTPUT);  
} 

Dieses Setup stellt sicher, dass der Arduino Signale an den ULN2003-Treiber senden kann, um den Motor zu steuern.pinModeDie Funktion setzt jeden Pin in den OUTPUT-Modus, wodurch sie Signale senden können.

Schließlich erstellen wir in der Hauptschleife einen Switch-Case, um die Schritte des Motors basierend auf der Variablen zu steuern._step:

switch(_step){ 
   case 0: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, HIGH); 
   break;  
   // Additional cases follow
}

In diesem Auszug verwenden wirdigitalWriteum HIGH- oder LOW-Signale an jeden Pin basierend auf dem aktuellen zu senden_step. Dies steuert, welche Spulen aktiviert werden, sodass der Motor rotieren kann. Der vollständige Code, der diese Snippets integriert, wird unter dem Artikel geladen.

Demonstration / Was zu erwarten ist

Sobald alles korrekt verkabelt ist und der Code hochgeladen wurde, sollte der Schrittmotor als Reaktion auf die Signale vom Arduino rotieren. Sie können den Motor testen, indem Sie die Verzögerung in der Schleife ändern oder die Schritte anpassen, um zu sehen, wie er reagiert. Seien Sie sich bewusst, dass der Motor möglicherweise nicht bewegt wird oder unberechenbar reagiert, wenn er nicht richtig mit Strom versorgt wird.

Kapitel

  • Einführung - 0:00
  • Hardware erklärt - 1:30
  • Verdrahtungsanweisungen - 3:15
  • Codebeispiele & Anleitung - 5:00
  • Demonstration / Was zu erwarten ist - 7:45
6-The source code for stepper motor 28BYJ-48 with ULN2003 for Arduino
Sprache: C++
/*
 * // Originalquelle ist http://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-Wire_%26_ULN2003_Driver_Board_for_Arduino
 * // Aktualisiert von Ahmad Shamshiri für RoboJax.com
 * // Veröffentlicht am 27. März 2017 in Ajax, ON, Kanada.
 * /*
 * 
 * Benötigen Sie ein Schaltbild aus diesem Code: https://youtu.be/0glBk917HPg
 * Kaufen Sie meinen Arduino-Kurs auf Udemy.com http://robojax.com/L/?id=62
 * 
 * Holen Sie sich diesen Code und andere Arduino-Codes von RoboJax.com
 * Lernen Sie Arduino Schritt für Schritt in einem strukturierten Kurs mit allem Material, Schaltbildern und Bibliotheken
 * alles an einem Ort. Kaufen Sie meinen Kurs auf Udemy.com http://robojax.com/L/?id=62
 * 
 * Wenn Sie dieses Tutorial hilfreich fanden, unterstützen Sie mich bitte, damit ich
 * Inhalte wie dieses weiter erstellen kann.
 * 
 * oder machen Sie eine Spende über PayPal http://robojax.com/L/?id=64
 * 
 * Dieser Code ist "AS IS" ohne Garantie oder Haftung. Frei zu verwenden, solange Sie diese Notiz unverändert lassen.*
 * Dieser Code wurde von RoboJax.com heruntergeladen
 * Dieses Programm ist freie Software: Sie können es redistribuieren und/oder modifizieren
 * unter den Bedingungen der GNU General Public License, wie von
 * der Free Software Foundation veröffentlicht, entweder Version 3 der Lizenz oder
 * (je nach Wahl) eine spätere Version.
 * 
 * Dieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird,
 * aber OHNE IRGENDWELCHE GARANTIE; nicht einmal die 
 * implizite Garantie der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die
 * GNU General Public License für weitere Einzelheiten.
 * 
 * Sie sollten eine Kopie der GNU General Public License
 * zusammen mit diesem Programm erhalten haben. Wenn nicht, siehe <https://www.gnu.org/licenses/>.
 */
int Pin1 = 10;
int Pin2 = 11;
int Pin3 = 12;
int Pin4 = 13;
int _step = 0;
boolean dir = true; // falsch=im Uhrzeigersinn, wahr=gegen den Uhrzeigersinn
int count=0;
void setup()
{
 pinMode(Pin1, OUTPUT);
 pinMode(Pin2, OUTPUT);
 pinMode(Pin3, OUTPUT);
 pinMode(Pin4, OUTPUT);
}
 void loop()
{
 switch(_step){
   case 0:
     digitalWrite(Pin1, LOW);
     digitalWrite(Pin2, LOW);
     digitalWrite(Pin3, LOW);
     digitalWrite(Pin4, HIGH);
   break;
   case 1:
     digitalWrite(Pin1, LOW);
     digitalWrite(Pin2, LOW);
     digitalWrite(Pin3, HIGH);
     digitalWrite(Pin4, HIGH);
   break;
   case 2:
     digitalWrite(Pin1, LOW);
     digitalWrite(Pin2, LOW);
     digitalWrite(Pin3, HIGH);
     digitalWrite(Pin4, LOW);
   break;
   case 3:
     digitalWrite(Pin1, LOW);
     digitalWrite(Pin2, HIGH);
     digitalWrite(Pin3, HIGH);
     digitalWrite(Pin4, LOW);
   break;
   case 4:
     digitalWrite(Pin1, LOW);
     digitalWrite(Pin2, HIGH);
     digitalWrite(Pin3, LOW);
     digitalWrite(Pin4, LOW);
   break;
   case 5:
     digitalWrite(Pin1, HIGH);
     digitalWrite(Pin2, HIGH);
     digitalWrite(Pin3, LOW);
     digitalWrite(Pin4, LOW);
   break;
     case 6:
     digitalWrite(Pin1, HIGH);
     digitalWrite(Pin2, LOW);
     digitalWrite(Pin3, LOW);
     digitalWrite(Pin4, LOW);
   break;
   case 7:
     digitalWrite(Pin1, HIGH);
     digitalWrite(Pin2, LOW);
     digitalWrite(Pin3, LOW);
     digitalWrite(Pin4, HIGH);
   break;
   default:
     digitalWrite(Pin1, LOW);
     digitalWrite(Pin2, LOW);
     digitalWrite(Pin3, LOW);
     digitalWrite(Pin4, LOW);
   break;
 }
 if(dir){
   _step++;
 }else{
   _step--;
 }
 if(_step>7){
   _step=0;
 }
 if(_step<0){
   _step=7;
 }
 delay(1);

}

Dateien📁

Keine Dateien verfügbar.