Raspberry Pi Action Camera


Please excuse the discoloration/ choppiness – this is a screen recording of the video file. Raw files can be seen here.


I was fortunate enough to acquire a GoPro at a discount a few months ago. I used the camera to record runs on the mountain, document some of my work, and, most importantly, for bike rides. Not only is it a great tool for capturing scenery on long-distance trips, it’s also an important piece of safety equipment as a cyclist. Cameras like the GoPro, Sony Action Cam, and the Fly6 are all relatively expensive and, perhaps, not as accessible as they should be. I wanted to design a cheaper, open-source, and biking-centric action camera.


The design of the action camera had to be based on off-the-shelf components. If you have access to a 3D printer and soldering iron, you can build this project. With that in mind, I started with the Raspberry Pi A+, the newer, low-power version of the Model A. Having the A+ as the platform meant having access to hundreds of parts designed to work with Raspberry Pis; the most important being the camera module. A quick Google search told me it possible to build so I took it from there. The first prototype I built used an open-source case and was just to make sure the camera would actually work.

From there, my design goals were simple:

  1. Long battery life
  2. Wireless communication
  3. Simple, durable enclosure

The first goal meant having a large battery. The hour to hour and a half battery life of the GoPro wouldn’t cut it for longer, multi-hour rides. The second meant having both Bluetooth and WiFi so that additional hardware wasn’t needed to interface with the camera. The last goal also played a big role in determining the first two. While designing holes/slots to make every port available outside the case would have made things more convenient, it would also have reduced the structural integrity and water/dust resistance. The parts I used can be found below:


I started by trying to package the peripherals as tightly as possible on the Pi. The largest obstacle was the USB WiFi adapter, which stuck out quite a bit more than everything else. I removed the USB jack with some side cutters and my iron and attached ribbon cable to the exposed data and power lines. I then removed the WiFi adapter from its plastic case and soldered the wires directly to its board. Next, I hot glued the Bluetooth module to the top of the Pi and ran more ribbon cable to the headers underneath. I also attached the two pushbuttons with slightly longer pieces of cable.

IMG_0534Space was already pretty tight and I still needed to attach the LiPo charger/booster. I did some quick measurements and printed out a support for the board. IMG_0542It took a couple of tries but I finally got one that fit.

Once I had everything mounted on the top of the Pi, I needed to design a case to go around it. I printed off a quick base to see if my measurements lined up.

IMG_0543You can see the support piece in the picture above on the top right of the board

I now had a pretty good idea what the final x and y dimensions were going to be. I wanted to keep the camera as close to the size of the Pi as possible, which meant the large battery had to fit snugly underneath the bottom of the Pi. I printed out a few spacers so that the LiPo wouldn’t get punctured by any of the protruding headers. After that I printed off a few more test pieces to make sure that the Pi, battery, charging port, buttons, and switch would fit.

IMG_0544Here you can see a few iterations of cases

IMG_0545A cutaway showing the orientation of components

Once I was sure everything would fit I printed the bottom half of the case. The two pushbuttons were attached via hot glue, while the Pi was mounted to the case using screws.

IMG_0552A good fit



With the bottom of the case completed, I now had to figure out a way to mount the camera module to the top. The previous camera case I had used tension to hold the camera via its four mounting holes however, I wanted something a little more secure. I designed platforms for the camera board to rest on which held the board in place with screws.

Screen Shot 2015-04-06 at 6.51.04 PM copyThis design has the added benefit of allowing the screws to be reversed such that the threads on the outside of the case can be used to mount the camera or attachments


IMG_0559The screws are partially recessed in this orientation to prevent anything from catching on the front face




The Pi runs a script by Alex Eames that, on startup, listens for one of two button presses. The button closer to the edge starts the recording, while the center button stops it. I had to make a few changes to the script so that it would work on the A+, which can be found on my github.

While the Pi still has its HDMI output, as well as access to many of the unused GPIO, the primary method of communication is ssh. The A+ only has one USB port and no Ethernet so there is not much of a choice. Files can be sent and read from the Pi using an FTP/SFTP client, or accessed via the command line. The card can also be accessed via a hard connection by using the method described here.  The Bluetooth to serial module can be paired to and used to trigger start and stop for recording, and alleviates the limitations of the two hardware buttons. There is also the possibility of adding features such as time-lapse or motion-triggered alerts.


This was, by far, the most involved 3D printing project I have undertaken since getting one. A project such as this really highlights the many ways in which 3D printing can revolutionize product development for individuals and small companies.

IMG_0567A good example of rapid prototyping

It was also project that required a great deal of customization to be well executed. Taking all of the components and putting them in a project box would have given me no control over the form factor, a critical part of the design. Being able to put so much effort into designing the case was a great experience and taught me a lot about a process I was just recently exposed to.

One thing I always struggle with is when to quit. I have a hard time breaking out of the process of constantly re-evaluating my work. But here is where I stop, for now. I am happy with the design and what I have learned, but I also know there are many revisions yet to be made.



STLs, Code, and Video Samples