Hallo Zusammen,
ich habe ein mal ein Funktionsaufbau von einer L298n H Brücke, einem Arduino Nano und 2 DC Motoren aufgebaut.
Ich hab mir dann mal das Sketch von einer Seite für mein Aufbau angepasst und auf dem Nano hochgeladen.
Was mir wohl jetzt auffällt und was ich auch schon in einigen YouTube Videos gesehen habe, ist dass
die Motoren beim PWM Signal nicht gleichzeitig anfangen zu drehen. Dort findet eine Verzögerung von ca 1-2 Sekunden statt bis der zweite Motor anfängt sich zu drehen.
Für ein Fahrzeug mit zwei Motoren ist dies nicht sehr optimal, das die so zeitverzögert starten.
Denn somit dreht das Fahrzeug sich zuerst immer in eine Richtung bevor es gerade aus fährt.
Wie kann ich das im Script beheben? Ich möchte natürlich das beide Motoren gleichzeitig über das PWM Signal anfangen sich zu drehen und nicht nacheinander.
// connect motor controller pins to Arduino digital pins
// motor one
int enA = 6;
int in1 = 5;
int in2 = 7;
// motor two
int enB = 3;
int in3 = 4;
int in4 = 2;
void setup()
{
// set all the motor control pins to outputs
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}
void demoOne()
{
// this function will run the motors in both directions at a fixed speed
// turn on motor A
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// set speed to 200 out of possible range 0~255
analogWrite(enA, 200);
// turn on motor B
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
// set speed to 200 out of possible range 0~255
analogWrite(enB, 200);
delay(2000);
// now change motor directions
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(2000);
// now turn off motors
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void demoTwo()
{
// this function will run the motors across the range of possible speeds
// note that maximum speed is determined by the motor itself and the operating voltage
// the PWM values sent by analogWrite() are fractions of the maximum speed possible
// by your hardware
// turn on motors
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
// accelerate from zero to maximum speed
for (int i = 0; i < 256; i++)
{
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// decelerate from maximum speed to zero
for (int i = 255; i >= 0; --i)
{
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// now turn off motors
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void loop()
{
demoOne();
delay(5000);
demoTwo();
delay(5000);
}