[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