Some time ago I introduced the auto cassette feeder, which came with a proximity sensor. And since the baseplate doesn’t come with power, I used the battery to power the feeder.
Then I got a suggestion: why not provide power with the baseplate, then there is no need to use a battery and it would lower down the cost. I thought this is a really good idea, so I started designing the system. To provide the power it is quite straight forward, initially I am thinking putting strips between Lego bumps and then implement 2 pogo pins in the feeder for power connection, which is simple! But then the dark side of my engineering brain comes in and raises the voice saying why not provide the position info as well, I think everybody who experiments with a pick and place machine at some point thought about an automatic positioning system, so that setting up feeder and other components will be easier. So I started designing. The first challenge was how to make contact to the components (feeders, fiducial, camera., etc). I don’t want to change the base plate too much, I hope the components can still use the baseplate without modification. With that in mind, I finally decided to use Lego bumps as the fixture, and make the baseplate PCB strip a Lego component as well.
The second challenge is how to make sure the contact is good enough. After checking different components and considering the space limitation (between Lego bumps), I found that POGO pins are a really good candidate. It is designed for such cases and can hold >10000 times plug in and out. With 10 times plug in and out per day, it can hold around 3 years, if 5 times per day, it can be around 6 years. So with that, I think it will fit most of the cases.
Then for the third challenge: how to provide position info, how many pins are needed. Considering the limited space, the less the signal, the better. In order to get the position, the first idea was to put the EEPROM chip with one wire protocol that can be read from the control board. But this requires control to know which EEPROM corresponds to which location, and also the solution is more expensive. After consideration, a resistor dividing solution was selected. To know the position, it is simply an ADC with calculation. And the same solution can be applied for both rows and columns in order to finally determine the location. Finally I decided to go for a 5 pin solution, VCC, GND, 1wire, ROW, COL. The 1 wire pin is required to send the position info to control board after reading the row and column info from ADC.
Another challenge is to add support for openpnp. I have been using the ReferencePushPull feeder from openpnp. I like the feature of automatically calibrating the pick position and then pick. Because the auto positioning can have certain tolerance, with the auto calibration, it is able to make sure the pick action can be done accurately. So I have inherited the feeder, and provided the position setup feature to it. You can refer to the video below.
Finally the control board, it is the bridge between the components and Openpnp. I have implemented several G-Code commands in order for Openpnp to interact. In the meantime, within feeder or other components, to make things easier, I also implemented the same gcode, so that for the control board, it is easier to just forward the command to achieve different functionality. You can find details here
I am pretty happy with the current design. Still some improvements are coming, for ex. I am planning to implement an orientation detection feature, also I plan to put the position aware feature to fiducial, so that it is able to calibrate the baseplate offset automatically. Stay tuned!