Jump to content
elektro-skateboard.de

Fernbedienung Eigenbau - schlicht


barney

Empfohlene Beiträge

Geschrieben (bearbeitet)

Nach einem fulminanten Scheitern einer zu groß angesetzten Fernbedienung, habe ich was einfaches gesucht, wo nur noch der Joystick (Doppelpoti) und die Taster angelötet werden müssen. Nach längerer Recherche ist folgendes zu Tage getreten:

 

Externe Links nur für Mitglieder sichtbar

 

Der Name ist schon nicht ohne und schreit nach ... ach was solls.

 

Wunderbare Weise liegt das Programm schon fast komplett vor:

 

für je € 20,- kein Verlust.

 

Durch noch freie Analoge Anschlüsse ist die Akku-Spannungsmessung auch noch möglich.

bearbeitet von barney
Geschrieben
Ich sag nur Wixx-Control :-) V.1.0 :D special open source remote control for self made electro (turbo) boards.

Oder so.

Da hast du noch ganz knapp die Kurve bekommen....

Geschrieben
Da hast du noch ganz knapp die Kurve bekommen....

 

Schon allein der Name ist einen Kauf wert ... verstehe ich das Konzept richtig:

 

1. Senderseitig einen Wixel + Poti und Schalter (am einfachsten aus einem ausgeschlachtete Nunchuk) anbringen

2. Empfängerseitig BamBam-Teensy Controller mit einem weiteren Wixel erweitern und fertig

Geschrieben
Schon allein der Name ist einen Kauf wert ... verstehe ich das Konzept richtig:

 

1. Senderseitig einen Wixel + Poti und Schalter (am einfachsten aus einem ausgeschlachtete Nunchuk) anbringen

2. Empfängerseitig BamBam-Teensy Controller mit einem weiteren Wixel erweitern und fertig

 

Genau das war die Intention. Der Empfänger Wixel muss von USB auf Serielle oder I2C umgebogen werden. Bevorzugt I2C um an den Nunchuk Anschluss angeschlossen werden zu können. Dort liegt auch die 3.3V Versorgungsspannung für den Wixel vor.

6 Analogeingänge, davon einer für die Akkumessung.

 

Also:

2 x Kreuzpoti

2 x Taster (analog) durch Widerstände kann man die Anzahl der Taster am analogen Port erhöhen.

1 x Reserve als analoger Geber

 

@Dude:

Hast du die beiden Programme schon mal angesehen? Die API hat auch Befehle für die Empfangsqualität.

 

VG

 

Barney

Geschrieben

Chrizz bestellt gerade:

 

50 - 500mA LiPo Laderegler für 1S Lithium Polymer Akku 3,7V LiPo / Lader Regler:

Externe Links nur für Mitglieder sichtbar

 

Lipo Akku 3,7 v - 300 mAh:

 

Da ich vom Nunchuk Akku etwas entnervt bin.

 

Ich hoffe die Akkus reichen auch für den Wixel Umbau.

 

 

  • Operating voltage: 2.7 – 6.5 V
  • Operating current: up to approximately 30 mA (can get down to ~100 μA when in sleep mode)
  • Radio
    • Frequency: 2400 – 2483.5 MHz
    • Range: approximately 50 feet (under typical conditions indoors)
    • Bit rate: programmable, up to 350 kbps
    • Effective data rate: up to 10 KB/s

    [*]Size: 0.7" × 1.5"

    [*]Weight without header pins installed: 3.2 g

  • 2 weeks later...
Geschrieben (bearbeitet)

DHL machts möglich.

 

Heute sind die beiden Wixel angekommen. 10 Minuten später waren beide mit der "wireless_adc_tx" und "wireless_adc_rx" app eine Fernbedienung, die noch auf den USB-Port senden. Das nenne ich mal überzeugend.

 

Jetzt muss die Ausgabe nur noch auf die serielle Schnittstelle, später auf I2C umgeleitet werden. Serielle stelle ich mir noch einfach vor, I2C etwas anspruchsvoller.

 

Reichweitentest steht noch an.

 

Der Nachteil ein meiner Bestellung war, dass die Beinchen schon alle angelötet sind. Also nur was für das Demoboard. Gut muss ja auch sein.

 

Abmaße:

37mm x 18mm x 7mm

 

 

 

35-D2-F3-45 25448   229   229   229   229   229   229
35-D2-F3-45 25548   229   229   229   229   229   229
35-D2-F3-45 25648   229   229   229   229   229   231
35-D2-F3-45 25748   229   229   229   229   229   229

 

35-D2-F3-45: Eindeutige Wixel ID

25448: Fortlaufender Counter 16 Bit, hier alle 100ms ein neues Paket

229: Die Werte der 6 ADC im Sender, hier nichts angeschlossen.

bearbeitet von barney
Geschrieben

Und der nächste Schritt

 

ID: BA-36-83-C8

Time: 7153

RSSI (Feldstärke in dB):-53 je kleiner desto besser

Danach 6 ADC Werte

BA-36-83-C8, 7153, -53,  229,  229,  229,  229,  229,  231
BA-36-83-C8, 7253, -82,  229,  229,  231,  229,  229,  231
BA-36-83-C8, 7453, -63,  229,  229,  229,  229,  229,  231
BA-36-83-C8, 7553, -82,  229,  229,  229,  229,  229,  231
BA-36-83-C8, 7653, -86,  231,  229,  231,  229,  229,  231

 

Jetzt kommt die Serielle Schnittstelle ran.

Geschrieben (bearbeitet)

Kleine Anpassungen:

 

Der Empfänger arbeitet default so, dass er nur Pakete anzeigt, die den CRC bestanden haben. Das klingt erst mal gut, macht aber Probleme in der Auswertung, wenn nichts vom Empfänger zum Teensy gesendet wird und ich nicht weiß warum. Jetzt sind die Millisekunden zu sehen und der CRC-Pass Test.

 

Millisekunden 32bit geht doch, alle 1111 Stunden Überlauf des Counters

Paketlänge wird angezeigt (hier 16)

RSSI wird angezeigt (-65dBm, < 60 gut, > 75 wird problematisch)

LQI wird angezeigt (in was auch immer), wenn LQI > 125 Signal nicht mehr auswertbar

CRC Pass 0 oder 1 (1=OK 0=Fail)

 

BA-36-83-C8, 5964,  16, -65,  81,1,  229,  229,  229,  231,  229,  231
BA-36-83-C8, 6064,  16, -65,  53,1,  229,  231,  231,  229,  229,  231
BA-36-83-C8, 6164,  16, -65, 127,0,  229,  231,16613,  225,  113,  195
BA-36-83-C8, 6264,  16, -65,  52,1,  231,  229,  229,  229,  229,  231
BA-36-83-C8, 6364,  16, -65,  76,1,  229,  229,  229,  229,  229,  231
BA-36-83-C8, 6464,  16, -65,  48,1,  229,  229,  229,  229,  231,  231

bearbeitet von barney
Geschrieben

Jetzt werden die Daten vom Teensy 3.1 über die Serielle Schnittstelle #3 entgegengenommen.

 

ToDo:

 

Wixel

* ADC Werte auf 12bit umstellen

 

Teensy

* Wixel Lib schreiben (Parsen der Seriellen Schnittstelle #3 und an die typischen Nunchuk Register übergeben, Umschreiben der Funkabriss Logik, es müssen nicht mehr die Beschleunigungssensoren ausgewertet werden.)

* Auswerten des Empfangssignals und der Akkuspannung des Senders

Geschrieben

Bestellung für 2 Wixel ist raus, auch wenn ich keinen Plan habe, wann ich den ausprobieren kann. Gerüstet zu sein ist aber schon mal ein gutes Gefühl :o

Dude

Geschrieben
Bestellung für 2 Wixel ist raus, auch wenn ich keinen Plan habe, wann ich den ausprobieren kann. Gerüstet zu sein ist aber schon mal ein gutes Gefühl :o

Dude

Das ist die richtige Einstellung[emoji1]

Geschrieben (bearbeitet)
Jetzt werden die Daten vom Teensy 3.1 über die Serielle Schnittstelle #3 entgegengenommen.

 

ToDo:

 

Wixel

* ADC Werte auf 12bit umstellen

 

Teensy

* Wixel Lib schreiben (Parsen der Seriellen Schnittstelle #3 und an die typischen Nunchuk Register übergeben, Umschreiben der Funkabriss Logik, es müssen nicht mehr die Beschleunigungssensoren ausgewertet werden.)

* Auswerten des Empfangssignals und der Akkuspannung des Senders

 

Der ADC gibt jetzt 12bit Werte als dezimal aus. Der Wertebereich geht dabei von 0..2047 und konnte auch so in der Realität erreicht werden.

Die Schalter werden für eine Mehrfachnutzung am Besten über ein Widerstandsnetzwerk verschaltet. So können vier Taster an einem ADC-Eingang angeschlossen und getrennt ausgewertet werden. (Für die Kenner/-innen, DAC-Prinzip für high speed DACs.)

 

Jetzt die Lib für den Teensy. Hier ein kleiner Rückschlag. Die Teensy Lib UartEnevent hat noch einen weiteren Fehler. Wird diese bei 72 oder 96MHz kompiliert, wird die Baudrate für die Serielle Schnittstelle 3 (Uart2) nicht richtig in den Registern gesetzt. Workaround ist derzeit die Multiplizierung der Baudrate mit dem Faktor 2. Der Autor der Lib ist informiert und wird diese korrigieren.

 

Edit:

http://esk8b.de/git/Elektroskate_Fernbedienung.zip

bearbeitet von barney
Geschrieben

Teensy

* Wixel Lib schreiben (Parsen der Seriellen Schnittstelle #3...)

 

Parser ist rettich und kann als function() umgeschrieben werden.

 

Seriennummer gefunden
Counter: 8576671
Bytes: 16
dBm: -69
LQI: 75
CRC: 1
ADC_01: 138
ADC_02: 138
ADC_03: 138
ADC_04: 138
ADC_05: 138
ADC_06: 138

 

Ist jemand C Spezialist/-inn und kann das etwas kompakter umschreiben?

 

void loop() {
 if (Serial.available()) {
   char c = Serial.read();
   Event1.print(c);
 }

 if (print_flag) {
   uint32_t x = 0;
   uint32_t i = 0;
   uint32_t arg1 = 0;        //Counter
   char arg1_String[15];
   uint32_t arg2 = 0;        //Byte Anzahl sollte immer 16 sein
                             // 4 Bytes Seriennummmer, 12 Bytes 6 ADCs
   char arg2_String[5];
   int32_t arg3 = 0;         //RSSI -dBm
   char arg3_String[6];
   int32_t arg4 = 0;         //LQI
   char arg4_String[4];
   int32_t arg5 = 0;         //CRC
   char arg5_String[2];
   int32_t arg6 = 0;         //ADC_01
   char arg6_String[5];
   int32_t arg7 = 0;         //ADC_02
   char arg7_String[5];
   int32_t arg8 = 0;         //ADC_03
   char arg8_String[5];
   int32_t arg9 = 0;         //ADC_04
   char arg9_String[5];
   int32_t arg10 = 0;        //ADC_05
   char arg10_String[5];
   int32_t arg11 = 0;        //ADC_06
   char arg11_String[5];


   if (strstr(buffer, Seriennummer)) //Seriennummer gefuden und damit den Startblock
   {
     Serial.println("Seriennummer gefunden");

     while (buffer[x] != ',') {
       //Serial.print(buffer[x]);
       x++;
     }

     //Wert1 Counter
     x++; i=0;
     while (buffer[x] != ',') arg1_String[i++] = buffer[x++];

     //Wert2 Bytes
     x++; i=0;
     while (buffer[x] != ',') arg2_String[i++] = buffer[x++];

     //Wert3 RSSI
     x++; i=0;
     while (buffer[x] != ',') arg3_String[i++] = buffer[x++];

     //Wert4 LQI
     x++; i=0;
     while (buffer[x] != ',') arg4_String[i++] = buffer[x++];

     //Wert5 CRC
     x++; i=0;
     while (buffer[x] != ',') arg5_String[i++] = buffer[x++];

     //Wert6 ADC_01
     x++; i=0;
     while (buffer[x] != ',') arg6_String[i++] = buffer[x++];

     //Wert7 ADC_02
     x++; i=0;
     while (buffer[x] != ',') arg7_String[i++] = buffer[x++];

     //Wert8 ADC_03
     x++; i=0;
     while (buffer[x] != ',') arg8_String[i++] = buffer[x++];

     //Wert9 ADC_04
     x++; i=0;
     while (buffer[x] != ',') arg9_String[i++] = buffer[x++];

     //Wert10 ADC_05
     x++; i=0;
     while (buffer[x] != ',') arg10_String[i++] = buffer[x++];

     //Wert11 ADC_06
     x++; i=0;
     while (buffer[x] != 0x0d) arg11_String[i++] = buffer[x++];

     //Konverteiren der Strings zu Integer
     //Serial.println(arg2_String);
     arg1 = atol(arg1_String);
     arg2 = atol(arg2_String);
     arg3 = atol(arg3_String);
     arg4 = atol(arg4_String);
     arg5 = atol(arg5_String);
     arg6 = atol(arg6_String); 
     arg7 = atol(arg7_String);
     arg8 = atol(arg8_String);
     arg9 = atol(arg9_String);
     arg10 = atol(arg10_String);
     arg11 = atol(arg11_String);

     //Debugausgabe
     Serial.print("Counter: "); Serial.println(arg1);
     Serial.print("Bytes: ");   Serial.println(arg2);
     Serial.print("dBm: ");     Serial.println(arg3);
     Serial.print("LQI: ");     Serial.println(arg4);
     Serial.print("CRC: ");     Serial.println(arg5);
     Serial.print("ADC_01: ");  Serial.println(arg6);
     Serial.print("ADC_02: ");  Serial.println(arg7);
     Serial.print("ADC_03: ");  Serial.println(arg8);
     Serial.print("ADC_04: ");  Serial.println(arg9);
     Serial.print("ADC_05: ");  Serial.println(arg10);
     Serial.print("ADC_06: ");  Serial.println(arg11);
   }

   print_flag = false;
 }
}

Tritt dem Gespräch bei

Du kannst jetzt posten und dich später registrieren. Wenn du bereits einen Account hast kannst du dich hier anmelden.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...