Einen Arduino programmieren.... Rover

Einen Gleichstrommotor steuern

Einen Motor kann man nicht direkt an einen Arduino anschießen. Der Strom ist zu hoch und würde ihn sofort zerstören.

  • 1 + 2 Anschluss für den Gleichstrommotor 1
  • 4 Eingang für die Spannungsversorgung (+)
  • 5 GND (-)
  • 6 5V Ausgang
  • 7 ENA Geschwindikeit des Gleichstrommotor 1
  • 8 IN1 Drehrichtung des Gleichstrommotor 1
  • 9 IN2 Drehrichtung des Gleichstrommotor 1

    L298

    Verkabelung

  • Motortreiber L298N

    L298

    Hinweise

    Jumper:

    Die Jumper 7 und 12 müssen entfernt werden.

    Befehle:

    digitalWrite(PIN, WERT),
    analogWrite(PIN, WERT);
    pinMode(PIN, OUTPUT);
    pinMode(PIN, INPUT);
    

    Drehrichtung:

    Dabei sehen die Drehbewegungen folgendermaßen aus:
    
    LOW bedeutet = 0   HIGH bedeutet = 1
    
    IN1=LOW / IN2=LOW = Der Motor steht still
    
    IN1=LOW / IN2=HIGH = Der Motor dreht vorwärts
    
    IN1= HIGH / IN2=LOW = Der Motor dreht rückwärts
    

    Geschwindigkeit:

    Über den Eingang ENA wird mit einem PWM-Signal (Impulsbreitensteuerung) die Geschwindikeit geregelt.

    digitalWrite(mo_v_L_IN1, LOW); 
    digitalWrite(mo_v_L_IN2, 1);
    analogWrite(mo_v_L_ENA_pwm, speed);
    

    Lösungsansatz:

    Aufgabe

    Schreibe ein Unterprogramm für die Motorsteuerung

  • speed = 60 - Motor dreht vorwärts mit der Geschwindikeit 60.
  • speed = -60 - Motor dreht rückwärts mit der Geschwindikeit 60.
  • speed = 0 - Motor stoppt.
  • Ändere das Programm - je 4 sec vorwärts - stopp - rückwärts

    Hinweise

    abs(speed):

    Die Funktion 'abs(speed)' liefert den absoluten Wert.
    abs(60) = 60
    abs(-60) = 60

    move(speed):

    move(int speed)
    {
      if(speed > 0)
      {
        digitalWrite(mo_v_L_IN1, LOW); 
        digitalWrite(mo_v_L_IN2, HIGH);
      } else {
    
        ...
      }
      analogWrite(mo_v_L_ENA_pwm,abs(speed));
    } 
    
    Uno-Pinout     Nano-Pinout     ESP32-Pinout

    Lösung

    Es ergibt sich folgende mögliche Lösung.
  • Lösungsansatz:

    Aufgabe

    Ändere das Unterprogramm so ab, damit 4 Motore gesteuert werden können

    Füge eine Umkehr der Drehrichtung ein.

    Hinweise

  • Name der Variablen:
    von MOTOR VORNE LINKS an IN1 dann nach Pin 2 wird:
    
    #define mo_v_L_IN1 2
    
  • mache aus:
    move(int speed)
    {
      if(speed > 0)
      {
        digitalWrite(mo_v_L_IN1, LOW); 
        digitalWrite(mo_v_L_IN2, HIGH);
      } else {
        digitalWrite(mo_v_L_IN2, HIGH); 
        digitalWrite(mo_v_L_IN1, LOW);
      }
      analogWrite(mo_v_L_ENA_pwm, abs(speed));
    } 
    
    ... ein eigenes Unterprogramm!

  • invertiere die Geschwindigkeit, wenn sich der Motor in die falsche Richtung dreht
    if(invert_li_v) {speed =* -1;}
    

    Lösung

    Es ergibt sich folgende mögliche Lösung.