About: PLC, Arduino - Do it yourself project

I picked up some rollers, which are probably used in the printer. I came up with the idea of turning them into the rotation axis of CNC bottle plotter. Today, I'd like to share how to build CNC bottle plotter from these rollers and other scraps.

To do this project, I was inspired by lingib with his CNC Drum Plotter:

Let’s getting started.


    • 1pcs x Arduino Uno R3.
    • 1pcs x Arduino CNC Shield V3 GRBL.
    • 4pcs x Stepper Motor Driver A4988.
    • 2pcs x Old CD/DVD Players.
    • 2pcs x Stepper Motor NEMA 17-size.
    • 2pcs x Old Printer Rollers, with length about 370mm and diameter 10mm.

    • 2 meter x 8P Rainbow Ribbon Cable.
    • 2pcs x Aluminum Flexible Shaft Coupling, Inner Hole Size: 5mm x 8mm.
    • 1pcs x Aluminum Flexible Shaft Coupling, Inner Hole Size: 10mm x 10mm. It is used to clamp the pen/ pencil.
    • 1pcs x Stapler.
    • 6pcs x Copper Brass Pillars L-5/10mm.
    • 3pcs x Threaded Rod Hangers and Nuts M10 x 500mm. I used threaded bolt type for hanging lights.

    • 8pcs x Bearing 8mm ID.
    • 2pcs x XH2.54mm – 6P 20cm Wire Cable Double Connector.
    • 4pcs x L shape supports.
    • 2pcs x Mounting Support for Stepper Motor.
    • 1pcs x Power Supply 12V.
    • Some small cable ties, cable spiral wrap, M4 bolts and nuts.

    Step 2: SOFTWARES


      I reused 2 wooden sticks from my kids toys, drilled 2 holes on each sticks with distance about 65mm and mounted the bearing into drilling holes.

      • Blue wooden stick dimension: 100 x 30 x 10mm
      • Red wooden stick dimension: 165 x 30 x 10mm

      Two printer rollers ends were inserted into bearing of blue wooden stick.

      I inserted other side roller ends into bearing of red wooden stick and connected 2 stepper motors Y axis to 2 rollers by flexible coupling 5x8mm. Then I cut a wooden plate dimension 250x350mm to build a CNC footplate and mounted the L shape supports on it. The stepper motors and red wooden sticks were mounted on this footplate.


      The X-axis and Z-axis were mounted on a wooden box 12x10x6mm which was drilled 4 holes and inserted 4 nuts M10 into these holes. The distance between the two nuts on one side is 30mm.

      The M10 threaded rods were polished at both ends until they reach a diameter of 8mm.

      I screwed two M10x500 threaded rods into 4 nuts of the wooden box. Depending on the bottle length, I can adjust the position of the X-axis manually. Four other nuts were also screwed to two ends of thread rods in order to fix the desired position.

      For X and Z axis, I mounted 2 old CD/DVD players on the above wooden box 12x10x6mm.

      For clamping the pen/pencil, I used the stapler's spring mechanism and flexible coupling 10x10mm. Details you can check at my previous instructable: BACK TO BASIC-MINI CNC PLOTTER

      I cut the 2 wood plates with dimension 100x200mm to build the left and right side support of X and Z axis. I drilled 2 holes on each plates with distance about 30mm and mounted the bearing into drilling holes. The other holes were used to connect to L shape supports.

      Two threaded rods with two CD/DVD players were inserted into 2 bearings of the right and left side supports

      In order to keep the X-axis supports strong enough, I used one additional threaded rod 10x500mm to connect the left and right supports.

      The left and right supports of XZ axis were mounted on the CNC foot plate.

      Because the X-axis is limited to 40mm, to be able to extend the plotting range, I used some printer gears and belt to connect 2 threaded rods together. By this way, I can adjust the desired plotting position depending on the bottle length by hand.


      Step 5: CONNECTIONS

      My project used 4 stepper motors and A4988 drivers. Because rotary Y axis operated with 2 stepper motors, I had to add 2 jumpers as below picture to configure the 4th axis. In this case, Y-Axis is cloned to the 4th stepper driver A4988 which is marked as "A" on the CNC shield.

      Finally I mounted CNC Shield and Arduino Uno to CNC foot plate and connect cables from 4 stepper motors to 4 drivers A4988.

      Notes: You can refer to my instructable BACK TO BASIC-MINI CNC PLOTTER at STEP 5 for setting up micro-steps and current limit of stepper driver A4988.

      • My micro-steps setting is 1/8 step resolution for all stepper motors.
      • We should pay attention to set the current limit of stepper motors by adjusting the trimmer potentiometer on the A4988 board.

      All assemly works and electrical connections were done.


      1. Upload GRBL firmware to Arduino Uno

      • Download GRBL firmware files.
      • Copy GRBL to C:\Users\Administrator\Documents\Arduino\libraries\
      • Open Arduino IDE, from File menu click Examples GRBL grblUpload.
      • Select the correct port and board (Arduino Uno), compile and upload the code to Arduino Uno.

      2. GRBL parameters for my bottle plotter are as follows:

      $010.000Step pulse time
      $125.000Step idle delay
      $20.000Step pulse invert
      $30.000Step direction invert
      $40.000Invert step enable pin
      $50.000Invert limit pins
      $60.000Invert probe pin
      $101.000Status report options
      $110.010Junction deviation
      $120.002Arc tolerance


      Report in inches


      Soft limits enable


      Hard limits enable


      Homing cycle enable


      Homing direction invert
      $2425.000Homing locate feed rate
      $25500.000Homing search seek rate
      $26250.000Homing switch de-bounce delay
      $271.000Homing switch pull-off distance
      $301000.000Maximum spindle speed
      $310.000Minimum spindle speed
      $320.000Laser-mode enable
      $10053.333X-axis travel resolution
      $10120.000Y-axis travel resolution
      $10253.333Z-axis travel resolution
      $1101000.000X-axis maximum rate
      $1111000.000Y-axis maximum rate
      $1121000.000Z-axis maximum rate
      $12050.000X-axis acceleration
      $12150.000Y-axis acceleration
      $12250.000Z-axis acceleration
      $13040.000X-axis maximum travel
      $131220.000Y-axis maximum travel
      $13240.000Z-axis maximum travel

      The important parameters which I have done the calibrations are highlighted in table above.

      3. STEP/MM setting:

      The step/mm setting for stepper motors are shown in tables below by formula:

      Steps/mm = (Steps per Revolution)*(Micro-steps) / (mm per Revolution)

      • X AND Z AXIS - $101 and $103:
      The working length of the screw:40.00mm
      Step angel:18°
      The number of steps required for DVD stepper to make 1 complete revolution:20step/rev
      A4988 micro-steps setting:8-
      DVD stepper screw pitch (mm/revolution):3.0mm/rev
      • Y AND A AXIS - $101

      To determine the STEP / mm of the rotary axis, I measured the circumference of the cylindrical rubber attached on the printer rollers. It is straight length for stepper motor to make 1 complete revolution and it is 80mm in my case.

      In my testing, I used some glass bottles (fish sauce bottle) with circumference 220mm.

      The working length of the rotary axis:220.000mm
      Step angel:1.8°
      The number of steps required for stepper to make 1 complete revolution:200step/rev
      A4988 micro-steps setting:8-
      mm per revolution:80.000mm/rev

      Step 7: INKSCAPE AND UGS

      1. INKSCAPE

      - From the Inkscape menu go to File Properties and in the Page Tab set the Display Units (millimeters), the Orientation to Portrait and Page Size: 40x 220mm.
      - Import a suitable image by using the menu File Import. In the menu, go to Path Trace Bitmap and convert the Object to Path.

      - Go to Extensions Gcodetools Tools Libary. Select Tools Type: Cylindrical and click Apply.

      - Go to Extensions Gcodetools Orientation Points

      • Orientation type: 2-points mode.
      • Z Surface: 0.0mm. This is the top of your paper surface.
      • Z Depth: -1.0mm. This is working position of Z axis when CNC plotter is drawing object. This negative number ensure that the pen tip can touch the paper.

      - Go to ExtensionsGcodetools Path to Gcode

      • Z safe height: 2mm. It is height above the plotting surface when moving between drawing points.
      • Click the Path to Gcode Tab before clicking Apply. This creates the G-code file.


      • Open Universal Gcode Platform, select Port and set Baud to 115200, click on Connect tab.
      • Select the appropriate position by moving X axes left - right, Y axes forward - backward and set the original coordinates by button Reset Zero.
      • Click Open Browse to the G-code file that generated by INKSCAPE.
      • Click Send and CNC plotter will perform drawing picture following the G-code.
      • Monitor the plotter in action on the Visualizer tab.

      Step 8: TESTING

      I have a lot of fish sauce bottles made of glass. Usually, they are thrown away after use, but from now on, they will be named or decorated by my CNC bottle plotter to store the necessary liquid spices. We can easily change to different kind of pens, such as colored pen/ pencil...because they are clamped by motor flexible coupling 10x10mm.

      Step 9: FINISH

      You can see some pictures of this project.

      Thank you very much for reading my work and hope you enjoyed my article this time!

      Remix Contest

      Participated in the
      Remix Contest

      Be the First to Share


        • Battery Powered Contest

          Battery Powered Contest
        • Plywood Challenge

          Plywood Challenge
        • Plastic Contest

          Plastic Contest

        11 Discussions


        Question 6 days ago on Step 9

        Very good project . But no speak english .. Sorry
        Est-ce volontaire l'écriture sur la bottel , inverse Haut et Bas for txt ?
        Solution tourner dans le sens trigonométrique ou bien inverse !! I am réalisé gaveur Laser sur bottle en bois . I working wood tourning . Salutations .


        Answer 4 days ago

        Thanks! I'm not clear what you mean because I translated your comment by Google. If you want to reverse a text, you can adjust the parameter at "$3: Step direction invert" in GRBL firmware.


        4 days ago

        Very cool... have you tried using a battery-operated engraving pen with it for etching directly onto the glass?


        Reply 4 days ago

        Thank you for your suggestion! I will check whether I can buy it in my country.


        10 days ago

        Very nice.
        I like the way you have used components you have at hand.
        Having a 3D printer, I went for this approach: Tim's Tubular Plotter

        If you can hold the object at each end, the things you plot on don't need to cylindrical (sides parallel).
        Also you can then plot on things like a cup with a handle.
        You would however have to compasate for diameter.


        Reply 8 days ago

        Thank you for your suggestion! Your Tim's Tubular Plotter is very nice.


        11 days ago

        Cool project! Hope to see more of such in the future.


        Reply 11 days ago

        Thank you!


        14 days ago

        Nice work. Do you have any plans for what you will do with it?


        Reply 14 days ago

        Thank you so much for your comment!!! I'm thinking about extending X axis working space by lead screw plus stepper motor and using the special pen which can directly draw on the glass bottle.