loading
The FuzzBot is an awesome, fast, fully autonomous small Arduino robot that everyone loves!!!  It uses the compact Pololu ZumoBot Chassis kit for a great drive system, and uses a Parallax Ping sensor to sense proximity, to make the FuzzBot fully autonomous.  I like to think of it as a cheap & hackable "mini Roomba" because it uses a Swiffer Duster on the back to pick up any unwanted dirt off of the floor.  I programmed the Arduino code using the simple Pololu ZumoBot library, and used the Ping library to interface with the Ping sensor.  The FuzzBot also has a pan/tilt servo for the Ping sensor, and can be used with the Servo Arduino library.

The FuzzBot was also featured on the MAKE Blog!



 

What did you make?

I made the FuzzBot, a fully autonomous mini Arduino robot that cleans your floors!  It uses a Parallax Ping Sensor on the front of the FuzzBot to detect if an obstacle is in its way, and if it is, the FuzzBot quickly turns and travels the other direction.  It also uses the Pololu ZumoBot Chassis for the drive system.  I like to think of it as a 'Mini Roomba' because it has a Swiffer Duster on the back, to pick up any dust off of your floors.

How did you make it?

I made the FuzzBot with my soldering iron, laptop (for the Arduino programming), an Allen wrench, and some screwdrivers.  Once I assembled the ZumoBot Chassis Kit, I then used some extra wire to attach the servo to the chassis.  After that, I secured the Ping Ultrasonic Sensor to the servo with some hot glue, and soldered wire to the pins on of the Ping sensor to connect with the Arduino.  I then programmed the Arduino Leonardo with open source Arduino libraries from both Arduino.cc and the Pololu website.  I combined the two with some of my programming skills, and after about ten different sketches of Arduino code, it finally worked!

Where did you make it?

I made it in my hackerspace (Qtechknow Labs), and at my desk.  I used the soldering irons, glue guns, and pliers from the hackerspace to make the FuzzBot, and I programmed the main Arduino microcontroller with my laptop at my desk.

What did you learn?

I learned that everything doesn't work the first time, and all about motors.  I had to go through over ten revisions of the code, and solder a ton!  I had some problems of the orientation of the plastic pieces on the Pololu ZumoBot Chassis, which I described in this Instructable.

Step 1: Parts and Tools

Parts:

Arduino Leonardo (SparkFun, $25)
microB USB Cable for Arduino Programming (SparkFun, $5)
ZumoBot Chassis Kit for Arduino (Pololu, $43)
100:1 Micro Metal Gear Motors (2, Pololu, $16 each)
Ping Sensor (Parallax, $30)
Servo - Small (SparkFun, $9)
AA - Rechargeable with Wall Charger (4 Batteries, Amazon, $18)
Swiffer Duster Refills (Amazon, $8 for a pack of 10)
Male Headers (we'll only need 3 pins to connect the Servo to the ZumoBot PCB, SparkFun, $1.50)

Tools:

Wire, no thicker than 22AWG (SparkFun, $2.50)
Wire Strippers
Soldering Iron
Solder
Vice or Third Hand (for Soldering)
Laptop
Pliers
Hot Glue
Hot Glue Gun
3mm Allen Wrench
Small Phillips Screwdriver

Step 2: Chassis

To assemble your ZumoBot chassis kit, download the PDF below. This is Pololu's instructional guide and it's a PDF so that you can easily read it on your tablet or smartphone! However, if you would like to have more pictures to help you along the way, in the next few steps I'll show you how to make the main chassis!

Take out all of your parts and tools, which were shown in the last step. Here is what is included in the ZumoBot Chassis:

  • two silicone tracks
  • two drive and two idler sprockets
  • a 1/16″ acrylic mounting plate
  • battery sockets
  • mounting hardware

And here is what is in the Zumo Shield Kit:

  • Zumo Shield PCB
  • Jumper Connectors (4)
  • Jumper Wires for Motors (3)
  • Pushbuttons (2)
  • Right Angle Switch
  • Male Headers (40)
  • Female Headers (2)
  • Mounting Plates (2)
  • Screws for Mounting Plates (2)

You will need the tools from the last step also.

Step 3: Soldering the Zumo Shield

Take out the Zumo Shield PCB and all of the electronic components (switch, buttons, headers, etc.) that go with it. Plug in your soldering iron, and if you have a variable temperature iron, set the temperature to be between 350C - 400C (660F - 750F). Grab a small length of your solder (hopefully lead free!!!), and put the Zumo Shield into a vice or third hand.

If you don't know how to solder, that's okay! Head over to this awesome tutorial to learn!

  1. Put the two pushbuttons into the corresponding holes, and flip the PCB over.
  2. Solder the four total copper holes.
  3. Snip the leads with your diagonal cutters.
  4. Put the switch on the PCB into the copper holes corresponding, and flip the PCB over.
  5. Solder the three copper holes.
  6. Snip the leads with your diagonal cutters.
  7. Put the Buzzer into the copper holes corresponding, and flip the PCB over.
  8. Solder the Buzzer total copper holes.
  9. Snip the leads with your diagonal cutters.
  10. Using your pliers, snip off one 10 pin male header, 8 pin male headers (2), and one 6 pin male header from the male header strip. Now, put the male headers into the Arduino Leonardo pin headers.
  11. Flip the Arduino Leonardo over, and put it into the Zumo Shield PCB (the pins that the Arduino Leonardo go into are outlined with a white line).
  12. Flip the whole package (Leonardo & Zumo Shield) over, and solder all of the copper holes with a male header sticking out of it.
  13. Snip all of the leads with your diagonal cutters.
  14. Take the Arduino Leonardo off of the Zumo Shield PCB, and you should see that the male headers (now soldered on!!!) are aligned well.
  15. Using your pliers, snip off one 4 pin male header, one 3 pin male header, and one 2 pin male header from the male header strip.
  16. Put these male header segments into the jumper holes (in the middle of the PCB). These will let us select if we want the onboard buzzer, battery monitor, and 3-axis compass to be connected to the Arduino or not.
  17. Flip the PCB over, and solder the copper holes.
  18. Snip the leads with your diagonal cutters.

Yay!!! You are now done with the through-hole soldering needed to complete the chassis. Head on over to the next step to find out how to arrange the motors in the chassis!

Step 4: Arranging the Motors

Next, we're going to arrange the motors, so that our Arduino can control them. You'll need to use your soldering iron just a small bit.

  1. First, get the battery holder out. It's the black box that looks like it can hold 4xAAs.
  2. Take two jumper wires out of the paper wrapping.
  3. Cut them both in half with your diagonal cutters.
  4. Next, bend the one end of each small wire segment into a loop, but don't close the loop.
  5. Wrap the loop of the wire around the leads of the 100:1 micro metal gear motors.
  6. Solder the junction between a jumper wire and the motor lead. Repeat the process four times, for the four joints.
  7. Place each motor into the battery holder, aligned like the picture above. Make sure that the positive side is always outwards. You can tell what side is the + by looking at the black plastic on the motor casing.
  8. Bend the leads upwards, once you know that the motors are aligned properly.
  9. Take the two smaller mounting plates out (NOT the full size plate), and take the paper covering off of the acrylic (on both sides).
  10. First, put the smaller one up towards the motors.
  11. Next, put the larger one down below the smaller one. These should line up perfectly.
  12. To test if you got the orientation correct, try putting the Zumo Shield on top of them. The through-hole soldering joints from before should perfectly fit into the mounting plates.
  13. Put the Zumo Shield on top of the motors, face up. You shouldn't have to bend the motor leads too much, to fit it into the copper holes.
  14. Make sure that the mounting plates line up with the shield, and then solder them.
  15. If you haven't found that you made any mistakes (make sure the mounting plates are aligned correctly!), snip the leads with your diagonal cutters.

Now you are finished with arranging the motors! The chassis should now start to look like a robot a little!!!

Step 5: Screws and Nuts

Next, we need to put some screws and nuts to make our FuzzBot complete. Here are the steps:

  1. Take the two small (the smallest) nuts, and flip the ZumoBot Chassis over. Insert the nut into the hole on the outside of the battery pack on the bottom
  2. Next, insert a large (the largest) screw into the top of the Zumo Shield, lined up with the nut on the bottom.
  3. Using a small Phillips screwdriver, screw the screw into the nut, on the bottom.
  4. Repeat the same process to the other hole on the other side.
  5. Next, unscrew the large (largest) nut from the idler sprocket.
  6. Bend the PCB up just a little, and drop the nut into the holder, where the wheel will go.
  7. Repeat this process twice, for both sides.
  8. Open up the battery case.
  9. Take another two small nuts (again, the smallest) and put them into the two holes in the battery case (the ones that actually go through)
  10. Put two small (smallest) screws into the two holes, on the other side.
  11. Using a small Phillips screwdriver, screw the screw into the nut, on the bottom. You may want to hold the nuts in with your two fingers.

Almost there!!! All you need to do is add on the wheels to finish your ZumoBot Chassis for Arduino.

Step 6: The Wheels

Yay!!!!! The wheels are finally here! Use these steps to put the wheels and tracks on your ZumoBot Chassis.

  1. Separate the wheels from each other.
  2. Next, put a circular hole wheel, then a washer on the idler sprocket.
  3. Thumb-tighten each idler sprocket onto the large nut, already in the wheel mounting hole at the back.
  4. With your 3mm Allen Wrench/hex screw, tighten the idler sprocket on the nut. Make SURE that you do not tighten the idler sprocket too much, for doing this can cause the washer to bend.
  5. To the same to both sides.
  6. Take out the half-circle wheels.
  7. Make sure that the Pololu logo is facing outwards, and then press down on a table to level the wheel. Do the same on both sides.
  8. Add the tracks to both sides.

You are now finished making the ZumoBot Chassis Kit for Arduino!!!

Step 7: Servo Pan/Tilt Hack

Let's start on the servo hack. In this step we'll make a base for the Ping sensor, that we can rotate.

  1. Take out your small servo, and put it on top of the front of the ZumoBot Chassis, with the Arduino Leonardo plugged in upside-down.
  2. Try and center the servo, too.
  3. Next, take your extra wire and cut four segments, two long (~4in.), and two short (~2in.). Take all of the plastic insulation off of them.
  4. Use your pliers to bend the long wires into a mountain shape.
  5. Put one end of the wire into the GND (square pads) on the edge, through the hole of the servo, and then into the GND (square pads) on the front of the Zumo Shield.
  6. On the back of the PCB, bend the leads outwards, so that they don't fall out.
  7. Repeat this process to the other side of the servo.
  8. Put the 3 pin male header into the servo's header pins.
  9. Wrap the servo through the wire that we just put in, around the jumpers, and around the capacitor.
  10. Put the Arduino Leonardo into the Zumo Shield, and then wrap the rest of the servo cable around the Arduino.
  11. Put the male header in the servo cable into D5, 5V, and GND on the Zumo Shield. Make sure that you are putting these in the right pins!!!!!
  12. Solder all of the pins on the Zumo Shield. Yes, you will eventually burn the plastic trying to reach the soldering joints, and it isn't bad. It just is bad after you burn >0.5in. :D
  13. Trim the leads with your diagonal cutters.
  14. Put the "X" shaped servo head onto the servo, and put the screw that came with the servo on top of it. With your small Phillips screwdriver, screw it in.

You are now only one step away from ultimate awesomeness!!! Check out how to attach the Ping sensor next!

Step 8: Ping Sensor Hack

In this next step, we're going to put the Parallax Ping ultrasonic sensor on the servo, and attach it to our Arduino.

  1. Take out the Ping sensor, and remove the foam (if there is any).
  2. Bend the leads outwards.
  3. Turn the servo as far as it can go clockwise. If it won't go any further, leave it (I accidentally broke mine because I turned it too much).
  4. Put the Ping sensor into the second hole on the mid-left segment of the servo head.
  5. Cut some more wire, this time three long wires (~5-6in.).
  6. Strip off ~.05in. off of each end of each wire.
  7. Tin the tip of each wire, on one side.
  8. Reheat the solder, and solder each wire to a Ping sensor pin.
  9. Solder the Ping sensor pins: 5V to 5V, GND to GND, SIG to D4. These pins should be right below the servo pins.
  10. Trim the leads with your diagonal cutters.
  11. Heat up your hot glue gun.
  12. When ready, hot glue the front of the servo head to the Ping sensor on both the top and bottom.
  13. Also, hot glue the Ping sensor to the back of the servo head.
  14. Cut even more wire, this time two long wires (~4in.)
  15. Strip all of the plastic insulation off of the wires.
  16. Next, put a ton of hot glue on the back of the battery pack, and put the ends of the wires in there.
  17. Keep the wires there for about half a minute, and then release.
  18. Take your Swiffer Duster Refill out.
  19. Poke the two wires from the back of the FuzzBot onto the end of the Swiffer Duster. Make sure to poke it through where there is medium thickness, not thick fabric, and not fluff, but in between.
  20. Twist the wires twice.
  21. Bend the wires down under the main fluff, so that it won't poke someone when they try to pick it up.

You are finally finished with assembling your FuzzBot!!!! Onto the coding...

Step 9: Coding

Since we're finished assembling the FuzzBot, we have to add the code! If you haven't already downloaded the Arduino IDE (Integrated Development Environment), do so now. Download the latest version, and choose your OS.

I pre-made the FuzzBot demo code, that uses the Ping sensor to avoid obstacles.

The code is based on both the ZumoMotors and Ping library, which are included below.

To install the libraries: Put the ZumoMotors and Ping libraries into the libraries folder on Mac or PC. On Mac, it should be in Documents>Arduino>libraries, and if there isn't, make a folder named 'libraries'. On PC, find the libraries directory which should be in Documents>arduino-1.0.4>libraries. Drag and drop both folders of the libraries into the 'libraries' folder.

I encourage you to check out the comments in the code, to see what the code does. It's a pretty simple sketch, and it's easy to catch on. If you have any questions on how the code works, leave a comment below.

Upload the Arduino

Enjoy!

Step 10: Almost There!

Last steps!!!

First, charge your rechargeable AA batteries using the adapter. Now, insert each AA battery, and then put the battery holder cover on.

Lastly, turn the system on (using the power switch), and wait ~10 seconds.

Step 11: Finished!

Yay!!!!!!! W00t!!!!! You have completed the FuzzBot (and hopefully succeeded)!!!!!!!!

When you make a successful FuzzBot, I encourage you to post a photo here!!

If you have any problems, post in the comments below.

Credit for a some of the photos: Pololu in Step 1 & 4, SparkFun in Step 1, Camita in Step 1, Picbasic.co.uk in Step 8, and ballonsbythebunch.net for Step 11.

Thanks for reading!

Great little robot! I assmbled one this weekend with a slight difference: I used a much cheaper ultrasonic sensor ($5) from Amazon. It had 4 pins instead of 3 - the difference in the code &amp; wiring was pretty minor for the $25 saved. <br> <br>Now I want to work on FuzzBot over the next few weeks to give it more capabilities...line-following, turning its neck (the servo), fine tuned obstacle avoidance, and perhaps some buzzers and LEDs.
<p>great</p>
Thanks!!! Glad you like it!!! I actually just got that sensor from Amazon a couple weeks ago (the HC-SR04, correct?), and it works great!!! <br> <br>The line following is a great idea as well as the servo. I'd look at SparkFun's analog version of the line following sensors, and the buzzers and LEDs sound great!!!
That's correct! I'll look into those line following sensors. I know Pololu also has their sensor array for line-following.
<p>Here's the code for anyone who's interested in adjusting it.</p><p>https://www.dropbox.com/sh/v80inz7tsa6ds59/Q_w0K6R0MO</p>
I love this! Voted.
<p>same here</p>
I love FuzzBot! It was so helpful in cleaning the LAMakerspace after our robot party! :)
Thanks!!!
smart kid is smart! good work dude! you're future is bright!
<p>it is looking great ....</p>
<p>hi i am also 13 years old.Your pan tilt hack helped me for my project</p><p>Thanks a lot</p>
<p>When you say, &quot;Put these male header segments into the jumper holes,&quot; which jumper holes are you referring to? The battery level, buzzer control, or the compass I2C jumpers?</p>
<p>I would like to know how to make it!</p>
<p>Brilliant, reminds me of jonny5</p>
<p>I wonder why you have two duplicate codes in your fuzzbot.ino, on the second section of the code where the if (count==1) and I flipped the motors.setLeftSpeed(400) motors.setRightSpeed(-400) and it never did. </p>
<p>Just found out there's missing a count = 0; at the second set of the code, I also added if inches is less than 3 Zumo will back up just in case it run into something close.</p>
<p>Love this! It's cute and like you said like a pet and it's very useful too. I could use a group of these things, my cat sheds loads of fur and they would keep him entertained!</p>
<p>NICE PROJECT</p>
<p>Um, ever heard of a broom and mop? Rube Goldberg would be proud.</p>
<p>Wow! This is def the makers alternative to Roombas ;)</p><p>To the people who have made it could you please give us some feedback on how effective it is in terms of cleaning. Of course I am not planing to stop hoovering but I hope if I can run this every 2-3 days I can deep clean with hoover less often.</p><p>Also could you provide any figures on the run time with each charge accompanied with the mAh of the batteries you are using?</p><p>Congrats Qtechknow!</p>
<p>This is great stuff, just ordered my Puolo kit!</p><p>BTW, you can use the newping arduino library with these 3 pin ping sensors - just set the trigger and read pins to the same pin number in your setup.</p>
<p>Great instructable! I bought another brand of robot and was so frustrated with it I gave up on it for now. I just ordered the Zumo and I am looking forward to putting it all together. Thanks for sharing!</p>
<p>Great job!</p>
Sorry I'm asking you so many questions, but did you have to add the jumpers for the battery level connection. If so, is it possible to disconnect your arduino from the shield?
My main problem right now is that my model of my computer running windows 7 won't even sense my board plugged into it. Do you know what models will work?
I installed the Ping and ZumoMotors libraries, but it still has the same errors. I tried uploading the libraries to the Arduino first, but it wouldn't upload because it had a million errors. Any ideas?
When I was uploading the Fuzz Bot sketch, it had some errors: FuzzBot:14: error: 'Ping' does not name a type <br>FuzzBot:22: error: 'ZumoMotors' does not name a type <br>FuzzBot.ino: In function 'void loop()': <br>FuzzBot:35: error: 'ping' was not declared in this scope <br>FuzzBot:47: error: 'motors' was not declared in this scope <br>FuzzBot:72: error: 'ping' was not declared in this scope <br>FuzzBot:84: error: 'motors' was not declared in this scope
Check out step 9 and install the two libraries. I believe that should solve all of the errors. :D
Hi, <br> <br>We are trying to build a small robot based on an arduino and a Zumo shield. The probem is that when we try to attach a servo (we are using the Servo library, and the problem appears only when we write myservo.attach(servoPin); ), the ZumoMotors don't work as they should. <br> <br>By searching the web, it appeared that the Servo library uses Timer1, which disables pins 9 and 10. This is probably where the problem come from. <br> <br>We've seen that you have used a servo on your robot, also based on a zumo shield. Did you manage to solve that problem ? <br> <br>Thanks in advance !
I think that you are correct about the Timer1 issue. I think that you can still use the ZumoBot motors, but I'm not sure.
What first started your tech education?
Make Magazine -&gt; Maker Faire -&gt; Arduino -&gt; Open-Source Education!
Hi Quinn - Fun to see you and FuzzBot at the NY Maker Faire, great project! <br>Question: In your sketch, what code makes the servo under the ping sensor move? Or are you just using it as a mount? <br>Thanks!
I'm using it as a mount, but you can definitely program it yourself! If you include the Servo library, then you can program the servo
i saw this at maker fair in NY
Cool!
I read about Quinn in my popular science magazine. &quot;Wow, what a smart kid&quot; I thought. Way to go, Quinn!!
The Fuzz Bot is sooooo cool!!!!!
Thanks!!!
^} Like :D
Very nice job, kid! Keep it up!
Thanks for all of the great comments!!!!
nice work dude.
Good thing!
Great idea my mom would love this at her house and i really like the remote joystick idea to but couldnt you just attach a bluetooth sensor to the robot and possibly control it using a ps3 controller or a cheaper one from ebay or amazon but again i like it <br>
Thanks!! I'll keep that idea in mind!!! :D
I like
Good job there.

About This Instructable

82,570views

531favorites

License:

Bio: White House Maker Faire // 15 years old // CEO of Qtechknow, maker and electronics enthusiast, I teach Arduino classes, and put making into schools!
More by Qtechknow:NFC Door Lock with the Qduino Mini (under $100) Qtechknow Robot Obstacle Course Your Image on an Arduino! - TFT LCD Screen Guide 
Add instructable to: