m&m sorter #3

DeltaRobot-0.02.zip3.44 KB

Videos: http://www.youtube.com/watch?v=Pbb9GOWaL4g and http://www.youtube.com/watch?v=mPakG8p3MHE

Update: Added schematic for the vacuum system

Code word were: CHEAP!

Cheapest RC servos I could get, Cheapest Arduino, almost. Straws from mc donalds, icecream sticks, rubber bands, Lots of scrapped stuff just waiting to be used in the workshop. Solenoids in the valves were from old tapedrives, and the valves them selfs were from old bicycle tubes. Vacuum and pressure comes from an old aquarium pump, reshaped to make vacuum too.

The dark disk is a sun shade, had to add that before filming outside, othervise color detection made too many mistakes.

"Exploded view" of lower arm:

"Exploded view" of lower arm

Lower arm:

Lower arm

Lower arm about to be connected to bolt on upper arm

Lower arm about to be connected to bolt on upper arm

Lower arm and the moving platform:

Lower arm and the moving platform


Two valves, the lower one disassembled

The pin visible at the end of the yellow tube pin of the bicycle valve. The brass tobe above goes over the pin. Since the pressure uses in the robot is low, +/- 0.15 bar, I could go with these simple home made solenoid valves.

Comment viewing options

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

I use the cheapest servos I could find, 3 euro each, from conrad.de. The label says: 30Ncm@4.8V / 35Ncm@6V.

Yes, they are 180 degrees, but my construction is limited to approx 170 degrees.

I run them at 5V and the have plenty of torque to bend or break the straws if the moving head hits something hard. (like the floor of the robot)

I would like to add a collision detector so the controller can back off if it senses trouble.

rogue's picture

nice video, thanks for sharing!

MoX's picture

Hi rogue :) I know that it's not the place to say that but "YOUR PICTURE IS VERY FUN !!" MDR

alegiaco's picture

You work is very interesting for me. Where can I find some simple documentation to learn something about parallel robots?

Can you share the code for Arduino?

mogul's picture

I do not know very much about parallel robots, I think the thing I made is called a delta robot. Anyway, I watched many videos on youtube and read the page I linked in my response to Steve a few comments down (@ Mon, 2011-07-18 10:11) very carefully.

And as I answered Steve, I plan to release the code under a common FOSS license some day.


Steve's picture

Hey their great job i just don't quit get something

In the discription it says you used automatic sequence wikipedia was complicate in this topic 

any way i was wondering what is it is so is it 

1.so you want the arm to move to a x,y,z postion once entered the code telles the arm to move the servos in a particular way to get    their

2.you direcltly in the code tell the arm the servo postion

BTW wheres the code i must be going blind but if it's not their and your tiding it up good work

so thanks in advance and i realy like the valve set up and straw arms very creative

mogul's picture

Well, I have made a delta robot arduino library which I plan to release as FOSS someday, most likely under a BSD license.

The library does the inverse kinematics calculations and instructs the servos to move. The algorithm is not my own, but the one described here: http://forums.trossenrobotics.com/tutorials/introduction-129/delta-robot-kinematics-3276/

My application use the primitive moveTo(x, y, z, speed). (and a few more derived from that)

Then I have a colorDetect which should go to a library too.

But you know what. Now that I'm finished, and the darn thing works, my motivation on shining up the code is declining faster than the beer in my glass!

Originally I had this idea to make a cake decorator, placing m&m's on top of cookies, but it would de unhealthy to me to eat all the failures up until the point where I could show you the result. (maybe I should try it anyway.. mmm. cookies!)

I think I understand how you constructed your primitive moveTo(x, y, z, speed) function.  In the "speed" parameter in the function, How did you implement the velocity speed control of the servos?  Do you have sometype of trapezoid speed ramping helper function based on the starting initial and ending xyz position? Or do you simply go full speed on the servos?  BTW thanks for sending the specs for the servo motor, i'm in the servo motor selection process in my project.

mogul's picture

The speed thing is very simple, and will change soon. At the moment it is simply a delay between each 0.5 millimeter step.

If I just sets the new positions to the servos, they all move in their own speed, and I have no control over the path the head will travel. It will most likely hit the floor. According to the math most movements is done at 1m/s... But it's obvious that this is not the case.

That's why I will try to improve that part.

I wonder if it would be possible to tell if the movement is finished my measuring the current to the servos, anyone?

birdmun's picture


There was another that shows the same concept posted a bit later in the year.