Introduction: HUGE Update for GoPro Panorama (ver.2)
I decided to update the project before summer after all. Updates include:
Vertical mount for Boost1000c Battery interface;
New set screen - consolidated 3 screens into 1;
Settings are now interactive and are all done in 1 view;
Redesigned cradle with skateboard bearings for improved smoothness.
Also included a demo video with some footage taken at the park.
Step 1: GoPro Panorama and Time Lapse Project
While an egg timer can provide a basic rotation device for my GoPro, I decided to make one with a bit more control for this summer. I’ll probably do another with more robustness, but for a quick beta-project, this works for now.
What I wanted from the project was: LiPo battery power for mobility and outside use, controls for start, end and speed options and a 1.8” TFT for a display. I chose to use a Servo rather than a stepper, so it will only do a 180 panorama, but that is all I want for my shots.
Step 2: Parts
Case: Because this is a beta-project for me, I used wood framing and a 3D printed panel for the case. I also made some matching labels and it has a little sharper look than cutting component holes.
- Arduino (Nano for the end product)
- LiPo battery (3.7v 2500mA LiPo)
- Adafruit 1000C boost (5.2v output, recharge control, low battery monitoring)
- Servo motor (an SG90 mini Servo, just barely enough!!)
- 1.8” TFT screen
- (3) POT’s
- (2) buttons
- Power Switch (saves battery between uses)
- Ball bearings (5mm)
- some M2 screws, misc wire, solder
- Action camera
Things I fabricated:
- Project case
- Battery Case
- TFT frame
- GoPro mount (base)
Step 3: Putting It Together
Let’s put it together!
Since I knew what I wanted, I started with a case design. Drawing up a design, printing it on a 3D printer, printing some labels and putting together a quick wooden frame (2 sides and a base only) was a quick way to start, but not without a few “uh-ohs”! First, I decided to use an LED for button feedback, it ended up on the side by the power switch. Then, the battery case I designed wasn’t going to make a great fit and form for the inside of the case, so now it’s on the outside.
After printing the front panel and fabricating the support case, make some PCB support clips that will attach to the wooden sides to secure the PCB vertically. For the GoPro support, I had previously designed a mount, so it was modified to fit this project along with a make do casing for some bearings to provide support and smoother rotation. Once these were done, the hardest part was just programming and TFT views.
For the Arduino, I mounted the Nano to a small circuit board to make the connections easier. From there add wiring for the TFT, buttons, led and POT’s based on the case size. I have never been shy about wire lengths having some to spare, so please disregard my wire management inside! For the servo, since it comes with a female Dupont connector, just solder a set of header pins to an open area on the PCB for connecting.
Since my version is only using a 5.2v power source, I fabricated a USB cable from the powerboost to the Nano instead of wiring to the vin. The powerboost 1000c also provides the connections for the power switch and the low battery warning sensor. This little Powerboost 1000C is quite a neat little package.
Next: assemble, glue labels and TFT frame, add knobs, attach GoPro…Enjoy!
Step 4: Programming and Code
Programming and Code:
Since I am not an uber-serious programmer, My project coding skills are passable at best, but if you want to see or use it, I have attached it in the last step. Beware though, it’s sloppy! The TFT screens for the project are version 2, but may continue to change.
For the most part, using a Servo is pretty straight forward, it goes from 0 to 180 degrees and can be set anywhere in between. The problem for this project is the jump from degree to degree. For Time lapse, not such a big deal, but for a slow panorama, it won’t do. After some research I found a workaround by using a mathematical format using myServo.writeMicroseconds() which allows me to use multiple steps between degrees - 10 steps for each degree! in my case. To use it, find the values of the beginning and the end points. “Traditional” Servos use 1000-2000 (0 to 180 degrees) but try it to see where that positions yours. On my Chinese version, I ended up with 550 - 2350.
Good news is it made my math easier - 180 degrees, 1800 clicks = 10 clicks /degree. Job Done!
To control the speed, Simply insert short delays between steps. My unit starts at 1 sec per degree (100 millsec between steps) rotation with a high end of 25 seconds per degree but it can be as long as you need. With the bearings, this provides a very decent slow panorama, but I need to work on a better cradle (3D prints are not the smoothest) or look at using 2-3 ring bearings from a skateboard.
Step 5: How It Works...
How it works:
Press the Start button to begin, this takes you to the start angle screen. As you turn the Begin POT, the base rotates to show the actual starting point. Since I use an LCD backpack, I can frame the beginning point. Hit the start button again and rotate the End POT. Now I know to end before the side of the next house. Hit start - again - and the speed screen shows up and tells me how many degrees I have set and the time it will take. Rotate the Speed POT and it updates the speed and time. Hit Start one last time, the base swings to the start position, you get a countdown screen to start the GoPro (5 seconds) and then it starts its slow rotation. Drink Cold, frosty beverage. For changes to the shot, hit Cancel.
Overall, I am quite satisfied with the results. It took 4 days to print, assemble and program and comes in at 12oz, without the GoPro attached. The battery seems to last about 12-14 hours just sitting with the monitor on, but with the power switch that should be plenty for some beach shots.
Still to do or consider for next version:
-Right now, the unit is only programmed to go from right to left. When I get the time I need to do the math to have it do either. For my purposes, this works.
-Battery compartment needs to be inside. Good news, plenty of ventilation.
-LED to the top of the unit.
-Smoother operation with cradle or ring bearings
-Possibly a stronger servo, maybe even a gear system
-Use a larger power supply and use vin to get more accurate voltage levels.
-stronger servo or use a GoPro Session (prefer the latter but no screen)
Hope you get a chance to build one and let me know what improvements you make! Thanks for looking!
Step 6: The Code
I have included the Arduino Code for your use (and laughter).
If you like the project, vote for me in the Arduino contest.
If you have constructive comments, I would love to hear them.