Projekt ESP32 Arduino RC Sound und Licht Controller

Hallo Leute,

Habe soeben ein grösseres Software-Update für meinen neuen ESP32 Arduino RC Sound und Licht Controller veröffentlicht:

Neu:
  • Blinker "Tik-Tak" Geräusch
  • Motor-Lautstärke abhängig von Gasstellung, viel realistischer!
  • Neue Sounds
  • Jeder Sound kann unabhängig in seiner Lautstärke eingestellt werden
Video:

Viele weitere Sachen sind geplant.

Ich hoffe, es gefällt euch und freue mich über eure Kommentare und Nachbauten!

EDIT Stand 12.2.2021. Als Autor kann ich nun ältere Beiträge editieren, also hier der aktuelle Stand zusammengefasst:
Mittlerweile kann das Ding viel mehr, zum Beispiel SBUS, IBUS, PPM, Ausgänge für PWM Servosignale, diverse simulierte Getriebe, Motorbremse etc.

Ein Funktionsbeschrieb ist hier zu finden:

Kurzanleitung mit Funktionsübersicht:

Das ist die aktuelle 30 Pin Durchloch-Version:
30PinAssembled.jpg

Und das ist die kompaktere 30 Pin SMD Version:
30pinSmdVersion.jpg
Diese kann sehr einfach gemäss dem PDF in diesem Ordner bestellt werden:
Die Eagle und Gerber Boarddaten sind ebenfalls dort zu finden.

Montageanleitung SMD Version:

Montageanleitung Durchloch Version:

Hier ein paar Videos mit dem Ergebnis:
Tamiya King Hauler mit synchronisiertem 3 Gang Schaltgetriebe:

Demonstration virtuelles 3 Gang Getriebe, Flysky FS-i6X im SBUS Mode, Lichtsteuerung:

älteres Video mit Demonstration des Schaltgetriebes:
https://www.youtube.com/watch?v=D6Vi5RX1rec

älteres Video mit Demonstration der simulierten Wandlerautomatik:
https://www.youtube.com/watch?v=E6Y6p1xSt4M

WPL B36 Ural 375D mit simuliertem 3 Gang Schaltgetriebe:
https://www.youtube.com/watch?v=do2-DQ5u_oM

WPL C44KM TOYOTA Land Cruiser:
https://www.youtube.com/watch?v=NKvIMJU6aVM

Erste Demonstration mit sehr frühem Softwarestand:
https://www.youtube.com/watch?v=IKqIH0PLWcM

EDIT Stand 20.2.21:
Probleme und Lösungen werden ab sofort ausschliesslich hier behandelt
 
Zuletzt bearbeitet:

BlackbirdXL1

Mitglied
Hach, bin ganz ungeduldig :D

Zusatzgeräusche wie "Druckluftzischen" oder E-Motor Geräusch bei Winden bzw. Hydraulikgeräusche sind immer das I-Tüpfelchen.
 
Zuletzt bearbeitet:
Hä, wo ist der Beitrag denn hingekommen? :oops: Hier ist er ja! Hätte später sicher auch einen eigenen Thread eröffnet.

Danke für die positiven Rückmeldungen! Nehme gerne noch weitere Vorschläge entgegen.
 

BlackbirdXL1

Mitglied
Eine Idee: Ausbaufähig mit Zusatzmodul in Form eines Multiswitch.
Also ein separater Multiswitch welcher auch eigenständig arbeiten kann, in der Art wie beim BEIER USM-RC2

Einen Multiswitch haben die Niederländer schon auf Arduino-Basis gemacht:

12+2 Arduino Multiswitch
 

BAXL

Admin
Mitarbeiter
Vielleicht kannst Du noch etwas dazu schreiben, wie das mit der Hardware aussieht, ich glaube da hapert es bei vielen hier. Das wäre dann eine runde Sache. :)
 
Das wird kommen. Da aber momentan punkto Pinbelegung noch einiges im Fluss ist, ist es dafür noch zu früh. Grob gesagt ist mit jeden I/O pin ein 330Ohm Widerstand in Serie geschaltet. Somit sind die Pins gegen Kurzschluss geschützt und LED können direkt angeschlossen werden. Super Bright LED müssen mittels BC337-25 Transistor geschaltet werden. Die Spannungsversorgung kommt von einem 7805 Regler. Der Vibrationsmotor hat einen IRLZ44 Mosfet dazwischen geschaltet, inkl. 1N5819 Freilaufdiode. Grobe, handgezeichnete Schemas sind hier zu finden: https://github.com/TheDIYGuy999/Rc_Engine_Sound_ESP32
 

yoshi

Betreiber
Mitarbeiter
Der Vibrationsmotor hat einen IRLZ44 Mosfet dazwischen geschaltet, inkl. 1N5819 Freilaufdiode.
Warum die zusätzliche Freilaufdiode? Der IRLZ44 hat doch schon eine.

Und verwende besser IRs mit einem N am Ende z.B. IRL530N. Die arbeiten ab eine Gatespannung von 5 V innerhalb ihrer Spezifikationen. Tritt man dem Gate mit 12 V in den Hintern, dann schaltet der viel schneller und wird noch niederohmiger.
 
Eine Idee: Ausbaufähig mit Zusatzmodul in Form eines Multiswitch.
Also ein separater Multiswitch welcher auch eigenständig arbeiten kann, in der Art wie beim BEIER USM-RC2

Einen Multiswitch haben die Niederländer schon auf Arduino-Basis gemacht:

12+2 Arduino Multiswitch
Ist eine Idee. Muss mir da noch Gedanken zu machen, wie möglichst viele Funktionen geschaltet werden können. Bin da mit den diversen erhältlichen RC Sondermodulen nicht so sattelfest, da ich die Elektronik meistens selber mache
 
Kleines Update: habe es jetzt geschafft, ein Standard PPM Signal aus der Trainer-Buchse in einem ESP32 einzulesen. Es können sicher 8 Kanäle (bei Abstrichen bei der Geschwindigkeit auch mehr) gelesen werden.

Das schafft die Grundlage, mit nur einem Draht mehrere Kanäle für diverse Funktionen einzulesen und mit sehr vielen Empfängern kompatibel zu sein. Bisher muss jeder Kanal separat verbunden oder die nur mit meinem "Micro RC" Empfänger kompatible serielle Schnittstelle genutzt werden.
IMG_8263.jpg

Als nächstes werde ich den Code im Sound und Licht-Controller einbauen.

Code:
// Tested and working on ESP32, reading signal from teacher connector of a Reely GT2 EVO transmitter


#define NUM_OF_CHL 8          // we are working with an 8-ch-Transmitter
#define NUM_OF_AVG 1          // Number of averaging passes

//
// =======================================================================================================
// INCLUDE LIRBARIES
// =======================================================================================================
//

//#include <Servo.h>

//
// =======================================================================================================
// PINS AND GLOBAL VARIABLES
// =======================================================================================================
//

#define PPM_PIN 34


volatile int valuesInt[NUM_OF_CHL + 1] = {0}; // Input values
volatile int valuesBuf[NUM_OF_CHL + 1] = {0}; // Buffered values
volatile byte counter = NUM_OF_CHL;
volatile byte average  = NUM_OF_AVG;
volatile boolean ready = false;
volatile unsigned long timelast;
unsigned long timelastloop;

// Create Servo objects
/*Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;*/

// Pin change interrupt
//portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;

//
// =======================================================================================================
// PPM INTERRUPT
// =======================================================================================================
//

void readPpm() {
  unsigned long timenew = micros();
  unsigned long timediff = timenew - timelast;
  timelast = timenew;
  if (timediff > 2500) {  // Synch gap detected:
    valuesInt[NUM_OF_CHL] = valuesInt[NUM_OF_CHL] + timediff; // add time
    counter = 0;
    if (average == NUM_OF_AVG) {
      for (int i = 0; i < NUM_OF_CHL + 1; i++) {
        valuesBuf[i] = valuesInt[i] / average;
        valuesInt[i] = 0;
      }
      average = 0;
      ready = true;
    }
    average++;
  }
  else {
    if (counter < NUM_OF_CHL) {
      valuesInt[counter] = valuesInt[counter] + timediff;
      counter++;
    }
  }
}

//
// =======================================================================================================
// MAIN ARDUINO SETUP (1x during startup)
// =======================================================================================================
//

void setup() {
  Serial.begin(115200);
  Serial.println(F("Start reading PPM-Signal from Remote-Control"));
  pinMode(PPM_PIN, INPUT_PULLDOWN);
  attachInterrupt(digitalPinToInterrupt(PPM_PIN), readPpm, RISING);
  timelast = micros();
  timelastloop = timelast;

  // Servo pins
  //servo1.attach(A0);
  //servo2.attach(A1);
}

//
// =======================================================================================================
// MAIN LOOP
// =======================================================================================================
//

void loop() {
  if (ready) {
    unsigned long timenew = micros();
    Serial.print(timenew - timelastloop); Serial.print(" | "); // Starting from here, our signals are printed
    for (int i = 0; i < NUM_OF_CHL; i++) {
      Serial.print(valuesBuf[i]); // Signals im ms
      if (i < NUM_OF_CHL - 1) Serial.print(" - "); // Channel separator
    }
    Serial.println();
    ready = false;
    timelastloop = timenew;
  }


//servo1.write(map(valuesBuf[0], 100, 0, lim1L, lim1R) ); // 45 - 135°
//servo1.write(map(valuesBuf[0], 1000, 2000, 45, 135) ); // 45 - 135°
//servo2.write(map(valuesBuf[1], 1000, 2000, 45, 135) ); // 45 - 135°

}
 

DFENCE

Mitglied
Doofe frage, was bringt es die Teacher Schnittstelle ab zugreifen wenn der Sound im Auto sein soll ? Willst du den ESP als Sender nutzen ?
 
Nein, ich hatte einfach kein anderes PPM Signal zur Hand. Also habe ich dieses genommen. Im Fahrzeug wird es natürlich vom Empfänger kommen.
 
Das Elektronik-Gerüst in der Schlafkabine des King Hauler nimmt Form an:
  • Sound- und Licht-Controller inkl. Stromversorgung mittels Abzweigkabel
  • ESC
  • Empfänger
  • Rüttler-Motor
Die Kabel für Rücklichter und Hauptschalter sind durch eine gebohrte und gefeilte Öffnung (Tamiya hat diese vergessen) im Boden herausgeführt.

IMG_8325.jpg
 
Top Bottom