3 Brushless Motoren über 3 esc´s analog über Joystick(der kleine für arduino)

so folgendes problem ich will 3 brushless motoren über einen analog joystick für arduino(der kleine mit x-y achse und sw) regeln.

also um sich ein bild zu machen

die brushless motoren 3x 2212 13T 1000KV
die esc´s 3x Simonk 20AMP
JoyStick Breakout Module PS2 Achsen Joystick Game Controller for Arduino PI C51

ok alles china ware bla bla bla… aber einzeln läuft alles soweit

hab den sketch genommen:
http://www.breadboarding.de/brushless-motor/

für einen Motor klappt das ja wenn mann etwas rum spielt.
also:
val = map(analogRead(A0), 0, 1023, 30, 110);
ändert in
val = map(analogRead(A0), 0, 2000, 34, 150);

aber ich schaffe es nicht 3 esc´s gleichzeitig anzustereun sprich

ich will 3 Motoren ansteuern über die x-y achse des sticks,
Motor1= vorwärts über x-achse A0 (512-1023)
Motor2= links über y-achse A1 (0-511)
Motor3= rechts über y-achse A1 (512-1023)

wenn die x-achse nach vorne bewegt wird sollen alle motoren gleich laufen, langsam bis schnell( je nach zugeordnetem wert 0- …)
bewege ich nun den stick leicht nach links soll m1 normal, m2 langsamer bis aus und m3 normal bis schnell laufen
bewege ich nun den stick leicht nach rechts soll m1 normal, m2 normal bis schnell, m3 langsam bis aus aus laufen

mit dem gefunden sketch komme ich nicht weit, hab damit 2 motoren ansteuern können, bis esc und motor defekt.

ich will kein grosses tam tam, das soll nicht fliegen oder sonst was, nur angepasste drehzalen zu der jeweiligen stellung des sticks haben.

PS ich danke allen die mir hier helfen werden, können und wollen. aber an die 10% die 85% der antworten in allen foren ausmachen: ich bin neu in der materie arduino, ja ich habe mich durch mehrere foren gelesen, nein google war keine hilfe, JA ICH BIN DOOF, und nein hier soll nicht über die funktion eines esc´s oder eines bl- Motors diskutiert werden, alles bekannt. ich brauch nur nen sketch der mir die analog eingänge des joysticks in verwärtbare pwm ausgänge zum esc generiert. achso ich hatte 15 jahre kein englisch mehr und der google übersetzer ist für fachenglisch recht unbrauchbar. ICH SCHREIBE IMMER KLEIN, hatte ne 5 in rechtschreibung 4 in grammatik, 1 in physik chemie technik…don’t type any word…
die anderen 90% die sonst nicht antworten aber ne gute idee am start haben sind herzlich dazu gezwungen mir gerne zu helfen

chriz85:
... die anderen 90% die sonst nicht antworten aber ne gute idee am start haben sind herzlich dazu gezwungen mir gerne zu helfen

Ich habe eine gute Idee, wie Du Dein Posting nützlicher machen könntest: Verlinke die Sachen, die Du erwähnst.

Naja, das ist halt eine Idee, die vorwiegend mir nützt. Aber morgen ist Sonntag, da könntest Du eine gute Tat vollbringen :slight_smile:

Gruß

Gregor

Ich erlaube mir mal, Klickbares daraus zu machen:

Motoren:
http://www.ebay.de/itm/4x-A2212-13T-KV1000-Aussenlaufer-Brushless-Motor-fur-RC-Multicopter-Xcopter-/131762058155?hash=item1eada173ab:g:RtYAAOSwxcRW9P57

JoyStick:
http://www.ebay.de/itm/JoyStick-Breakout-Module-PS2-Achsen-Joystick-Game-Controller-for-Arduino-PI-C51-/162218298152?hash=item25c4f6cb28:g:SlcAAOSw~gRV10kn

Gruß

Gregor

Die genaue Hardware ist in diesem Fall ziemlich Wurst.

Ich habe aber die geforderte Funktion noch nicht noch nicht ganz verstanden.

Evtl. könntest du was über den genaueren Aufbau/Anordnung der Motoren in deinem U-Boot Projekt sagen und die gewünschten Steuerfunktionen erläutern.

Was helfen würde ist daß Du dich mal 3 Tage in Arduino einarbeitest.

Zuerstmal muß die Masse des Arduino mit der Masse der 12V zusammengeschalten werden.

Es gibt die servo.h Bibliothek Servo - Arduino Reference mit 2 Beispielen.
Du mußt die Widerstandswerte einlesen und auf 0-180 umrechnen. Dann einfach auf die 3 Servos ausgeben. Ich hab nicht verstanden wie genau Du das haben willst.

Du mußt auch beachten daß die ESC armiert werden müssen damit sie starten.

Grüße Uwe

uwefed:
Du mußt auch beachten daß die ESC armiert werden müssen damit sie starten.

Was für ein schöner eingedeutschter Anglizismus. Im Deutschen armiere ich z.B. Beton mit Stahl :smiley: :wink:

Bei einem ESC würde ich eher von scharfschalten oder aktivieren sprechen. Aber es klingt so schön, wenn man Wörter eindeutscht. Passiert mir auch oft genug beim übersetzen.

die belegung der motoren und esc´s stehen
X-Achse= A0
Y-Achse= A1

servo vor = 6
servo links = 7
servo rechts =8

also ich habe 3 motoren

servo vor
servo links
servo rechts

alle servos bzw bl- motoren sollen über die x achse die im ruhe punkt bei 512 liegt bei einer vorwärts bewegung anfahren (geschwindigkeit =0 bei 512,max bei 1023)
wenn ich den kontroller nun nach links bewege also y kleiner wie 512(glaube ich) soll servo links langsamer werden bis Null und dem entsprechend servo rechts bis max

wenn kontroller nach rechts bewegt wird y größer wie 512 soll servo rechts langsamer werden bis Null und servo links bis max

Dein letzter Absatz hat mir ein Schmunzeln beschert :slight_smile:

Vorweg: Zu ESC, brushless usw. habe ich keine Ahnung!

Die Funktionalität ist mir noch nicht so ganz klar. Wenn vorwärts auf 512, also Geschwindigkeit gleich 0, kann man dann lenken? Wenn Joystick in Mittelstellung aber maximal vorwärts, drehen die Motoren 2 und 3 dann 100% oder 50%?

Aber egal, ich habe mal was zusammengeschrieben, was irgendwie in die Nähe kommen sollte. Vorwärts ist y, Richtung ist x:

unsigned long startzeit;
unsigned long messzeit = 500;
int y, x, xl, xr, m1_vo, m2_li, m3_re;

void setup() {
  Serial.begin(9600);
  startzeit = millis();
  Serial.println("Programmstart");
}

void loop() {
  if ((millis() - startzeit) >= messzeit) {
    Serial.print("y: "); Serial.print(y);
    Serial.print("\tx: "); Serial.print(x);
    Serial.print("\txl: "); Serial.print(xl);
    Serial.print("\txr: "); Serial.print(xr);
    Serial.print("\tm1_vo: "); Serial.print(m1_vo);
    Serial.print("%\tm2_li: "); Serial.print(m2_li);
    Serial.print("%\tm3_re: "); Serial.print(m3_re);
    Serial.println("%");
    startzeit = millis();
  }
  y = analogRead(A0);
  x = analogRead(A1);
  if (y > 512) {
    y -= 512;
  } else {
    y = 0;
  }
  xl = 1UL * x * y / 512;
  xr = 1UL * (1023 - x) * y / 512;
  m1_vo = map(y, 0, 512, 0, 100);
  m2_li = map(xl, 0, 1023, 0, 100);
  m3_re = map(xr, 0, 1023, 0, 100);
}

Die Ausgabe ist in Prozent der maximalen Motordrehzahl.

EDIT: x und y getauscht, nun wie im Koordinatensystem

Irgendwie steigt keiner so richtig durch bei deiner Beschreibung. Mach doch mal eine Skizze mit Motoranordnung und vor allem, was welche Achse ist. Bei mir ist am Stick links rechts die x-Achse und vor/zurück die y-Achse. Wie in einem Disgramm eben auch.

Was soll passieren, wenn du den Stick zu dir her ziehst?

Tut mir leid ich hab das mit dem Joystick falsch bedacht, könnte mir selber eine klatschen, dachte der hat in der maximalen nach vorne bewegung auch gleichzeitig die maximale nach rechts oder links.

p.s. ok x achse = rechts links
y achse = vor zurück
hatte letzte woche erst nach erheblichen rückschlägen und dem enstprechenden maß an alkohol
geschrieben

neue Zeichnung folgt, ich hoffe die ist verständlicher…

Sorry

Nun ist es auf alle Fälle verständlicher. Sieht nach einem 3-Schraubenantrieb von einem Boot aus, ohne Rückwärtsgang.

Oder nach einem einfachen 3-motorigen Flugzeug, welches nur über die Motoren gesteuert wird. Aber das eher nicht bei Verwendung von BL Motoren :slight_smile: :slight_smile: