FPV

Simulate Your Simulator

June 25, 2018
1649
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

If you have issues with video noise, try using another ground on the HDMI to AV converter. Avoid ground loops. Included is optional audio wiring for audio pass-through. Try use a VTX with as minimal current draw as possible.
The UN-INVERTED SBUS signal must be used.

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

Working Demonstration of wireless simulator

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 Reply
    • 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 Reply
      • 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 Reply
        • Updated. Hope this helps! Cheers

          deanfourie July 12, 2019 10:00 pm Reply
  • 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 Reply
    • Hey man, sure send me a email via the contact form and we can discuss it. Thanks

      deanfourie July 20, 2019 1:27 am Reply

Leave a Reply

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