Solar Powered Picaxe Microbot (Vibrobot)


(click image for better view)

Introduction:

This is a small solar powered progammable robot. It's design was inspired by BEAM robots, but whereas those devices are usually entirely hardware based, I favor systems which rely on software. Allowing programmability, however basic, introduces a whole new level of flexibility.

This microbot is also called a vibrobot because it vibrates in order to generate horizontal motion. Because it is microprocessor controlled, it can sense stimuli and respond as programmed. The low power requirements of the components lend themselves well to solar power stored via a super-cap.

 

Hardware, Parts, and Assembly

The basic hardware includes the following features:

  • Solar powered
  • Solar charge sensing
  • Light: LED eyes
  • Vibration
  • Sound: piezo speaker
  • User input: a tail switch
  • Cute bug-like appearance on diode legs

The parts used are as follows:

  • Picaxe 08M microcontroller
  • LM336 2.5v voltage reference
  • Pager motor with eccentric
  • Piezo speaker
  • 3.6v Solar cell
  • .33F capacitor
  • Microswitch
  • Misc resistors
  • Vero (strip) board
  • Misc diodes
  • 2 undiffused red LEDs
  • TIP122 NPN transistor
  • 2xAA rechargeable cells

The parts are connected as depicted in this schematic. Assembly on a small piece of stripboard was compact, but not too daunting. The nice square shape of the capacitor was perfect for supporting the piezo and anchoring the motor. The solar cell simply glues on top of the motor. The programming header is hard to get to once the solar cell is glued, but because it is a double-male, it can be accessed from the bottom of the board. Use medium power diodes for the legs since small-signal are easily bent when putting the robot down on a hard surface.


Software

This progam flashes the eyes with frequency proportional to the capacitor voltage. At a predetermined voltage threshold, the microbot starts to vibrate. Once in a while (about 5% of the time), the vibrobot will play a few seconds of random tones. And if the tail switch is pressed it plays happy birthday with flashing eyes to accompany the tune.

 

Thoughts

In building this robot, there were a few things worth noting:

- Allowing the microcontroller to determine capacitor charge requires a nonlinear component such as the 2.5v reference used in this design. This is necessary because the ADCs scale their input with respect to the supply voltage. Instead of regulating the supply voltage (somewhat wasteful of our precious solar energy if using a linear regulator), the ADC input (with minimal current draw) receives the reference voltage.

- Writing software where the system can terminate at any moment and restart is a slightly different mindset from normal software tasks which usually proceed with a well defined program flow. It more closely resembles interrupt driven programming with a bit of chaos.

- Using random numbers on a microcontroller takes a bit of work. Whereas a psuedo-random number is almost always used in programming (e.g. a linear congruential random number generator), this doesn't work so well on a microcontroller since, without some planning, it always leads to the exact same sequence of numbers and a repetitive well-defined behavior results rather than the desired random one. In this design, I avoid this by seeding the random generator with a value based on how quickly the capacitor charges (from the sun) to a particular level. If I didn't have any external sensors, I probably would have saved the random seed in EEPROM to avoid restarting the random sequence each time, though this would have limited the lifetime of the 08M to 100,000 uses.

- BEAM robots are usually very simplistic and sometimes use their IC's in unintended and even abusive ways. In this spirit, I wanted to drive the motor directly from the microprocessor and tried to do this by doubling the output drive current by conecting 2 microcontroller output pins together and then driving them identically. The resultant 50ma was still not enough to run the motor, so I ended up using a driver transistor. Even after abusing the Picaxe 08M in the testing process, however, the chip appears to be working fine. This is probably partially a result of doing everything at 2.6v (2xAA rechargeable cells) and also testimony to the robust nature of the IC's.

- Using the "disablebod" command allows the microcontroller to operate at voltages right down to about 1.3v and reduces microcontroller current consumption. This is amazingly low, but comes at a cost of potentially erratic microcontroller behavior if a brownout occurs. It can be very useful in solar powered projects like this one, but watch out since driving a motor (especially without a smoothing capacitor) and microcontroller off a single supply can also lead to erratic microntroller behavior.

 

Licensing and Disclaimers

This code is explicitly released under the GPL. And this page is licensed under a Creative Commons Attribution 2.5 License.  

Write me if you find this project interesting. Link to this page if you find it relevant..

Warning, robotic projects may cause loss of hair, time, money, and friends. This project is provided without any warranty and probably isn't suitable for anything.

Read or write a comment on the hardware projects

Back to Picaxe Projects (and info about the Picaxe microcontroller)