Hallo zusammen,
Ich hatte das Problem, keine genaue Anleitung zu finden, wie man einen ESC mittels eines Arduino kalibriert. Wie man dies mittels einer Funke bewerkstelligt, findet man zu Hauf. Ist aber im Prinzip tatsächlich das Gleiche. Die diversen Programme mit delays zwischen den einzelnen Schritten funktionierten aber nicht richtig. Meist war das Ergebnis eher zufällig bzw. nicht reproduzierbar. Ich will jetzt nicht behaupten, dass ich das Optimum gefunden habe, aber es ist reproduzierbar und funktioniert. Vielleicht kann ich dem einen oder anderen Anfänger hier eine kleine Hilfe geben. Hier das kleine Tool:
#include <Servo.h>
int min = 1000;
int max = 2000;
Servo myServo[4];
void setup()
{
Serial.begin(115200);
Serial.println("*******************************");
Serial.println("* ESC Arming 2 *");
Serial.println("* *");
Serial.print ("* ");Serial.print(__DATE__);Serial.print(" ");Serial.print(__TIME__);Serial.println(" *");
Serial.println("*******************************");
Serial.flush();
myServo[0].attach(10);
myServo[1].attach(11);
myServo[2].attach(12);
myServo[3].attach(13);
Serial.println("Setup Done");
}
void loop()
{
static bool state = false;
if(!state) {
for(uint8_t i = 0; i < 4; i++) {
myServo[i].writeMicroseconds(max);
}
Serial.print("Maximum Power ");Serial.print(max);Serial.println("microseconds is set.");
Serial.println("Turn on the engine and press Return.");
while(!Serial.available());
Serial.read();
state = !state;
Serial.flush();
}
else {
for(uint8_t i = 0; i < 4; i++) {
myServo[i].writeMicroseconds(min);
}
Serial.print("Minimum Power ");Serial.print(min);Serial.println(" microseconds is set.");
while(!Serial.available());
Serial.read();
state = !state;
Serial.flush();
for(uint8_t i = 0; i < 4; i++) {
myServo[i].writeMicroseconds(min+100);
}
Serial.print("Turn on with ");Serial.print(min+100);Serial.println(" microseconds.");
while(!Serial.available());
Serial.read();
Serial.flush();
for(uint8_t i = 0; i < 4; i++) {
myServo[i].writeMicroseconds(min);
}
Serial.print("Stops all motors with ");Serial.print(min);Serial.println(" microseconds.");
Serial.println("Turn off the Battery");
while(!Serial.available());
Serial.read();
Serial.flush();
}
}
Es scheint sehr wichtig zu sein, dass das später auszuführende Programm, in meinem Fall ein Quadrocopter, den microseconds-Minwert (z.B. 1000µS) setzen muss, bevor eine Hauptroutine ausgeführt wird, in der die ESC´s betrieben werden.
@ Moderator: Ist das so OK? Ich habe hier im Forum nichts Entsprechendes gefunden. Ich möchte nichts Falsches verbreiten, bzw. Anfänger verwirren.
Gruß Kucky