Anschluss des Motortreibers

Jeder Motor benötigt 3 Eingänge. An Pin 1 und Pin 9 werden die Motoren prinzipiell ein- bzw. ausgeschalten. Über Pulsweitenmodulation kann hier auch die Geschwindigkeit geregelt werden. Pin 2 und 7 bzw. Pin 10 und 15 sind für die Laufrichtung verantwortlich der Motoren verantwortlich. Von Pin 4,5 12 und 13 muss nur einer auf GND geschalten werden. 

     Effekt
Pin 5: HIGH Pin 6: LOW Motor dreht sich
Pin 5: LOW Pin 6: HIGH Motor dreht sich
Pin 5: LOW Pin 6: LOW Motor dreht sich nicht
Pin 5: HIGH Pin 6: HIGH Motor dreht sich nicht

Pulsweitenmodulation

Normalerweise können auf einen Pin nur digitale Werte (HIGH, LOW) ausgegeben werden. Auf die Pins 3, 5,6, 10 und 11 erkennbar an der Schlange ˜ ("Tilde") können auch mit Hilfe des Befehls analogWrite(Pinnummer, Wert) analoge Werte ausgeben werden. Als Wert sind ganze Zahlen zwischen 0 und 255 zulässig. Hiermit ist es also möglich die Drehzahl eines Gleichstrommotors zu regeln.

Bei der Pulsweitenmodulation (PWM) wird die Spannung innerhalb einer Periodendauer ganz schnell zwischen 0V und 5V geschalten. Dadurch ergibt sich, dass nicht die gesammte Zeit Spannung anliegt und deshalb weniger Energie zur Verfügung steht.

Befehl Tastgrad
analogWrite(pin,0) 0%
analogWrite(pin,64) 25%
analogWrite(pin,128) 50%
analogWrite(pin,191) 75%
analogWrite(pin,255) 100%
Quelltext zum Testen
int motor1_A=11;
int motor1_B=10;
int motor1_enable=9;
   
int motor2_A=5;
int motor2_B=6;
int motor2_enable=3;
int v= 200;

   
void setup(){
  Serial.begin(9600);
  pinMode(motor1_A,OUTPUT);
  pinMode(motor1_B,OUTPUT);
  pinMode(motor1_enable, OUTPUT); 
   
  pinMode(motor2_A,OUTPUT);
  pinMode(motor2_B,OUTPUT);
  pinMode(motor2_enable, OUTPUT); 
}
   
void loop(){
  VorLinks(v);
  VorRechts(v);
 delay(1000); 
  StopLinks();
  StopRechts();
 delay(1000); 
 
}

void VorRechts(int v){
    digitalWrite(motor1_A,LOW);
    digitalWrite(motor1_B,HIGH);
    analogWrite(motor1_enable,v); 
   
}

void VorLinks(int v){
    digitalWrite(motor2_A,HIGH);
    digitalWrite(motor2_B,LOW);
    analogWrite(motor2_enable,v);
   
}

void StopRechts(){
    digitalWrite(motor1_A,LOW);
    digitalWrite(motor1_B,LOW);
    analogWrite(motor1_enable,0); 
}

void StopLinks(){
    digitalWrite(motor2_A,LOW);
    digitalWrite(motor2_B,LOW);
    analogWrite(motor2_enable,0);   
}