Build an FPV Head-Tracking Camera That Puts You Inside Your RC Vehicle!

by Max Imagination in Circuits > Arduino

2118 Views, 36 Favorites, 0 Comments

Build an FPV Head-Tracking Camera That Puts You Inside Your RC Vehicle!

IMG_7255.JPG
The Project.jpg
Build an Arduino FPV Head-Tracking Camera for RC Vehicles

Assemble your own Arduino-based FPV head tracker to control a camera that moves with your head, letting you look around and observe your surroundings while flying or driving RC vehicles for a more immersive experience.


Ever wanted to feel like you're actually inside your RC vehicle or aircraft? With the FPV head-tracker camera, you can. It moves with your head, letting you look around and observe your surroundings as you fly or drive for a truly immersive experience. Using a few common servos, sensors, and Arduino boards, I’ll walk you through how to assemble and set up the head-tracking camera system, pair it with your RC vehicle, and get everything up and running smoothly. If you're ready to add a whole new perspective to your RC hobby, this project is for you!

Supplies

Materials and Resources.jpg

To build this interesting FPV Head-tracking Unit, here are the parts, material, and files you’ll need.

Shown above, we have every single part for both devices we’re yet to build. As seen in the upper half above, we have parts for the head tracking unit and on the bottom half of the image, everything for the servo-gimbal unit which will hold the micro FPV camera.

Here’s the full list of materials for this project with product links and the up-to-date project cost right below:

HEAD TRACKER UNIT (TRANSMITTING SIDE):

(x1) Arduino Pro Mini - https://amzn.to/3Zbzesd

(x1) NRF24L01 - https://amzn.to/3CSADw9

(x1) MPU6050 Sensor - https://amzn.to/3ZwCijR

(x1) Boost 5V Step-Up Power Module - https://amzn.to/3ZupOcD

(x1) Arduino Receiver PCB (From Drift Car, used for transmitting side) - Order on JLCPCB 

(x1) 3.3V Regulator - https://amzn.to/3ZvGCQl

(x1) SMD Red Power LED - https://amzn.to/49fRoNT

(x1) SMD 15Ω LED's Resistor - https://amzn.to/41cQMGV

(x2) SMD 10µF Capacitor - https://amzn.to/4iiyyKn

(x2) SMD 0.1µF Capacitor - (Found in Capacitor kit)

(x2) Pin Header Pair - https://amzn.to/4iqemGu

(x1) JST Connector Pair - https://amzn.to/4fOY20j

(x1) 500mAh+ LiPo battery - https://amzn.to/4gb2lT7

(x1) Velcro Strap Pair - https://amzn.to/3VcMiMv

(x2) Short 30AWG wires from USB cable

FPV HEAD-TRACKING CAMERA (RECEIVING SIDE):

(x1) Arduino Pro Mini - https://amzn.to/3Zbzesd

(x1) NRF24L01 - https://amzn.to/3CSADw9

(x1) WT07 FPV Camera - https://amzn.to/3CZsrKu

(x1) Boost 5V Power Supply Module - https://amzn.to/3ZupOcD

(x2) Servo Motors - https://amzn.to/3Zw2ATi

(x1) Arduino Receiver PCB

(x1) 3.3V Regulator - https://amzn.to/3ZvGCQl

(x1) SMD Red Power LED - https://amzn.to/49fRoNT

(x1) SMD 15Ω LED's Resistor - https://amzn.to/41cQMGV

(x2) SMD 10µF Capacitor - https://amzn.to/4iiyyKn

(x2) SMD 0.1µF Capacitor - (Found in Capacitor kit)

(x2) Pin Header Pairs - https://amzn.to/4iqemGu

(x1) 18650 3000mAh battery - https://amzn.to/4ggRRBX

(x1) 18650 cell holder - https://amzn.to/4fcyvwZ

(x1) Heat-shrink tube (x2) 30AWG wires - https://amzn.to/3OxLsWX

(x1) 24AWG wire - https://amzn.to/49kmFzw

(x5) M3 Threaded Insert - https://amzn.to/3Ze94F1

(x2) M3 20mm Screw - https://amzn.to/4eUSekv

(x3) M3 6mm Screw - (From M3 Screw Kit)

(x1) Servo shaft screw - (Included with servos)

(x1) 29g of Dark Grey PLA Filament - https://amzn.to/4icpBSF

ADDITIONAL: (x1) FPV Headset - https://amzn.to/3BgBvdt / https://amzn.to/3ZiL03U

(x1) FTDI (Programmer) - https://amzn.to/4ihbuLK

(x1) Thermal Paste - https://amzn.to/3ZiaJK1

(x1) Soldering Tin (Best) - https://amzn.to/4eTwK7v


PROJECT COST (Not counting FPV Headset or other tools)

$74 USD - Covers services, 3D design, printing, and components needed for the full project to function. 

$30 USD - Excludes receiver, FPV camera, and battery (for use with existing Arduino receiver and FPV setup).


Project Files Folder for Diagrams, Gerber File, & Code (Free):

https://drive.google.com/drive/folders/1Ypz9bS0B9EWusCqjtDZVnYJ88AsmpBwK?usp=sharing


As an Amazon Associate, I earn from qualifying purchases with no added cost to you.

Wiring Diagrams - Arduino Head Tracker, Pan-tilt Head, and PCBs' Schematic

Wiring Diagram - Arduino FPV Head-tracking Camera - Pan and Tilt Head.jpg
Wiring Diagram - Arduino Head Tracker Transmitter Unit.jpg
PCB Schematic - Arduino 8CH NRF24L01 Transceiver PCB.jpg

The overall circuit diagram for the Arduino FPV head-tracking camera unit is crucial as it clearly outlines how each component connects to make sure it works properly. Following the diagram precisely helps prevent possible issues, ensuring the pan and tilt mechanism operates smoothly in sync with your head movements.

The second wiring diagram is for the Arduino head tracker transmitter unit is essential to follow as it maps out the connections between the MPU6050 sensor and the Arduino Receiver. Accurate wiring ensures you have solid communication and precise head movement tracking, making the transmitter send data effectively to the receiver unit.

The PCB schematic (3rd image) is for the Arduino 8-channel NRF24L01 receiver and is the main part of the head tracker project, serving as the backbone controller for both the transmitter and receiver sides. By using this circuit twice - once for sending head movement data and once for receiving it to control the FPV camera - you ensure you have a consistent, simplified design, and seamless integration between the two units.

The Design

1. The Design.jpg

Starting with the Pan and Tilt head. I designed it in Autodesk Fusion and made it so that each and every component attaches in the most accessible way, as this gimbal is intended to work on its own like a demo. Ideally, parts such as the base would be shaped according to your RC vehicle.

To 3D print these parts, you can purchase and download the 3D design STL files from my Cults 3D page which includes more info such as 3D printing settings to get them printed out correctly

3D Files (STLs) - Pan and Tilt Head Unit: https://cults3d.com/en/3d-model/game/3d-printed-fpv-head-tracker-camera-for-rc-vehicles-2-axis-cradle-3d-design

With my Ender 3 V2 printer and some Dark Grey PLA filament, that’s how the parts turned out.

Ordering PCBs

2. Ordering PCBs.jpg

These are the PCBs we’ll be using for both ends of the project.

Originally the design was for an 8-channel Arduino NRF24L01 Receiver, but will be used both as a receiver and transmitter for the pan/tilt head and the head tracker device.

To order the PCBs (x2 required) based on my design, I recommend using JLCPCB’s quality PCB manufacturing service: https://jlcpcb.com/?from=MaxImagination


When ordering, your boards specs should look as such:

Base Material: FR-4

Layers: 2

Dimensions: 55 x 29.5mm

PCB Quantity: 5+

PCB Thickness: 1.2

PCB Color: (Your Choice)

Surface Finish: HASL (with lead)

Soldering SMD Components

3. Soldering SMD Components.jpg

Once you’ve received both boards made based on my design, we can begin soldering the surface-mount components with soldering paste onto the camera unit’s PCB. A blob of paste on each pad and we can place the power LED, current-limiting resistor, 10 microfarad and 0.1 microfarad capacitors for power-filtering, and the 3.3V voltage regulator.

Not that it’s recommended, but I used a clothing iron to solder those components onto the heated board. However, if you’re going to heat them on with solder paste, either use an iron with adjustable heat up to 200 degrees celsius or simply use a proper SMD hotplate.

We’ll repeat this for the head-tracker (transmitter’s) PCB and solder its surface-mount components.

Soldering Pin Headers

4. Soldering Pin Headers.jpg

Moving onto through-hole components, let’s insert all the female pin headers and prevent them from falling out by bending a few of the pins. Shortly after, we can solder them in place.

Now come the male headers which are for peripheral signal, power, and ground. If you don’t have colorful pin headers, it’s fine. Simply don’t confuse the rows if you use all one-colored headers.

Then, we’ll also insert headers for 5V power input or output.

Once the protruding pins are clipped after soldering, let’s solder on some pin headers to the Arduino Pro Mini - the microcontroller. Using a perf board works perfectly to keep the headers straight while soldering.

Attaching Modules

5. Attaching Modules.jpg

Now, it’s as simple as pushing in the Pro Mini and NRF24L01 transceiver into the board. We’ve assembled them this way so they become easy to replace or reuse for other projects.

Installing Threaded Inserts

6. Installing Threaded Inserts.jpg

To assemble the pan and tilt head, we’ll melt in 5 of these M3 threaded inserts in parts that require bolts such as the camera-servo mount and the base. Once these are pushed in with a soldering iron all the way so they’re flush with their surfaces, we can begin installing the 9-gram servo motors.

Installing Servos

7. Installing Servos.jpg

Starting with the pan servo, then securing the pan and tilt bracket or joint, followed by installing the tilt servo in the camera-servo mount with the longest possible bolts from the M3 bolts kit (20mm).

Connecting Camera and Servos

8. Connecting Camera and Servos.jpg

Afterward, let’s mount the WT07, 5.8Ghz 3-gram Micro FPV camera. Originally it has 4-wires, two of which are for the On-Screen Display data which you need to twist together and solder if you’re not using the feature. Otherwise, the camera won’t work, and will not transmit video data. The camera can either be mounted with superglue or some double-sided tape.

One thing to make sure of, is that this camera has some ventilation as it can get hot. Leaving a little gap between the rear of the camera and the plastic would be smart, best when super-glued to the mount via the edges.

Then, we can push through the two little power wires out through the lower hole to the rear. From here we can solder extension wires to connect the camera to its source of power. A bit of heat-shrink wrap tubing helps prevent short circuits and the wires breaking off.

Now, we can mount this “camera-servo” piece to the rest of the unit while ensuring the servo’s shaft is in its centered position.

Using another dual female header, we can give the camera’s power wires a connector which plugs into the 5V rail with polarity in mind. We’ve got to make sure this pair of wires is long enough to allow for the camera to reach its full range of motion, same goes for the two servo wires.

The pan servo connects to digital pin 3 and the tilt servo to pin 5 on the Arduino Pro Mini.

Connecting Boost Converter to Battery for Power

9. Connecting Boost Converter To Battery For Power.jpg

After attaching the 2.4G antenna, our head-tracking camera unit is fully assembled and it now needs a source of power which will be an 18650 cell.

So we’ll take the 18650 battery’s holder and use a bit of double sided tape to mount one of these 5V boost converter USB modules, but with the USB type-A header desoldered to make it more compact. This board simply sticks onto the positive terminal side of the battery holder with the boost-converting circuit pointing inward. 

Now, we can solder the positive terminals together directly, and the negatives through a wire of the right length.

For the 5-volt output side, let’s solder a couple of wires to the tiny pads on the inside of the board leading out to a female pin header connector for an easy connection to the receiver board.

From here, we can insert the 3.7V battery with the positive terminal facing the converter board and supply the stepped up 5V to the receiver board through its 5V power input pins.

Assembling Head Tracker Transmitter

10. Assembling Head Tracker Transmitter.jpg

To assemble the head tracker transmitter device, we basically need to place the same components as we connected up on the camera’s receiver board, except for one key element at play here which is the MPU6050 motion-tracking sensor added to track your head’s orientation.

We can connect this Gyro/Accelerometer module through two male pin headers directly at the I2C (I-squared-C) through-hole pads (Labeled A4 and A5) closer to the middle of the Pro Mini.

It is quite the convenient data and physical connection to prop it up. The only additional wiring needed here is for ground and power from the Arduino’s 5V pin. This module can take from 3.3 to 5-volts for power input and will run on 5V.

Installing Head Tracker and Battery

11. Installing Head Tracker and Battery.jpg

Now we can work on creating the same source of power, only in a smaller package, using a 500mAh LiPo cell to keep things compact for mounting to the FPV goggles.

This stepped-up battery supply uses a JST-style connector for connecting and supplying power to the head tracker device.

After taping it up a bit, we can superglue on a strip of velcro and glue the fluffy strip onto the FPV goggles so the battery can be easily mounted and taken off for charging.

The Analog FPV headset I use is from iFlight and works at 5.8 gigahertz with an average receiving range of up to 400 meters. 

From here, we can screw on the 2.4G antenna and mount the head tracker unit to the goggles by inserting it into the conveniently-sized cavity on top that this model has. If your goggles don’t have this, consider either designing and 3D printing a mount or mounting the tracker with some velcro strap.

Programming Head Tracker (TX)

12. Programming Head Tracker (TX).jpg

Before we can use the head tracker with the pan and tilt camera unit, we need to program both of them. This can be done with what’s called an FTDI USB-to-serial converter which plugs in nicely with its 6 pins to either of the two boards.

Starting with the transmitting head tracker unit, let’s open its code. This is what it should look like in the Arduino IDE, ensure you have these libraries installed from the IDE’s library manager.

Then, check that the two transceiver pins (CE & CSN - 9 & 10) are defined and that no other peripheral uses them.

Lastly, head over under tools and select Arduino Pro or Pro Mini as your board, check that its matching processor is selected, and its corresponding COM port. Then, you can hit upload.

Programming Head-tracking Camera (RX)

13. Programming Head-tracking Camera (RX).jpg

Once the transmitter code is uploaded, we can unplug it from that unit and plug the FTDI into the camera unit’s receiver slash controller board and take a look at its code.

Once opened, check that pins 3 and 5 are the pins you’re using for the pan and tilt servo, these can be changed if you wish.

In the code, you can set the servos’ motion limits based on data and the range of movement if you’d like to adjust that.

And lastly, you have the delay at the very bottom which you can play around with to smoothen the movement of the servos.

Heading up “Tools”, the settings should remain the same as on the other board. From here, we can upload to the receiver.

To download both of the code files, you can click the project files folder in the video description. Now both the transmitting and receiving side for the FPV head-tracking camera are all set up to work independently, so far without integrating all of it with an RC vehicle.

For a more firm attachment, we can add some double sided tape for the receiver board to stick to the pan and tilt head.

And bringing over the battery, we can now power the unit.

Calibrating Head-tracking Setup

14. Calibrating Head-tracking Setup.jpg

Over at the FPV Headset, we can insert the head tracker transmitter and power it up. Once connected, we need a couple of seconds for it to calibrate and get its position, then once the Arduino’s LED goes HIGH, this indicates the sensor has calibrated, and we can begin moving the device around.

And just like that, the FPV Head Tracker Camera is up and running to track and follow your head movements.

Pairing FPV Camera

15. Pairing FPV Camera.jpg

For the camera’s side, let’s make sure its power wire is connected, power on the FPV headset, and we’ve got video feed! But if not, we can press the “Search Channel” button on top which automatically finds the active band and channel which the FPV camera is on.

Manually this can be done by pressing the “Band+” and/or “CH+” buttons until the frequencies are in tune with the camera’s.

Re-calibrating Range of Motion

16. Re-calibrating Range of Motion.jpg

If you find that the head tracking device is not calibrated with your desired motion limits for the camera, simply ensure the headset is pointing to the direction you want to observe from and that it level and perfectly still, then press the Arduino’s reset button, and watch the camera center to its new default position.

The Complete FPV Head-tracking Camera

17. The Complete FPV Head-tracking Camera.jpg

The FPV Head-tracking Camera with its 9-gram servos has 180 degrees of freedom of movement both for panning and tilting.

With the FPV Headset on your head with its Head Tracking device, you’re able to control the head-tracking camera unit with your head movements, giving you a more immersive First-Person-View experience.

Integrating Head-tracking Setup With RC Vehicle

18. Integrating Head-tracking Setup With RC Vehicle.jpg

This is fun, but what about integrating this head-tracking setup with an RC vehicle as the practical implementation of the project?

Take my RC Drift Car as an example, say I want both its pistol-grip transmitter and the head tracker transmitter to transmit their signals at the same time to one receiver onboard the car for all operations including the pan and tilt camera?

I confirm, yes, this can be done quite easily without the need of an extra receiver board!

Let’s connect the drift car to the computer, and open up these three code files. One is for the head tracker, another is for the RC car’s transmitter, and the other is the merged code for the RC car’s receiver.

The way this is possible, is because each of the transmitter codes transmit through their independent radio pipe addresses which are both processed by the RC car’s code and are translated to the individual functions for operating the car and controlling the camera that follows your head movements. This is what makes it possible for two transmitters to communicate with only one receiver, simplifying the hardware side of things and reducing excess hardware cost.

You may find all of these three code files alongside the stand-alone FPV Head-tracking Camera codes with the other project files.

Connecting Head-tracking Camera With RC Car

19. Connecting Head-tracking Camera With RC Car.jpg

Onto the installation of the camera unit to the RC Drift Car, let’s connect it up. The pan and tilt servos connect to Digital pins 5 and 7 in that order. The other two channels on each side are taken up by the motors and other peripherals such as lights and humidifier smoke effect modules.

After reinstalling the car’s tail wing and crossbeam, we can secure the camera unit through a couple of zip-ties on top.

One thing to take note of, is that the camera consumes more current (250mA+) than all the 3 servos combined, which means we need to power it from the battery directly for now, from just one of the 2S battery’s cells.

Immersive FPV Fun

20. Immersive FPV Fun.jpg

With the pistol grip transmitter and head tracker powered up, we can now control the car while having our head movements mapped onto the head-tracking camera at the same time to get a more immersive First-Person-View experience.

If you want to copy this RC setup, feel free to watch and follow my tutorial videos with more info for both the Arduino Pistol-grip transmitter and Arduino RC Drift Car on my channel.

Transmitter Video: https://youtu.be/34BDwDulZl0 

RC Drift Car Video: https://youtu.be/MFRiyTgVyqI

Conclusion and Extra Tips

Conclusion and Extra Tips.jpg

Having learned how to make your own FPV head tracker, you're ready to take your current RC hobby to a whole new level with a realistic touch. From building a responsive servo-gimbal to pairing the system with your head movements via an Arduino and MPU6050 sensor, this project gives you an immersive experience of operating your RC vehicles.

If you’ve followed my steps carefully, you should have a working system that makes you feel like you’re inside your vehicle when you’re out controlling it next time.

Extra Tips:

  1. Start Simple: If you're fairly new to soldering or programming, test each module (e.g., the servos, MPU6050, and NRF24L01) individually before assembling the full system. The NRF24L01 especially can seem like a tricky, sensitive board to get going when you use it for the first time.
  2. Cable Management: Use heat shrink tubing or cable ties to keep your wires organized and prevent accidental disconnections during operation.
  3. Battery Safety: Ensure your batteries are secure and well-ventilated, especially for the FPV camera, as it generates heat during use.
  4. Calibration: Spend time fine-tuning the MPU6050’s sensitivity and orientation in the code to match your natural head movements. Adjusting the servo delay value may also help. This will ensure smoother operation.
  5. Documentation: Keep notes on connections and follow the wiring diagrams to not go off course from the wiring intended for this project.

Once you’ve gotten this project working perfectly, consider exploring improvements like adding a more powerful video transmitter for long-range FPV or integrating other sensors for expanded functionality. Happy making, and feel free to share your results or thoughts in the comments!

To learn more about this project in video form and see how it works, watch the YouTube tutorial video:

https://youtu.be/Tu0cay6S5WI

NEWS:

Watch how I built the FPV Head-tracking Camera live from Electronica Fair 2024: https://www.youtube.com/watch?v=Mt4MBWvempI&t=2352s 

Full Tutorial Video

Build an Arduino FPV Head-Tracking Camera for RC Vehicles