Arduino- DC motor und Servo mit joystick steuern?
Guten Tag
ich habe folgenden Schaltplan etwas modifiziert. Ich habe noch einen Joystick angeschlossen(y->A1;x->A0) und einen Servomotor(D5).
Nun stelle ich mir die Frage was ich an meinem Code ändern muss, sodass ich mit der Y-Koordinate den Motor in zwei Richtungen und in verschiedenen Geschwindigkeiten drehen lassen kann und mit der X-Koordinate den Servo hin und her drehen lassen kann.
Bis jetzt ist es mir nur gelungen den Motor mit dem Programm zu verstellen(HIGH,LOW)und den Servomotor mit dem Joystick zu steuern, jedoch lief dann der DC Motor nicht.
Ich hoffe es gibt jemanden der mir dabei helfen kann
vielen Dank
Jan
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.
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);
}
}
Danke sieht auf den ersten Blick sehr sinnvoll aus. Ich hoffe ich bekomme es damit hin Vielen Dank
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.