Simulate Your Simulator

June 25, 2018
10499
Views

Hardware Setup & Introduction

Required for this build:

HDMI to AV Converter
Arduino PRO Micro 32U4
25mw Video Transmitter
FrSky XSR Receiver (Or receiver of your choice)
Latching Power Switch
5v FAN
DC Plug
5v Power Supply
HDMI Cable
Micro USB Cable

This project was inspired when I was trying to play a simulator, I figured it may be more realistic and easier if we had the option to wear our goggles, and have less wires attached while we were flying!

Firstly I purchases a HDMI to AV converter, These devices are widely available in ebay and banggood.

We will use this little device to convert the HDMI to AV and then send the AV video to the video transmitter. On the back on the video RCA plug of the HDMI to AV converter, I soldered two wires for video out and GND.

Next, we solder the video out and GND to the video in of our video transmitter. So now, you should be able to plug in your computer and with your VTX powered and goggles on the right channel, you should see your PC screen. Pretty simple up to this point.

Next we will start with the Arduino. For this project we will need to use a ATmega32U4 specific processor. In the example I have used a Arduino Pro Micro. The 32U4 allows for the use of a HID compliant plug and play joystick for windows. When connected to windows, it will display as a plug and play USB gaming joystick with Generic driver support. We will send the SBUS out of our FrSky receiver to the Arduino allowing for wireless use of the Taranis in my case.

Next we will flash the Arduino using this code.

// Program used to map an SBUS transmitter as
// wireless controller
//
// Robin Tripp
// 2018-02-27 - Original Version
//------------------------------------------------------------
#include "Joystick.h"
#include <FUTABA_SBUS.h>
Joystick_ Joystick;
FUTABA_SBUS sBus;
const unsigned long gcAnalogDelta = 25;
unsigned long gNextTime = 0;
uint16_t t;
uint16_t a;
uint16_t e;
uint16_t r;
uint16_t c5;
uint16_t c6;
uint16_t c7;
void setup() {
  // Set Range Values
  Joystick.setXAxisRange(172, 1811);
  Joystick.setYAxisRange(172, 1811);
  Joystick.setRxAxisRange(172, 1811);
  Joystick.setRyAxisRange(172, 1811);
  Joystick.setZAxisRange(172, 1811);
  Joystick.setRzAxisRange(172, 1811);
  sBus.begin();
  Joystick.begin(true);
}
void loop() {
  // Read SBUS channels
  sBus.FeedLine();
  if (sBus.toChannels == 1) {
    sBus.UpdateServos();
    sBus.UpdateChannels();
    sBus.toChannels = 0;
    t = sBus.channels[0];
    a = sBus.channels[1];
    e = sBus.channels[2];
    r = sBus.channels[3];
    c5 = sBus.channels[4];
    c6 = sBus.channels[5];
    c7 = sBus.channels[6];
  }
  // Write priority SBUS channels (TAER) to controller
  Joystick.setXAxis(t);
  Joystick.setYAxis(a);
  Joystick.setRxAxis(e);
  Joystick.setRyAxis(r);
  // Write remaining SBUS channels to controller
  if (millis() >= gNextTime) {
    gNextTime = millis() + gcAnalogDelta;
    Joystick.setZAxis(c5);
    Joystick.setRzAxis(c6);
    Joystick.setButton(0, map(c7, 172, 1811, 0, 1));
  }
}

Now, we add a fan to provide some cooling. The VTX will get pretty hot so the more airflow we can provide the better. Maybe also drill some holes in the enclosure to allow for airflow to circulate for maximum cooling.

This really just leaves powering. Its really up to you how to power the setup. I tried powering off USB as the primary power source but it appeared the VTX just drew too much current for even USB 3.0, so I had to revert to a power supply which was unfortunate as it just meant extra cables. But, since the unit could be left plugged in permanently, it wasn’t really a issue, providing you have power switch as you can see in the above image.

I chose to use a 5V power supply to power everything, rather then a 5V bec. You can of course 5V bec to step down an input range to 5v, this would also be a safer option in case you were to accidentally plug in a 12v power supply.

Some final thoughts; you can also add a external switch for changing the VTX channel if you see fit, and also drill some holes to see the LEDs for the VTX channel assignment. I didn’t see the need as I really just used it alone, so I didn’t bother but you can do this easily.

You will also need to configure your radio as per this video, just as you would if using it over USB. This example is for the Taranis, im not sure of setup procedures for other radios as I have never tested them.

Wiring Diagrams

With that said, all should be up and running. Plug in the HDMI cable between the converter and your PC, and you should be able to see the screen on your goggles, when on the right channel. Also, plug the Arduino into your computer via USB, and you should see the HID Compliant USB Joysick appear, from here you can go ahead and calibrate the joystick.

In future revisions I will try to allow for primary power to be over USB only, illuminating the need for a 5V power supply. Also I will add a bind button for the RXSR and channel/band buttons for the VTX.

As for latency, honestly there is a bit of latency. But I guess you could give it a go it would be perfect for FPV, otherwise just plug your goggles in if you have a HDMI in port. But if your’e like me and hate being tethered with cables, I can live with the latency for my style of flying (freestyle).

Here are the required Arduino libraries

FUTABA_SBUS-master.zip ArduinoJoystickLibrary-master.zip
Working Demonstration of wireless simulator

Update 28.12.19

  • Added 5v regulator for over voltage protection. Can be powered from 7 – 24v supply.
  • Upgraded fan
  • Added BIND and BAND/CHANNEL select buttons

FPV Freerider setup and channel assignment.

Demo DVR in game footage.

All Comments

  • The idea behind this guide is great, but it’s seriously lacking in detail. Do you have a better picture of how you wired up your HDMI-AV converter to the vtx? It’s not clear how you did that.

    Vic July 12, 2019 10:09 am
    • Hi Vic. Thanks for the feedback. Sure I will update the post with more in depth wiring details including diagrams asap. Regards Dean

      deanfourie July 12, 2019 10:34 am
      • Awesome! I’m looking forward to it. Sorry if I came off as angry, I’m just a little frustrated trying to get it to work haha. Thanks for taking the time to make this guide!

        Vic July 12, 2019 11:57 am
        • Updated. Hope this helps! Cheers

          deanfourie July 12, 2019 10:00 pm
  • Oh man this is great – I’d definitely buy one from you if you wanted to make another! Pretty please? 🙂

    mactac July 15, 2019 5:17 pm
    • Hey man, sure send me a email via the contact form and we can discuss it. Thanks

      deanfourie July 20, 2019 1:27 am
  • Deanfourie,

    Came across this and had the parts to try it. Not very experienced with programming the arduinos. Having a bit of an issue with the FUTABA SBUS Library not being recognized when i go to add it in the arduino 1.8.13 app. Any ideas on what I should do? Its just saying it doesnt see any library files in the folder I’ve downloaded from github. Thanks so much.

    Spectre May 15, 2021 5:06 am
    • Change the board type, try different bootloaders. Depending on what board and what chipset you have it could be a different bootloader type. Just select Arduino Nano >> then try all the options that are available until it connects. Let me know if you have any issues.

      Cheers

      deanfourie May 16, 2021 10:16 am

Leave a Reply to deanfourie Cancel reply