Let's Make Robots!

Quad Bot Puppy

Pretends to be a puppy
Quadruped_Puppy1.zip4.99 KB
Quadruped_Puppy_NiMh.zip5.03 KB

This is my second puppy robot and the first to use a QuadBot kit. The robot is quite simple, just a pan / tilt kit mounted on a QuadBot chassis with DAGU's new Magician robot controller.

Assembly instructions can now be found on Make Projects.

More detailed instructions are now avaiable on Instructables.

This is now a kit! The instruction manual can be downloaded from my product support site:
The kit comes with a battery holder for NiMh AA batteries and modified sample code to suit the different center of gravity.

The first video is my son Shi Sen playing with the robot and trying to get it to shake hands with him. The second video is with the latest code and Shi Sen is trying to get the robot to walk on it's back legs. Since the robot is controlled by your hand gestures this takes a bit of practise.

This robot can be built with 6x NiMh AA batteries. As the batteries are heavier the balance changes a bit when standing on it's hind legs. I have added a second version of the code that compensates for this.

This robot is now being produced as a kit, no soldering required.
Keep an eye out for it in online stores.

The code is a combination of the Mr. General IR tracking code and the Quad Bot sample code with some "puppy personality" thrown in to entertain my son.  I did put a small vibrator on the tail but the weight is too small making it hard to tell that he's wagging his tail.

The attached code will follow an object, sit when there is nothing to follow and shake hands and/or lie down depending on your hand gesture. If you hold your hand above it's head it will try to stand on it's back legs and follow you. This uses about 5K of the 8K available on the ATmega8 so there is still plenty of room for more personality code to be added.

The Arduino servo library can handle up to 12 servos on most Arduino boards but this comes at a cost of disabling PWM on pins 9 and 10 which are used by the magician controller for the dual "H" bridges.

As I wanted one motor output to drive the vibrator motor on the tail I cheated by configuring that PWM pin as a servo and then adjusting the min and max pulse settings in the attach.servo() command allowing me to go well beyond the normal range used by servos with the maximum being aproximately a 50% duty cycle. More than that will damage the small motor as it is running on 7.4V.

As my servos are rated at 6V and my LiPo battery has a nominal voltage of 7.4V I had to drop the power a bit. Although the onboard regulator can handle 1.5A I found that my 10 servos were drawing up to 3A or more in some cases.

The magician board has a jumper to allow the servos to be powered by the battery directly and there is already a 3A reverse polarity protection diode in series that drops the voltage by about 0.7V when under a reasonable load. I replace the jumper with a second 3A diode to effectively give me 6V when the battery voltage is 7.4V.

You can download the instruction manual for the Magician controller from my support site:

I had originally tried powering this project from AAA NiMh batteries. This will work if you have good quality batteries but my cheap NiMh AAA batteries were struggling to put out more than 2.5A. I have gotten up to 6A from good quality AAA NiMh batteries.

Fortunately I had a 7.4V LiPo battery pack from an old project that was about the same size and with more than twice the capacity. My advice for anyone wanting to use a lot of servos is to forget about alkaline batteries and use either high quality NiMh or LiPo batteries.

I have marked this project as complete although there will probably be a few software and hardware modifications in the near future.

If you want to know more about the QuadBot chassis then you can download the manual from my support site:


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
Not sure if I posted here before, but this is a great robot! Let me post my question from the forums here to make it easier to find for others in the future: My playful puppies legs tend to shake a lot when sitting. I installed the nimh code from ardunio ver 0022 as per suggestion, as apparently the code doesn't work well with 1.0+. The legs shake really badly when sitting, mostly the right front and left back legs. I'm pretty sure the batteries are charged and the parts are not loose. Is there a way to fix this? It didn't do that when I used the 1.03ish version to upload the code. The battery is the 6 lithium batteries, and are in good charge. Other than that, it's been fantastic. The eyes had to be wired differently though due to the head moving in the opposite direction. Servos seem to match the instructions exactly, did you change the code or how the head was put together?

I am assuming you have the original verion with the magician controller and not the newer version with the Mini Driver.

Essentially your battery voltage is too high. Those servos really don't like voltages over 6V. As the manual describes, the combination of the boards 3A reverse polarity protection diode and the additional diode that you are supposed to have added (did you?) should drop a 7.2V NiMh down to aproximately 6V.

If your using a 2S LiPo then the voltage will be 8.4V when fully charged so even with the two diodes in series the poor servos are still getting 7.2V until the battery has discharged a bit.

The different versions of the sample code only try to compensate for the different center of gravity caused by the difference between the weight of 6xAA NiMh batteries compared to a 2S LiPo. This only helps the robot to jump up on it's back legs.

I have the diode attached to it. I'm using the battery pack that holds 6 batteries. That should only give it 4.8 v of power, right? Otherwise, it's 7.2 if the holder isn't doing it in sets. I'm sure I have the diode facing right, so maybe the diode isn't working right anymore?
... And my puppy do piss :-) :-) http://www.youtube.com/watch?v=YCxiC2MiPNo&feature=youtube_gdata_player Everyone enjoyed this function during the Easter holiday :-)

It is nice to see someone expanding on the robots personality.

Ok. That's strange. It looks as though it is correctly assembled. I would suggest downloading the latest code from my support site but now that you've changed things around that would only make things worse.

Some good news though. Currently the puppy is prone to stripping gears if the legs get caught up in something. We have produced a servo clutch kit to prevent this from happening.

You can see video here: http://www.youtube.com/watch?v=zEK1Dyx9nc0

This kit will be available soon and will extend the life of your puppy while you play with his code.

Hi all,
I complete this robot 2 days ago, and I played a bit with the sample code.
Some Issue:
- Originally I connected the vibrator motor to the indicated H bridge, but after a little time I see smoke on the magician board... the bridge now is broken. Yesterday I wired up the motor to the right H bridge and (after change it in the code) it works correctly.
- I also had some problem with the eyes... I had to invert L and R, and U and D, because for me, with the correct connection, the head goes reverse.
- I had to modificate also the code for the tricks... when I put my hand over the head, the puppy goes in shake hands mode, and when I put my hand down it try to jump... so I modified the code and now it seems to work correctly.

I have had some error? Why the servo for tilt seems to be inverted?

May I enable uart to see on Zterm the servo value printed out?

Thanks a lot... this is very interesting as project... I work every day on firmware for professional coffee machine... and play with this funny dog is really relaxing :-)


If the tilt is inverted then you have not assembled the pan/tilt assembly correctly. The tilt servo can be mounted with the servo horn to the left or the right side. If you accidentally turned it around then even though the servo rotates in the same direction, the tilt direction is reversed.

You say the head turned the wrong way and you swapped the up/down, left/right wires to fix it? That is why the puppy shakes hands instead of jumping. Although up looks like up to you, it is down for the puppy. Please post a photo of your robot. I suspect you have his head on upside-down :-)

Hi, thanks for your repply.

Here I have these two photo:

I double checked all with the photos I found... for me it's all correct......

Let me know :-)

yesterday I finished assembly my first robot... this funny puppy.
This evenyng I will load  the demo code and after the success of the first tests I will learn better the Arduino IDE.

My wish is to add a speaker to the robot. I see that I have a PWM pin free to use, but do you have some hint to give me about this?

Thanks a lot