Polite Bunny (mini-project 3)

Anis Abboud, Hitesh Maidasani, and Ankit Shrivastava


https://www.youtube.com/watch?v=rg0uoS3W91s

Introduction

When you pass next to the window, our Polite Bunny will track you (through the Microsoft Kinect) and follow you.
big-picture.jpg

When you stop moving, the bunny will have moved in front of you and it will start waving its hand at you to say hello :-)
external image Y4hRzk.gif

Details

The movements are tracked through a Microsoft Kinect.
Whenever the user's head moves more than 0.05 meters, a new position is sent to the Arduino through the serial port.
In addition, every time the user hasn't move much for the past 400 ms, the last sent position is resent along with the letter "w", denoting that the bunny should waive the hand at that position.

The bunny is attached to a beaded chain, which is wrapped around a regular pulley on one side, and a 3D printed drive pulley on the other side.
This printed pulley has a hole in the center that fits the stepper motor we used perfectly.
In addition, it has 72 holes around the perimeter, sized and spaced to perfectly fit the beaded chain balls to allow the chain to grip.
This pulley is attached to a stepper motor that moves clockwise to move the bunny left, or counterclockwise to move the bunny right.

For the hand movement of the bunny, we connected a micro servo motor inside the bunny, which is attached to a wooden stick inside the arm, and it’s powered through a wire going into the back of the bunny.

Both the motors are connected to an Arduino through an Adafruit motor shield v2.

We built wooden structures for both the pulleys, to give support and prevent them from moving.
wooden-structure-right.jpg

arduino-setup.jpg

IMG_20140415_171104.jpg

pulley all.jpg

pulley-teeth.jpg


servo-inside.jpg

Hardware


Challenges

We were faced by lots of challenges throughout the project.
  • After buying a regular pulley and rope from Home Depot, we figured out that it will be difficult to attach the stepper motor we have to a standard pulley, and that the rope will not grip will on , leading to an inaccurate movement. So we decided to 3D-print a pulley.
  • We found a 3D printable pulley on thingiverse http://www.thingiverse.com/thing:70179, but it was too small for our purpose, and since the STL file was one piece, we had no option but to design our own, inspired by this.
  • After multiple prototypes, patience paid off and we got a working pulley. However, we then noticed that the beaded chain is not very high quality, and is defective in certain spots (no space between balls), e.g.,
    defective chain.jpg
    This caused the chain to slip out of the pulley.
    Eventually, we solved this issue by adding two outer layers to the pulley, whose purpose is to prevent slipping.

Thoughts about the project

  • Most people preferred to go with the more powerful motors, resulting in a shortage in some types of motors, while there were plenty of unused motors of some types. I would recommend reconsidering the motor stock.
  • Stepper motor gets extremely hot very quickly "because the drive is supplying the motor with full current the whole time to keep the motor in position" (see http://www.parkermotion.com/dmxreadyv2/faqsmanager/faqsmanager.asp?question=965).
    We were not aware of this caveat. This is critical because it does not allow us to keep the bunny on all the time.
    One option is to use a fan like what's used in the Replicator 3D printer (but we didn't have a fan).
    Another option is to use a different type of motor (non DC non stepper non servo), but we had none of these.
  • We found it extremely hard to find a gear or a drive pulley that can be used with the stepper motor, and we ended up opting to 3D print our own, a painful process which took several days.
    I would recommend having a stock of pulleys/gears that can be used with the motors we have...

Tips

1. How to make a stepper motor move faster?

https://forums.adafruit.com/viewtopic.php?f=31&t=42477#p214932
I did some more testing and the step-rate limitation is related to the i2c communication speed. The default i2c bus rate on the Arduino is 100KHz. The Atmega chip is capable of up to 400KHz.
You can adjust the speed in the Wire library by editing this file: hardware/libraries/Wire/utility/twi.h. If you change: #define TWI_FREQ 100000L To: #define TWI_FREQ 400000L

2. I'm new to 3D printing, which software should I use?

I found tinkercad.com to be fairly simple to use.
It can get slow at times and the saving is unreliable at the time of this writing, but as I had no prior experience with 3D design, and since it has some community-created objects in addition to the basic set, and it allows you to define your own script (using Javascript), it was powerful enough for our task.

Links