ESP32 Dronen Projekt

Hi,

ich träume schon länger von dem Eigenbau meiner eigenen Drohne und zwar aus eigener Produktion mit 3D Drucker, CNC Fräse und eigener Programmierung!

Dafür benötige ich neben weiteren Ideen zur Planung auch in gewisser Weise hilfe bei der Realisierung und zwar speziell, wenn es um die Wahl der elektronischen Komponenten und dessen Ansteuerung geht.

Neben der Möglichkeit die Drone konventionell manuell per Fernsteuerung steuern zu können, eventuell auch über den Boardeigenen Webserver über das Smartphone, soll es neben einer Kamera auch mit einigen Sensoren ausgestattet werden um sich zum Beispiel selbst beim Flug vor Kollision mit Wänden selbst zu schützen oder aber auch via GPS navigierbar sein.

Bei flügen im Innenbereich sollen die Sensoren dann auch bei manueller Steuerung verhindern, das die Drone gegen wände gesteuert werden kann...

So...

Ich beschäftige mich zunächst mit der Frage, wie ich eigentlich mit dem ESP32 die Motorsteuerung bewerkstelligen kann. Nehmen wir mal an er hat 4 Motoren, welche das sind ist auch noch fraglich. Ich hatte zunächst RC DC Motoren im Sinn, die haben teilweise eine enorme Leistungsaufnahme und können ohne Übersetzung schon eine hohe Drehzahl aufbauen.
Allerdings wie ansteuern? Irgendwie per PWM? Gibt es ein digitalen Poti der über PWM-Werte den Motor regeln kann? Was würde sich dafür sonst noch eignen?

Ich habe nach längerem Suchen so etwas gefunden... Eignet sich das vielleicht dafür?

Ich freue mich auf euren Input.

Grüße MrZortrax

Nimm doch für jeden Motor einen Regler und steuere den mittels (Servo-) PWM an.
Die Links stammen vom DIY-Quadcopter aus dieser Sammlung hier.

Hi, danke für die Verlinkung. Wäre eine Idee.

Wobei ich diese Regler schon recht teuer finde und gedacht habe es müsste auch günstiger funktionieren.

Hmm.
Wenn Du Brushless-Motoren verwendest, müsstest Du selbst kommutieren. Ich habe keine Ahnung, ob ein Arduino das - neben der Flug- und Sensorkontrolle - leisten kann. So teuer finde ich die jetzt nicht; je nach Motor und benötigtem Strom kann das auch mal schnell dreistellig werden.

Hi nochmal!

Wie kann ich beim ESP32 analog Read benutzen?
Welche Pins sind kompatibel, und wie deklarier ich Sie? A0 A1 etc funktioniert hier hier nicht... Der einfache Pin angeben führt nicht zum Ergebnis...

Danke für die Info

Viele Pins des ESP32 können das. Welche Pins das können, sagt das Pinout deines ESP32s. Es gibt verschiedene Versionen des ESP32s.

analogRead(GPIO); sollte funktionieren.

  • Du musst schon auch das Pinout deines ESP32 posten, damit wir sehen was du da hast.
  • Zusätzlich einen kurzen Sketch damit wir sehen was du da programmiert hast.
  • Sowie eine Angabe, WAS GENAU nicht funktioniert. "Führt nicht zum Ergebnis" ist keine ausreichende Analyse!

Hi zusammen,

danke für die Rückmeldung.

Hier wäre mein Pinout...

Und hier gerne mehr Infos über den Sketch. Ich brauche Spannungsüberwachung. Entsprechend habe ich mich an folgendes Tutorial gehalten. Früher hatte ich auch eine funktionierende Version davon, allerdings auf einem Arduino Uno oder Nano und ich glaube ich hatte da auch keine genaue Anpassung an die Widerstände im Sketch vorgenommen.

Es geht um den unteren Teil. Spannungsmessung bis 30V.

Bei der Anpassung der Werte R1 und R2 habe ich die Frage in welchem Format ich das betrachten und anpassen soll... Das ist hier etwas uneindeutig beschrieben. ich habe bei der 10K = 9,93K und bei der 100K = 100.0K gemessen. Was muss ich jetzt dort eintragen? R1 = 100000.0? R2 = 9930.0?

Woher kommt das REF_VOLTAGE bzw. Wofür ist es? Ggf. wenn ich das jetzt nochmal betrachte habe ich da ggf auch noch fehler drin. Warum ist der Ground der Batterie mit dem Ground vom Board zusammengeschlossen? Das wäre das einzige, was bei meiner Platine nicht so ist...

#define PIN_TEST A0

#define REF_VOLTAGE 5.0
#define PIN_STEPS 1024.0

const float diodeVoltage = 0.538;  // forward voltage of the used diode in Volts
const float R1 = 99200.0;          // exact resistance of R1 (= 100 kOhm)
const float R2 =  9990.0;          // exact resistance of R2 (= 10 kOhm)

float vout = 0.0, vin = 0.0;
int rawValue = 0;

void setup()
{
    Serial.begin(9600);
    pinMode(PIN_TEST, INPUT);
}

void loop()
{
    rawValue = analogRead(PIN_TEST);
    vout = (rawValue * REF_VOLTAGE) / PIN_STEPS;
    vin = vout / (R2 / (R1 + R2));

    if (vin < 0.09) {
        vin = 0.0; // suppress noise
    } else {
        vin += diodeVoltage;
    }

    Serial.println("U = " + String(vin) + " V");
    delay(1000);
}

Wie muss ich in dem Fall Beispielsweise einen meiner PINS auf dem Board ansprechen?
Danke für die Hilfe und Erklärungen!

Am sichersten ist es, du sprichst die Pins jeweils mit der "GPIO" Nummer an. Also im Sketch nur die Zahl verwenden.

ADC2 ist schlecht falls du mal WIFI verwenden möchtest.

Probier mal

IO35 also ein

constexpr byte PIN_TEST {35};

das sind Eingänge am ADC1:

  • ADC1_CH0 (GPIO 36)
  • ADC1_CH1 (GPIO 37)
  • ADC1_CH2 (GPIO 38)
  • ADC1_CH3 (GPIO 39)
  • ADC1_CH4 (GPIO 32)
  • ADC1_CH5 (GPIO 33)
  • ADC1_CH6 (GPIO 34)
  • ADC1_CH7 (GPIO 35)

ADC2 wie gesagt, nicht in Verbindung mit Wifi:

  • ADC2_CH0 (GPIO 4)
  • ADC2_CH1 (GPIO 0)
  • ADC2_CH2 (GPIO 2)
  • ADC2_CH3 (GPIO 15)
  • ADC2_CH4 (GPIO 13)
  • ADC2_CH5 (GPIO 12)
  • ADC2_CH6 (GPIO 14)
  • ADC2_CH7 (GPIO 27)
  • ADC2_CH8 (GPIO 25)
  • ADC2_CH9 (GPIO 26)

Ich glaube nicht daß Du ohne jegliche Erfahrung von null einen Quadricopter programmieren und bauen kannst.

Ein Quadricopter ist nicht selbststabiliserend wie viele Flugzeugmodelle bei denen man nur die Steuerung auf neutral stellen muß und das Flugzeug stabilisiert sich selbst. EIn Quadricopter muß aus den Steuerungssignalen der Fernsteuerung und aus seiner Lage (Abweichung von der Waagerechten, Drehung in den Achsen) den schub und damit die Drehzahl jedes Motors errechnen damit er stabil in der luft bleibt. Ist die Ansteuerung zu klein schmiert er ab. ist sie zu groß schmiert er ebenfalls ab.

Fang mal mit einem Bausatz auf Arduino-Basis oder einen anderen Controller an und bringe den zum liegen.

Für die meisten Drohnen braucht es einen Drohnenführerschein und eine Versicherung. Neuer Drohnenführerschein nach EU-Drohnenverordnung 2021
Luftfahrt Bundesamt - Allgemeine Informationen

Noch was: Wenn Dir 16,5 Euro für einen Motorregler zu viel sind dann laß es bleiben. Für eine Drohne wird Du Geld ausgeben und wirst schnell mal 4 stellig.

Grüße Uwe

Top Danke!

Uwe, es geht eher mehr um den Spaß und daraus resultierenden Lernerfolg.

Mag sein das ich das Ding nichtmal in die Luft bekomme. Aber vielleicht auch doch! Ein Bausatz wäre auch ne Idee. Reizvoll ist es für mich das in Kombination mit Fräse, 3D Druck und Co zu realisieren und quasi alle Anschaffungen mal zusammenwirken zu lassen.

Ja ganz abgesehen von den offiziellen rechtlichen Regelungen... Lassen wir die mal außenvor.

Zu teuer ist mir die Steuerung nicht. Ich glaube jedenfalls das ich mit dieser verlinkten Steuerung jedenfalls nicht in der Lage sein könnte, das der ESP32 die Drohne zu irgendwelchen GPS koordinaten navigiert.

Ich habe mir da ein eigenes Regelungssystem überlegt. Aber wie gesagt, dafür ist das was ich jetzt brauche alles Vorarbeit.

Danke trotzdem.

Ich sehe die "Vorarbeit" mit einem Bausatz sinvoller da man da mal sicher weiß, daß das Ding am Ende wenn alles richtig funktioniert fliegt. Bei einer selbst entworfenen Variante fehlt diese Sicherheit.
Der Bausatz soll zum erlernen Dienen. Nicht hält Dich auf daß wenn Du erfahrung gesammelt hast eine Drohne selbst zu entwerfen.

Grüße Uwe

Nochmal eine Frage zum Sketch.

Ich erhalte tatsächlich falsche Werte. Woran kann das liegen?

Wofür ist der ref_voltage? was sind hier die pin_steps?

Die Referenz bei ESP32 ist

Per design the ADC reference voltage is 1100 mV ,

#define REF_VOLTAGE 5.0
#define PIN_STEPS 1024.0

"ich habe bei der 10K = 9,93K und bei der 100K = 100.0K gemessen. Was muss ich jetzt dort eintragen? R1 = 100000.0? R2 = 9930.0?"
JA

Du rechnest mit 5V und 1024 das gilt nur für Nano, UNO, Mega , auch nicht immer
Also past nicht zusammen
1,1V und 4096 eintragen
noch was die ADC Streuen ein wenig, sind nicht im unteren und oberen Bereich lineal
ESP haben 12Bit ADC was ergibt 4096 Dezimal
Arduinos haben 10Bit ADC = 1024

Okay super! Vielen Dank auch für die Infos.

Leider scheint hier immer noch was nicht zu passen. Aktuell erhalte ich bei Spannungseingang von 4,03V auf dem Seriellen Monitor: 1,32V raus.

Eins noch. Warum muss bei der Schaltung der Ground vom ESP mit dem Ground von der Batterie auf der gleichen Leitung laufen?

Wenn das nicht so ist, können 0V Uno und 0V vom 9V Block unterschiedliches Potenzial haben. Womit jegliche Berechnung von anliegender Spannung nicht mehr funktioniert. Damit sie auf gleichen Potenzial sind werden sie verbunden, es wird ein gemeinsamer Ground gebildet.

Danke für die Ausführung. Ist verständlich.

Wäre nur noch zu kären, warum mit der Änderung auf 1,1V falsche Messergebnisse erscheinen...

Wenn ich das auf 5V zurückstelle sind wir näher dran aber noch immer 0,19V zu weit weg vom tatsächlichen Messergebnis mit Multimeter

Hast Du mal die Versorgungsspannung Deines MC gemessen?
Du nimmst die immer mit 5V an, das ist sie aber in den seltensten Fällen wirklich.

Gruß Tommy