ESC mit Poti Ansteuern vorwärts Rückwerts links Rechts

Hallo zusammen ich bin neu hier im Forum, und ich bin auch neu bei der Arduino Programmierung
ich bin seit einen halbe Jahr beschäftigt an diesen Tollen Projekt die ich einfach nicht weiter komme
und es wäre toll wenn mir jemand dabei helfen könnte zu meine Projekt ich versuche einen Unterwasser Fahrzeug zu bauen ich habe einen Open Source Project gefunden der mit einen Master, Slave, Arduino und einen PS2 Controller ich habe dieses Sketch soweit modifiziert und den PS2 Controller entfernt da ich einen Joystick haben wollte ich habe einen Joystick mit zwei Poti eingeführt und zwar einen 4-Achsen-Joystick-Potentiometer JH-D400X-R4 10K zu meinem Problem habe hinbekommen das der Rechte Motor und der Linke Motor Vorwärts und Rückwerts Laufen wenn der Joystick Hebel nach vorne und nach hinten was aber nicht funktionier ist wenn ich den Joystick nach rechts und nach links Drücken das die jeweiligen Motoren der Rechte und der Linke wenn nach rechts gedrückt nach rechts Fährt und wenn nach links gedrückt nach links fährt. ich bin seit Wochen am Verzweifeln ich hoffe jemand kann mir bei diesen Projekt helfen
mein Code ist wie folgendes:

#include <Servo.h>

Servo escMotorRPin; //Rechte Motor
Servo escMotorLPin; // Linke Motor
 

void setup() {
    escMotorRPin.attach(9); // ESC1 an Pin 9
    escMotorRPin.writeMicroseconds(1500); //inizialisiere die ESC bei 1000
    escMotorLPin.attach(6); // ESC2 an Pin 6
    escMotorLPin.writeMicroseconds(1500);  //inizialisiere die ESC bei 1000

    Serial.begin(9600);
}

void loop() {
    int val; //erstelle eine Variable val
    int val2;
    val= analogRead(A0); //Lese den Pin A0
    val2 = analogRead(A1);
    val = map(val, 0, 1023, 1100, 1900); //Mapping-Wert auf Minimum und Maximum (analogRead geht von 0-1023 und analogWrite geht von 0-255
    
   delay(100);
}

Kommentare ergänzt

du gibst zuerst den Wert von "val" auf beide Motoren aus und eine tausendstel Sekunde später
gibst du den Wert von "val2" auf beide Motoren aus

Wenn das was werden soll dann solltest du als nächstes ca 2 Stunden Konstanten mit selbsterklärenden Namen im Code einsetzen.

Welche ESC ist links?
Welche ESC ist rechts?

Dann benenne die statt "esc1" / "esc2"
mit "escLinks" und "escRechts"

Aber so das das auch wirklich passt
benenne die IO-pins die die ESC ansteuern statt mit "9" und "6"
mit "escLinksPin" und "escRechtsPin"

ebenso für die Variablen "val" und "val2"
Das ist ja furchtbar so nichtssagende Namen !

wie wäre es mit "speedLinks" / "speedRechts"
oder mit

"drehzahlLinks" / "drehzahlRechts"
.
.

Und dann analysiere zunächst einmal mit Papier und Bleistift
wenn das Fahrzeug nach links kurven soll
was bedeutet das qualitativ für die Drehzahlen am linken und am rechten Antrieb?

Qualitativ bedeutet hier keine genaue Zahl sondern nur
welche Drehzahl ist größer welche ist kleiner?

.
.
.
wenn das Fahrzeug nach rechts kurven soll
was bedeutet das qualitativ für die Drehzahlen am linken und am rechten Antrieb?

Qualitativ bedeutet hier keine genaue Zahl sondern nur
welche Drehzahl ist größer welche ist kleiner?

Nächster Schritt wenn du langsam fährst was bedeutet das für die Drehzahl?
Wenn du eine langsame Linkskurve fährst was bedeutet das für die beiden Drehzahlen?
Wenn du eine schnelle Linkskurve fährst was bedeutet das für die beiden Drehzahlen?

Und dann überlege bei 25% Geschwindigkeit
was treten da ungefähr für Zahlenwerte für drehzahlLinks / drehzahlRechts auf?

Und dann überlege bei 50% Geschwindigkeit
was treten da ungefähr für Zahlenwerte für drehzahlLinks / drehzahlRechts auf?

Und dann überlege bei 75% Geschwindigkeit
was treten da ungefähr für Zahlenwerte für drehzahlLinks / drehzahlRechts auf?

Um das Rechenprinzip leichter erkennen zu können kannst du da auch einfach zu rechnende runde Zahlen nehmen.

So jetzt will ich von dir ein paar Notizen sehen bei denen du wenigstens probierst ungefähre Zahlenwerte hinzuschreiben

danke für deine Antwort ich versuche das so umzusetzen ich werde erstmal ein bischen ordnung im den sketch bringen ich werde den rechten und linken pin neu deklarieren aben ich verstehe nicht wie sie es meinen mit den qualitative drehztahlen und mit den 25 50 und 75%

hallo wenn ich Val2 auf beide Motoren gebe dann drehen sie beide Motoren nach rechts wenn ich mit den Stick nach rechts drücke und nach links wenn ich nach links drücke aber es soll nur der rechte motor nach recht drehen wenn ich den rechtestick drücke und den linke motor nach links wenn ich den linke stick drücke ich hoffe es ist verständniss für sie

Also den Text liest du dir jetzt gleich noch einmal selbst durch der ist UNverständlich.

Wie wäre es jeweils mit vollständigen Sätzen?

"Dreht sich Motor nach rechts"

sagt überhaupt nichts darüber aus ob das Ding dann vorwärts oder rückwärts fährt.

Die Aussagesätze sollen die Zusammenhänge EINZELN und eindeutig beschreiben

Ein Beispiel das das Prinzip verdeutlichen soll:
Stick nach rechts: rechter Motor .... / linker Motor .......

Stick nach links: rechter Motor .... / linker Motor .......

Bei den Pünktchen setzt du dann genau passend das Wort "vorwärts" oder das Wort Rückwärts oder dreht sich nicht ein

mein projekt ist ein unterwasser Fahrzeug mit 2 Motoren für die Vorwärts bewegung und einen zentraler Motor für das Untertauchen und Auftauchen, mein problem ist das die beide Motoren Vorwärts und Rückwärts Laufen aber sie bewegen sich nicht einzeln ( Rechts Motor um nach Links sie zu bewegen, Linker Motor um sich nach Rechts sich zu Bewegen ich verwende ein 4 Achse Poti Vor Zurück Rechts Links
mein obere schetch lässt nur die Beiden Motor vorwärts und Rückwärts Laufen aber nicht einzeln Rechts Links daher Brauche ich ihre hilfe ich entschuldige mich für mein schlechtes Deutsch ich bin Italiener und mich gut und richtig auszudrücken ist manschmal ein wenig schwer was das schreiben angeht

Hallo smaily001

Hier kommt ein angepasster Sketch zum Testen.
Vllt muss noch ein Feinschliff vorgenommen werden, da ich selber nicht testen konnte.
Eigentlich ruft diese Aufgabenstellung nach der Umsetzung in OOP, aber es sollte auch mal ohne gehen, bevor hier ein User wieder eine mentale Krise bekommt :slight_smile:

// https://forum.arduino.cc/t/esc-mit-poti-ansteuern-vorwarts-ruckwerts-links-rechts/1256044
// ESC mit Poti Ansteuern vorwärts Rückwerts links Rechts

#include <Servo.h>
Servo escMotorLPin; // Linke Motor
Servo escMotorRPin; //Rechte Motor
// make variables
constexpr uint8_t MotorLeft {6};
constexpr uint8_t MotorRight {9};
constexpr uint8_t PotLeft {A0};
constexpr uint8_t PotRight {A1};
constexpr uint16_t Offset {40}; // für den Mittelstellung des Potis


void setup() {
  escMotorLPin.attach(MotorLeft);
  escMotorLPin.writeMicroseconds(1500);  //inizialisiere die ESC bei 1500
  escMotorRPin.attach(MotorRight);
  escMotorRPin.writeMicroseconds(1500); //inizialisiere die ESC bei 1500
  Serial.begin(9600);
  Serial.println(F("und los gehts"));
}

void loop()
{
  // left motor
  uint16_t potVal = analogRead(PotLeft);
  switch (potVal)
  {
    case 0 ... 512-Offset:
      escMotorLPin.writeMicroseconds(map(potVal, 512 - Offset, 0,  1500, 1000));
      break;
    case 512+Offset ... 1023:
      escMotorLPin.writeMicroseconds(map(potVal, 512 + Offset, 1023, 1500, 2000));
      break;
    default:
      escMotorLPin.writeMicroseconds(1500); // stopp
      break;
  }
  
  // right motor
  potVal = analogRead(PotRight);
  switch (potVal)
  {
    case 0 ... 512-Offset:
      escMotorRPin.writeMicroseconds(map(potVal, 512 - Offset, 0,  1500, 1000));
      break;
    case 512+Offset ... 1023:
      escMotorRPin.writeMicroseconds(map(potVal, 512 + Offset, 1023, 1500, 2000));
      break;
    default:
      escMotorRPin.writeMicroseconds(1500); // stopp
      break;
  }
}

Ich hoffe du kommst damit einen Schritt in deinem Projekt weiter.
Poste mal ein Bild von dem Unterwasserroboter.

vielen vielen dank für deine hilfe ich werde es gleich ausprobieren und melde mich wieder :smile:

1 Like

Hi erstmal danke für die Mühe aber leider funktioniert es nicht wie ich es haben möchte ich habe ein paar Bilder gemacht ist noch nicht fertig ich Bastle seit über einen Jahr daran sobald ich etwas freien Tag habe verbringe ich daran, die Elektronik ist kein Problem für mich nur die Programmierung ich mach das noch nicht so lange. Zurück zum wesentlichen an die Bilder können sie Drei Motoren erkenn zwei für den Schub Vor und Zurück und einen zentral für das tauchen und Auftauchen es sollte so funktionieren das die beiden Schub Motoren gleichzeitig Vorwärts fahren wenn man den Joystick nach vorne Drückt und umgekehrt rückwärts und einzeln wenn man mit Den Joystick Links und rechts drückt das heißt wenn ich mit den Joystick nach rechts Drücke sollte nur einen Motor laufen der andren Motor sollte nicht laufen und das Fahrzeug sollte sich nach rechts bewegen und umgekehrt links auch ich verwende einen 4 Achse Poti nicht die Klassischen PS2 Joystick und oben am Kopf des Joystick noch einen Poti angebracht ich werde ihn für das Tauschen Auftauchen Verwenden. Ich weiß einen schwierigen vorhaben ich verzweifle schon so lange. Ich hoffe sie Können mir dabei helfen.




Es gibt ein Unter-Forum das italienisch spricht / schreibt
Es kommt auf gute und präzise Kommunikation an.
Deshalb entweder google-translate benutzen oder das italienische Forum.

Aber ACHTUNG ! Es ist gegen die Forumsregeln die gleichen Fragen in zwei unterschiedlichen Threads zu stellen.
Poste in diesem thread das zu zum italienischen gewechselt hast

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.