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

Here are the required Arduino libraries

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.

FPV Freerider input channel assignment. May differ based on your radio channel assignments.

Demo DVR in game footage.