The Polar Coaster – A Drink Coaster Drawing Machine

I designed this machine to draw custom, round drink coasters. I already have a laser cutter for square coasters and I wanted to try something unique for round coaster.

The Base

The base of the machine has two stacked 5mm bearings in the center for the bed to rotate on. There are (3) 3mm bearings on the bed perimeter that provide support and keep it level. They have little shafts that snap into the base.

The Bed

The bed is  a 156 tooth GT2 pulley. It has little springy fingers that grip the coaster when it is on the bed. The bed connects to the motor pulley with a closed loop belt.

The Radial Arm.

This is a belt driven, cantilevered arm that uses 6mm shafts and linear bearings. The belt is a cut pieces with the ends clamped at the carriage. It has a slotted mounting hole that lets the arm rotate. The pen must be adjustable to get to the exact center of the coaster or the drawing will be distorted. There is a limit switch on the top.  This is the only axis that needs to be homed. To setup the machine you home it and jog the pen until it is exactly over the center of the bed. You then set the work zero for X (Gcode: “G10 L20 P0 X0”). This only needs to be done once. If you use different types of pens, the center should be rechecked.

The Z Axis

The Z axis uses a micro servo and a cam to control the height of the pen. The firmware is setup to only have (2) Z positions, pen up and pen down. It uses 3mm rods and tiny little 3mm linear bearings.  There is a compression spring on one of the rods that applies a little pressure to the pen, and allows the pen to float a little on uneven coasters.

The Controller

I used my Grbl HAT controller. It is a bit overkill for this project but works perfectly.  It is attached to a Raspberry Pi in this photo, but I have not been using the Pi in this project yet. I just connect directly via USB.

Kinematics and Pre-Processin

See this blog post on how it was done. The pre-processor is written in C#, but it is rather simple and you could probably read the source file and convert if you cannot deal with C# on Windows.


I use a modified version of Grbl 1.1f.  Grbl does not support servos, so I needed to hack that in.  I used the PWM that is normally used for the spindle speed to control the servo. I turned off the variable speed spindle option and streamlined the spindle functions to the bare minimum I thought Grbl needed.  I adjusted the PWM parameters for use with a servo and added pen_up() and pen_down() functions. I tried to put as much of the custom code into one file spindle_control.c. I had to add a few lines in stepper.c to look at the current machine Z height and apply the correct pen up/down function.


You can use anything to generate the gcode that works with Grbl. The pen will go up when the Z is above zero and down when it is below zero. Therefore, you want the Z movement as short as possible to speed up the drawing and not have the pen dwell on the material and bleed.  I make the depth of cut 1mm and the z clearance 3mm.

CAD Files.

The design was done using PTC CREO 3.0.  A STEP version of the design is linked at the end of the post.


It does a great job. Here a recent coaster. This was done from a rasterized bitmap image found online (searched: circular Celtic braid).

Here is a Fat Tire beer themed coaster.

Coasters are made to be super absorbent, so larger tipped felt pens tend to bleed a little too much. I like to sketch with Micron pens and the thinner ones really work well on this machine.

Build You Own?

The build is not difficult, but covers a lot of areas. You should know how to work with STEP files and compile firmware.

The design is open source with no commercial restrictions, so feel free to use any part of my work. I found most of the parts on Amazon and eBay. I bought the belt from Stock Drive Products. The polar motor pulley is 36 tooth and the arm pulley is 20 tooth.  Cutting the shafts requires an abrasive cutoff wheel.

Please post any questions in the comments section and I will try to address them.



I sell on Tindie




Share and Enjoy:
  • Print
  • Digg
  • StumbleUpon
  • Facebook
  • Yahoo! Buzz
  • Twitter
  • Google Bookmarks

29 Responses to “The Polar Coaster – A Drink Coaster Drawing Machine”

  1. Ruwan

    Awesome machine!.

    Minor issue: all links seems to point to CAD zip file.


  2. bdring

    Thanks Ruwan,

    Links should be fixed.

  3. Ulrich

    very nice machine. I don´t understand how to use the Pre-Processor. Must I compile (is there a EXE file) it and how it works?
    Is it possible to open an existing gcode file and output the converted one to send it with my standard gcode sender?
    Is the only modification that you make to the grbl firmware the PWM modification? If I had a normal Z-Axis can I use my standard grbl?
    Thank you in advance for your answers.


  4. bdring


    The pre-processor is source code for Visual Studio 2017. You can run it in visual studio or compile an exe.

    If you use a stepper for Z you do not need to change Grbl.

  5. Joel

    I’ve got a RAMPS set lying around. I figure I can use that for this, but honestly I don’t have a whole lot of experience with firmware and such. Is it possible? Would it take me forever to figure out on my own?

  6. bdring

    A RAMPS board is overkill, but there could be many ways to go on this.

    1. You could use the Grbl/Mega fork of Grbl. The pen servo would need to be added. It is “easier” on a Mega because you have more PWM resources, but the code (registers) is a little different. As I recall the RAMPS has a few servo connectors.

    2. You could try a 3D printer firmware like Marlin. There were made for RAMPS.

    Either way, the level of difficulty depends on your coding experience. If you are good with firmware, it should not take too long. You could always buy my board from Tindie. You probably already have the stepper drivers.

  7. Geovanni

    Hello very nice machine, what would be the steps to turn it into a polar 3d printer.

  8. bdring

    Polar 3D printers exist and they are very nice. The build areas are big compared to the printer and the head only has to have half of the travel of the bed size.

    1. You would need to create a stepper motor controlled Z axis and put an extruder on it.
    2. The extruder gcode would need to be coordinated with the actual length of travel.
    3. The crude feed rate compensation I did is probably not good enough for 3D printing. If you did #2, I think you would have all the info you need for feed rate compensation.

    If you build it and need help with a gcode converter, I would be glad to help.


  9. Kortak

    I don’t understand, where is python involve in this project ?

  10. bdring


    The CAM programs that generate the gcode (motion instructions) only work for Cartesian (rectangular) moves. The gcode needs to be converted to a Polar coordinate system before it can be used on this machine. See my other recent blog posts on this subject for more information.

  11. Tal

    Which bearings where used on the base? do you have the dimensions or names?

  12. bdring


    The bearing is a 625-2RS. The dimensions are 5mm-16mm-5mm

  13. BobM

    From the video it like the polar drive belt has part number 6R51M186060. I found it on the SDP/SI web page:
    6mm x 372mm (186 teeth). Is that correct?

  14. bdring

    That is the belt I used. It is a little bit of a tight fit, but works fine.

  15. pepperl

    Thanks bdring,It is a very nice machine!
    I have build my own one,I converted the code, but still can not work properly, the image is distorted.
    Can you send me the test Gcode just like the image in Youtube.
    And is the distance of zero(X) point to the center point 45mm?

  16. pepperl

    Hi bdring.
    Here is my grbl setting,and I test the 40mm square_polar Gcode,It is distorted, looks like the X axis moves too little.
    2017/09/09 16:20:58 – Grbl 1.1f [‘$’ for help]
    2017/09/09 16:20:58 – $0=10
    2017/09/09 16:20:58 – $1=25
    2017/09/09 16:20:58 – $2=0
    2017/09/09 16:20:58 – $3=0
    2017/09/09 16:20:58 – $4=0
    2017/09/09 16:20:58 – $5=0
    2017/09/09 16:20:58 – $6=0
    2017/09/09 16:20:58 – $10=3
    2017/09/09 16:20:58 – $11=0.010
    2017/09/09 16:20:58 – $12=0.010
    2017/09/09 16:20:58 – $13=0
    2017/09/09 16:20:58 – $20=0
    2017/09/09 16:20:58 – $21=0
    2017/09/09 16:20:58 – $22=0
    2017/09/09 16:20:58 – $23=1
    2017/09/09 16:20:58 – $24=25.000
    2017/09/09 16:20:58 – $25=500.000
    2017/09/09 16:20:58 – $26=250
    2017/09/09 16:20:58 – $27=1.000
    2017/09/09 16:20:58 – $30=1000
    2017/09/09 16:20:58 – $31=0
    2017/09/09 16:20:58 – $32=0
    2017/09/09 16:20:58 – $100=160.000
    2017/09/09 16:20:58 – $101=160.000
    2017/09/09 16:20:58 – $102=160.000
    2017/09/09 16:20:58 – $110=5000.000
    2017/09/09 16:20:58 – $111=5000.000
    2017/09/09 16:20:58 – $112=5000.000
    2017/09/09 16:20:58 – $120=10.000
    2017/09/09 16:20:58 – $121=10.000
    2017/09/09 16:20:58 – $122=10.000
    2017/09/09 16:20:58 – $130=300.000
    2017/09/09 16:20:58 – $131=200.000
    2017/09/09 16:20:58 – $132=50.000

  17. pepperl

    Great, it is done,it is working now!
    I make mistak of the (X)zero point an the (Y)steps.

  18. bdring


    I am glad to hear your machine is working.

    I needed to calibrate my polar axis. The math suggested one steps/mm but when moving 360 units it was a little off a full circle. I tweaked the number a little until I was getting consistent motion.

  19. BobM

    I had a little trouble finding that 186 tooth belt and the site I did find has a minimum order, so I thought printing one first. Here’s the design I came up with:

    I’m also remixing some of the parts so it might work with with the NEMA17 motors I have in my junk box.

  20. bdring


    Thanks for making that belt. I might try printing one. There is no load on these belts and they might actually be more compliant to the 3D printed pulleys.

    NEMA17…most of my choices are based on what is laying around too.

  21. Faras

    can u send me the picturial representation of this cnc machine to how to make it

  22. bdring

    Right now the only file I can provide is the STEP file linked in this post.

  23. tady


    Can you tell me the codes and the dimensions for the little support bearings?
    Thank you

  24. bdring

    The bearings are 3mm ID, 10mm OD and 4mm Thick. Any bearing will do, but the ones I used are know as 623-2RS bearings.

  25. tady

    how about the pen belt? the big belt is 6mm x 372mm (186 teeth).
    Thank you

  26. bdring


    I bought the 186 tooth x 6mm belt here.

    The belt is slightly tight so 188 teeth would work as well. Some people have printed belts as well, but no reviews of that on this machine yet.

  27. BKNJ

    This looks like a lot of fun and great design. What program do you use to control the polar printer? I’m familiar with tools for 3D printing, but this is new to me. I plan on using your controller and Arduino Uno. Thanks in advance. Bryan

  28. ofir

    Hi , i made this amazing project but i cant understand how to process the Gcode..
    can you explain how to work with the processor?
    thanks for sharing this project.

  29. bdring

    You no longer need to process gcode if you use the latest Grbl_ESP32 firmware.