OpenSmart Wireless Joystick

Last Updated on 16. October 2026 by SuffocationLink status: OK

Ich brauchte eine Fernsteuerung und fand dieses interessante Board mit Empfänger für unter 5€. Mal schauen, was es so kann.

Facts

Joystick board

DescriptionWorth
Arbeitsspannung 3V – 5,3V
Arbeitsstrom 42mA (max)
Controller ATmega8A
Onboard-Sender RF 315 / 433 MHz
Transferrate 2000 bps
Reichweite bei 5Vup to 150m
Battery socket 2.54mm pitch
OPEN-SMART Fernbedienung beschriftet
OPEN-SMART Fernbedienung beschriftet

Receiver module

RF 315 / 433 MHz (wahrscheinlich RFM83C)

DescriptionWorth
Betriebsspannung: 3V – 5.3V
Arbeitsstrom2 milliamp
Arbeitsfrequenz: 433 MHz
Sensitivity -110 dB
Transferrate 2000 bps
Control VirtualWire Library

Areas of application

  • Remote-controlled toy
  • Control unit

Views

Programming

Libraries

https://www.airspayce.com/mikem/arduino/VirtualWire/Link status: OK

Remote control test

There is a vehicle from OPEN-SMART and the corresponding Program filesLink status: OK dafür. Die Codestellen für den Empfänger habe ich ihnen entnommen und die Fernsteuerung unangetastet gelassen. Der Code geht davon aus, dass der Empfänger am Port A3 angeschlossen ist und über den Arduino mit Strom versorgt wird.

OpenSmart Remote – Anschluss am A3 Port

Source code OpenSmartWirelessJoystickTest.ino (GitHubLink status: OK)

/** Test the Open-Smart Wireless Joystick
 *  Receiver program
 *  Autor: S. Fambach
 *  Visit if you want: http://www.fambach.net
 *  GPL v2
 */
 
#include <String.h>
#include "VirtualWire.h"

int RF_RX_PIN = A3;
void(* resetFunc) (void) = 0; //software reset when the RF receiver can not respond
const char* TEMPLATE_OUTPUT = "RAW :  %s  ->  X:  %4.0d | Y:  %4.0d | Button: %s";
char outputText[50];


//Remote control code macro
#define BUTTON_UP     1
#define BUTTON_RIGHT  2
#define BUTTON_DOWN   3
#define BUTTON_LEFT   4
#define BUTTON_JOY    8 


#define XY_TOLERANCE 30
#define X0 510 //Initial value of X-asix of the Joystick
#define Y0 510 //Initial value of Y-asix of the Joystick

#define SPEED_STEPS 20
uint8_t speed0 = 100;//Initial value of speed

#define BIN1 3
#define BIN2 5
#define PWMB 6
#define AIN1 9
#define AIN2 10
#define PWMA 11

uint8_t buf[VW_MAX_MESSAGE_LEN]; // buffer array for data recieve over serial port
uint8_t buflen = VW_MAX_MESSAGE_LEN;

void setup() {
  Serial.begin(115200);

  Serial.println("Setup A3 Pin for Transmission");
  vw_set_rx_pin(RF_RX_PIN);  // Setup receive pin.
  Serial.println("Setup Transmission speed to 2000");
  vw_setup(2000); // Transmission speed in bits per second.
  Serial.println("Start receiving");
  vw_rx_start(); // Start the PLL receiver.
}
uint8_t command;

#define CAR_STOP 0
#define CAR_FORWARD 1
#define CAR_BACK 2
uint8_t car_status = CAR_STOP;
uint8_t new_status = car_status;


int msToWait = 2000;
int storedTime = millis() + msToWait;

void loop() {
  if (vw_get_message(buf, &buflen)) // non-blocking I/O
  {
    command = decode();
    Serial.print("\n");
    storedTime = millis() + msToWait; // reset timeout
  }

  if(storedTime < millis() ){
    Serial.println("Nothing received since 2 Seconds");
    storedTime = millis() + msToWait; // reset timeout
  }
 
}

uint8_t decode()
{
  String raw;
  int x, y;
  int xh, xl, yh, yl;
  uint8_t z;
  uint8_t button;
  uint8_t i = 0;

  // extract raw data 
  raw.reserve(10);
  for(int i = 0; i < buflen ; i++){
    raw += String(buf[i],HEX);
    raw += String(" ");
  }
   
  if ((buf[0] != 0x7E) || (buf[4] != 0xEF))
  {
    resetFunc();//software reset
    return 0;
  }

  // split data
  x = buf[1] << 2 ;
  y = buf[2] << 2 ;
  button = buf[3] ;

  // get special buttons
  String butText = "";
  switch (button)
  {    
    case 1: command = BUTTON_UP; butText="K1";break;
    case 2: command = BUTTON_RIGHT; butText="K2";break;
    case 3: command = BUTTON_DOWN;butText="K3";break;
    case 4: command = BUTTON_LEFT; butText="K4";break;
    case 8: command = BUTTON_JOY; butText="Joy";break;
    default: butText = button;
    
  }

  sprintf(outputText, TEMPLATE_OUTPUT , raw.c_str(),x,y,butText.c_str());
  Serial.println(outputText);

  
  clearBufferArray();
  return command;
}


void clearBufferArray()              // function to clear buffer array
{
  for (int i = 0; i < VW_MAX_MESSAGE_LEN; i++)
  {
    buf[i] = 0; // clear all index of array with 0
  }
}
OPEN-SMART Fernsteuerung Consolenausgabe des Empfängers.
OPEN-SMART Remote Control Console output of the receiver.

21.11.2021 Test program code modified again

Es werden jetzt bei der Initialisierung Ausgaben gemacht, was gerade ansteht. Auch wird jetzt alle 2 Sekunden, wenn keine Nachricht empfangen wurde, ein Vermerk in die Console geschrieben.

Problems

Unreliable RF connection

In the beginning, I had the problem that the connection wasn't particularly reliable. Button presses weren't transmitted and the joystick values were very digital.

Finger on the aerial

Das Hauptproblem ist, die Fernbedienung ist so gebaut, dass man automatisch auf die Antenne greift, wenn man sie anfasst. Die Antenne habe ich mit Tesa abgeklebt, brachte aber nicht viel. Das Beste ist, die Berührungen zu vermeiden. Evtl. könnte man hier überlegen, eine externe Antenne anzubringen.

More power

Ich hatte die Fernsteuerung vorher mit 3,7V betrieben (LIPO). Testweise habe ich sie mal über einen Arduino mit 5V versorgt. Die Übertragung scheint danach besser zu sein.

Play in

Es scheint so, als müssten Sender und Empfänger sich immer erst etwas einpegeln. So ist nach dem Start die Verbindung schlecht, wird aber immer besser. (Hier bin ich mir nicht mehr so sicher, seitdem ich die Finger von der Antenne lasse, scheint das kein Problem mehr zu sein)

Conclusion

Eine sehr günstige Fernbedienung mit allem, was man braucht. Ein zusätzlicher Vorteil ist, dass man nur einen Pin benötigt, um den Empfänger zu betreiben.

Die Antenne ist nicht sonderlich gut angebracht, auch wäre hier eine externe sicherlich besser. Ein Spannungsregler, um die Fernbedienung auch mit 7,2 Volt betreiben zu können, wäre praktisch, da 5 Volt LIPOs nicht die Regel sind. Mit 4 AA Akkus komme ich jedoch auch so hin.

I had to request the circuit diagram and a test program from the dealer, that is still pending, possibly there will be new information here.

Related Posts

Sources

https://www.instructables.com/id/RF-315433-MHz-Transmitter-receiver-Module-and-Ardu/Link status: OK

http://stefanfrings.de/avr_tools/Link status: OK

http://www.openplatform.cc/Link status: Unknown

https://www.airspayce.com/mikem/arduino/VirtualWire/Link status: OK

AliExpress LinkLink status: OK

https://drive.google.com/drive/folders/165f_72hYv0BfzqsM-8aNZV_CUyNK8v6mLink status: OK

https://drive.google.com/drive/folders/1erXeRAHAdsv7dMubP0oy1Bkq4knRVDn3Link status: OK

https://drive.google.com/drive/folders/0B6uNNXJ2z4CxcnZMSm5HSDNXRUU?resourcekey=0-wW8HTtbuL_QSBysGdtgFEQLink status: Unknown

DateChangeAuthor
16.10.2026Beispielcode als Code-Block eingefügt (Einbettung über gist-it.appspot.com funktionierte nicht mehr)Suffocation
03.10.2026Rechtschreibung korrigiert: Tippfehler, Kommas, Grammatik
Log-Liste eingefügt
Suffocation
29.06.2019Post createdSuffocation
Changelog

5 thoughts on “OpenSmart Funk Joystick”

      1. Hi Siegfried, ok that's the same part.

        I've unpacked the code and my hardware and tested them again. I've now also uploaded the code with the VirtualWire lib to GitHub:

        https://github.com/sfambach/arduino/blob/master/projects/OpenSmartWirelessJoystickTest/

        Otherwise, I'd only know trivial stories like:
        Cables swapped
        Analogue ports start with A0, making A3 the 4th analogue port.
        You mustn't touch the aerial on the transmitter, otherwise it won't work (top and bottom). Electrical tape won't help 🙂
        Sender powered on, green LED lit.
        I am supplying my transmitter with a 3.7V LiPo via the GND/VIN programming pins.

        You've surely checked all of that already, otherwise, I unfortunately can't think of anything else.

        I had to approve your post from this morning because it contained a link. It's for my own protection, otherwise I get spammed by Russian porn sites ;). I've deleted the second one, I hope that was okay.

        Hello
        Stefan

        1. Hello Stefan, ok I'll use the code again tomorrow. The cable (it's only a signal cable) is definitely connected to the Arduino. The LED on the joystick is also on. The 3.7v battery is also connected correctly.
          My receiver has no display, but I have an oscilloscope and can't detect any reaction on the data line, at least when actuating the joystick.
          The Chinese seller also has no idea, which is why I ordered a new joystick.

          Siegfried

  1. Hello Stefan, I tried your test on my remote control today, but I'm not getting any reaction on the monitor. I suspect the transmitter isn't working or the chip is faulty.
    I bought a car from a Chinese seller with a joystick remote control, and unfortunately, I can't use the remote.
    Are there any other testing options?

    Yours sincerely

Leave a Reply

Your email address will not be published. Required fields are marked *