"Halloween Candy Robot" by: Scott N. Miller (Dragon Innovation, CEO)

A new and improved robot to hand out candy.

 

Halloween Robot V2

Things used in this project

 

 

Hardware components

Adafruit 12mm Diffused Thin Digital RGB LED Pixels (Strand of 25)
×1https://www.hackster.io/products/buy/36018?s=BAhJIhcxMTE0ODMsQmFzZUFydGljbGUGOgZFRg%3D%3D%0A
Adafruit DC Motor + Stepper FeatherWing Add-on For All Feather Board
×2https://www.hackster.io/products/buy/36019?s=BAhJIhcxMTE0ODMsQmFzZUFydGljbGUGOgZFRg%3D%3D%0A
Adafruit 74AHCT125 - Quad Level-Shifter (3V to 5V)
×1https://www.hackster.io/products/buy/36020?s=BAhJIhcxMTE0ODMsQmFzZUFydGljbGUGOgZFRg%3D%3D%0A
Adafruit Stepper motor - NEMA-17 size - 200 steps/rev, 12V 350mA
×4https://www.hackster.io/products/buy/36021?s=BAhJIhcxMTE0ODMsQmFzZUFydGljbGUGOgZFRg%3D%3D%0A
Adafruit Stepper Motor Mount with Hardware - NEMA-17 Sized
×4https://www.hackster.io/products/buy/36022?s=BAhJIhcxMTE0ODMsQmFzZUFydGljbGUGOgZFRg%3D%3D%0A
Adafruit Female DC Power adapter - 2.1mm jack to screw terminal block
×1https://www.hackster.io/products/buy/36023?s=BAhJIhcxMTE0ODMsQmFzZUFydGljbGUGOgZFRg%3D%3D%0A
Medium Draftboard (Unfinished)
×20https://www.hackster.io/products/buy/36024?s=BAhJIhcxMTE0ODMsQmFzZUFydGljbGUGOgZFRg%3D%3D%0A
Adafruit Feather M0 Basic Proto - ATSAMD21 Cortex M0
×2https://www.hackster.io/products/buy/36025?s=BAhJIhcxMTE0ODMsQmFzZUFydGljbGUGOgZFRg%3D%3D%0A

Software apps and online services

Arduino IDE
Arduino IDE
https://www.arduino.cc/en/main/software

Hand tools and fabrication machines

Glowforge
https://www.hackster.io/products/buy/35984?s=BAhJIhcxMTE0ODMsQmFzZUFydGljbGUGOgZFRg%3D%3D%0A
MarkForged
https://www.hackster.io/products/buy/35985?s=BAhJIhcxMTE0ODMsQmFzZUFydGljbGUGOgZFRg%3D%3D%0A

 

Story

 

History

When I was growing up, the teenager (Robert) across the street created a “Machine” to hand out candy for Halloween. Trick or Treaters would come inside their entryway and be greeted by one of his friends dressed up as a mad-scientist. The Machine was set up on the stairway, which was draped in velvet curtains (hiding, of course, a friend behind the curtain). You could select from four different types of candy and made your choice by keying in the right number via a Morse code key that beeped loud enough for the person in the back to hear it and send the proper selection down the chute. Sometimes it was too loud to hear, or the guy in the back got distracted and the wrong selection came down. For later versions of the machine, he introduced a light bulb over each candy which was connected in the back to a battery indicating what candy was picked, which helped avoid confusion.

Eventually, Robert went to college and passed the torch to me. I made my own version of the Machine out of a cardboard box with slots and ramps taped inside and enjoyed many great years running the machine with my buddy, Jo. When I eventually went to college, the tradition of the Machine was put on hold and we went back into the dark ages, where trick or treaters were forces to accept Candy the old-fashioned way.

Finally, in 2013 light started shining again. A lot had happened in the last 25 years, including the birth of Arduino and Adafruit (as well as my kids – the new heirs to the Machine). We built V1 which finally lived up to the vision of creating a fully autonomous candy robot. It worked reasonably well, but did jam up (sometimes the candy bars couldn’t turn the corner of the PVC elbow) and would periodically freeze and need to be hard reset when a sugar-fueled trick or treater mashed all the buttons at once. We had a good run with it for 5 years. However, this year, having recently acquired an amazing Glowforgelaser cutter and MarkForged carbon fiber 3D printer, we decided it was time for V2 to address some of the issues with V1.

Specifically, we wanted to:

  • Make the candy dispensing bulletproof. No more jams or mis-fires.
  • Improve the inter-processor communications (we used one processor to run the buttons and stepper motors, and another to run the light show). To get the timing right, they needed to talk to each other and stay in sync.
  • Not freeze up when a kid hits every button within 10 ms.
  • Build a more robust housing (V1 used the traditional beer box for the outer shell).

Candy Handling

We continued with the stepper motors, as they generate sufficient torque and are indexable. We considered using a merry-go-round or a Ferris whee to hold the candy, but decided to stay with the channel approach for simplicity (the fewer times the candy needs to turn corners, the better). Rather than using PVC tubing, which only comes in fixed IDs, we decided to laser cut custom channels. Initially, we tried stacking the candy bars top to bottom, figuring we could get the highest pack density. However, when loading, the candy would tend to nose dive and jam up, as the bars were not fully constrained. To counter this problem, we tried a version with a slanted bottom shelf, but this didn’t reliably solve the issue. Ultimately, we went back to the end-to-end configuration, as the candy is fully constrained and can only go in one direction (down).

 

The next task was to figure out the dimensions, as the “Fun Size” has some variation in size bar to bar, as well as the pinched end flaps that extend out beyond the body of the candy. After five or so iterations, we found a channel size that worked well. The candy is loaded in from the top and gravity fed. A pusher stick attached via a hub to the stepper motors acts as a gate until it is activated, preventing accidental discharge. Its mate, 180 degrees around, kicks out the candy out of the channel when activated by the stepper. This system proved to work quite reliably. The main drawback is the lower capacity of candy due to the end-to-end stacking. The pusher sticks also needed clearance to spin, so it was necessary to make sure they didn’t catch the wiring harnesses in their arc.

 

Housing

Now that we had locked down the candy dispensing, we patterned this in Onshape and then built the outer housing around it. Because we were using a Glowforge laser cutter (which is great because of the large bed size and quick cut times), we used a tab and slot design to attached the various components. We tried to be thoughtful about how the parts would be assembled and self-locking, and also to include modularity and accessibility. In a few cases, the parts were too big, so we split them up and used a dovetail to attach them. My daughter had some great advice on the Back piece for how to maintain the structural integrity by running the cut perpendicular to the candy channels. Due to the kerf of the laser, we didn’t need to leave clearance for the tabs.Electrical

 

As noted, we stayed with a dual processor design, selecting the Adafruit Feather M0 Basic Proto - ATSAMD21 Cortex M0with Stepper shields. These processors proved to be incredibly easy to talk to and well supported. The dual processor design added some complexity in having the processors communicate with each other to stay in sync, but provided for future accessories (such as a catapult) with the extra i/o. The processors communicated data on three lines providing eight states and then used an interrupt triggers in each direction (5 wires total). For the light show, we used the Adafruit RGB Pixel Strand which was snaked into a matrix. An external 74AHCT125 - Quad Level-Shifter (3V to 5V) chip was needed to bump up voltage chip from the 3.3v coming out of the Feather to 5 Volts going into the LED string.We used a breadboard to test out the wiring and then soldered up a protoboard with sockets for the two processors (in case we fried the processors inadvertently). The voltage level shifter is tucked under the light processor, as we were running out of space on the board. Connectors make it easy to remove the main unit.

 

Software

To improve the responsiveness of reacting to button presses and minimize the chance of freezing up when multiple buttons are pressed simultaneously, we decided on a hardware interrupt driven approach. When released, the button triggers a HW interrupt that activates a SW flag indicating which button was pressed. We kept the interrupt function to one line of code to handle the case where the button is pressed multiple times and used a flag that would activate a separate function dispensing the candy. The main loop is also kept short it improve responsiveness.

 

For the light show, we remapped LED string from a linear series into a matrix (rows / columns), and then created multiple animations for both when the robot was idle and when a button was pressed

 

Observations

Overall, V2 worked quite well, and I’m proud we accomplished our goals. We noticed some dimensional variation in the Fun Size bars – it seems they are a bit thicker this year. While the design of V1 was not as robust, from an ID standpoint, I think it was a bit more playful and something a mad scientist would build. It also did a nice job of exposing the inner workings, which is fun to see. It was great for the kids to get involved with the mechanical design in Onshape, laser cutting on Glowforge, and programming the colors on the Adafruit Feather. It made what seemed mysterious (how do those machines work) much more understandable and approachable.

 

What’s Next

  • Now that we’ve got the basic Machine working well, there are many new features we can add for next year, including:
  • Adjustable candy channels to handle future variations in the Fun size.
  • Ability to handle different candies such as lollypops and Twizzlers.
  • More lights.
  • Sounds!
  • A catapult to collect the candy and then “Tom Brady” it to the trick-or-treater’s bag.

 

Custom parts and enclosures

Onshape CAD

Onshape overall 3engz8zmpd

 

Onshape CAD Internal

Onshape internal oysnuhulbk

 

Laser cutting on Glowforge

Glowforge uzcsg4732q

 

Laser cut housing

Laser cut housing jfumegfjv5

 

Laser Scrap

Glowforge cuts iebp6fm64i

 

Partial Assembly

Partial assembly poojxxqfow

 

Internal View

Internal gaepp1h0fm

 

Breadboard

 

Breadboard 2 uomqnd3r8t

 

LED String

Led string 4e02z8sfeb

 

Mounted Steppers

Mounted steppers qsfl75dan2

 

Initial Housing

Initial assembled housing zl4nbxj7n8

 

New Ramps Installed

New ramps installed jf6sfqpum7

 

New Ramps

New ramps daxu5ibjry

 

Assembled Housing

Assembled housing fne3epqzwt

 

Old and New Ramps

Old and new ramp mw3as4xslh

 

PCBA Bottom

Pcba bottom swsdsuekw6

 

PCBA Top

Pcba top bfzcnzff3i

 

PCBA Installed

Pcba q1aetqpsn9

 

Wire Splice

Wiring splice adlbhgfms1

 

Candy Channels

Candy channels 6timuhip7n

 

First Run

First run g7ievwsfbq

 

New D Hubs

New hubs close dwb8wbaxya

 

Gravity Pusher

Pusher csxi8eoprv

 

New Front Pannel

Front panel 84lct2xkvt

 

Overall

Overall wide fcayti2oim

Fritz Breadboard

Fritz eq3v5g26gm

 

Code

 

https://github.com/DragonInnovation/Halloween-Candy-Machine-V2---2018

 

 

Dragon Innovation is a manufacturing software and services company that specializes in providing safe, simple and rapid solutions to manufacture electronics at scale. A proud part of the Avnet family since 2017, we will be sharing our insights into all aspects of successfully bringing a tech product to the market right here on the element14 community.

 

If you have any questions feel free to reach out to Dragon@dragoninnovation.com

Related
Engagement
Recommended