Introduction: Spice Dispenser Prototype

Coming from a strong Italian background, I was taught from a very young age that good food can heal anything. Flavor and hearty cooking comes from the best ingredients and a lot of spices. For folks with disabilities, limited dexterity, or arthritis, opening and pouring spices can be a huge challenge. This inspired me to create a small, simple spice dispenser that can be easily operated and mounted near cooking areas. Spice containers only need to be opened once to be poured into the hopper - which I believe will reduce the stress and pain associated with this activity. And best of all, cooking amazing food becomes as simple as pressing a button!

Please note that this is a prototype design. I plan to increase the size of the dispenser, as well as craft housing with large buttons. Thank you for your support!


All of the electronics needed for this project are included in this kit:

x1 Arduino board

x1 medium or large breadboard

x1 28BYJ-48 stepper motor with a ULN2003A driver board

x3 normally open push buttons

x3 10k Ohm resistors

x1 9V battery + holder with female leads

x1 barrel power cord (this can be substituted with a second 9V battery with a barrel holder)

Assorted wire

For the dispenser:

A 3D printer, or a printing service

x2 #4 1/2 inch nut and bolt

x1 clear resin to make the dispenser food safe

Step 1: Print and Assemble the Dispenser

Attached are the four .STL files needed to print the dispenser parts. Each part was printed with 10% infill using Cura slicing software. The base and auger screw need to be printed with supports. Once supports are removed, I highly recommend sanding the auger screw and the inside of the base. I also recommend securing the hopper with hot glue, even though it will remain in place without it.

Be sure the auger screw is oriented correctly, with the oval hole towards the back of the base, and the round hole at the front as seen in the attached drawing.

Step 2: Assemble the Circuit

Using a medium or large breadboard, make the following connections:

For each button:

1. Place the button across the middle channel on your breadboard. This will ensure it is oriented correctly and will function as expected

2. Connect the left side of the button to power.

3. On the right side of the button, and across the channel, use a 10K ohm resistor to connect to ground.

4. Between the button and grounded resistor, place a wire and connect it to pin 2 on the Arduino.

5. Repeat these steps for each button, using a different digital pin.

If you are using a ULN2003A transistor array chip:

1. Connect pins 8, 9, 10 and 11 on the Arduino to IN1, IN2, IN3 and IN4 on the ULN2003A board.

2. Connect the 28byj motor leads to the board.

Step 3: Program the Arduino

Connect your Arduino to a computer and upload the following code:


int pinchButton = 2; int tspButton = 3; int tbspButton = 4;
int tbspRequest; int tspRequest; int pinchRequest;
const int stepsPerRevolution = 32; //motor steps Stepper helix (stepsPerRevolution, 8, 10, 9, 11);

void setup() { pinMode(2, INPUT); pinMode(3, INPUT); pinMode(4, INPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); helix.setSpeed(700); Serial.begin(9600); }
void loop() { buttonCheck(); Serial.println(pinchRequest); if (tbspRequest == HIGH){ for (int i=0; i<10; i++){ dispense(); } }
else if (tspRequest == HIGH){ for (int i=0; i<6; i++){ dispense(); } }
while (pinchRequest == HIGH){ helix.step(-50); pinchRequest = digitalRead(pinchButton); } }

//Functions void dispense(){ helix.step(-2048); }

void buttonCheck(){ tbspRequest = digitalRead(tbspButton); tspRequest = digitalRead(tspButton); pinchRequest = digitalRead(pinchButton); }

Step 4: Make Something Good!

All that's left is to power everything up and dispense some spices!

Assistive Tech Contest

Participated in the
Assistive Tech Contest