Let's Make Robots!

Looking for ideas on a I2C Pan/tilt stand-alone sonar

This quest to build a stand-alone I2C pan/tilt range finder controller started with an article here by Ladvien.  In    http://letsmakerobots.com/node/39130, Ladvien explores using an ATtiny85 (84) as an I2C motor controller...

And in http://letsmakerobots.com/node/39222,   Chris the Carpenter   gives us an awesome pan and tilt code example... so...

I personally have a need to offload the sonar rangefinding scan function from my primary Arduino, as it messes with the timers and  causes the entire system to run slowly.

As I want to be able to provide for the various devices most people use, there are not enough pins on the ATtiny85 for what I need, but the ATtiny84 will do just fine!

ATtiny84 short data sheet  -  ATtiny84 long data sheet


ATtiny84 pinout

Attached Devices:

Depending on whether you use Ping or MaxSonar ultrasound rangefinders, or Sharp IR rangefinders the pin requirements will differ.\

I will be designing this control module to accept any combination .  The Setup routine should identify what modules are attached, and provide output accordingly.


  • I will require the two pins SDA and SCL for the I2C interface.
  • I will require PWM outputs for the pan and tilt servos.
  • I will require two digital Inputs for front and rear MaxSonar EZ  rangefinders PWM.
  • I will require two digital Outputs for front and rear Ping SR04 rangefinders trigger.
  • I will share the MaxSonar digital input pins for for front and rear Ping SR04 rangefinders echo.
  • I will require two analog inputs for front and rear Sharp IR  rangefinders

That's a total of 2 I2C pins, 6 digital pins, and two analog pins.


  • SET PAN TO: Angle from 0-180 degrees  Zero to the left, 90 degrees being center, and 180 to the right.
  • SET TILT TO: Angle from 0-135 degrees Zero being 45 degrees down, 90 being center, and 135 being straight up (thoughts???) 
  • SET PAN INCREMENT:  Range from 1 degree per increment to 10 degrees per increment (Again, thoughts?)
  • SET TILT INCREMENT:  Range from 1 degree per increment to 10 degrees per increment....
  • SET CONVERSION:  Boolean for Inches or Centimeters
  • SET SWEEP START:   Angle at which rangefinding sweep starts.
  • SET SWEEP END:   Angle at which rangefinding sweep ends.
  • INITIATE SWEEP:   Iniatiate a sweep, using current pan increment, sweep start and stop.
  • SET RETURN COUNT:   The number of data points to return on GET DATA
  • GET DATA:  Retrieve most recent full scan


Future Thoughts:

If there are enough cycles left after coding the above, allow for:

  • Return Polar Coordinates:   Data returned in consecutive integer pairs (Angle, distance)
  • Return Cartesian Coordinates:  Data returned in consecutive integer triplets (Angle, x, y)
  • Commit unused pins to LED/Infrared/Lazer illumination


So, before I commit this to circuit board, I would love to get your feedback.