Build Your Own Arduino-Based Automatic Label Dispenser Machine
If the video player is not working, you can click on this alternative video link.
Unspooling label reels can be a... real... pain in the butt at times! But with devices like this Arduino-powered "auto-unspooler", labeling things just got a whole lot easier.
Follow this handy guide to find out how to build one of your very own.

Like any build of this nature, you'll first need some tools and materials before you get started...
Tools and materials required
- Custom PCB
- Motor Clamp
- Arduino Nano
- A4988-stepper motor driver module
- NEMA 17 stepper motor
- 13/64-inch (5mm) ID timing pulley
- 5/16-inch (8mm) pillow bearing
- 5/16-inch (8mm) smooth SS shaft 200mm
- 5/16-inch (8mm) ID timing pulley
- 15/32-inch (12mm) wooden sheet
- Rubber timing belt
- Micro push button
- Rotary Knob
- 12C LCD screen
- 3D printed parts
- IR Sensor
- Electrical wires, resistors, and soldering gear
- Assorted PCB wire female connectors and male pins and other components
- Screwdriver set
With all the materials and tools in hand, it is time to get on with the build.
Step 1: Cut out the wooden components
The first step is to mark out, and cut, the required wooden components.
Cut out one large rectangle, as shown, and then cut that sheet into three smaller pieces (two the same size, the third slightly larger).

Next, mark out some wedges on the two smaller pieces of wood, as shown in the video, and cut out, as required.

On the larger of the pieces of wood, mark out a trapezoid, and cut out as shown in the video.

Sand down any burs and splinters of wood until nice and smooth to the touch. Round off any edges of the wood pieces as well.
You can do this by hand, or using power tools—the choice is yours. If you haven't already, don't forget print out the 3D parts to avoid pipeline issues down the line (linked above in the materials list).
Step 2: Build the microelectronics
With that step complete, now it is time to build the label dispenser's electronic gubbins'. Grab your custom PCB and stepper motor clamp, and mark out their drill holes onto the larger piece of wood.

Drill pilot holes, as shown in the video and image below.

Next, build out the PCB board with the required connectors, and other microelectronic components. For reference, we have included the circuitry schematic below.

Solder the components into place, as needed. The PCB should look something like this.

Insert the Arduino Nano, and A4988 driver, into their respective slots. Now, add some suitably sized bolts to the PCB board, and affix it to the larger piece of wood.

Also, attach the stepper motor socket too. Now, grab the NEMA 17 stepper motor and secure it to the socket.

Add the timing pulley to the stepper motor's axle. Ensure that it is securely fastened.
Step 3: Build the mechanical parts
Next, wire up the stepper motor to the PCB board. Now, drill more pilot holes to the smaller pieces of wood as shown in the video.

Now, grab the pillow bearings and fasten them to the centers of each of the smaller wood pieces.

With that stage complete, attach the smaller wooden pieces to the larger piece. Ensure the bearings face inwards.

Now grab the two types of smooth metal shafts, other timing pulleys, and the timing belt. Wrap the timing belt around the stepper motor timing pulley, insert one of the larger shafts into the eye of one of the bearings, and secure the other timing pulley to it.
With the second timing pulley in place, wrap the other end of the timing pulley around it.

Push the shaft through the eye of the opposing bearing too. Make sure the timing belt is aligned correctly and is taught before fully securing the 2nd timing pulley.
Test the movement, it should move freely.
Now add the other larger shaft to its respective drill holes at the top of the wooden frame. You can ram this in by hand, or use a power drill to assist you.
This will not freely rotate, so it needs to be as secure as possible.

Repeat the process for the other smaller rods too.

Step 4: Build the top cover and add IR sensor
Next, grab the push button, rotary encoder knob, LCD screen, and the 3D printed top cover. Insert the button, and rotary encoder into their respective holes in the top cover, and also attach the LCD screen to the top.
Wire them up, as required. With that complete, place the cover over the top of the wooden frame to your Arduino label dispenser.

Drill the top cover into place.
Next, assemble the IR sensor and IR sensor 3D part housing pieces, as shown. Superglue the IR sensor housing lid into place.

Next, add rubber feet to the base of the label dispenser—if required.

Step 5: Add the all-important code
With the previous steps complete, you can now upload your code to the Arduino Nano. The code is as follows:
#include
#include "rgb_lcd.h"
rgb_lcd lcd;
#include
#include "BasicStepperDriver.h"
#define MOTOR_STEPS 200
#define RPM 400
#define DIR A0
#define STEP A1
#define MICROSTEPS 16
BasicStepperDriver stepper(MOTOR_STEPS, DIR, STEP);
int value = 0;
int IR = 10;
int PB = A2;
int SW = A3;
int knob = 2;
int val = 0;
int currentstate = 0;
int laststate = 0;
int state = 0;
void setup() {
stepper.begin(RPM, MICROSTEPS);
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print ("LABEL DISPENSER");
lcd.setCursor(0, 1);
lcd.print ("MACHINE");
pinMode(knob, INPUT_PULLUP);
pinMode(PB,INPUT_PULLUP);
pinMode(SW,INPUT_PULLUP);
pinMode(IR,INPUT);
delay(2000);
stepper.rotate(700);
lcd.clear();
}
void loop() {
if (state == 0){
lcd.setCursor(0, 0);
lcd.print (" LABEL LENGTH");
lcd.setCursor(0, 1);
lcd.print (" MM = ");
lcd.setCursor(11, 1);
currentstate = digitalRead(knob);
if (currentstate != laststate){
val++;
lcd.print (val/2);
laststate = currentstate;
}
}
if (!digitalRead(PB) && state == 0){
delay(100);
state = 1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print ("SET LENGTH =");
lcd.setCursor(13, 0);
lcd.print (val/2);
lcd.setCursor(0, 1);
lcd.print ("PRESS TO START");
}
if (state == 1 && !digitalRead(PB)){
state = 3;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print ("RUNNING....");
}
if (state == 3){
lcd.setCursor(0, 1);
lcd.print ("COUNTER = ");
lcd.setCursor(12, 1);
if ( digitalRead(IR)){
delay(200);
STEPPER();
}
}
}
void STEPPER (){
lcd.print (value);
stepper.rotate(900);
value++;
}
Step 6: Complete the label dispenser
With that done, now add the 3D printed washers to the metal shafts, as shown. You can also add your reel of labels at this point too.
Be sure to secure the reel with the 3D printed caps to ensure the label reel is securely fixed to its mounting rod.
Feed the reel through the rods, as shown below.

With that, your Arduino-powered automatic label dispenser is basically complete. You can adjust the auto-reeling distance using the rotary encoder knob.
Now just power it up, and get to labeling stuff! Handily, the LCD screen will give you an accurate count of the number of stickers you've used too.

Lucky you.
Construction of the Rolls-Royce UltraFan® technology demonstrator – the largest aircraft engine in the world – is now complete and testing is underway.