• Hallo Zusammen, Aufgrund der aktuellen Situation setzten wir die Möglichkeit aus, sich mit Gmail zu registrieren. Wir bitten um Verständnis Das RCMP Team

Projekt ESP32 Arduino RC Sound und Licht Controller

D

Deleted member 1492

Gast
Die Standard BEC wie in Reglern für RC Modelle sind nicht gerade Leistungswunder und kommen bei kräftigen Servos oft an ihre Grenzen.
Es ist sicher sinnvoll, den "Leistungsteil" des Soundcontrollers mit den LED Pins und dem Verstärker separat zu versorgen.
Außerdem wird möglicherweise auch noch ein Vibrationsmotor dort angeschlossen.
 
Auf den Videos ist zu sehen, dass du im Stand "Gas gibst" ohne dass sich der Truck bewegt. Das würde bedeuten, dass der ESC in dem Moment nicht angesteuert wird, obwohl irgendein Gang über den 3-Wege Schalter ja drin sein muss. Gibt es dann noch einen Taster oder ähnliches als "Kupplung"? Wenn der Schaltservo und der ESC sowieso vom ESP32 gesteuert wird, dann könnte man ja eine Art "Automatikgetriebe" umsetzen. 3-Wege-Taster zum hoch- und runterschalten. Wenn man irgendwie die Drehzahl/Geschwindigkeit messen könnte, kann ja auch der Controller das Hoch- und Runterschalten des Tamiya Getriebes automatisch übernehmen.
Ja, der ESC wird in dem Fall nicht angesteuert. Aktiviert wird der "Leerlauf" über "Mode1", wie du in "adjustmentsRemote.xlsx" sehen kannst. Bezüglich Getrieben gibt es:
  • Simulierte Wandlerautomatik oder Doppelkupplung mit 3, 4 oder 6 Gängen. Beim Wandlerautomat wird auch der Schlupf des Drehmomentwandlers simuliert.
  • Simuliertes 3 Gang Schaltgetriebe (gesteuert über 3 Stellung Kippschalter)
  • Echtes TAMIYA 3 Gang Getriebe, auch über 3 Stellung Kippschalter gesteuert. Das Getriebe kann während der Fahrt geschaltet werden, da über die Soundcontroller-Software die Motordrehzahl automatisch angepasst und somit synchronisiert wird. Beim Herunterschalten wird automatisch Zwischengas gegeben und beim Hochschalten Gas weggenommen. Also ist es eigentlich eine Halbautomatik.
  • Weiter ist als Versuch ein sequenzielles virtuelles 16 Gang Getriebe vorhanden.
Bei den simulierten Getrieben ist die "Motordrehzahl" (das Motorgeräusch) bzw. das Übersetzungsverhältnis rein virtuell, also in Software gelöst. Der "richtige" Motor hat immer das selbe Übersetzungsverhältnis. Weiter wird bei den Schaltgetrieben die Kupplung simuliert. Beim Gas geben greift irgendwann die Kupplung. Ab dann ist die Motordrehzahl via die jeweilige Übersetzung des gewählten Ganges an die Raddrehzahl bzw. das ESC-Signal gebunden. Beim Schalten wird die virtuelle Kupplung geöffnet und die Motordrehzahl kann sich in den Grenzen der simulierten Massenträgheit des Motors langsam an die gewechselte Übersetzung angleichen. Voraussetzung für ein realistisches Verhalten ist ein ESC mit einer guten Lastregelung. Das heisst, dass die Motordrehzahl möglichst proportional zum PWM Signal an den ESC sein muss. Neu kann auch mit Anpassungskurven gearbeitet werden, um nicht lineare ESC wie den Hobbywing Fusion verwenden zu können.

Sehr wesentlich für ein realistisches Verhalten ist die virtuelle Massenträgheit des Fahrzeuges. Das heisst, es kann sich nicht unnatürlich schnell in Bewegung setzen oder abbremsen. Um das Ganze noch realistischer zu machen, wird der Motorsound aus diversen Komponenten last- und drehzahlabhängig zusammengemischt.
 

Skorpishor

Mitglied
Apropos 6 V. Ist ein bißl out of context, aber finde nichts in net. Kleine Projekt mit mein Junior angefangen: Ein Wurf Gleiter als Motorsegler umzubauen. In Grunde als eine halbe Nachmittags Projekt gedacht.
Ich habe ein billige esc für ein minimotor (ich glaube von eine kleine Drone).
Der esc liefert +-8,2 V (von volle 2 Cellen Lipo) natürlich "PWM-irt". Und mein 3.7 V Motorchen sofort verbrannt.
Ein 7205 zwischen ESC und zweite Motor wird sofort zu heiß (bei 3V Spannungsdrop und etwa 400mA?), hätte ich nicht gedacht das der kleine so viel Strom zieht.
So hab ich ein mini 360 dc-dc buck converter auf Basis von LM2596 zwischen akku un motor - super Antrieb für der kleine Aldi Wurfgleiter in Umbau.
Dann der esc dazwischen, und siehe da, motor dreht 10 Sekunden und dann von LM2596 kommt nächste Rauchwolke.
Ich nehme an die PWM Ausgang wird von Buck Convertern (zweite Model, derselbe Rauch) nicht geliebt.
Habt ihr eine Idee dazu? Oder eine Alternative wie ich die Spannung reduziere? Natürlich etwas sehr klein und Leicht.
 

Bastler1024

Mitglied
6V liegen beim PAM8403 laut Datenblatt als max. Rating - sollte also theoretisch funktionieren...

Fürs Testen auf dem Schreibtisch habe ich mir dein Board über PCBWay bestellt, aber für den Truck möchte ich eine minimalistische und platzsparende Schaltung aufbauen und meine Idee ist die 6V vom Quicrun WP-1080 zu nehmen und über ein AMS1117 mit 3.3V das ESP32-WROOM-32 Modul zu versorgen (macht ja das dev board auch). Die 6V direkt für LEDs (Vorwiderstand muss sowieso individuell berechnet werden) und für den Verstärker kann man 1 V über eine Diode oder Z-Diode abfallen lassen. Spricht etwas gegen so einen Aufbau?
 
Zuletzt bearbeitet:

Dragondriver

Mitglied
Manchmal steht man sich selber auf der Leitung.o_O
Heute Morgen noch mal in Ruhe alles kontrolliert und da ist es mir wie Schuppen von den Augen gefallen und es hat Klick gemacht. :)
Bis auf Blinker geht jetzt Alles. Bei den Blinkern bin ich trotz mehrmaliger Kontrolle der Einstellungen noch nicht darauf gekommen, warum die nicht gehen. Aufgegeben habe ich noch nicht. Werde da demnächst noch mal versuchen.


Edit: Mit den Blinkern hat mir keine Ruhe gelassen und die gehen jetzt auch.
 
Zuletzt bearbeitet:

Dragondriver

Mitglied
Lag am Sender. Habe da Dualrate für die Lenkung am Samstag für eine Probefahrt mit dem neuen Chassis verstellt, weil der Weg zu groß war. Daran hatte ich nicht mehr gedacht :rolleyes:. Stand unter 70%. Da kann die Blinkerautomatik auch nicht reagieren. Muss das also mechanisch noch hinbekommen. Oder auch der vehicle.h Datei ediert bekommen, so das die Blinker bei der ersten Servobewegung angehen.
 

carst

Mitglied
Hallo Martin,

Ich hab schon lange nichts mehr eingestellt, arbeite derzeit am Ural mit Deinem Soundmodul. Dazu möchte ich gern die Ausgangssignale für den Anhänger per Arduino und Funk (NRF24L01 Modul) übertragen. Leider funktioniert es noch nicht so wie es soll, (eigentlich gar nicht, nach einschalten des Senders leuchten alle LED's ). Kannst Du mir bitte helfen und kann ich Dir die Codes hier einstellen, oder soll dazu ein neues Thema eröffnet werden?
VG Carsten
 
D

Deleted member 1492

Gast
Wäre mal interessant ohne Arduino, der ESC 32 hat Wlan on Board.

Wozu ein neues Thema, hier helfen alle die mitmachen.
 

carst

Mitglied
Danke Hermann, ich werde mal die beiden Codes (Sender und Empfänger) einstellen. Idealerweise kann einer helfen oder diese so verändern, dass es funktioniert.

Sender:

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001"; //Byte of array representing the address. This is the address where we will send the data. This should be same on the receiving side.
int button_pin = 2;
int button_pin1 = 3;
int button_pin2 = 4;
int button_pin3 = 5;
int button_pin4 = 6;
int button_pin5 = 9;
boolean button_state = 0;
boolean button_state1 = 0;
boolean button_state2 = 0;
boolean button_state3 = 0;
boolean button_state4 = 0;
boolean button_state5 = 0;

int Taste = 0;

void setup() {
pinMode(button_pin, INPUT_PULLUP);
pinMode(button_pin1, INPUT_PULLUP);
pinMode(button_pin2, INPUT_PULLUP);
pinMode(button_pin3, INPUT_PULLUP);
pinMode(button_pin4, INPUT_PULLUP);
pinMode(button_pin5, INPUT_PULLUP);
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
}
void loop(){
button_state = digitalRead(button_pin);
if(button_state == LOW){Taste = Taste + 1;}
button_state1 = digitalRead(button_pin1);
if(button_state1 == LOW){Taste = Taste + 2;}
button_state2 = digitalRead(button_pin2);
if(button_state2 == LOW){Taste = Taste + 4;}
button_state3 = digitalRead(button_pin3);
if(button_state3 == LOW){Taste = Taste + 8;}
button_state4 = digitalRead(button_pin4);
if(button_state4 == LOW){Taste = Taste + 16;}
button_state5 = digitalRead(button_pin5);
if(button_state5 == LOW){Taste = Taste + 32;}


radio.write(&Taste, sizeof(Taste));
Taste = 0;
delay(5);
}

Empfänger:

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
boolean button_state = 0;
boolean button_state1 = 0;
boolean button_state2 = 0;
boolean button_state3 = 0;
boolean button_state4 = 0;
boolean button_state5 = 0;


void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, address);
radio.setPALevel(RF24_PA_MIN);
radio.startListening();
}

void loop()
{
if (radio.available())
{
boolean Taste[6] = {0,0,0,0,0,0};
radio.read(&Taste, sizeof(Taste)); //Reading the data

button_state = (boolean (Taste[1]));
button_state1 = (boolean (Taste[2]));
button_state2 = (boolean (Taste[4]));
button_state3 = (boolean (Taste[8]));
button_state4 = (boolean (Taste[16]));
button_state5 = (boolean (Taste[32]));

digitalWrite(2, !button_state);
digitalWrite(3, !button_state1);
digitalWrite(4, !button_state2);
digitalWrite(5, !button_state3);
digitalWrite(6, !button_state4);
digitalWrite(9, !button_state5);

delay(5);
}
}

VG Carsten
 

Bastler1024

Mitglied
Ich kenne die nRF24 lib nicht, aber nach dem Blick in die Doku sieht es hier nach einem Problem beim richtigen Empfangen von Daten aus. Der Sender sieht OK aus, außer dass für 6 Werte über Bit Masken ein Byte statt Int (4 Bytes) ausreicht.
Versuch mal folgendes (nur relevante Code Teile hier):

Sender:
C-like:
byte Taste = 0;
...

button_state = digitalRead(button_pin);

if(button_state == LOW){Taste |= 0x01;}
button_state1 = digitalRead(button_pin1);
if(button_state1 == LOW){Taste |= 0x02;}
button_state2 = digitalRead(button_pin2);
if(button_state2 == LOW){Taste |= 0x04;}
button_state3 = digitalRead(button_pin3);
if(button_state3 == LOW){Taste |= 0x08;}
button_state4 = digitalRead(button_pin4);
if(button_state4 == LOW){Taste |= 0x10;}
button_state5 = digitalRead(button_pin5);
if(button_state5 == LOW){Taste |= 0x20;}
...
Empfänger:
C-like:
byte Taste;
radio.read( &Taste, sizeof(Taste));

button_state = Taste & 0x01;
button_state1 = Taste & 0x02;
button_state2 = Taste & 0x04;
button_state3 = Taste & 0x08;
button_state4 = Taste & 0x10;
button_state5 = Taste & 0x20;
 

Onkel_Tom

Mitglied
I am also quite sure that is only a activation on every delivered FS-i6X
I you would get (but I do not think so) some different variant, the firmware is available by https://www.flysky-cn.com/fsi6x and is a very easy update. So you can order it with no fears.
To unlock the channels you have to go to the hidden menu. To do this, press both sticks down to the left and then switch on. Then switch the channels to "on" in the menu item "aux switches".
 

Stalinger

Mitglied
Tönt nach Fehlverdrahtung. Die + Pins der LED (die langen) müssen alle gemeinsam parallel angeschlossen werden. Theoretisch ist dazu nur ein Draht nötig. Was passiert, wenn du den 6 poligen Stecker der Rücklichter aussteckst?
Das Getriebe einfach an einen 3 Stellungs-Kippschalter-Kanal anschliessen und unabhängig vom Soundcontroller laufen lassen. Es wird dann in Stillstand als Geländereduktion geschaltet.

Jede LED ist soweit richtig angeschlossen. Ich habe jetzt 3 Boards getestet und bei allen habe Ich das gleiche Problem.
Blinker links leuchtet minimal sobald einmal Gas/Vorwärts gegeben wird und geht dann nach Zeitraum X mit den Scheinwerfern aus.
Beim Rückwärtsfahren bleibt den Blinker Rechts dauerhaft an, bis wieder in Neutral

Wenn Ich aber an dem "6" poligen PINs (Rücklichter) keine LED dran habe geht alles ?


Gruss Stalinger
 
Top Bottom