[sudo-discuss] vending machine homing switch mystery solved

Jake jake at spaz.org
Sat Apr 9 15:42:06 PDT 2016


so i've been working on the black sudoroom vending machine (vending1):

https://sudoroom.org/wiki/hack-o-mat

which had previously been hacked by students at UC Berkeley (i think)

I believe it's a Snacktron like Emma and Ed's machine.
(unlike our brown vending machine which is a snackshop II)
pictures of their machine can be seen here:
http://spaz.org/~jake/pix/vend/

they had ripped out the original control unit, and wired it up with a 
bunch of reed relays and an arduino.  The motors of the vending machine 
are wired as a grid of rows and columns, so the controller needs to be 
able to enable a single row and column in order to power one product 
motor.

But it also needs to be able to detect when the product motor has rotated 
a full turn, and is back at the "home" position where it needs to stop. 
There's a "home" sensor on the back of the motor, but the way it's wired 
was a mystery for a while.  Here's some pictures of the homing circuit:

http://spaz.org/~jake/pix/vend/IMG_20160401_015211.jpg
http://spaz.org/~jake/pix/vend/IMG_20160401_015700.jpg

as you can see, the only difference between the button being pressed or 
not pressed, is that the 420nF capacitor is in parallel with the motor or 
not.  Since the whole thing is in series with a diode (to protect against 
trying to turn a motor backwards) we were stumped as to how to detect 
whether a motor was homed or not.

Thanks to Zach who donated some test equipment including this awesome 
signal generator (along with a nice power supply and bench multimeter):
http://imgur.com/LTSFfOe

I was able to connect an AC waveform in series with a 12VDC supply to one 
of the motors, and figure out how to detect whether the home switch is 
closed or not.  Basically, you make a 31KHz (or similar frequency) 
squarewave in series with the power supply, and watch the current through 
the motor.  If the button is open and the capacitor is not in-circuit, the 
motor's inductance absorbs the AC and the current draw is relatively 
smooth.  But when the motor arrives at the home position (when you need to 
stop delivering product!) the capacitor gets switched in, and now you'll 
see a lot of the AC on the current path of the system.

Here is a video showing the voltage across a 22-ohm series resistor while 
the motor is rotating with 12VDC:

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

apparently it takes that motor about 11 seconds to dispense a product and 
finish returning to home position, assuming the product weighs nothing.

by the way, you'll notice that i'm using the old analog oscilloscope. 
Unfortunately the LeCroy 9510 has started crashing, basically 
bluescreening.  It probably needs to be opened up and cleaned, as it got 
wet after a fire before it was donated to sudoroom.

Or maybe someone wants to donate a nicer oscilloscope to sudoroom?

anyway, now I know how to detect the motor homing signal, and I just need 
to wire up this machine to its arduino to detect the signal and dispense 
product more accurately.  If anyone wants to help, please let me know.

by the way, if you are wondering how the UC students detected when the 
motors were finished dispensing product, the answer is absurd:

they put a laser beam across the path where product would fall when 
dispensed, and they watched for the laser beam to be interrupted.

did it work?  I don't know.  probably the semester ended and they got 
their grade and moved on, and then they donated the vending machine to us.

-jake



More information about the sudo-discuss mailing list