The desire to find an effective way to automatically tilt my FPV camera up and down while in flight has been with me almost since I started flying FPV racing quadcopters. There are many benefits to this kind of configuration:
- More maneuverability: you can get high tilt angles for flying at high speed down straights while still having low tilts in tight sections.
- Easier to land and hover while still being able to fly fast.
- The ability to practically be able ultra-light quadcopters that require insane camera tilt angles to fly.
You may not know this, but the ability of the flight controller to control a servo which automatically adjusts the tilt of the camera has been around for many years now. It was present when Betaflight forked from Cleanflight and hasn’t changed much since. The reason you never see anyone use the feature is that servos are bulky and heavy. Also, there are no frames or FPV cameras I know of that allow you to easily add such a feature.
I’m finally getting off of my butt and trying to find a good solution. I think a well built automatic tilt mechanism could be the next “big thing” in the hobby. I also need some way to get the insane tilt angles I am going to need for my upcoming aerodynamic quadcopter build – which will consistently be flying at 60 degrees of tilt or higher. In this article, I prototype out one of the ideas I have for solving this problem: using a micro linear servo.
Micro linear servos are the ones used in the ultra-light airplanes and helicopters that you can fly indoors. While traditional servos move a plastic horn in a circular arc like a clock arm, these linear servos move a plastic arm up and down.
For my first prototype, I picked up this linear servo from HobbyKing for $5 / pc. This servo weighs less than 2g and is about as tall as a nickel – 20mm tall for those of you who live outside of the USA. I bought a few of them in case I blew one up.
Immediately after receiving the servos, I hooked one up to a spare OmniBus F4 I had laying around to see if I could get it to work:
The servos are rated for running on 1S LiPo batteries, which sit between 3.7-4.2V. Therefore, I first tried hooking the servo up to the 3.3V output on the flight controller. This was very disappointing – the servo got hung up easily and had almost no force. Fortunately, several people in the reviews successfully reported running them on the 5V that is commonly used in our flight controllers. Moving the servo to 5V fixed the hanging problem, though the force it could output was still pretty disappointing.
Having successfully gotten the servo to work, though, I decided to go ahead with installing it in a quadcopter. After some serious measuring and plotting, I decided my beloved Bolt 210 was the best quadcopter in my arsenal to give the servo a shot in. The reason is that the camera mounts on this quadcopter can be loosened so that there is almost no resistance at all – perfect given how little torque these little servos have.
I decided to mount the servo up and down just in front of the FPV camera. The thin frame of the servo will be glued to the carbon fiber camera support structure of the Bolt. The servo arm would be attached to a camera bracket by means of a simple pin. As the camera moves up and down, the pin can freely rotate inside the bracket, avoiding any extra stress on the servo. For this prototype, the pin is held to the servo arm with glue.
Here is the camera assembly with the servo attached:
Wiring the servo to the flight controller is the easy part. There are three wires: signal, Vcc and Gnd. The signal wire gets hooked into any of the PWM outputs of the flight controller. This can be an unused LED output, a PPM input pin, or any of the extra motor pins you might not be using. In my case, I hooked it up to the PWM output for motor #8. I powered the servo with 5V and hooked Gnd to ground.
Software Setup (Betaflight 3.1)
The servo tilt feature has found it’s way to the backburner in Betaflight, but still works fine if you know what to do. After hooking your servo up to your flight controller, you’ll want to power the whole thing up with a battery so that you can see the servo working. Props off, please!
Hook the quadcopter up your computer and launch Betaflight configurator. The first thing you’ll want to do is tell Betaflight how to talk to your servo. This is done in Betaflight 3.1 through resource remapping. In the CLI tab, type “resource” to output a list of available I/O pins on the flight controller:
Find the pin name by looking through the list for the label for the “previous use” of the pin you requisitioned for your tilt servo. If you used the LED strip pin, that’d be labeled LED_STRIP (=A08 on my board). If you used the PPM pin, it’s PPM (=A00 on my board), etc. I used “MOTOR 8”, which has the pin name “A03”.
Now, bind the pin to it’s new purpose as a servo by typing these commands:
resource servo 1 <pin name>
resource <old resource> none
Your board will reboot with the new mappings saved. Now, you’ll want to turn on the tilt feature. This process starts at the bottom of the configuration tab, where SERVO_TILT is a feature that needs to be enabled:
While you’re in the Configuration tab – make sure your Accelerometer is enabled. The FPV camera tilt feature uses the Accelerometer to detect the quadcopter’s level state and tilt the camera accordingly. If you don’t enable the accelerometer, the feature will not work.
Next, you’ll need to turn the feature on in the Modes tab. In this tab, the mode is named “CAMSTAB”. You can hook it up to a RC switch here, or just turn it on permanently, like I have:
Once you’ve set up the mode, the servo should immediately start making noises and moving depending on your flight controller’s orientation. You will probably notice a litany of problems: that it is turning the camera in the wrong direction, not centering properly, or driving the camera too far up or down. The final configuration step is to fix this using the configuration options found in the Servos tab. This tab is normally hidden and must be enabled by clicking the “Enable Expert Mode” switch in the upper right hand corner of Betaflight Configurator.
You’ll want to adjust the values for Servo 0 in this tab. Confusingly – “servo 0” in the Servos tab is the “servo 1” resource and the servo that is used for the tilt mechanism. Here is how I configured the fields in this tab to make the tilt mechanism work for me:
- First I set the direction of servo travel using “Direction and rate“. If I tilt the quadcopter into forward flight and the servo tilts down, I set the rate to “-100%”, otherwise I leave it alone.
- Next I set the level state of the servo / camera by placing the quadcopter on a flat surface and adjusting the “MID” value until it is set-up how I like it. Each time you set the value, press “Save” to get the servo to move to that new value. For most of us – we will want the level state to be the very bottom of the servo’s travel, which is the case with my set-up as you can see below. The reason is there is really no point in tilting the servo downwards – this would only happen under hard braking or while doing flips; in both cases we don’t really care about the camera angle.
- Finally I set the endpoints of the servo travel with “MIN” and “MAX“. My servo had some real problems going above 1600PWM so I set the “MAX” to 1600. The “MIN” endpoint of 1000 worked great. The other consideration you’ll want to take into account here is your servo is trying to tilt too high or low. Adjust these numbers down until you get the exact amount of travel range you want.
After getting everything hooked up and re-assembled, I ended up finding that the servo was binding against the top plate of the quadcopter frame as it was reaching full tilt. I broke out the dremel and filed down some of the carbon fiber to make the camera hole a little bigger. This cleared up the problem. The other issue I found was that the left front standoff on the Bolt would not fit in with the pin in place. I will probably be able to fix this problem with a nice 3D printed part, but until I can design that up, I simply removed the standoff. I’m not going to crash anytime soon – right?
I think the results are pretty nice:
This micro servo doesn’t have a ton of throw, but it does allow me to have a tilt range of about 25 degrees to about 50 degrees. I find 25 degrees to be pretty easy to land with and this particular quadcopter doesn’t have the power to fly much past 45 degrees of tilt – so this range is perfect!
Going forwards, my first plan is to design up a nice little 3D printed attachment which will hook the servo arm to the pin so that I can re-install the top plate standoff on the bolt. I’ll update this article once that is completed.
Further out – I’d like to try this again with another servo. I was not impressed with the linear servo I used in this prototype. About 30% of it’s range is unusable as it jitters like mad and tends to get “stuck” in that range. I don’t know why. The linear force is also severely lacking. It can’t push past any resistance and occasionally will get stuck for no good reason – the only way to fix it is to help it out by hand. I first plan to try out a few more linear servos to see if it is possibly just this model that has these problems. If I continue to have issues, I think I will try to design a similar system using a sub-micro rotational servo.
Here’s what I’d really like to see, though: an FPV camera with built in rotating mounting splines. I’m thinking like an HS1177 but instead of the plastic nubs on each side which inserts into the carbon fiber structure of the quadcopter – splines like are found on rotational servos. With such a camera, you could simply install it into the frame as normal, and it would be able to tilt itself. Something like this is the real key to making an automatic tilt mechanism mainstream in the hobby. Runcam / Foxeer: stop trying to add useless OSDs and make CMOS sensors work and get on this!