Hallo zusammen, ich möchte hier mein aktuelles Software-Bastelprojekt vorstellen: Eine DSM2 Fernsteuerung, die auf einem gewöhnlichen Gamepad basiert.
Als Sender wird das Modul Tx1-K1 von Deltang verwendet, das sich über eine serielle Schnittstelle ansprechen lässt.
Controller und Sender werden über einen Raspberry Pi miteinander verbunden und angesteuert. Der Raspberry Pi ist ein günstiger Mini-Computer auf Linux-Basis, der viele Möglichkeiten zur Hardwareerweiterung bietet. Er besitzt einen Erweiterungsport, an dessen serielle Schnittstelle der Sender angeschlossen wird.
Als Gamepad wird hier exemplarisch der DualShock 3 Controller der Sony PlayStation verwendet. Er wird über einen Bluetooth-USB-Adapter mit dem Raspberry Pi verbunden.
Ein USB-WiFi-Adapter sowie ein beliebiges Smartphone ermöglichen optional die Konfiguration und Bedienung per Weboberfläche.
Die einzelnen Komponenten werden auf dem Raspberry Pi eingerichtet und über eine in Python geschriebe Software miteinander verknüpft. Bisher sind damit folgende Funktionen umgesetzt: * Betrieb von 4 unabhängign Modellen mit je 7 Kanälen über das DSM2-Protokoll * Die Auswahl des aktiven Modells sowie Binden über den Controller oder optional per Weboberfläche * Steuerparameter der Modelle können über die Weboberfäche im Betrieb verändert werden
P1020960_2.JPG - Bild entfernt (keine Rechte)
Da der Raspberry Pi noch weitere Anschlüsse besitzt sind für den stationären Betrieb auf Modulen/Modellbahnanlagen noch weitere Funktionen denkbar: * Steuerung von Lichtern und Servos über eine Erweiterungskarte * Steuerung von Lokomotiven über SRCP
Erste Praxistests mit zwei umschaltbaren Modellen verliefen schon erfolgreich. Nun muss die Software noch verfeinert und die Weboberfläche ausgebaut werden.
Für einen geschätzten Gesamtpreis von 120EUR ist der Aufwand im Vergleich zu einer konventionellen Fernsteuerung schon höher. Mit ein bischen Arbeit in der Softwareentwicklung bietet sich aber auch die Möglichkeit einer individuellen Kanalbelegung und komplexer Mischeinstellungen.
Vielleicht ist diese Spielerei ja für den ein oder anderen auch interessant.
Interessanter Ansatz. Das wird quasi das RC Gegenstück zur herkömmlichen digitalen DCCar oder OpenCar bzw. Lokomotiv Steuerung über den Rechner... Ich werde es mal im Auge behalten...
Nette Grüße vom Toni
> Die Rechtschreib- und Gramatikfehler sind Ausdruck meiner Kreativität ...<
Auch ein interessantes Projekt! Benutzt der PS-Controller ein eigenes (offenes) Protokoll oder ganz offen als normales HID? Gefühlt hätte ich nämlich immer gesagt das solche Konzerne sich was hübsches proprietäres basteln :-).
der Controller lässt sich über Bluetooth verbinden und benötigt dann eine Software, die im Hintergrund läuft. Danach verhält er sich aber wie ein normaler Joystick. Also nicht ganz 'Plug and Play', aber ich weiß auch nicht wie sich das bei anderen Geräten verhält.
ich habe mir vor ca 2 Wochen auch das TX1-K1 gekauft (gibt es auch bei Lipoly.de) Hatte aber gedacht das ich es einfacher hin bekomme mit der Programmierung als per PPM. Na ja hab heute mal David (Deltang) angeschrieben und gefragt ob er ein Beispiel Code für mich hat. Darauf hat er mir den Link zu deinem Projekt geschickt. Wie klein die Welt doch ist ;-)
Ich habe vor das Sendemodul per Arduino und zwei analogen Joysticks anzusprechen. Ist also die etwas günstigere Variante. (einen Pi habe ich hier auch noch rum liegen) Ich weiß noch nicht ob ich das mit dem Übertragungsprotokoll richtig verstanden habe. Wenn ich es richtig verstehe sind das die Min Mid und Max Hexwerte pro Kanal
1 2 3 4 5 6 7 8 9 10
Kanal Kanal name Min String Mitte Strg Max Strg Word Wert Wort Wert Wort Wert 0 Gas / Pitch 0x0000 0x01FF 0x03FF 1 Querruder 0x0400 0x05FF 0x07FF 2 Höhenruder 0x0800 0x09FF 0x0BFF 3 Sitenruder 0x0C00 0x0DFF 0x0FFF 4 Fahrwerk 0x1000 0x11FF 0x13FF 5 Aux 1 0x1400 0x15FF 0x17FF 6 Aux 2 0x1800 0x17FF 0x1BFF
Aber wie bilde ich jetzt die Checksumme Kannst du mir das mal an einem Beispiel zeigen.
Byte 1 Checksum (sum of bytes 2-16 cast to 1 byte) Byte 2 Not used (can be any value) Bytes 3-16 2 bytes per channel with following structure 0b000 CCC 9876543210 - 000 = not used (normally zeros) - CCC = channel number (0=Thr, 1=Ail, 2=Ele, 3=Rud, 4=Gear, 5=Aux1, 6=Aux2) - 9876543210 = 10bit channel position
so send something like:
sum needs calculated 0x00 second byte is not used
// all chan send same data PPPPPPPPPP is a 10 bit int //or 8 would be easier depending on the accuracy you need B000000PPPPPPPPPP B000001PPPPPPPPPP B000010PPPPPPPPPP B000011PPPPPPPPPP B000100PPPPPPPPPP B000101PPPPPPPPPP B000111PPPPPPPPPP
for(int i = 0; i < 7; i++) { //The Random Value for each channel. value is exklusiv, //rnd(0, n) generate a value from 0 to n-1 unsigned int value = random(0, 1023
byte high = highByte(value) | (i << 2); //Hige and Low Byte byte low = lowByte(value); //from the 10 Bit of Channlel Value
data[i * 2 + 2] = high; // Storing the high and data[i * 2 + 3] = low; // low share of each channel in byte array } unsigned int checksum = 0; // Checksumme set to 0
for(int i = 1; i < 16; i++) // Current calculate checksum { checksum += data[i]; } data[0] = (byte)checksum; delay(500); // can be determined even reduced or eliminated for(int i = 0; i < 16; i++) {
}
Serial.write(data,16); // Output of the byte array at the transmitter module }
Zum Binden des Empfängers muss der Bindestecker auf dem Empfänger gesteckt werden und dann mit Strom versorgt werden. Dann wird das Sendemodule mit Strom versorgt (Der Arduino muss dafür nicht angeschlossen werden). Jetzt muss Pin 1 vom Sendemodul mit GND für ca. 2 Sec. verbunden werden (Obere und Untere Pin NICHT den Mitlernen Pin !!!) Pinbelegung und Beschreibung -> http://www.micronradiocontrol.co.uk/docs/dt/dt-tx1-k1-1.pdf wen der Bindevorgang abgeschlossen ist, den Empfänger ausschalten und den Bindestecker entfernen.
Nun kann das Sendemodul mit Strom und dem Aruino verbunden werden. zum Schluss den Empfänger mit Strom versorgen. Wenn alles glatt gegangen ist, solltet ein Angeschlossenes Servo zufällige Positionen anfahren.
ja die Problem sind damit gelöst. Obwohl ich jetzt doch ein PPM Modul benötige da ich jetzt ein Andern weg einschlagen werde. So bald ich dort etwas weiter bin, werde ich hier in einen eigenen Beitrag berichten.
Man tüftelt an einem Projekt, um dann festzustellen, dass es mittlerweile etwas besseres bzw. effizienteres gibt und das begonnene Projekt wird dann meist unvollendet aufgegeben oder anderweitig umfunktioniert bzw. weiter genutzt.
Naja, macht nix, aber hätte ja sein können, dass es da schon ein Endergebnis gibt, was wir nur noch nicht kannten.
Nette Grüße vom Toni
Rechtschreib- und Gramatikfehler sind Ausdruck meiner Kreativität ...