CNC Drum Plotter
A CNC Drum Plotter using a cardboard paper tube is an interesting DIY project that combines creativity with engineering. A CNC drum plotter works by rotating a cylindrical drum (cardboard paper tube) to move the paper and using a pen or marker to draw on the surface. The plotter has two main axes:
• X-axis: Moves the pen horizontally.
• Y-axis: Moves the paper by rotating the drum.
This project is based on Arduino Nano and runs on GRBL code. It consists of two 28byj-48 Stepper motors, one servo motor and 3D printed parts. This machine is made up of easily available parts like Arduino Nano, 28byj-48 Stepper motors, bicycle’s spokes, bearings, string/thread and 3d printed parts. Let’s make it.
Supplies
- 1pcs x Arduino Nano
- 2pcs x 28byj-48 Stepper motors
- 2pcs x ULN2003 Stepper Motor Driver
- 1pcs x Servo Motor
- 1pcs x Cardboard paper tube
- 2pcs x Bicycle’s spokes
- 1pcs x Header pins
- 1pcs x PCB Sheet (4.5cm X 2.5cm)
- 1pcs x Aluminium Composite sheet (28cm X 13cm)
- 1pcs x String / Thread
- 1pcs x Power Supply 5V-9V DC.
- 1pcs x Female DC Power jack
- 1pcs x Old gas cylinder washers
- 2pcs x Idler Bearing
- 2pcs x Jumper Wires
- Adhesive tape
- Double-sided foam tape
- Black matte vinyl sheet
- Super glue
- 3D printed parts
- Some Screws
Tools used
- 3D printer
- Mini drill machine
- Screw driver set
- Soldering iron
- Vernier Caliper Digital
- Measuring tape/ scale
X-axis
This CNC drum plotter general part includes two 28BYJ-48 stepper motors controlled by Arduino Nano with the help of three ULN2003 stepper motor drivers and one servo motor. The X-axis consists of bicycle’s spokes. X-axis slider moves linearly moves linearly to and fro between the 3D printed stands which carries Z-axis servo motor whose shaft attached with a pen with the help of 3D printed part.
I have used bicycle spokes as the rail guides for this CNC Drum Plotter. The idea of using bicycle spokes as linear rails make the whole machine affordable and of less weight.
Two bicycle’s spokes are used as linear rail. The length of each spoke is 23.5 cm.
For the pulley of the stepper motor I have used an old gas cylinder washer attached to a 3D printed pulley. This washer helps in gripping the string.
Make necessary 3D printed parts to hold stepper motor and to hold idler pulley.
On one end attach a stepper motor and on other end attach an idler 3d printed pulley mounted on the 3D printed part.
Y-axis (Drum)
The drum comprises a section of a Cardboard paper tube with two 3D printed parts. The Y-axis consists of a drum whose motion is controlled directly with the stepper motor. One end of drum is supported by stepper motor and other end supported by a bearing. The whole assembly is supported with 3D printed parts.
Drum Dimensions are:
Length of the drum = 21cm
Outside diameter of drum = 5.5cm
Inside diameter of drum = 5cm
The paper dimensions are determined by curved surface area of the drum. The maximum paper size that can be placed on the drum is 21cm X 18.5cm.
For the drum you can also use a PVC pipe of required size.
Cut the required size of paper overlap it on the drum’s curved surface and seam the mating ends of the paper with the adhesive tape.
Base
Take a Aluminium Composite sheet and cut a piece of size 28cm X 13cm.
I used Black matte Vinyl sheet to cover the fiber sheet to give it a shiny and aesthetic look.
Attach 3D printed supports at the bottom of the fiber sheet with the help of superglue.
You can use a plywood as well.
Schematics and Circuit Diagram
The Connection should be made as per the circuit diagram. The motors (28byj-48) are connected to a controller card (Arduino Nano) that uses the chip ULN2003.
This board is connected to pins A0, A1, A2, A3 for the Y-Axis (IN4->IN1)
D2, D3, D4, D5 Digital pins to the X-Axis (IN4->IN1) and
The Servomotor connected to pin D11.
To overcome the complexity of the circuit connections I have made a custom PCB with header pins, some jumper wires and DC power jack. You can make your own PCB or you can order online.
I have powered this PCB with 5V DC power supply and Arduino Nano is powered with PC.
To hold all electronics circuit together I have created a custom 3D printed box. You can download all STL Files provided at the end of this tutorial.
Software Used
Download Arduino IDE
Download Inkscape version 0.92
https://inkscape.org/release/0.92.2/windows/
Download Universal Gcode Sender
https://winder.github.io/ugs_website/download/
Link to download GRBL file:
Upload GRBL
Download the library file > unzip it and load to arduino as:
File > Example > grbl upload compile and upload code to arduino nano.
If you find any error while uploading the code, see this video:
Create Gcode File Using Inkscape
I used Inkscape software to create Gcode file.
Download all the above mentioned software along with 4xidraw Extension.
Extract and install all the software.
Open Inkscape file location > copy all the files of 4xidraw Extension to the extensions folder of Inkscape.
After adding 4xidraw extension to Inkscape follow these steps to create Gcode file:
Open Inkscape > File tab > Document Properties > set page size as 100mm x 100mm
Drag and drop the particular image of your choice, adjust the image size accordingly and place it on the page.
Select the image > Go to Trace Bitmap > convert to path
Delete the previously inserted image.
Then go to Extensions tab > Click on 4xidraw Tools > Save the parameters as shown in images > Click Apply > Gcode generated.
Assembly of All Parts
With the help of screws all final parts are assembled together to form basic structure of the machine. The 28byj-48 Stepper Motors with pulley belt mechanism is used for X-axis.
Attach the X-axis stands on the base plate made up of Fibre sheet with the help of screws.
The Y-axis drum is placed between 3D printed stands whose one end is supported by stepper motor the other end is supported by a roller bearing mounted on the 3D printed piece.
Mount the Z-axis stepper motor on the slider of X-axis with the pen attached to the servo motor shaft with the help of 3D printed part.
After completing all this process, place the paper on the drum such that all the whole area of paper is covered.
GRBL Configuration and Calibration
Open GRBL Controller > Select COM port > Set Baud rate 115200 > click on "OPEN"
Go to "COMMANDS" Tab
Enter $$ for GRBL configuration
To calibrate X-axis and Y-axis we need to know current values of $100 and $101 which denote steps per mm for each axis.
To get these values we need to open UGS and connect it with Arduino nano. After successful connection enter $$ in commands tab. Note down the current values of $100 and $101
For Ex:-
Current $100 value = 100
Current $101 value = 100
Enter 10mm to commands to run X-axis and note own the distance travelled by X-axis. In my case
Desired Length = 10mm
Actual Length = 8mm
To Calibrate X-axis use this formula to get the new value of $100 value
New $100 value = (Desired Length / Actual Length)* Current $100 value
(10 / 8) * 100 = 125 = New $100 value
Use similar procedure to calibrate Y-axis.
Enter 10mm to commands to run Y-axis and note own the distance travelled by Y-axis. In my case
Desired Length = 10mm
Actual Length = 8mm
To Calibrate Y-axis use this formula to get the new value of $101 value
New $101 value = (Desired Length / Actual Length )* Current $101 value
(10 / 8) * 150 = 187.5 = New $101 value
Enter this value in command tab:-
$100 = 125
$101 = 187.5
the X-axis and Y-axis values for my plotter are:
$100 value = 100.0
$101 value = 25.0
STL Files
Working
Now it’s time to stream Gcode, open UGS > Go to machine > Reset to zero > go to "FILE MODE" Tab Browse > select your gcode file and hit enter. Your machine starts plotting.
Final Words
This setup provides a cost-effective way to create a functional CNC drum plotter. If you have any query regarding this tutorial, feel free to ask in comments section. Hope you like this project. Thanks for reading my work. I feel glad if you make your own CNC Drum plotter with the help of this tutorial.
Stay tuned to my Instructables channel for more upcoming exciting projects.
Thanks again.