Conveyor Belt 

This is a 3D printed conveyor belt. It can be printed on any 3D printer with a build height over 180mm (though it can be scaled). The belt is made from a PVC table cloth which grips the rollers on one side and provides a waterproof surface for the belt. 

The conveyor belt is powered by 2 Nema17 stepper motors, though can be driven on just one side. The conveyor belt is made of 4 sections (though can be more or less) with the end sections having a motor mount, a space for a 608RS (skateboard) bearing and the roller. The rollers are also 3D printed and have a 50 tooth gear to grip the belt better. 

The width of the belt is 95mm and the overall dimensions are: 720mm long (4x 180mm tall sections) , 110mm wide (can be scaled to suit) and 50mm height.

It has 5 holes on either side and in the base to allow other parts to attach to the conveyor belt (see Drink Serving Robot).


STL files for 3D Printing: Thingiverse

TinkerCAD Model: Coming soon.

Costs: £6 PLA, £40 Parts

Parts Required


(1x) PVC table cloth - AMAZON 

(2x) 680RS bearing (skateboard bearing) - AMAZON

(2x) Nema 17 stepper motor - AMAZON

(2x) A4988 stepper motor driver - AMAZON

(1x) Arduino Uno - AMAZON OR (1x) Arduino Mega -  AMAZON

(8x) M3x8mm bolts (to connect nema17) - AMAZON

(2x) M5x15mm bolts (for roller) - AMAZON


12V power supply - AMAZON or Bench power supply - AMAZON

Breadboard - AMAZON

Glue gun (though PVA or superglue works) - AMAZON





Build Instructions


Step 1

Print the following pieces: 1x Left Section, 1x Right Section, 2x Roller, 2x Middle Section (though this can be any   number depending on the length required).

These need to be printed vertically so require a printer at least 180mm high, however this can be scaled easily. You can also scale the width to make a wider or thinner conveyor belt. I have added holes to allow things to be connected to the conveyor and to attach the conveyor to the table if required.

Step 2

Place the roller in the conveyor belt and insert a Nema 17 stepper motor in to the roller. using M3x8mm bolts attach the stepper motor. repeat for the other section. Insert a 608zz bearing opposite the stepper motor and insert a M5x 5mm bolt in to the roller.

Don't connect the sections together yet, its much easier to feed the belt through each piece separately. 

Step 3

Take a sheet of PVC table cloth and cut a strip 1300mm x 95mm. If you have scaled the bed you need +/-360mm for each additional or removal of the middle section. Feed this though the centre of each conveyor belt and lay on top of the conveyor belt. Using superglue / hot glue gun / any other strong glue, pull the belt tight and glue together. ensures this flows smoothly and rotates the roller.  Connect the belts together using the brackets.

Tip: Put a sticky label over each joint to smooth over the joint. 



To connect this to an arduino you need to build a circuit to drive the stepper motors. This is really simple, you need 2 x A4988 stepper motor drivers - AMAZON and a breadboard. You will also need a 12V power supply at 2A. Below is a diagram for how to wire up the board.



Here is a basic example of how you would program a conveyor belt in a function. I have added the two motors direction pin together but the stepper pins I have kept separate.  

The function is called "Move Belt" and takes 2 parameters, the distance in millimeters for the belt to travel and the direction of the belt as 0 or 1. In the loop there is some example code of using the function to move the belt forwards and backwards and then stop. 

Arduino code

#include <Servo.h>
const int dir = 0; //shared direction pin
const int step1 = 1; //step pin motor 1 
const int step2 = 2; //step pin motor 2
int roller_diameter = 32; //roller diameter
float roller_circ = roller_diameter*3.1415; //circumference of roller
bool START = true; //Stops looping
void setup() {
  pinMode(dir,OUTPUT); pinMode(step1,OUTPUT); pinMode(step2,OUTPUT); //configure pins
void MoveBelt(int distance, int direction) { //Function to move the belt
  digitalWrite(dir,direction);                                   //Set the direction of the stepper motors
  for (int p = 0; p <= (200/roller_circ) * distance ; p += 1) {  //200step per rotation divide circumference of roller 
    digitalWrite(step1,HIGH);  digitalWrite(step2,HIGH);         //pulse stepper motor
    delay(1);                                                    //wait 1ms
    digitalWrite(step1,LOW); digitalWrite(step2,LOW);            //pulse stepper 
    delay(1);                                                    //wait 1ms
void loop() {
  delay(500); //wait 0.5s
  if (START == true) { //if first time:
    MoveBelt(150,1); //move belt 150mm right
    delay(1000);     //wait 1s
    MoveBelt(100,0); //move belt 100mm left
    delay(1000);     //wait 1s
    MoveBelt(330,1); //move belt 330mm right
    delay(1000);     //wait 1s
    START = false;   //end loop. change this to loop continuously.