Skip to content
Platform for high-resolution panoramic photography, initially intended as board upgrade for Gigapan EPIC 100.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Build Status

Pano Controller Firmware 2.2

Open Arduino-based Platform for high-resolution panoramic photography controlled via Bluetooth App. Started as a board replacement/upgrade for the Gigapan EPIC 100, but designed to be flexible and support other home-brew panoramic platforms with stepper motor movement.

The design goals for the new versions 2.2 and beyond are as follows:

  1. Expose all basic operations that the platform is capable of as discrete G-Code commands via Serial/UART
  2. On-demand send platform parameters and current status (position, battery etc) needed to configure an application and track the execution.
  3. The External (iOS) App (Bluetooth LE) or similar application will create and send the G-Code program to run the panorama or other activities.
  4. As the above App can display all the information, a display is no longer necessary on the platform.

See the Official Facebook page for demo videos and more progress photos.

Adafruit Feather M0-based Pano Controller installed in Gigapan EPIC 100

G-Code Panorama Program



  • Zero-motion shutter delay! When gyro is connected, waits for platform to stabilize before triggering. Extremely useful feature to compensate for tripod stability, platform's own movement or wind gusts.
  • Supports a subset of G-Code allowing full remote operation of the platform via a Bluetooth LE or serial. This enables running other programs than just panoramas (time lapse for example)
  • Precision sub-degree movement using the StepperDriver library
  • Smooth movement and iOS App Demo (2.1)


  • 32-bit ARM controllers (Gigapan had 8-bit AVR)
  • Bluetooth LE control via iOS App
  • Battery voltage from 10V down to 6V due to the DRV8834 stepper driver used. Other drivers will enable different voltage ranges if necessary.

Wiring map

An Adafruit BLE device is now required for Bluetooth LE connectivity. Wiring is mostly stable but subject to change if new devices or options are added.


The controller unit comes with no display. All the controls and status are presented via the iOS App.

Feather M0 / Bluefruit

Status: in active development. Using onboard Feather/BLE.

  • A0
  • A1
  • A2
  • A3
  • A4 - Battery Voltage via divider: Vin---[47K]---A0---[10K]---GND
  • A5
  • SCK - BLE(internal)
  • MOSI - BLE(internal)
  • MISO - BLE(internal)
  • RX/0 - CAMERA_FOCUS active LOW
  • TX/1 - CAMERA_SHUTTER active LOW
  • 4[BLE] CS (internally connected)
  • 7[BLE] IRQ (internally connected)
  • 8[BLE] RST (internally connected)
  • SDA/20 - MPU-6050 board
  • SCL/21 - MPU-6050 board
  • 5 - DIR
  • 6 - VERT_STEP
  • 9[A7] - HORIZ_STEP
  • 10 - nENABLE
  • 11 - MPU-6050 Vcc (to be able to power on separately)
  • 12 - MPU-6050 INT
  • 13[LED]

Teensy LC / 3.x

Status: not tested (work in progress) Bluefruit SPI Friend is required.

  • A0 - BATTERY - Battery Voltage via divider: Vin---[47K]---A0---[10K]---GND
  • A1
  • A2
  • A3
  • A4 - SDA - MPU-6050 board
  • A5 - SCL - MPU-6050 board
  • A6
  • A7
  • D0/RX - CAMERA_FOCUS active LOW
  • D2 - MPU-6050 INT
  • D3 - MPU-6050 Vcc (to be able to power on separately)
  • D5 - DIR
  • D6 - VERT_STEP
  • D10 - nENABLE


  • Vin is 6-10V when using DRV8834
  • 3.3V step-down adapter from Vin to Vcc for logic power
  • All ~SLEEP tied to Vcc
  • All VMOT tied to Vin
  • All M1 tied to Vcc (preset 1:32 mode)
  • All M0 left unconnected (preset 1:32 mode)
  • All ~ENABLE tied together
  • All DIR tied together (multiplexed in software)
  • 100uF capacitor at Vin
  • 10uF capacitor at Vcc
  • 10K pull-up resistor from Vcc to ~ENABLE
  • Voltage divider Vin---[47K]---A0---[10K]---GND


  • Atmega328-based boards are not supported, see issue #57
  • Serial or Bluetooth LE is required for the current design. Only the Adafruit_BluefruitLE library is supported for now, but any UART-type protocol should work with minimal changes.
  • Other devices notes
    • if we want to use ESP-12 at some point, need fewer pins. ESP-12 only has 11: (0,2,4,5,12,13,14,15,16,RXD,TXD,ADC)

Setting stepper motor current limit for DRV8834

  • Vref0 = 2V +- 0.1V
  • Pololu schematic shows Risense = 0.1 ohm
  • Itrip = Vref/(5*Risense)
  • So set Vref = Itrip/2

Gigapan EPIC 100

Gigapan motor spec is 1A, so 0.5V. At full step the current limit is 0.7*Itrip, so we have to set Itrip to 1.4 and Vref to 0.7V as upper bound.

Lower current

Tested with ~1.5lb zoom lens+camera. The minimum Vref that avoids skipping is about 0.3V (0.6A to motor), but it will vary with camera weight. It may be possible to use lower current even, if we reduce the speed.

Bill of Materials




Well, this is a controller, so it needs a pano platform to control. I used the Gigapan Epic 100 but any platform with two motors (or even one, I suppose) can be used. The only thing required of the platform is the two stepper motors, one for horizontal movement and the other for vertical.

  • 2 x Bipolar Stepper Motors and reduction gears.
    • Examples:
      • 39BYG101 0.5A
      • 39BYG001 1A (used in Gigapan platform)
    • Notes:

Previous Versions

The previous versions of this project had different goals and do not require an external app:

You can’t perform that action at this time.