Autonomous Pumpkin Candy Dispenser: Socially Distanced Pumpkin

by bmohnsen in Living > LEGO & K'NEX

789 Views, 2 Favorites, 0 Comments

Autonomous Pumpkin Candy Dispenser: Socially Distanced Pumpkin

fullset2.jpg
Velcro.jpg
electronics.jpg
Sonic.jpg
IMG_6432.jpg
IMG_4116.jpg

Halloween will be different this year! This project allows for automatic hands-free candy distribution using a lego-pumpkin as the candy container and an Arduino/Lego Power Functions arm.

Supplies

Materials:

Velcro (scissors for cutting)

Electronics:

1 - USB Cable to connect Arduino to Computer

1 - 9 Volt battery with wire connector

1 - 330 ohm resistor

1 - Arduino Nano

1 - Breadboard

1 - Infrared Transmitter

4 - wires (male one end and female other end)

1 - Ultrasonic sensor

Lego Electronics:

2 - Medium Motors

1 - Extra Large Motor

2 - Infrared Receivers

1 - Lego Battery

Legos:

See list of lego parts

Note: other pumpkin-related colors (e.g., tan, dark tan) may be used in lieu or Orange

Build the Pumpkin

pumpkin1.jpg
pumpkin2.jpg
pumpkin3.jpg
pumpkin4.jpg
pumpkin5.jpg
pumpkin6.jpg
pumpkin7.jpg
top1.jpg
top2.jpg
top3.jpg
top4.jpg
top5.jpg
FullPumpkin1.jpg
FullPumpkin2.jpg
FullPumpkin3.jpg

Follow the steps (see photos 1-15) to create the body (see photos 1-7) of the pumpkin and the top (see photos 8-15) of the pumpkin.

Build the Arm

02.jpg
03.jpg
04.jpg
05.jpg
06.jpg
07.jpg
08.jpg
09.jpg
10.jpg
11.jpg
12.jpg
13.jpg
14.jpg
15.jpg
16.jpg
17.jpg
18.jpg
19.jpg
20.jpg
21.jpg
22.jpg
23.jpg
24.jpg
25.jpg
26.jpg
27.jpg
28.jpg
29.jpg
30.jpg
31.jpg
32.jpg
33.jpg
34.jpg
35.jpg
36.jpg
37.jpg
38.jpg
39.jpg
40.jpg
41.jpg
42.jpg
43.jpg
44.jpg
45.jpg
back.jpg
back2.jpg
front.jpg
front2.jpg
left.jpg
right.jpg
right2.jpg

Follow the steps (see photos 1-44) to create the moving arm (see photos 45-51 completed arm from back, front, left, and right sides) for the project.

Add the Arduino and Electronics

IMG_6328.jpg
IMG_6329.jpg
sonicWires.jpg
IMG_6332.jpg
IMG_6336.jpg
IMG_6362.jpg
IMG_6430.jpg
IMG_6356.jpg
IMG_6358.jpg
IMG_6359.jpg

Now that you have the legos portion completed, it is time to add the Arduino and other electronics parts.

1) Attach wire cap to 9-volt battery and Arduino to the breadboard (see photo 1).

2) Attach the ultrasonic transmitter to the breadboard (short negative leg to ground row and long positive leg to empty row) and the 330 ohm resistor to the bread (one leg to empty row and one leg to row D11. Photo 2 shows a close up view.

3) Connect female ends of four wires to ultrasonic sensor (yellow to VCC pin, maroon to ground pin, green to trig pin, and blue to echo pin). Photo 3 shows a close up view.

4) Connect male ends of four wires to breadboard (VCC pin to 5V row, ground pin to ground row, trig pin to D2 row, and echo pin to D3 row). Photos 4 and 5 show close up views.

5) When connecting 9 volt battery to Arduino, connect negative to ground and positive to Vin (see photo 6).

6) Apply felt side of velcro to each wide side of the 9 volt battery. Apply hook side of velcro to bottom of breadboard and the top of the 2x4 plate. Attach breadboard to battery and battery to 2x4 plate (see photo 7).

7) Attach 5-2x4 bricks together. Attach 2x4 plate (the one attached to battery) to top of 2x4 bricks (see photo 8).

8) Attach 3-2x4 bricks together. Attach 3 modified tiles with clip on top at shown in photo 9.

9) Slip ultrasonic sensor into the clips (see photo 10).

Code the Arduino

Prerequisites

If you are not familiar with writing Arduino Code or using the Lego Power Functions Library to control Lego Motors, please read the "How to Move Lego Motors Autonomously Using Arduino" Instructable (steps 1-5):

Arduino Software Set Up

Power Function Library Set Up

Infrared Transmitter Set Up

Write Arduino Code

Writing Power Function Motor Code

Writing Project Code for Arduino

Below is the code for the Autonomous Pumpkin Candy Dispenser (Social Distancing) Project. It is also available for download (see file 1). Note that the delay command on the line below each lego.singleOutput() command determines how long the motor runs. So for the extra large turntable motor, it determines how far the turntable turns. The goal is 90 degree turns; however, your exact time may defer from mine. It is important to experiment and tweak the code accordingly. For the medium motors; one motor bends/extends the elbow (the delay determines how much it bends/extends) and the second motor closes/opens the grip feature (the delay determines how much it opens and closes).

#include

long duration; //Time from Sonar sensor - rebound - return to to Sonar sensor

long distance; // duration converted to distance

const int trigPin = 2; //sending sonar sensor connection

const int echoPin = 3; // receiving sonar sensor connection

LEGOPowerFunctions lego(12); //transmitter connection

void setup() {

pinMode(trigPin, OUTPUT); //pinMode for sonar sensor

pinMode(echoPin, INPUT); //pinMode for sonar sensor

}

void loop(){

digitalWrite(trigPin, LOW); //Sonar Set up

delayMicroseconds(5); //Sonar Set up

digitalWrite(trigPin, HIGH); //Sonar Set up

delayMicroseconds(10); //Sonar Set up

digitalWrite(trigPin, LOW); //Sonar Set up

duration = pulseIn(echoPin, HIGH); //duration of send/receive sonar

distance = (duration/2) * 0.0135; //divide duration by two since time to send and retrieve

if(distance < 36) {

lego.SingleOutput(0, PWM_REV7, RED, CH1); //Elbow bend

delay(5000); //Pause program

lego.SingleOutput(0, PWM_BRK, RED, CH1); //Stop

delay(1000); //pause program

lego.SingleOutput(0, PWM_FWD3, BLUE, CH1); // Grip close

delay(1500); //Pause program

lego.SingleOutput(0, PWM_BRK, RED, CH1); //Stop

delay(1000); //Pause program

lego.SingleOutput(0, PWM_FWD7, RED, CH1); //Elbow extend

delay(5000); //Pause program

lego.SingleOutput(0, PWM_BRK, RED, CH1); //Stop

delay(1000); //pause program

lego.SingleOutput(0, PWM_REV2, RED, CH2); //turntable left

delay(800); //Pause program

lego.SingleOutput(0, PWM_BRK, RED, CH2); //Stop

delay(1000); //pause program

lego.SingleOutput(0, PWM_REV3, BLUE, CH1); //Grip open

delay(2200); //Pause program

lego.SingleOutput(0, PWM_BRK, BLUE, CH1); //Stop

delay (1000);//Pause program

lego.SingleOutput(0, PWM_FWD2, RED, CH2); //turntable right

delay(800); //Pause program

lego.SingleOutput(0, PWM_BRK, RED, CH2); //Stop

delay(3000);//Pause program

}

}

Downloads

Watch How It Works

Pumpkin approach
Pumpkin retrieve
fullset4.jpg
fullset5.jpg

As the user approaches the Automatic Pumpkin Candy Dispenser (Social Distancing) - the arm mechanism lowers the arm and grabs for candy (see video 1).

The arm mechanism secures the candy, raises the arm, turns the arm towards the user, opens its grip to release the candy, and then returns to its wait position for the next user (see video 2).

The two photographs show the complete set from the front and from the back (see photos).