Recently, I needed to have a bunch of AVRs programmed... A big bunch... And as I am really lazy when it comes to do repeated procedures, I decided to make a robot to do this for me.
You can see the outcome on the video:
So, let's break it down a little...
Mechanics:
1. Without putting a lot of thinking on it, I decided that a standard IC rail leaning to the side (approx 45o) is sufficient to handle the feed of unprogrammed microcontrollers. Gravity will do the trick for me, leaving me with less to · Well, If you ask me now, I think it was not a good solution (mostly because the vibrations when the rail was filled up with ICs resulted in some unexpected IC throw behaviour) However, the problem was present only when I put > 15 ICs in the rail, so could be controlled by limiting the IC number I put all together.
2. I needed a simple way to control the "flow" of the microcontrollers in the rail. I also wanted to make a minimalistic system - the less servos the better. The design that I came up with is this:
| Servo is tipping left-right. When it is tipped to the right, it keeps the whole feed of ICs up. Once tipped to the left, the feed is shifted down. Once tipped to the right again, the first IC lands on the pickup base, and the second IC is held along with the rest of the ICs.It actually served it's purpose really good, leaving just one IC to land in the pickup base reliably, everytime it was asked to! |
3. So, how do we pick-up the IC? I had in mind that I may want to re-use the project for programming some different DIL packaged uControllers... So tweezers-like manipulators were out of the question because they would not be reliable with different sized ICs - at least without image feedback. My first idea was to use a syringe attached to a servo to create vaccum, and an aquarium silicone pipe with the nozzle of an IC Pick-up Pen. After implementing this idea, I found out that the vacuum was lost after some seconds, partially because of the silicone pipe's flexibility, but mostly because of normal deformities on the nozzle. So I had to use a pump to maintain the vacuum.
To keep things cheap, I scratched out commercial pumps, and went on to hack an aquarium pump. It was actually easier that I thought! And the results were awarding!
4. A ZIF socket hacked to be handled by a servo, was used to hold the IC while programming:
It is interesting to point out that the pins of the ZIF are not soldered with the programmer, but instead, a pcb with female pins is used, so that a different programmer can be easily attached.
5. The rest are self explainatory I think (servo moves in circle and mini servo moves up and down).
Electronics:
I used an Arduino Duemilanove as AVR Programmer (ArduinoISP - IDE-bundled example sketch) and a GRoboduino as the controller. All servos were directly connected to GRoboduino and the only thing I had to add was a relay to handle pump's 220v.
The aquarium pump gave me a really hard time because it has a poor electro-magnetic insulation, thus it was transmitting a great amount of EMF. The clock of the AVR was being influenced by that EMF and the timers were going crazy every time the pump was working!! The sad part was that it was kind of difficult for me to imagine that, and found out only after numerous trial + error "sessions". The good part was that by just getting the pump some centimeters away, all the problems were gone (the relay is still next to the GRoboduino without problems - it was JUST the pump)
Software - Source Code:
Early stage pics:
If you are interested to see more pictures of RoboProgrammer, you can do so at my Picasa Gallery
This project was released under the alias of "Dexter" and Dexter's Lab GR is my blog that hosted the project.