PanoBot is a rudimentary panorama-taking device for any Canon camera running the CHDK firmware. This project was made back in ’08 so there are numerous projects that are much more full-featured than this implementation; nevertheless, I am making the code available for reference.

What The Current Code Does:

  • Takes a photo via usb pulse sequence
  • Rotates X degrees
  • Takes a photo via usb pulse sequence
  • ^REPEAT^
  • When it goes 360 degrees, it rotates 360 degrees in the opposite direction
    • Keeps the camera cable from wrapping around the base
  • Operation pauses, waits for user input
    • At this time, the user tilts the camera to a different angle
    • After tilting, the user presses the button on pin 10
  • The camera begins this sequence again


  • 360 Degree rotation
  • .9 Degree Accuracy per shot
  • Programmable Delay
  • USB Shutter Control
  • Portable


  • Arduino Microcontroller
  • Stepper Motor (1.9 Degree step or less recommended)
  • Some sort of battery for standalone operation
  • A Supported Camera
  • A tripod (old all-metal tripods with bolt interconnects are best)
  • Bolts and nuts to fit your motor and tripod
  • Scrap wood or sheet metal (Sheet metal recommended for camera arm)
  • Set Screw and metal tube to fit around motor shaft (or use whatever you have lying around)


  • Canon S* IS Series
  • All other cameras that support CHDK

Sample Panorama


Ethan is a computer engineer and open source hardware/software developer from Michigan. He enjoys AVR and linux development, photography, mountain biking, and drinking significant amounts of home-roasted coffee. Find out more at

Tagged with: , , ,
Posted in Arduino
One comment on “PanoBot
  1. Nick says:

    It is possible to get the panobot schematic by email

1 Pings/Trackbacks for "PanoBot"
  1. […] could be marvellous. To get started with your own panorama device, visit Ethan’s website here. To get started with your own Arduino-related projects, consider the Freetronics Eleven – […]

Leave a Reply

Your email address will not be published. Required fields are marked *