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...