Moin,
Kannst du nun den Wald schon sehen oder bloß Bäume?
Hab ihn schon abgeholzt!
Weil dann könnte ich mich später kurz an den PC setzen und die paar Zeilen schreiben.
Vielen lieben Dank, aber in diesem Fall gar nicht mehr nötig!
Erst mal eine grundsätzliche Frage: wie steuerst Du die Motoren an?
Normalerweise muß dafür ein Signal für die Drehrichtung (vorwärts/rückwärts) und eines für die Geschwindigkeit vorgegeben werden. Das sollte geklärt werden, bevor wir mit Zahlenwerten hantieren
Sorry, hatte ich nicht erwähnt, weil ich die Frage ja auf das Wesentliche reduziert habe.
Die nötigen Zahlen hatte ich im Eingabspost ja geschrieben.
Dennoch schreibe ich es natürlich gerne:
Es handelt sich dabei um die LEGO Power Functions und speziell um den LEGO Technic RC Tracked Racer 42065 für meinen 4-jährigen Sohn.
Dabei ist eine IR Ferbedienung, die aber nur zwei Schaltkanäle mit jeweils Vollgas vorwärts, Stopp, Vollgas rückwärts hat.
Auf der Suche nach einer geeigneten Fernbedienung wurde ich sehr enttäuscht, denn sowas gibt es nicht. Für mich als RC Modellbauer mit über 22 Jahren Erfahrung völlig unverständlich.
Dann habe ich die Lego Powerfunctions Library (PFTransmitter.h) gefunden und einen Playstation Controller und einen Arduino nano v3 gekauft und nun ist die Software fertig und funktioniert
Das coole ist, dass der Lego Empfänger nicht nur Vollgas schalten kann, sondern auch mehrstufig (ich glaube 8 Stufen für je vorwärts und rückwärts, nicht stufenlos, reicht aber) PWM ansteuerbar ist. Und das tut mein selbstgebauter Sender jetzt auch.
Damit lässt sich das Teil natürlich wesentlich besser steuern als mit dem originalen Sender.
Ich musste einfach nur ne Nacht drüber schlafen.
Dann hab ich an meinen RC Sender und den Servomonitor gedacht und mir vorgestellt wie das aussehen muss.
Das hatte ich ja im Eingangpost schon geschrieben, ist mir danach aber auch erst richtig klar geworden.
Dann hab ich mir in Excel ein paar Tabellen aufgemalt und die Ergebnisse erzeugt.
Der Knackpunkt war, dass ich nicht daran gedacht habe Werte zu kappen die über die erlaubte Skala hinausgehen.
Das war dann der Schlüssel zur Lösung.
Mit Wertebereichen für Gas und Lenkung von +/-100 war das dann schnell erledigt.
Mit den Wertebereichen vom Arduino von 0 bis 1023 war das dann doch nochmal ne schöne Knobelarbeit.
Das hat auch nicht auf Anhieb geklappt, also hab ich mir das nochmal in Excel aufgemalt und dann step-by-step entwickelt.
Mit dem Ergebnis dass es nun softwareseitig perfekt funktioniert.
Hier der Extrakt aus dem Code mit der selbsterarbeiteten Lösung meines Problems, die ich euch natürlich nicht vorenthalten möchte:
// Gas = Gas
// Lenkung = Lenkung
// valA = linke Kette
// valB = rechte Kette
// yUp = 0 voll vorwärts
// yMid = 500 stopp
// yDown = 1023 voll rückwärts
// xLeft = 0 voll links
// xMid = 504 gerade
// xright = 1023 voll rechts
//----------------------------linke Kette------------------------------------------------------------------------------------------------------------
if (Gas - Lenkung + xMid < yMid + 1) { // wenn die Differenz aus Gas und Lenkung vorwärts fahren ist
if (Gas - Lenkung + xMid > yUp) { // wenn die Differenz aus Gas und Lenkung weniger als Vollgas vorwärts ist
valA = Gas - Lenkung + xMid; // dann linke Kette = Gas - Lenkung
} else {
valA = yUp; // ansonsten linke Kette = Vollgas vorwärts
}
} else { // ansonsten ist die Differenz aus Gas und Lenkung rückwärts fahren
if (Gas - Lenkung + xMid < yDown) { // wenn die Differenz aus Gas und Lenkung weniger als Vollgas rückwärts ist
valA = Gas - Lenkung + xMid; // dann linke Kette = Gas - Lenkung
} else {
valA = yDown; // ansonsten linke Kette = Vollgas rückwärts
}
}
//----------------------------rechte Kette------------------------------------------------------------------------------------------------------------
if (Gas + Lenkung - xMid < yMid + 1) { // wenn die Summe aus Gas und Lenkung vorwärts fahren ist
if (Gas + Lenkung - xMid > yUp) { // wenn die Summe aus Gas und Lenkung weniger als Vollgas vorwärts ist
valB = Gas + Lenkung - xMid; // dann rechte Kette = Gas + Lenkung
} else {
valB = yUp; // ansonsten rechte Kette = Vollgas vorwärts
}
} else { // ansonsten ist die Summe aus Gas und Lenkung rückwärts fahren
if (Gas + Lenkung - xMid < yDown) { // wenn die Summe aus Gas und Lenkung weniger als Vollgas rückwärts ist
valB = Gas + Lenkung - xMid; // dann rechte Kette = Gas + Lenkung
} else {
valB = yDown; // ansonsten rechte Kette = Vollgas rückwärts
}
}
... ach ja ... wenn's läuft, nen Video wäre 'fett'
Gerne! Hätte ich auch voll Bock drauf. Wenn ich dann die Hardware mal schön gebaut habe wäre das sicherlich auch was für die Rubrik "Zeigt her eure geilen Projekte ! ".
Allerdings:
Leider hapert es noch an der Hardware, speziell die IR Sendediode die ich hier habe ist grottenschlecht dafür.
Reichweite <1m, Öffnungswinkel gefühlt <25°
Naja, kein Wunder, is ja auch nicht für ne IR Fernsteuerung, sondern für eine IR Reflektorlichtschranke (dafür funktioniert die auch).
Aber die hatte ich hier noch rumliegen und war schnell drangesteckt.
Hat jemand ne Empfehlung für ne richtig gute IR Diode für Fernbedienungen?
Liebe Grüße,
Chris