Esp-Basiertes ferngesteuertes Rennauto

In diesem Kanal versuchen wir ein fergesteuertes Rennauto zu bauen. Es soll einfach gebaut sein und so, dass es leicht aus Modulen zusammenzubauen ist. Die Funkverbinung soll auf einem Esp basieren. Es soll bei den Campdays 2022 die Möglichkeit geben, ein solches Auto zu bauen und mit nach Hause zu nehmen.

Link zum Git-Repo:
Edugit - Rennauto

To-Do-Liste:

Aufgabe Verantwortlich erledigt
Material für Prototypen bestellen Martin x
Git-Repo-erstellen Benedict x
Prototyp bauen x
Prototyp-Code schreiben x
Bibliotheken für WS erstellen x
Code auf Edu-Git Code hochladen x
Elektronik debuggen x
Material für alle bestellen teilweise

Materialliste

Vollständige Materialliste

Material Lieferant/geschäft Menge pro Auto Preis pro Auto Zustand
ESP ca. 6,80 € AZDelivery bei Amazon 1 Stk. 6,80 € vorhanden
Getriebemotoren (TT) Amazon 2 Stk. 3,20 € bestellt
Motormodul L298N Amazon 1 Stk. 2,40 € bestellt
Servo SG90 22€ Amazon 2 Stk. 4,40 € bestellt
Europlatine 90x55mm 0,5 Stk.
Buchsenleiste 20Pin 2 Stk.
9V-Blockbatterie 1 Stk.
Schalter 1 Stk.
Batterieclip 1 Stk.
LEDs
Widerstände
Hartschaum Bauhaus 0,05 Stk.
Aufputzdose 75 x 75 x 40 mm Bauhaus 2 Stk.
Rundstange Messing ⌀ 4mm, 1m Hornbach 10 cm
Rundrohr Messing ⌀ 6mm, 1m Hornbach 11 cm
Draht in Massen vorhanden vorhanden
Heißkleber vorhanden
dünne Hartschaumplatten
Schaschlikspieße
Farbe

Zustand:

  • vorbereitet
  • vorhanden
  • bestellt
1 Like

Erster Termin (Ideensammlung + Wann & Wo)

  • Freitag, den 21.1. : 16 Uhr
  • Freitag, den 21.1. : 17 Uhr
  • Samstag, den 22.1. : 15 Uhr
  • Samstag, den 22.1. : 16 Uhr
  • Samstag, den 22.1. : 17 Uhr
  • Dienstag, den 25.1. : 17 Uhr
  • Mittwoch, den 26.1. : 17 Uhr
  • Donnerstag, den 27.1. : 17 Uhr
  • Samstag, den 29.1. : 15 Uhr
  • Samstag, den 29.1. : 16 Uhr
  • Samstag, den 29.1. : 17 Uhr
  • Dienstag, den 1.2. : 17 Uhr
  • Mittwoch, den 2.2. : 17 Uhr
  • Samstag, den 5.2. 15 Uhr
  • Samstag, den 6.2. : 16 Uhr
  • Samstag, den 6.2. : 17 Uhr

0 Teilnehmer

1 Like

Das ist eine super Idee!
Ich empfehle, die Steuerung über BT Serial, das habe ich bei meinem Pathfinder Roboter so gemacht, dazu gibt es eine simple Android APP, die die Befehle absetzt. Aber natürlich kann man mit dem ESP auch direkt mit BTSerial senden, da gibt es ja so billige analoge Joysticks, könnte man dazu auswerten.

So habe ich mir das damals zusammengeklaut, das funktioniert mit der APP zusammen gut.
Hänge ich hier mal als “Steinbruch” an, damit ihr schon mal wisst, wie man die Empfangsseite der Verbindung realisieren könnte.
Gruß
Johannes

P.S.:
Die Ansteuerung der Motoren (so N20 oder wie die heissen?) läuft bei mir über einen IC direkt, da braucht man natürlich dann in eurem Fall einen Motorcontroller…
/***

  • created by Rui Santos, https://randomnerdtutorials.com
  • Control 2 DC motors with Smartphone via bluetooth
  • Edited by J. Holstein for his project of pathfinder robot.
    */

#include “BluetoothSerial.h” //Header File for Serial Bluetooth, will be added by default into Arduino

BluetoothSerial ESP_BT; //Object for Bluetooth

int incoming;

// Die Pin Angaben koennen auch anders sein, aber so in etwa…
int motor1Pin1 = 12; // pin 2 on L293D IC
int motor1Pin2 = 13; // pin 7 on L293D IC
int enable1Pin = 14; // pin 1 on L293D IC
int motor2Pin1 = 25; // pin 10 on L293D IC
int motor2Pin2 = 26; // pin 15 on L293D IC
int enable2Pin = 27; // pin 9 on L293D IC

int state;
int flag=0; //makes sure that the serial only prints once the state
int stateStop=0;

// Setting PWM properties
const int freq = 30000;
const int pwmChannel1 = 0;
const int pwmChannel2 = 0;
const int resolution = 8;
int dutyCycle = 255;

void setup() {
// sets the pins as outputs:
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(enable1Pin, OUTPUT);
pinMode(motor2Pin1, OUTPUT);
pinMode(motor2Pin2, OUTPUT);
pinMode(enable2Pin, OUTPUT);

// configure LED PWM functionalitites
ledcSetup(pwmChannel1, freq, resolution);
ledcSetup(pwmChannel2, freq, resolution);

// attach the channel to the GPIO to be controlled
ledcAttachPin(enable1Pin, pwmChannel1);
ledcAttachPin(enable2Pin, pwmChannel2);

Serial.begin(9600);
ESP_BT.begin(“ESP32_LED_Control”); //Name of your Bluetooth Signal
Serial.println(“Bluetooth Device is Ready to Pair”);

// testing
Serial.print(“Testing DC Motor…”);
ledcWrite(pwmChannel1, dutyCycle);
ledcWrite(pwmChannel2, dutyCycle);
}

void loop() {
//if some date is sent, reads it and saves in state

if (ESP_BT.available()) //Check if we receive anything from Bluetooth
/*if(Serial.available() > 0)*/{     
  state = ESP_BT.read();   
  flag=0;
}   
// if the state is 'F' the DC motor will go forward
if (state == 'F') {
  // Macht beid, was Quark ist...
    digitalWrite(motor1Pin1, HIGH);
    digitalWrite(motor1Pin2, LOW); 
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, LOW);
    if(flag == 0){
      Serial.println("Go Forward!");
      flag=1;
    }
}

// if the state is 'R' the motor will turn left
else if (state == 'R') {
    // Gehen
    digitalWrite(motor1Pin1, LOW); 
    digitalWrite(motor1Pin2, LOW); 
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, HIGH);
if(flag == 0){
      Serial.println("Turn LEFT");
      flag=1;
    }
    delay(300);
    state=3;
    stateStop=1;
}
// if the state is 'S' the motor will Stop
else if (state == 'S' || stateStop == 1) {
    digitalWrite(motor1Pin1, LOW); 
    digitalWrite(motor1Pin2, LOW); 
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, LOW);
    
    if(flag == 0){
      Serial.println("STOP!");
      flag=1;
    }
    stateStop=0;
}
// if the state is 'L' the motor will turn right
else if (state == 'L') {
    digitalWrite(motor1Pin1, LOW); 
    digitalWrite(motor1Pin2, LOW); 
    digitalWrite(motor2Pin1, HIGH);
    digitalWrite(motor2Pin2, LOW);
    if(flag == 0){
      Serial.println("Turn RIGHT");
      flag=1;
    }
    delay(300);
    state=3;
    stateStop=1;
}
// if the state is 'B' the motor will Reverse
else if (state == 'B') {
    digitalWrite(motor1Pin1, LOW); 
    digitalWrite(motor1Pin2, HIGH);
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, LOW);
    if(flag == 0){
      Serial.println("Reverse!");
      flag=1;
    }
}
//For debugging purpose
//Serial.println(state);

}

1 Like

Vielen Dank für die Hilfe. Ein bisschen Hilfe bräuchte ich aber noch, oder zumindest ein paar Erklärungen. Mir ist BTSerial kein Begriff und der Code, den du netterweise mitgeschickt hast, leider auch eher fremd (manche Befehle kenne ich halt noch nicht).

1 Like

Das sind zwei Dinge zusammen geworfen: serielle Kommunikation (UART, was man auch über den USB-Port sprechen kann) und das Ganze dann per Bluetooth.

Den Code schreiben wir dann natürlich in Python.

1 Like

Wikipedia sagt:

Hier reicht es jeweils, die ersten paar Zeilen zu lesen.
Was die BTSerial Bibliothek genau macht weiss ich auch nicht, funktioniert aber: Sendet und empfängt per Bluetoooth meine beliebige Nachricht. Entsprechend kann ich also zwischen 2 ESPs dann eine Kommunikation realisieren. Wenn ihr Python nutzt müsst ihr natürlich etwas vergleichbares dafür suchen, davon habe ich aber so gut wie keine Ahnung.

1 Like

Ich habe im Zuge des Projekts Wetterstation mal ein wenig recherchiert, wie man die Bluetooth-Kommunikation mit dem ESP32 in Micro-Python realisieren könnte.
In dem entsprechenden Discource-Thread habe ich das mal beschrieben.

1 Like

Wöchentliche Meetings zur Vorbereitung

Maximal bis 14. März

  • Montags 17:30h
  • Mittwochs 17:30h
  • Donnerstags 16:45h

0 Teilnehmer

1 Like

Material-Liste pro Rennauto

  • 10 cm Fahrradschlauch (gebraucht)
  • ca. 50 cm² Hartschaum (z.B. Styrodur)
  • 2 Solarmotoren (kleine Bastelmotoren)
  • 1 ESP32
  • 1 Servomotor
  • 1 Aufputzdose
  • 1 rote LED
  • ca. 20 cm Isolierband (oder Lochrasterplatinen oder Pinnbuchsen - irgendeine Möglichkeit, den ESP mit den Verbrauchern zu verbinden)
  • 1 Widerstand 680 Ohm
  • 1 Batteriefach (für drei Batterien)
  • 3 Batterien je 1,5 V

Für die Umsetzung für alle Teilnehmer im Camp brauchen wir:

  • Hartschaumplatten (Baumarkt)
  • Fahrradschlauch (Reste vom Fahrradhändler?)
  • ESP32
  • Solarmotoren
  • Servomotoren
  • Batterien
  • Batteriefächer
  • Isolierband

Vorrätig im Makerspace:

  • 23 Solarmotoren
  • 11 Servomotoren
  • 32 rote LED
  • 9 Batteriefächer
  • 48 Aufputzdosen
  • viele Widerstände

Projektplan

  1. Am 3. Februar Vorstellen der Skizze, der Material-Liste und des Projektplans
    BITTE bis 7. Februar Rückmeldungen (Verbesserungsvorschläge etc.) und auf Termin-Umfrage antworten
  2. Bis 17. Februar ersten Prototyp fertigstellen
  3. Bis 16. März muss Hardware fertig geplant und gestestet sein (alles muss ansteuerbar sein)
  4. Am 31. März spätestmöglicher Bestell-Termin für Material
  5. Ab 25. Juni Camp
2 Likes

Das Rennauto von der Seite, von Vorne, von oben und im dreidimensionalen Anblick skizziert.

2 Likes

Die Session wird voraussichtlich mittwochs stattfinden, beginnend morgen.

1 Like

Ich habe nicht für Mittwoch gestimmt und kann nicht garantieren, dass ich pünktlich da bin. Ich versuche aber trotzdem rechtzeitig da zu sein

1 Like
  • Samstag den 19.2
  • Sonntag den 20.2.
  • Samstag den 26.2.
  • Sonntag den 27.2.

0 Teilnehmer

1. Projektmeeting am 9.2.

Anwesend

  • Martin
  • Benedict
  • Mats
  • J-J

Zur Materialliste hinzugefügt

  • Batterieclip
  • 9v-Blockbatterie
  • Motermodul (2x)

To-Do-Liste

  • Code schreiben
  • Prototyp bauen
  • Material bestellen

2. Projektmeeting am 16.2.

Anwesend

  • Mats
  • Martin
  • Benedict
  • Jonathan

To-Do-Liste

  • Code schreiben
  • Auf Edu-Git Code hochladen
  • Fehlendes Material bestellen
  • Prototyp bauen
  • Material für alle bestellen

Nächstes Treffen: Sonntag, den 20.2. um 11 Uhr digital und im MSB

3.Projektmeeting am 20.02.2022

Anwesend

  • JJ
  • Florian
  • Martin
  • Benedict

Inhalte

Es wurde das Chassis für einen Prototypen fertig gestellt.
Codebestandteile erstellt.

4. Projektmeeting am 23.02.2022

Anwesend

  • JJ
  • Florian
  • Benedict
  • Martin

Inhalte

Debugging der fehlerhaften Programmcodes von Sonntag

5. Projektmeeting

Anwesend

  • JJ
  • Pinguin
  • Martin
  • Nik
  • Benedict
  • Florian
  • Mats

Inhalte

Nik kann sich um die Fehler im Code kümmern

Treffen im MSB am Sonntag, den 13. 3. von 11 bis 18 Uhr

6. Projektmeeting

Anwesend

  • JJ
  • Benedict
  • Florian

Kostenvoranschlag + Materialliste

  • Esp ca. 4 €
  • Solarmotoren ca. 3 €
  • Motormodul 4 €
  • 9V-Blockbatterie 1 €
  • Aufputzdose ca. 2 €
  • Schalter ca. 2 €
  • Batterieclip ca. 30 ct
  • Europlatine ca. 1 €
  • Blue LED ca. 10 ct
  • Servo ca. 7 €
  • Wiederstand ca. 15 ct
  • Draht in Massen vorhanden
  • Heißkleber vorhanden
  • Hartschaum ca. 4 €
  • Fahrradschlauch ca. 1 €

Gesamtkosten ca. 30 €
spätester Bestelltermin: 31. März

7. Meeting am 13.03.2022

Anwesend:

Ziele:

  • Prüfen, warum die Servomotoren nicht funktionieren
  • Hardware fertigstellen

Probleme mit den Servos:

Mit dem ESP32 konnten die Servomotoren nicht angesteuert werden, mit dem ESP8266 aber schon. Daraufhin haben wir bezweifelt, dass ein PWM-Signal aus dem ESP32 erzeugt wird, weshalb wir das mit einem Oszilloskopen bestätigen wollten.
Unsere Servomotoren benötigen eine Frequenz von 50Hz. Diese Frequenz konnten wir am ESP8266 auch nachweisen, beim ESP32 aber nicht. Erst ab einer Frequenz von 611Hz gab der ESP32 ein Signal aus. Mit einer älteren Firmware existiert dieser Bug nicht mehr.
@mwinter kümmert sich um einen entsprechenden Bugreport bei Micropython.

Probleme mit den Antriebsmotoren:

Die Motoren sind zu schwach, um das Auto anzutreiben. Die nächste Aufgabe besteht also darin Motoren mit einem größeren Drehmoment zu finden.

Dinge die noch erledigt werden müssen:

  • Motoren ersetzen
  • Bugreport einreichen
  • Lenkung programmieren
  • Bluetooth-Fernsteuerung programmieren

Sessionbericht von den Campdays

erledigt

  • Es lassen sich die Servos ansteuern
  • Es lassen sich die Motoren ansteuern

Probleme

  • Die Motoren liefern nicht genug Drehmoment
  • Die Servos und Antriebsmotoren lassen sich nicht gleichzeitig ansteuern
    • Mit der aktuellsten Firmware (1.18) gehen nur PWM-Frequenzen > 611 Hz, mit der Firmware 1.17 gehen auch kleinere Frequenzen aber nur eine
    • Die Servos benötigen eine Frequenz von 50 Hz, die Antriebsmotoren von 1000 Hz

Sessionbericht zum Meeting am 30.03.2022

Überarbeitete Materialliste

zeitkritisch

  • Esp ca. 4 €
  • Getriebemotoren (TT) ca. 4 €
  • Motormodul 4 €
  • Servo SG90 ca. 4 €

weniger kritisch

  • Europlatine ca. 1 €
  • Buchsenleiste 60 ct.
  • 9V-Blockbatterie 1 €
  • Aufputzdose ca. 2 €
  • Schalter ca. 2 €
  • Batterieclip ca. 30 ct
  • Blue LED ca. 10 ct
  • Wiederstand ca. 15 ct
  • Draht in Massen vorhanden
  • Heißkleber vorhanden
  • Hartschaum ca. 4 €

Bibliothek für Ansteuerung des Fernlenkautos

  • Erster Entwurf für eine Bibliothek zum Ansteuern des Auto erstellt