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 2 Jahre, 5 Monaten von Hans-Georg Müller.
-
AutorBeiträge
-
Hans-Georg MüllerGast
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 1int 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
GeorgStefan HermannVerwalterHallo 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
Hans-Georg MüllerGastHallo 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] -
AutorBeiträge