Introduction: Prototype Camera Stabilizer (2DOF)
Robert de Mello e Souza, Jacob Paxton, Moises Farias
A huge thank you to the California State University Maritime Academy, its Engineering Technology program, and Dr. Chang-Siu for helping us succeed with our project in such complicated times.
A camera stabilizer device, or camera gimbal, is a mount that prevents camera shake and other unwarranted movements. One of the first stabilizers ever invented used shock absorbers/springs to dampen sudden changes in the motion of the camera. Other types of stabilizers use gyroscopes or fulcrums to accomplish this same task. These devices stabilize unwanted movements in up to three different axes or dimensions. These include the x, y, and z-axis. This means that a stabilizer can dampen movements in three different directions: roll, pitch, and yaw. This is usually accomplished using 3 motors controlled with an electronic control system each counteracting a different axis.
We were exceptionally interested in this project for several reasons. All of us enjoy various outdoor activities such as snowboarding and other sports. Getting high-quality footage of these activities is hard due to the amount of movement required. A couple of us own a real camera stabilizer bought from the store, and so, we wanted to investigate what it takes to create something like that. In our lab and lecture classes, we have learned about how to interact with servo motors using Arduino, the coding required to make them work, and the theory behind electronic circuitry to help us design the circuits.
*NOTE: Due to COVID-19, we were unable to complete this project in its entirety. This instructable is a guide for the circuitry and code required for the prototype of the stabilizer. We intend to complete the project whenever school resumes and we have access to 3D printers again. The completed version will have a battery circuit and a 3D-printed housing with stabilizer arms (shown below). Also, please note that powering the Servo motors off of the Arduino 5v power supply is generally bad practice. We are simply doing this to allow for testing of the prototype. A separate power supply will be included in the final project and is shown in the circuit diagram below.
-Arduino UNO Microcontroller
-Wire Jumper Kit
-MPU6050 Inertial Measurement Unit
-MG995 Servo Motor (x2)
Step 1: Project Overview
Above is a video of our project and also shows a working demonstration.
Step 2: Theory and Operation
For the stabilization of our camera, we used two servo motors to stabilize the pitch and roll axis. An Inertial Measurement Unit (IMU) senses acceleration, angular acceleration, and magnetic force that we can use to determine the angle of the camera. With an IMU attached to the assembly, we can use the sensed data to automatically counteract the change in the movement of the handle with the servos. Furthermore, with an Arduino Joystick, we can manually control two axes of rotation, one motor for each axis.
In Figure 1 you can see the roll is counteracted by the roll servo motor. As the handle is moved in the roll direction, the roll servo motor will rotate in an equal but opposite direction.
In Figure 2 you can see the pitch angle is controlled by a separate servo motor that acts in a similar manner to the roll servo motor.
Servo motors are a good choice for this project because it combines the motor, a position sensor, a small built-in microcontroller, and H-bridge that allows us to manually and automatically control motor position through the Arduino. The initial design called for only one servo motor, but after some deliberation, we decided to use two. Additional components added were an Arduino LCD screen and Joystick. The purpose of the LCD screen is to display what state the stabilizer is currently in and the current angle of each servo while in manual control.
To create the housing to hold all the electrical components, we have used Computer-Aided Design (CAD) and will use a 3D printer. To hold the electrical components, we have designed a body that will also act as a handle. This is where the IMU sensor and joystick will be mounted. For double-axis control, we designed mounts for the motors.
Step 3: State/Logic Diagram
The code consists of three states, each of which will be indicated on the LCD screen. When the Arduino receives power, the LCD screen will print “Initializing...” and I2C communication is started with the MPU-6050. The initial data from the MPU-6050 is recorded to find the average. After, the Arduino will enter the manual control mode. Here, both servo motors can be adjusted manually with the joystick. If the joystick button is pressed, it will then enter the “Auto Level” state and the stabilizing platform will maintain level with respect to Earth. Any movement in the roll or pitch direction will be counteracted by the servo motors, thus keeping the platform level. With another press of the joystick button, the Arduino will enter a “Do Nothing State” where the servo motors will be locked. In that order, the states will continue to change with every push of the joystick button.
Step 4: Circuit Diagram
The image above illustrates our project circuit diagram in the OFF mode. The Arduino Microcontroller provides the necessary connections to run the MPU-6050 IMU, Joystick, and the LCD display. The LiPo cells are directly connected to the changer and supply power to both the Arduino Microcontroller as well as both servo motors. During this mode of operation, the batteries are connected in parallel with the use of a 3-point double-throw (3PDT) switch. The switch allows us to disconnect the load, while simultaneously connecting the charger and switch the cells from a series to a parallel configuration. This also lets the battery charge simultaneously.
When the switch is flipped to the ON mode, two 3.7v cells will provide power to the Arduino and Servo Motors. During this mode of operation, the batteries connected in series with the use of a 3-point double-throw (3PDT) switch. This allows us to obtain 7.4v from our power source. Both the LCD Screen and IMU sensor use I2C communication. SDA is used to transmit the data, while SCL is the clock line used to synchronize data transfers. The servo motors have three leads each: power, ground, and data. The Arduino communicates with the servos through pins 3 and 5; these pins use Pulse Width Modulation (PWM) in order to transmit the data with smoother transitions.
*Battery Charging Circuit is from Adafruit.com
Step 5: Construction
The basic design of a camera gimbal is quite simple, as it is essentially just a handle and mount for a camera. The gimbal consists of two servos motors to counteract any movement in the roll and pitch directions. Using an Arduino Uno requires a significant amount of space, so we also added a housing at the bottom of the handle to contain all the electrical components. The housing, handle and servo motor mounts will all be 3D printed, allowing us to minimize the cost and overall size, as we can have full control over design. There are several ways one could design the gimbal, but the biggest factor to consider is avoiding one servo motor from rotating into another. In the prototype, one servo motor is essentially attached to the other. When we have access to 3D printers again, we will 3D print the arm and platform shown above.
*The designs for the arm and platform are from https://howtomechatronics.com/
Step 6: Overall Findings and Potential Improvements
The initial research that we did on camera gimbals was very intimidating. While there was a plethora of sources and information on the subject, it very much seemed like a project that would be out of our league. We started slowly, doing as much research as we could, but absorbing little. Every week we would meet up and collaborate. As we worked, we gained more and more momentum and ultimately became less fearful and more excited about the project. While we did add an additional joystick and LCD screen, there is still a lot more we could add to the project. There are also a few improvements that could be added, such as restrictions to the manual control that would prevent the user from rotating one servo motor into the other. This is a small problem and could also be fixed with a different mounting design. We also discussed the possibilities of adding a pan feature. This would allow the user to use the servo motors to pan over an area in a specified time.
As a team, we all worked together very well. Despite the circumstances, and only the ability to meet virtually, we made the best out of it and kept in frequent communication. All of the parts and components were given to one person and this made it a little harder for the rest of the group to help troubleshoot any problems that came up. We were able to work through the issues that arose, but had we all had the same materials, it would have made it a little easier to help. Overall, the biggest contribution to completing our project was the ability for every member to have availability and willingness to meet and chat about the project.