DC-Motor mit Poti, Drehrichtung ändern ab Mittel

Projekte und Tutorials für Arduino Foren StartHardware-Forum DC-Motor mit Poti, Drehrichtung ändern ab Mittel

  • Dieses Thema hat 2 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 4 Wochen von fullzdumps.
Ansicht von 3 Beiträgen - 1 bis 3 (von insgesamt 3)
  • Autor
    Beiträge
  • #9227 Antworten
    Hans-Georg Müller
    Gast

    Hallo,
    ich nutze Nano und Motortreiber L298N, steuere mit Poti die Geschwindigkeit. Geht. Ich würde aber gern in Mittelstellung des Potis=Halt, nach rechts=vorwärts, nach links=rückwärts. Das heißt, ich müsste irgendwie mit 512 arbeiten. Wo müsste ich If Abfragen für den Wert des Potis einbauen (Setup oder Loop)?
    Kann jemand helfen?
    Hier der code für “einfach vorwärts”
    `// Gleichstrommotor 1

    int MotA = 10;
    int in1 = 9;
    int in2 = 8;
    int Speedcontr = A1;
    int Motorspeed = 0;

    void setup()
    {
    Serial.begin(9600);
    pinMode(MotA, OUTPUT);
    pinMode(in1, OUTPUT);
    pinMode(in2, OUTPUT);

    }
    void loop()
    {

    digitalWrite(in1, HIGH); // Motor 1 beginnt zu rotieren
    digitalWrite(in2, LOW);
    Motorspeed = analogRead(Speedcontr);
    Motorspeed = map(Motorspeed, 0, 1023, 0, 255);
    /* die map Funktion liest die Werte von Motorspeed ein,
    die kommen in einem Bereich von 0-1023 (das liefert das Poti)
    und wandelt die passend in einen Bereich von 0-255 ( das kann der Motor)
    */
    //
    //if (Motorspeed<128);
    // digitalWrite(in1, LOW); // Motor 1 beginnt zu rotieren
    //digitalWrite(in2, HIGH);
    //Motorspeed = analogRead(Speedcontr);
    //Motorspeed = map(Motorspeed, 0, 1023, 0, 255);
    if (Motorspeed < 8)Motorspeed = 0;// setzt die Empfindlichkeit für „Stopp“ höher, muss man ausprobieren in Abhängigkeit vom Poti
    analogWrite(MotA, Motorspeed); //Motor1 dreht in Abhängigkeit vom Poti
    Serial.println(Motorspeed);
    }

    Danke
    Georg

    #9228 Antworten
    Stefan Hermann
    Verwalter

    Hallo Hans-Georg,

    ich hab es jetzt nicht aufgebaut, aber probier doch das mal:

    // Gleichstrommotor 1
    
    int MotA = 10;
    int in1 = 9;
    int in2 = 8;
    int Speedcontr = A1;
    int Motorspeed = 0;
    
    void setup() {
      Serial.begin(9600);
      pinMode(MotA, OUTPUT);
      pinMode(in1, OUTPUT);
      pinMode(in2, OUTPUT);
    }
    
    void loop() {
    
      digitalWrite(in1, HIGH); // Motor 1 beginnt zu rotieren
      digitalWrite(in2, LOW);
    
      int theSpeed = analogRead(Speedcontr);
    
      if (theSpeed > 512) {
        digitalWrite(in1, HIGH); // Motor 1 beginnt zu rotieren
        digitalWrite(in2, LOW);
        Motorspeed = map(theSpeed, 513, 1023, 0, 255);
        if (Motorspeed < 8 ) Motorspeed = 0;
        analogWrite(MotA, Motorspeed);
      } else {
        digitalWrite(in1, LOW); // Motor 1 beginnt zu rotieren
        digitalWrite(in2, HIGH);
        Motorspeed = map(theSpeed, 512, 0, 0, 255);
        if (Motorspeed < 8) Motorspeed = 0;
        analogWrite(MotA, Motorspeed);
      }
    
      Serial.println(Motorspeed);
    }

    Liebe Grüße

    Stefan

    #9442 Antworten
    Hans-Georg Müller
    Gast

    Hallo Stefan,
    habe es ausprobiert, klappt und noch etwas verfeinert. Ich habe den Schwellwert für die Mittelstellung eingebaut, damit kann man dann besser “anhalten”. Deine Idee war ausschlaggebend, danke
    [code]
    /*
    DC-Motorsteuerung mit L298N und Poti zur
    Steuerung der Geschwindigkeit und Fahrtrichtung
    über Mittelstellung eines Potis (Schiebereglers)
    von Schorsch für ZFI
    26.03.21
    */
    int enA =9;
    int in1= 4;
    int in2=5;
    int motorspeed = 0;

    void setup() {
    Serial.begin(9600);
    pinMode (enA, OUTPUT);
    pinMode (in1, OUTPUT);
    pinMode (in2, OUTPUT);
    }

    void loop() {
    int PotiMitte=analogRead(A0); //Mittelabgriff Poti lesen
    if (PotiMitte<470){
    digitalWrite(in1,LOW); // Wenn <470, Motoreingänge so stellen
    digitalWrite(in2,HIGH);
    motorspeed=map(PotiMitte,470,0,0,255); //und die Werte “rückwärts lesen”
    }
    else if(PotiMitte>550){
    digitalWrite(in1,HIGH); // Wenn > 555, Motoreingänge umpolen
    digitalWrite(in2,LOW);
    motorspeed=map(PotiMitte,550,1023,0,255);// und ab 550 aufwärts lesen
    }
    else{ // ansonsten (zwische 470 und 550) Motor aus
    motorspeed=0; // Toleranzbereich des Potis, kann man verändern
    }
    analogWrite(enA, motorspeed); // fahr los
    Serial.println(motorspeed); // dient der Ausgabe auf seriellen Monitor, um sich dei Ausgabewerte anzeigen zu lassen
    }
    [/code]

Ansicht von 3 Beiträgen - 1 bis 3 (von insgesamt 3)
Antwort auf: DC-Motor mit Poti, Drehrichtung ändern ab Mittel
Deine Information: