Nr. 47 – DC-Motor mit Propeller ansteuern

Inhaltsverzeichnis

Für dieses Projekt benötigst du

Ein DC-Motor mit Propeller am Arduino Mikrocontrollern ansteuern

Kleine Elektromotoren sind in der Regel Gleichstrommotoren. Die englische Bezeichnung für Gleichstrom ist „Direct Current“. Daher werden kleine E-Motoren auch DC-Motor genannt. Diese Motoren sind häufig Bestandteil von Arduinoprojekten, zum Beispiel in Form von Antrieben für kleine Roboter oder Propeller.

Elektromotoren gibt es in allen Größen und Formen. Bereits kleine Motoren haben oft einen hohen Strombedarf. Neben der Spannung spielt auch die Stromstärke eine wichtige Rolle. Die digitalen Ausgänge der Arduino-Mikrocontroller liefern nur maximal 50 Milliampere (50mA) bzw. 0,05A. Das reicht gerade aus, um kleine Solarmotoren in eine Drehbewegung zu versetzen.

Daher werden Motoren in der Regel nicht direkt mit den Ausgangspins von Mikrocontrollern verbunden, sondern über einen separaten elektronischen Baustein mit separater Spannungsversorgung. Ein solches Modul wird auch H-Brücke genannt.

H-Brücken gibt es als einzelne Bauteile zu kaufen, jedoch ist die Verkabelung von einzelnen Chips umständlich. Daher befinden sich diese H-Brücken im Arduinobereich üblicherweise auf einer Platine, mit Anschlüssen für eine separate Spannungsversorgung und für die Anschlüsse des Mikrocontrollers. Diese fertigen Module heißen dann bspw. Motortreiber oder Motortreibershield.

Möchte man im Arduinobereich einen Gleichstrommotor betreiben, dann muss man sich also mit der Ansteuerung einer H-Brücke auseinandersetzen. Für die ersten Versuche gibt es schöne Module, die einen Motor und eine H-Brücke kombinieren. Für diese Anleitung verwenden wir ein Motor-Propeller-Modul mit der L9110 H-Brücke.

Pinout

Das Propeller-Modul verfügt über 4 Pins mit den Bezeichnungen GND, VCC, INA und INB.

  • GND = GND-Pin des Arduions
  • VCC = 3.3V-Pin des Arduinos
  • INA = Pin 10 des Arduinos
  • INB = Pin 11 des Arduinos

Ansteuerung

Diese H-Brücke nutzt als Eingangssignal ein PWM-Signal, welches vom Arduino-Mikrocontroller erzeugt wird. Am Beispiel des UNO-Mikrocontrollers ist ein PWM-Signal an den Pins 3, 5, 6, 9, 10 und 11 möglich. Am Mikrocontroller erkennt man das an der Welle, die neben dem jeweiligen Pin aufgedruckt ist. 

Das PWM Signal kann mit 256 Abstufungen an die H-Brücke gesendet werden (Zahlenwerte 0 bis 255). Dafür wird der Befehl für die analoge Ansteuerung verwendet: „analogWrite(MotorA, 255);“. „MotorA“ steht dabei für den in diesem Fall verwendeten Pin 10 und die Zahl 255 für die maximale Ansteuerung mit dem Wert „255“.

Geschwindigkeit und Drehrichtung werden durch die beiden Werte von „MotorA“ und „MotorB“ beeinflusst. Je höher die Differenz der beiden Werte ist, desto schneller dreht sich der Motor. Die Drehrichtung hängt davon ab, welcher der beiden Werte höher ist.

Beispielsketche

Drehrichtung: Rechts / Geschwindigkeit: 100%:

analogWrite(MotorA, 0);
analogWrite(MotorB, 255);

Drehrichtung: Links/ Geschwindigkeit: 100%:

analogWrite(MotorA, 255);
analogWrite(MotorB, 0);

Drehrichtung: Rechts / Geschwindigkeit: 50%:

analogWrite(MotorA, 0);
analogWrite(MotorB, 128);

Drehrichtung: Links/ Geschwindigkeit: 50%:

analogWrite(MotorA, 128);
analogWrite(MotorB, 0);

Der folgende Sketch erzeugt 100% Geschwindigkeit, Drehrichtung Rechts.

int MotorA=10; //Pin INA am digitalen PWM Pin D10
int MotorB=11; //Pin INB am digitalen PWM Pin D11

void setup() 
{ 
pinMode(MotorA,OUTPUT); // Pin 10 (Motor-A) als Ausgang definieren
pinMode(MotorB,OUTPUT); // Pin 11 (Motor-B) als Ausgang definieren
} 
 
void loop() 
{
analogWrite(MotorA, 0); // Zahl zwischen 0 und 255. Je höher die Differenz zwischen Motor-A und Motor-B ist, desto schneller dreht der Motor.
analogWrite(MotorB, 255); // Zahl zwischen 0 und 255. Je höher die Differenz zwischen Motor-A und Motor-B ist, desto schneller dreht der Motor.
}

Erweiterung

Die Ansteuerung des Moduls kann auch in Abhängigkeit eines externen Signals erfolgen. Zum Beispiel durch einen Schieberegler oder Drehregler (Potentiometer) der die Umdrehungsgeschwindigkeit steuern soll.

Im folgenden Sketch haben wir am Analogport A0 des Arduino Mikrocontrollers ein Potentiometer (Schieberegler) angeschlossen.

int MotorA=10; //Pin INA am digitalen PWM Pin D10
int MotorB=11; //Pin INB am digitalen PWM Pin D11
int eingang= A0; //Das Wort „eingang“ steht jetzt für den Wert „A0“ (Bezeichnung vom Analogport 0). Hier wird das Signal des Potentiometers angeschlossen.
int sensorwert = 0; //Variable für den Sensorwert mit 0 als Startwert
int Geschwindigkeit = 0; //Variable für die Geschwindigkeit mit 0 als Startwert


void setup() 
{ 
pinMode(MotorA,OUTPUT); // Pin 10 (Motor-A) als Ausgang definieren
pinMode(MotorB,OUTPUT); // Pin 11 (Motor-B) als Ausgang definieren
} 
 
void loop() 
{
sensorwert =analogRead(eingang); //Die Spannung am Drehregler wird auslesen und als Zahl zwischen 0 und 1023 unter der Variable „sensorwert“ gespeichert.
Geschwindigkeit= map(sensorwert, 0, 1023, 0, 255); //Umwandeln des Sensorwertes mit Hilfe des "map" Befehls. Der Befehl wandelt den Sensorwert im Bereich 0-1023 um in einen Zahlenwert zwischen 0 und 255. Dadurch kann der Wert "Geschwindigkeit" direkt zur Ansteuerung im Befehl "analogWrite" verwendet werden. 

analogWrite(MotorA, 0); // Der Wert bleibt bei 0. Die Veränderung des Wertes "MotorB" führt in diesem Sketch zur Veränderung der Motorgeschwindigkeit.
analogWrite(MotorB, Geschwindigkeit); // Durch die Variable "Geschwindigkeit" erfolgt je nach vorherig erfasstem Sensorwert des Potentiometers eine Veränderung der Motorgeschwindigkeit.
}

Funduino - Dein Onlineshop für Mikroelektronik

  • Dauerhaft bis zu 10% Rabatt für Schüler, Studenten und Lehrkräfte
  • Mehr als 2.000 Artikel sofort verfügbar!
  • Über 8 Jahre Erfahrung mit Arduino, 3D-Druck und co.
SALE