Let's Make Robots!

Fijibot (now on Fiji Water's FaceBook page!)

Seeks light to charge batteries (photovore) and avoids obstacles

If you're a FaceBooker, please visit Fiji Water's page (http://www.facebook.com/fijiwater) and "like" Fijibot! It was posted July 11th.

Fijibot is an autonomous, self-charging photovore. I built him using a 1.5 liter Fiji Water bottle, an Arduino Uno, 6v solar panel (plus various other parts) from Radio Shack, an Arduino Proto Shield (plus various other parts) from Adafruit, and the wheels and steering arrangement from an RC car.

I decided to use a Fiji Water bottle as the robot's exoskeleton because Fiji Water is an environmentally concious company and Fijibot recharges its batteries via a solar panel. Plus, I think the round-edged rectangular shape and the (see through) clear bottle make a really cool looking robot!

I used the Arduino Uno for this robot because I think it's an awesome microcontroller for small projects, I enjoy programming in C language, and my local Radio Shack has a good selection of Arduino boards and shields.

Working in the tight space of the Fiji Water bottle, I decided I wanted to be able to easily connect and disconnect everything (sensors, servos, etc.) from the Arduino board. So I purchased a Proto Shield, male breakaway pins, and 6" female/female jumper wires from Adafruit. I soldered the pins to the proto shield and hooked up everything with jumpers!

Fijibot's main mission is to find "food". His food is light to charge his batteries via the solar panel on his back. I used four photoresistors mounted in LED holders (front, right, left, and top) to help him find the brightest spot in the room. The main program loop compares the values of the four resistors and moves toward the most light. Once he's found the brightest spot (his top resistor sees the most light), he stops and enjoys the free meal!

While looking for light to charge his batteries, Fijibot avoids running into things using ultrasound (via a Ping sensor). The main program loop is constantly checking for obstacles within a specified range (30 inches). If something is detected, Fijibot stops, looks left and right (using a standard Parallax servo), and decides which direction is clear. If he's blocked forward, left, and right he will backup for half a second and try again.

Fijibot includes four servos: one continuous server for each rear wheel, one standard servo to turn his head (the Ping sensor), and another standard servo to move the front axle left or right for turning. I hacked the wheels and front-end turning mechanism from a cheap RC car. I had a hard time with the front-end and eventually had to add some tension springs so he would go in a relatively straight line.

In order to run the four servos and the Arduino, I used two separate power supplies. The Arduio runs on a 9v battery connected to Vin. The four servos and the Ping sensor run on a 4-AA battery pack, which is wired in parallel to a 6v solar panel for in-circuit charging. Since the solar panel and battery pack are closely matched, all I used was a schottky diode in the charging circuit. I ran both power supplies through a DPST switch so I can power him off completely, but still leave the solar panel connected to the 4-AA battery pack. This way he can chage his batteries even when not in use.

More Fijibot Pics!

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

On my first attempt, I cut the top and bottom off the bottle and tried to work it that way. I didn't have enough room to really get in there, so I started again and cut a flap on one side (see the photo with the batteries and board exposed, the flap is pinned back with velcro).

Also, I started with a 1 liter bottle and finally had to settle on the 1.5 liter.  Needless to say, I drank a lot of Fiji water during this project!

Got it now ;-) Nice idea but I was thinking that this way the bottle looses too much structural integrity (hoho...watched to much Star Trek). Try a 0.5 liter bottle ;-)

I was afraid of that too. That's mostly why I tried cutting off the top and bottom first. But those bottles are suprisingly strong and the thing is still really stable. I just added velcro to the "flap" so I can seal it in place and it's actually very solid!

I setup two spot lights with a box between them in my garage. Fijibot first found the closest light and stopped underneath to charge his batteries. I turned that light off and Fijibot navigated around the box to find a new basking spot under the remaining light!

As a side note, I learned you should never shoot video in your garage without cleaning it first! I had no idea the floor was that bad!

This is a nice example of a two skill robot. While the higher skill seeks light and commands the robot into the direction of the brightest area the lower skill avoids obstacles. 

Here some questions I had while reading your description:

  1. Is this lower skill biased by the higher skill? Is it that if the higher skill commands to the left the obstacle avoidance tries to come around the obstacle i.e. on the left side?
  2. Does this Fijibot stop eating it's "meal" if the batteries are sufficient charged? Or does is stay for ever on the brightest place?
  3. Have you shared ground with the 9V and the 4AA battery pack?

Well done, Mike. Let the sunshine in!

I decided to take your advice and modify Fijibot's behavior a bit. The current program loop always looks to the right first when trying to avoid an object even if it could actually reach the light source quicker by turning left. After thinking about your question, I realized he should consider both the unobstructed path and the light source and turn in the direction of the light source (assuming there is enough open space) whenever possible.

I'm also going to add the logic to recognize a fully charged battery and just start wandering around instead of seeking light.

Thanks for your input!

Check this out. Gratulations.