What it Does

Novarcus is an affordable one-axis camera gimbal, used to stabilize footage from a light-weight camera such as a GoPro. Novarcus has the capability to receive firmware updates over WiFi, report its current status to a NodeRed server, and (after a future firmware update) controlled remotely.


We were inspired by the beauty of capturing a memory the way we want - without compromising on stability.

How it Works

A 6-axis IMU measures data from an accelerometer and gyroscope, and sends that data to our Node Red server for display. The data is sent as json packets over MQTT to a public broker, before being received by our server. These measurements are also used to calculate which direction the servo needs to spin in order to reorient the IMU. If the IMU is not able to be reoriented, a warning flag is thrown. In our prototype, we are simply incrementing by a set step in order to reorient the IMU, though a future firmware update should aim to implement a PID controller. Novarcus has a WiFi thread dedicated to communications with the web, a main control thread, and a Command Line Interface thread.

Challenges We Ran Into

The biggest challenge we ran into was getting multiple PWM channels to work simultaneously. This hindered our ability to run Novarcus to its full potential. That is, Novarcus has 2 possible axes of rotation, a dimming status light, and a warning buzzer, requiring 4PWM max. In a more general sense, it was also very challenging working on such a hands-on hardware project remotely. Common tasks like taking voltage measurements using a lab DMM took much longer, as we had to figure out how to work our remote tools.

What we Learned with the Prototype

Building the prototype, we learned how to write drivers which communicate over I2C and drivers for controlling PWM. We also learned a lot about interfacing an IoT device with the web, implementing MQTT communications and over the air firmware updates.

What we learned

Firmware development can be quite frustrating at times, as the documentation is both unclear and scattered across the web. Significant time will be spent learning the ecosystem before one is able to actually write interesting applications. On the tool side, we were happen to be exposed to the Logic Analyzer and will be using it in future projects!

Next Steps

The most important next step is to figure out how to generalize the drivers to run multiple PWM channels. Then, to better stabilize our video, a more sophisticated controls algorithm needs to be implemented - one that responds quickly, has zero steady state error, but also minimizes overshoot.

Node Red Dashboard

Built With

  • altium
  • atmel
  • c
  • nodered
Share this project: