DIY Vertical Conveyor Belt Robot

DIY Vertical Conveyor Belt Robot | MakeMindz Robotics Project for Kids
🏭 MakeMindz Robotics Project

Build a Vertical Conveyor Belt Robot!

Use an Arduino, a motor driver, and rubber belts to move objects upward — just like a real factory machine!

📦 🧱 MOTOR DELIVER TOP ROLLER BOTTOM DRIVE ROLLER
⏱️ 4–5 Hours 🟢 Beginner Friendly 🤖 Arduino + L298N 🪙 ~₹500 Total 🎓 Ages 10–16
Concept

What is a Vertical Conveyor Belt? 🏗️

A conveyor belt is a machine that moves objects from one place to another using a looped belt that keeps spinning. Vertical conveyor belts move things upward — like a mini escalator for packages! You've seen them in:

  • 🏭 Factories — moving boxes from one floor to another
  • 🏪 Supermarkets — carrying goods to upper shelves
  • ⛏️ Mining — lifting coal or ore out of pits
  • 🚜 Farms — moving harvested crops into trucks

🔑 Key Idea — How Does the Belt Move?

Two rollers (wheels) sit at the top and bottom of the frame. A rubber belt loops around both. When the bottom roller spins (driven by a DC motor), the belt moves upward on one side and downward on the other. Anything placed on the upward-moving side gets carried to the top!

🧠
Controller
Arduino Uno
⚙️
Driver Chip
L298N Module
🔋
Power
9V Battery
🎡
Belt
Rubber O-ring

Science

How It All Works Together 🔬

🔘

Press Button

User presses UP, DOWN, or STOP

🧠

Arduino Reads

Arduino reads the button input pin

L298N Gets Signal

Arduino sends HIGH/LOW to IN1 & IN2 pins

⚙️

Motor Spins

L298N drives the DC motor in chosen direction

📦

Belt Moves!

Belt carries objects up or returns down

💡

What is the L298N Motor Driver?

An Arduino can't power a motor directly — it only outputs tiny amounts of current (40 mA max). The L298N is a "motor driver" chip that takes a small Arduino signal and uses it to switch larger battery power to the motor. It also lets you control direction using two signal pins (IN1 & IN2).


Shopping List

What You Need 🛒

#ComponentPrice (₹)Where to Buy
1Arduino Uno R3₹350–500Robocraze / Flyrobo / Amazon
2L298N Dual Motor Driver Module₹70–100Robocraze / Electronicscomp
3DC Gear Motor (3–6V, slow RPM) × 1₹80–120Robocraze / Amazon
4Rubber O-ring Belt (200–250 mm loop)₹20–40Hardware shop / Amazon
5Wooden Plank / Cardboard (30×20 cm)₹30–60Carpenter / stationery shop
6Wooden Dowel Rods × 2 (as rollers, ~1 cm dia)₹20Craft shop / hardware shop
79V Battery + Clip₹30–50Any electronics shop
8Push Buttons × 3 (12 mm momentary)₹15–25Flyrobo / SP Road
910kΩ Resistors × 3₹5Any electronics shop
10Jumper Wires (M-M, M-F assortment)₹30Any electronics shop
11Small breadboard₹30–50Robocraze / Amazon
12LED × 2 (green + red) + 220Ω resistors₹10Any electronics shop
♻️

Build the Frame for Free!

Use thick cardboard from cereal boxes, old wooden ice cream sticks, or scrap plywood. The frame just needs to hold two rollers at the top and bottom — even a shoebox cut open works perfectly.


Circuit Diagram

How to Wire Everything

🗺️ Vertical Conveyor Belt — Full Circuit

9V BATTERY + (9V) GND ARDUINO UNO USB/Power ATmega328P DIGITAL PINS D2 → BTN UP D3 → BTN DOWN D4 → BTN STOP D5 → L298N IN1 D6 → L298N IN2 D7 → LED Green D8 → LED Red POWER 5V out GND L298N MOTOR DRIVER L298N CHIP Dual H-Bridge HEATSINK (keep clear!) INPUTS IN1 ← D5 IN2 ← D6 VCC ← 9V+ GND ← common MOTOR OUTPUT OUT1 → Motor+ OUT2 → Motor− DC GEAR MOTOR M Roller M+ (OUT1) M− (OUT2) BTN UP BTN DOWN BTN STOP LED GREEN LED RED CONVEYOR FRAME 📦 9V+ (red) GND (black) Motor wire MakeMindz — Vertical Conveyor Belt Circuit © 2026

🔴 Red = VCC/Positive  |  ⚫ Black = GND  |  🟢 Green = Signal  |  🟡 Yellow = Motor output  |  Dashed = belt/rope


Wiring Guide

Pin Connection Table 📋

FromPinToWire Colour
9V BatteryPositive (+)L298N VCC & Arduino VinRed
9V BatteryNegative (−)L298N GND & Arduino GND & Button commonBlack
ArduinoD2UP Button (one leg)Green
ArduinoD3DOWN Button (one leg)Red
ArduinoD4STOP Button (one leg)Yellow
UP/DOWN/STOP ButtonsOther legGND (via 10kΩ pull-down to GND)Black
ArduinoD5L298N IN1Green
ArduinoD6L298N IN2Green
ArduinoD7Green LED anode (+) via 220Ω resistorGreen
ArduinoD8Red LED anode (+) via 220Ω resistorRed
L298NOUT1DC Motor Terminal A (+)Yellow
L298NOUT2DC Motor Terminal B (−)Orange
LED cathodes (−)Short legGND (common)Black
⚠️

Always use a 220Ω resistor with LEDs!

Connecting an LED directly to Arduino without a resistor will burn it out instantly. Place a 220Ω resistor in series between the Arduino pin and the LED's longer leg (anode/+).


Build Guide

Step-by-Step Build Instructions 🔧

1

Build the Vertical Frame 🪵

Cut two side panels (~28 cm tall, ~6 cm wide) from cardboard or thin wood. Space them ~12 cm apart and glue/bolt them to a base. This is your conveyor tower. Make sure it stands upright on its own — add a crossbar at the back if needed.

2

Mount the Rollers 🎡

Push a wooden dowel rod through holes in both side panels near the top of the frame. This is the idler roller (free-spinning). Fix another dowel at the bottom — this is the drive roller connected to the motor. Use a small amount of hot glue on the outer edges to keep them from sliding sideways.

3

Attach the Motor to the Drive Roller ⚙️

Mount the DC gear motor to the outside of one side panel so its output shaft aligns with the bottom dowel rod. Use zip ties, hot glue, or small L-brackets. Then connect the motor shaft to the dowel using a short piece of rubber tubing or heat-shrink — when the motor spins, the dowel spins too.

4

Loop the Belt 🔄

Stretch a rubber O-ring belt around both rollers. It should be taut but not too tight — if it slips, try a slightly shorter belt or add a small rubber band for grip on the rollers. Test by spinning the bottom roller by hand: the belt should move smoothly.

5

Wire the L298N Motor Driver 🔌

Place the L298N on your base next to the Arduino. Connect IN1 to Arduino D5, IN2 to D6. Connect L298N VCC to your 9V battery positive, and L298N GND to the common ground. Run OUT1 and OUT2 to the motor's two terminals.

6

Connect the Push Buttons 🔘

On your breadboard, connect UP button between D2 and GND (with a 10kΩ pull-down resistor from D2 to GND). Repeat the same for DOWN (D3) and STOP (D4). Label them clearly — green for UP, red for DOWN, yellow for STOP.

7

Add the LED Indicators 💡

Connect a green LED (+ → 220Ω resistor → D7, − → GND) and a red LED (+ → 220Ω resistor → D8, − → GND). These will light up to show which direction the belt is moving — or turn both off when stopped.

8

Upload the Code & Test! 🚀

Upload the code below using the Arduino IDE. Open Serial Monitor at 9600 baud. Press UP — the green LED should light and the belt should move upward. Press DOWN — red LED, belt reverses. Press STOP — belt halts. Place a small object on the belt and watch it ride up!

🛠️

Belt Slipping? Try This!

Wrap a thin rubber band around the drive roller to give the belt more grip. If objects slide off the belt, glue small cardboard "paddles" or toothpicks across the belt at regular intervals — these are called cleats and they're used on real conveyors too!


Arduino Code

The Full Code — Copy, Upload, Go! 💻

Open the Arduino IDE, paste this code, select Tools → Board → Arduino Uno, choose the correct COM port, and hit Upload (→). That's it!

vertical_conveyor.ino — Arduino C++
// ═══════════════════════════════════════════════════════════════
//  🏭 VERTICAL CONVEYOR BELT — MakeMindz Robotics Project
//  Controller : Arduino Uno
//  Motor Driver: L298N (pins IN1=D5, IN2=D6)
//  Buttons     : UP=D2, DOWN=D3, STOP=D4 (10kΩ pull-down)
//  LEDs        : Green=D7 (running up), Red=D8 (running down)
// ═══════════════════════════════════════════════════════════════

// ── Pin Definitions ─────────────────────────────────────────────
#define BTN_UP     2   // Push button — belt moves UP
#define BTN_DOWN   3   // Push button — belt moves DOWN
#define BTN_STOP   4   // Push button — belt STOPS
#define MOTOR_IN1  5   // L298N IN1 — controls direction
#define MOTOR_IN2  6   // L298N IN2 — controls direction
#define LED_GREEN  7   // Green LED — ON when belt moving UP
#define LED_RED    8   // Red LED   — ON when belt moving DOWN

// ── Belt State ──────────────────────────────────────────────────
enum BeltState { STOPPED, MOVING_UP, MOVING_DOWN };
BeltState currentState = STOPPED;

// ── Debounce Timing ─────────────────────────────────────────────
unsigned long lastDebounce = 0;
const unsigned long DEBOUNCE_DELAY = 200;  // ms

// ════════════════════════════════════════════════════════════════
//  SETUP — runs once at power-on
// ════════════════════════════════════════════════════════════════
void setup() {
  // Button pins as INPUT (pull-down resistors used externally)
  pinMode(BTN_UP,    INPUT);
  pinMode(BTN_DOWN,  INPUT);
  pinMode(BTN_STOP,  INPUT);

  // Motor driver and LED pins as OUTPUT
  pinMode(MOTOR_IN1, OUTPUT);
  pinMode(MOTOR_IN2, OUTPUT);
  pinMode(LED_GREEN, OUTPUT);
  pinMode(LED_RED,   OUTPUT);

  stopBelt();  // Start with belt stopped and LEDs off

  Serial.begin(9600);
  Serial.println("🏭 Vertical Conveyor Belt Ready!");
  Serial.println("Press UP / DOWN / STOP buttons.");
}

// ════════════════════════════════════════════════════════════════
//  LOOP — runs forever, checks buttons every cycle
// ════════════════════════════════════════════════════════════════
void loop() {
  unsigned long now = millis();

  // Read all three buttons
  bool btnUp   = digitalRead(BTN_UP)   == HIGH;
  bool btnDown = digitalRead(BTN_DOWN) == HIGH;
  bool btnStop = digitalRead(BTN_STOP) == HIGH;

  // Debounce: only act if enough time has passed since last action
  if (now - lastDebounce < DEBOUNCE_DELAY) return;

  if (btnUp && currentState != MOVING_UP) {
    moveBeltUp();
    lastDebounce = now;

  } else if (btnDown && currentState != MOVING_DOWN) {
    moveBeltDown();
    lastDebounce = now;

  } else if (btnStop && currentState != STOPPED) {
    stopBelt();
    lastDebounce = now;
  }
}

// ════════════════════════════════════════════════════════════════
//  HELPER FUNCTIONS
// ════════════════════════════════════════════════════════════════

// Move belt UPWARD
// L298N: IN1=HIGH, IN2=LOW → motor spins clockwise → belt goes up
void moveBeltUp() {
  digitalWrite(MOTOR_IN1, HIGH);
  digitalWrite(MOTOR_IN2, LOW);
  digitalWrite(LED_GREEN, HIGH);  // Green ON
  digitalWrite(LED_RED,   LOW);   // Red OFF
  currentState = MOVING_UP;
  Serial.println("⬆️  Belt moving UP — Green LED ON");
}

// Move belt DOWNWARD
// L298N: IN1=LOW, IN2=HIGH → motor spins anticlockwise → belt goes down
void moveBeltDown() {
  digitalWrite(MOTOR_IN1, LOW);
  digitalWrite(MOTOR_IN2, HIGH);
  digitalWrite(LED_GREEN, LOW);   // Green OFF
  digitalWrite(LED_RED,   HIGH);  // Red ON
  currentState = MOVING_DOWN;
  Serial.println("⬇️  Belt moving DOWN — Red LED ON");
}

// STOP belt completely
// L298N: IN1=LOW, IN2=LOW → no current → motor stops (coast)
void stopBelt() {
  digitalWrite(MOTOR_IN1, LOW);
  digitalWrite(MOTOR_IN2, LOW);
  digitalWrite(LED_GREEN, LOW);
  digitalWrite(LED_RED,   LOW);
  currentState = STOPPED;
  Serial.println("■  Belt STOPPED — Both LEDs OFF");
}
🧠

How the L298N Direction Logic Works

The L298N has two input pins (IN1 & IN2) per motor channel. Setting IN1=HIGH, IN2=LOW makes the motor spin one way. Flipping them — IN1=LOW, IN2=HIGH — reverses it. Setting both LOW stops the motor. That's the whole secret!

Want Speed Control? Use PWM!

Replace digitalWrite with analogWrite on a PWM-capable pin (like D9) connected to the L298N ENA pin. Values 0–255 control speed: 255 = full speed, 128 = half speed!


Quick Reference

L298N Motor Direction Truth Table 📊

IN1 (D5)IN2 (D6)Motor DirectionBelt MovementLED Status
HIGHLOW⟳ Clockwise⬆️ Belt goes UP🟢 Green ON
LOWHIGH⟲ Anticlockwise⬇️ Belt goes DOWN🔴 Red ON
LOWLOW✋ Coast / Stop■ Belt STOPS⚫ Both OFF
HIGHHIGH🛑 Brake (hard stop)■ Belt BRAKES— (avoid this)

Level Up!

Cool Upgrade Ideas for Your Conveyor 🚀

🎛️

Speed Control Knob

Add a potentiometer connected to an analog pin and use analogWrite to control belt speed — just like a real factory speed dial!

🔍

Object Detector

Add an IR sensor at the bottom. When an object is placed, the belt starts automatically — no button needed!

🛑

Limit Switches

Add microswitches at the top and bottom to auto-stop the belt when objects reach their destination — prevents over-travel!

📟

LCD Display

Connect a 16×2 LCD screen to show belt status (UP / DOWN / STOPPED) and a count of how many items have been transported.

📱

Bluetooth Control

Replace push buttons with an HC-05 Bluetooth module and control the belt from your phone using a Bluetooth Terminal app!

⚖️

Load Sensor

Add an HX711 + load cell to measure object weight. If the load is too heavy, the belt auto-stops to protect the motor!


Real World

Where Are Vertical Conveyors Used? 🌍

🏭

Factories

Moving assembled products from ground floor to upper packaging areas

🏪

Warehouses

Amazon fulfilment centres use vertical conveyors to sort thousands of packages per hour

⛏️

Mining

Ore conveyor belts carry material from underground up to the surface — sometimes kilometres long!

🍕

Food Industry

Biscuit and bread factories use vertical conveyors to move products between baking and cooling levels

✈️

Airports

Luggage conveyor systems are giant versions of exactly this project!

🏗️

Construction

Material hoists on building sites carry bricks and mortar to upper floors


FAQ

Frequently Asked Questions ❓

Why do I need an L298N? Can I connect the motor directly to Arduino?

No — directly connecting a DC motor to Arduino will damage the board! An Arduino pin can only source about 40 mA, while a DC motor needs 200–500 mA or more. The L298N handles the high current from the battery and protects your Arduino.

My motor spins but the belt doesn't move. What's wrong?

The belt is probably slipping on the rollers. Try wrapping rubber bands around the drive roller to increase grip. Also make sure the belt isn't too loose — it should have light tension when you pluck it, like a guitar string.

What kind of rubber belt should I use?

A rubber O-ring with a 200–250 mm circumference works great for small frames. You can also cut a strip from a bicycle inner tube, use a thick rubber band, or loop a piece of silicone tubing. The key is that it's grippy and the right length to loop around both rollers without sagging.

Can I control the speed of the belt?

Yes! The L298N module has an ENA pin (Enable A). Connect this to a PWM-capable Arduino pin (e.g. D9) and use analogWrite(9, speed) where speed is 0–255. Higher values = faster belt. Add a potentiometer to change speed in real time!

My Arduino keeps resetting when the motor starts. Why?

The motor is drawing too much current from the same power supply as the Arduino, causing a voltage drop. The fix: power the motor (via L298N VCC) from a separate 9V battery, and power Arduino separately via USB. The grounds must still be connected together.

What objects can the belt carry?

Start with very lightweight items — LEGO bricks, a folded paper cube, a coin, a small eraser. The carrying capacity depends on your motor's torque rating. A 3V gear motor can typically manage 30–80 grams. Add cleats (small cardboard strips glued across the belt) to stop items sliding off.

Can I make this project without Arduino — like the pulley project?

Yes! Replace the Arduino with a simple relay module and push buttons wired directly (like the pulley project). The relay switches IN1/IN2 manually. You'll lose the debounce and Serial Monitor features but the belt will still work perfectly as a pure hardware circuit!

Curriculum Links

What You Learn Building This 📚

Electronics
Motor drivers, H-Bridge, PWM, current vs voltage
🧠
Programming
Arduino C++, enums, functions, debounce, Serial
⚙️
Mechanics
Rollers, belt friction, torque, gear reduction
🏭
Engineering
System design, prototyping, testing, iteration

🤖 Made with curiosity at MakeMindz — Inspiring Young Engineers Across India

📍 Chennai  |  📧 hello@makemindz.in  |  © 2026 MakeMindz. All rights reserved.

Tags: vertical conveyor belt project, DIY robotics kids India, Arduino motor driver project, L298N conveyor, STEM project class 8 9 10

Comments

Product Cards
Buddy Bot eBook
⭐ New 2026 Release
Build Your
Own Robot!
3D design, wiring &
Arduino coding.
Young inventors love it!
🖨️
3D Print
All parts
Wire it
Circuit guide
💻
Code it
Arduino IDE
🤖
Watch it
Walk & react
📋 Your Details
Enter your name
Valid 10-digit no.
Enter a valid email
Special Website Offer
₹499 300
🌍 International: $5 USD
One-time · Instant digital delivery
🔒 Secured by Razorpay · Your data is safe
📄 Download Free Sample Copy
🔒 Secured by Razorpay · Your data is safe
🍓
Raspberry Pi Pico Mastery
21 Projects
⚡ Launch Price — 80% OFF
Learn Pico
Build 21 Projects!
MicroPython · Wokwi
IoT · Certificate
Perfect for beginners!
🖥️
Wokwi
No hardware
🐍
MicroPy
From zero
🔨
21 Projects
IoT + sensors
📄
Certificate
Verified cert
📋 Your Details
Enter your name
Valid 10-digit no.
Enter a valid email
Special Launch Offer
₹999 200 80% OFF
🌍 International: $5 USD
One-time · Lifetime access · No subscription
🔒 Secured by Razorpay · UPI · Cards · NetBanking
🎉

You're in!

Payment successful! Your Buddy Bot eBook is ready. Time to build!

📖 Access Your eBook Now
🎉

Enrolled!

Payment successful! Lifetime access to all 21 Pico Projects is yours!

🍓 Go to My Course