Motorsteuerung

Ich bräuchte nochmal eure Hilfe,

ich würde gerne diesen Motor:

an einem Arduino anschließen, dabei bin ich auf den folgenden Aufbau gestoßen:

Da der Motor nur in eine Richtung drehen muss, sollte es ja reichen einen Pol an GND und den anderen Pol an einem Pin (z.B. Pin 2) anzuschließen.

Jetzt habe ich nur folgendes Problem:

ich versuche den Motor zu Beschleunigen, dann 5sek. auf Maximaltempo drehen zu lassen und dann wieder abzubremsen.

Dafür verwende ich:

void loop() {


  for (i; i < 255; i++) {   //1
    analogWrite(motorPin, i);
    delay(20);
  }
  digitalWrite(motorPin, HIGH);//2
  delay(5000);


  for (i; i > 0; i--) {       //3
    analogWrite(motorPin, i);
    delay(20);
  }
}

Allerdings beschleunigt und bremst der Motor nicht langsam.

Wenn ich allerdings nur 1; 2 oder 3 einzeln verwende macht der Motor was er soll, im gesamten aber leider nicht.

Hat irgendwer eventuell eine Idee woran das liegen könnte?

Danke schonmal im voraus!

Hallo
probier mal [ungetestet]

void loop() {
  for (int i=0; i < 255; i++) {analogWrite(motorPin, i),delay(20); } // beschleunigen
//  digitalWrite(motorPin, HIGH);//2
  delay(5000);                                                       // 5 Sekunden warten
  for (int i=255; i > 0; i--) {analogWrite(motorPin, i),delay(20);}  // verzögern
 delay(5000);                                                       // 5 Sekunden warten

}

PIN2 ist kein Ausgang mit PWM, darum verwende PIN3

Der Motor soll mit maximal 4V betrieben werden, also duty cycle nicht bis 255.
Der Zusammenhang zwischen Spannung und Drehzahl ist nicht linear. Deshalb ggf. Pausen zwischen verschiedenen Erhöhungen einlegen.

Allerdings beschleunigt und bremst der Motor nicht langsam.

Das verstehe ich nicht.

Wie gesagt nur 6 Ausgänge am Arduino UNO sind PWM Ausgänge die mit analorWrite() gesteuert werden können. Allee anderen sind, auch wenn Du analogWrite() verwendest nur an oder aus.

Achtung Die For schleifen sind Blockierend. Du kannst immer nur einen Motor beschleunigen oder bremsen.
Wenn es mehrere gleichzeitig sein sollen dann mußt Du ohne FOR und mit millis() machen.

Grüße Uwe

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.