Arduino- DC motor und Servo mit joystick steuern?

1 Antwort

Nun, kenne den Motortreiber zwar nicht, aber was mir aufgefallen ist, Du steuerst den Motor auch mit dem Servobefehl an. das ist aber nicht das gleiche wie PWM. Ein Servo hat nur einen kurzen Stellbefehl mit langen Pausezeiten. 1ms Pulslänge und 19ms Pause für links und 2ms Puls mit 18ms Pause für rechts. Alles dazwischen ist individuelle Stellung.

PWM hat aber auch kurze Pausezeiten und lange Steuerzeiten. z.B. 5ms Puls/15msPause für Langsam bis hin zu durchgehendes Signal für max Drehzahl.

Du musst also dein Programm wohl so umschreiben, das ein Analogwert von 0 max PWM links ist, 1023 max PWM rechts und der Mittelwert (am besten mit Totbereich 508-514) für aus. Alles unter 508 muss also in PWM auf den Pin umgerechnet werden, der PWM für links ausgibt und das so, das kleinere Werte immer höhere Pulszeiten ergeben und alles über 514 dann in PWM für Rechts steigend..

Und ob ein Delay mit der Servo.h-Library genutzt werden kann, bin ich mir nicht sicher.

Und natürlich dann auch die PWM-AusgangsPins nehmen für den Motor.

Jaannjan 
Fragesteller
 05.03.2018, 20:44

Vielen Dank für die Antwort

ich war mir dessen bewusst das der dc Motor mit Servo befehlen nicht laufen wird jedoch weiß ich nicht wie ich das umschreibe, da ich noch nicht so viel Erfahrung habe in dem Umgang mit Arduino und das ist jetzt mein erstes eigenes Projekt.

Könntest du mir vllt zeigen wie die Befehle dann aussehen müssen oder einen Tipp geben, kannst natürlich die pins im Code ändern.

0
RareDevil  05.03.2018, 21:49
@Jaannjan

Ist nur eine Idee... Kann sein, das irgendwo Fehler sind... Aber grob sollte es passen:

#include<Servo.h>

Servo servo;

int joyx=0;
int joyy=1;
int joyvalx=511;
int joyvaly=511;
int motpin1 = 3;
int motpin2 = 6;           
void setup () {

pinMode(motpin1, OUTPUT);
pinMode(motpin2, OUTPUT);
servo.attach(5);

}

void loop () {
  servocheck();
  motorcheck();
}
void servocheck(){
  joyvalx=analogRead(joyx);
  joyvalx=map(joyvalx,0, 1023, 0, 180);
  servo.write(joyvalx);
}

void motorcheck(){
  joyvaly=analogRead(joyy);
if (joyvaly >= 508 && joyvaly <= 514){
analogWrite(motpin1,0);
analogWrite(motpin2,0);
}
else if (joyvaly > 514){
joyvaly = map(joyvaly,515,1023,1,255);
analogWrite(motpin1,0);
analogWrite(motpin2,joyvaly);
}
else if (joyvaly < 508){
joyvaly = map(joyvaly,0,507,255,1);
analogWrite(motpin1,joyvaly);
analogWrite(motpin2,0);
}  
}


0
Jaannjan 
Fragesteller
 06.03.2018, 21:48
@RareDevil

Danke sieht auf den ersten Blick sehr sinnvoll aus. Ich hoffe ich bekomme es damit hin Vielen Dank

0