MESOMIX - Automated Paint Mixing Machine




Introduction: MESOMIX - Automated Paint Mixing Machine

Are you a designer, an artist or a creative person who loves to throw colors on your canvas, but it’s often a struggle when it comes to making the desired shade.

So, this art-tech instruction will vanish that struggle into thin air. As this device, uses off the shelf components to makes the desired shade by mixing the right amount of CMYK (Cyan-Magenta-Yellow-Black) pigments automatically, which will drastically reduce the time spent on mixing the colors or money spent on purchasing different pigments. And will provide you that extra time for your creative.

Let's Hope you enjoy and let’s begin!

Step 1: How It Works?

There are basically two models of color theory which we need to consider for this project.

1) RGB Color Model

The RGB color model is an additive color model in which red, green, and blue light are added together in various ways to reproduce a broad array of colors. The main purpose of the RGB colour model is for the sensing, representation, and display of images in electronic systems, such as televisions and computers, though it has also been used in conventional photography.

2) CMYK Color Model

The CMYK color model (process color, four color) is a subtractive color model, used in color printers. CMYK refers to the four inks used in some color printing: cyan, magenta, yellow, and key (black). The CMYK model works by partially or entirely masking colors on a lighter, usually white, background. The ink reduces the light that would otherwise be reflected. Such a model is called subtractive because inks "subtract" brightness from white.

In additive color models such as RGB, white is the "additive" combination of all primary coloured lights, while black is the absence of light. In the CMYK model, it is the opposite: white is the natural color of the paper or another background, while black results from a full combination of colored inks. To save money on ink, and to produce deeper black tones, unsaturated and dark colors are produced by using black ink instead of the combination of cyan, magenta and yellow.

Step 2: The Mechanism

As it is mentioned in the "How it Works?" step that both RGB and CMYK color models will be utilized in this Machine.

So, we will use RGB model to feed the RGB color code to the machine while CMYK model for making the shade by mixing CMYK pigments in which volume of the white color will be constant and added manually.

So, to figure out the best possible procedure to build this machine, I sketched down a flow chart to clear the big picture in my mind.

Here is the plan how things will proceed :

  • The RGB values and the volume of White Color will be sent via Serial Monitor.
  • Then these RGB values will be converted into CMYK percentage by using the conversion formula.
The R,G,B values are divided by 255 to change the range from 0..255 to 0..1:
R' = R/255
G' = G/255
B' = B/255
The black key (K) color is calculated from the red (R'), green (G') and blue (B') colors:
K = 1-max(R', G', B')
The cyan color (C) is calculated from the red (R') and black (K) colors:
C = (1-R'-K) / (1-K)
The magenta color (M) is calculated from the green (G') and black (K) colors:
M = (1-G'-K) / (1-K)
The yellow color (Y) is calculated from the blue (B') and black (K) colors:
Y = (1-B'-K) / (1-K)
  • As a result, I got CMYK percentage values of that required color.
  • Now all the percentage values are needed to be converted to the C, M, Y, and K volumes by multiplying each percentage value with the Volume of the White Color.
C(mL) = C(%) * Volume of White Color(x mL)
M(mL) = M(%) * Volume of White Color(x mL)
Y(mL) = Y(%) * Volume of White Color(x mL)
K(mL) = K(%) * Volume of White Color(x mL)
  • Then these C, M, Y, and K volumes will be multiplied by the Steps per Revolution of the respective Motor.
Steps required to pump Color = Color(mL) * Steps/Rev of respective motor

And that's it, by using this each color will be pumped to form a mixture of colors which will be mixed with the exact volume of White color to form the desired shade.

Step 3: The Design

I decided to design it in SolidWorks as I am working on it from last 2 years and applied all my designing, subtractive manufacturing, and additive manufacturing skills in design phase while keeping all the parameters in mind which includes using off the self-components, compact and desktop friendly design, precise yet fast and cost-efficient.

After few iterations, I came up with this design which serves all my requirements and I am quite satisfied with results.

Step 4: What We Need?

Electronic Components:

  • 1x Arduino Uno
  • 1x GRBL Shield
  • 4x A4988 Stepper Driver
  • 1x DC Jack
  • 1x 13cmx9cm Rocker Switch
  • 4x Nema 17
  • 2x 15cm RGB LED Strip
  • 1x Buzzer
  • 1x HC-05 Bluetooth

Hardware Components:

  • 24x 624zz Bearing
  • 4x 50cm Long Silicone Tubing (6mm outer diameter and 4mm inner diameter)
  • 1x 100mL Measuring Cylinder
  • 5x 100mL Beaker
  • 30x M3x15 Bolts
  • 30x M3 Nuts
  • 12x M4x20 Bolts
  • 16x M4x25 Bolts
  • 30x M4 Nuts
  • and some M3 and M4 Washers


  • Laser Cutting Machine
  • 3D Printer
  • Allen Keys
  • Plier
  • Screw driver
  • Soldering Iron
  • Glue Gun

Step 5: Laser Cutting

Initially, I designed the frame to be made up of plywood but figured out that 6mm MDF will also work for this machine but the only issue with MDF is that it is prone to moisture and there is a lot of chance that ink or pigments might spill on the panels.

To solve this issue I used a black Vinyl sheet which adds only a few bucks in the total cost but provided a great matte finish to the machine.

After this, I was all set to get my panels cut down via a laser machine.

I am attaching the files below and already removed that logo from the file so that you can add yours easily :)

Step 6: 3D Printing

I went through various types of pumps and after a lot of research, I found that peristaltic pumps perfectly suits my requirements.

But most of them on the internet are the pumps with DC motors which are not that much precise and can cause some issues while controlling them, on the other hand, some pumps are there with Stepper Motors, but their cost is quite high.

So, I decided to go with a 3D Printed peristaltic pump which uses a Nema 17 Motor and luckily, I came through a link on Thingiverse where SILISAND made a remix of RALF’s Peristaltic Pump. (Special thanks to SILISAND and RALF for their design which helped me a lot.)

So, I used this Peristaltic Pump for my project which drastically reduced the cost.

But after printing and testing all the parts I realized that they are not quite perfect for this application. Then I edited the Hose Pressure Pipe by increasing its curvature so that it can apply more pressure on the hose and also edited the Bracket mount top to provide more grip on the motor's shaft.

My 3D Printer Settings:

  • Material (PLA)
  • Layer Height (0.2mm)
  • Shell Thickness (1.2mm)
  • Fill Density (30%)
  • Print Speed (50mm/s)
  • Nozzle Temp (210°C)
  • Support Type (Everywhere)
  • Platform Adhesion Type (None)

You can download all the files that are used in this project -

Step 7: The Bearing Mount

To assemble the bearing mount we will need following parts:

  • 1x 3D Printed Bearing Mount Bottom
  • 1x 3D Printed Bearing Mount Top
  • 6x 624zz Bearing
  • 3x M4x20 Bolts
  • 3x M4 Nuts
  • 3x M4 Spacers
  • M4 Allen Key

As described in the images, insert all the three M4x20 Bolts in 3D Printed Bearing Mount Top, after that insert an M4 washer following with two 624zz bearing and another washer in each bolt. Then insert the M4 nuts in the 3D Printed Bearing Mount Bottom, tight the bolts by placing the Bottom mount.

Follow the same procedure to make other three bearing mounts.

Step 8: ​Preparing Back Panel

To assemble the back panel we will need following parts:

  • Laser Cutted Back Panel
  • 4x 3D Printed Pump Base
  • 16x M4 Nuts
  • 8x M3x16 Bolts
  • 8x M3 Washers
  • 4x Nema 17 Stepper Motor
  • M3 Allen Key

To prepare the back panel, take 3D Printed Pump Base and insert the M4 Nuts in the slots on the back side of the Pump Base as shown in the images. Prepare other three Pump base similarly.

Now align the Nema 17 Stepper Motor with the slots on the back panel from the backside and mount the Pump Base using the M3x15 Bolt and a washer. And Assemble all the motors and pump base using the same procedure.

Step 9: Assembling All the Pumps on the Back Panel

To assemble the all the pumps we will need following parts:

  • Motors and Pump Base assembled Back Panel
  • 4x Bearing Mounts
  • 4x 3D Printed Hose Pressure Plate
  • 4x 3D Printed Pump Top
  • 4x 50cm Silicon Tubing (6mm OD and 4mm ID)
  • 16x M4x25 Bolts

Insert all the bearing mounts on the motors shafts. Then place the silicon tubing around the bearing mounts while pressing it with 3D printed Hose pressure plate. And close the pump using the 3d Printed Pump Top with M4x25 Bolts.

Step 10: Prepare the Bottom Panel

To assemble the bottom panel we will need following parts:

  • Laser Cutted Bottom Panel
  • 1x Arduino Uno
  • 1x GRBL Shield
  • 4x A4988 Stepper Driver
  • 4x M3x15 Bolt
  • 4x M3 Nut
  • M3 Allen Key

Mount Arduino Uno on Back Panel using M3x15 Bolts and M3 Nuts. After that stack GRBL Shield on Arduino Uno following with A4988 Stepper Drivers on GRBL Shield.

Step 11: Assemble Bottom and Front Panel

To assemble the bottom and front panel we will need following parts:

  • Laser Cutted Front Panel
  • Bottom Panel assembled with Electronics
  • 6x M3x15 Bolts
  • 6x M3 Nuts
  • 3D Printed Beaker Holder

Insert the Bottom Panel in the lower slots of the Front Panel and fix it using M3x15 Bolts and M3 Nuts. Then fix the 3D Printed Beaker Holder in place using the M3x15 Bolts and M3 Nuts.

Step 12: Insert the Tubes in the 3D Printed Tube Holder

To assemble the bottom and front panel we will need following parts:

  • Fully Assembled Back Panel
  • 3D Printed Tube Holder

In this step, insert all the four tubes in the holes of 3D Printed Tube holder. And make sure that some tube protrudes through the holder.

Step 13: Assemble the Four Panels Together

To assemble the front, back, top and bottom panel we will need following parts:

  • Front and Bottom Panel Assembly
  • Back Panel Assembly
  • Top Panel
  • Cool White Led Strip

To assemble all these panels, firstly fix the Tube Holder on the top of the beaker holder. Then Stick the LED Strips on the bottom face of the Top panel and then insert the top panel in the slots of back and front panel.

Step 14: Assemble the Motor Wires and the Side Panels

To assemble the Motor wires and the Side Panels we will need following parts:

  • Assembled four panels
  • 4x Motor Wires
  • Side panels
  • 24x M3x15 Bolts
  • 24x M3 Nuts
  • M3 Allen Key

Insert the wires in the Motor's slots and close both side panels. And fix the panels using M3x15 Bolts and M3 Nuts.

Step 15: Wiring

Follow the Schematic to wire all the electronics in the following way:

  • Fix the DC Jack in the slot of the back panel and connect the wires to the power terminals of the GRBL Shield.
  • Then, Plug the motor's wires in the Stepper Drivers terminals as following -

X-Stepper Driver (GRBL Shield) - Cyan Motor Wire

Y-Stepper Driver (GRBL Shield) - Magenta Motor Wire

Z-Stepper Driver (GRBL Shield) - Yellow Motor Wire

A-Stepper Driver (GRBL Shield) - Key Motor Wire

Note: Connect A-Step and A-Direction Jumpers of the GRBL Shield to pin 12 and pin 13 respectively. (The jumpers for A-Step and A-Direction are available above the Power Terminals)

  • Connect the HC-05 Bluetooth in the following terminals -

GND (HC-05) - GND (GRBL Shield)

5V (HC-05) - 5V (GRBL Shield)

RX (HC-05) - TX (GRBL Shield)

TX(HC-05) - RX(GRBL Shield)

  • Connect the Buzzer in the following terminals -

-ve (Buzzer) - GND (GRBL Shield)

+ve (Buzzer) - CoolEn Pin (GRBL Shield)

Note: Power this machine with at least 12V/10Amp Power Supply.

Step 16: Calibration of the Motors

After Powering the Machine, Connect the Arduino to the Computer via USB cable to install the calibration firmware to the Arduino Uno.

Download the Calibration Code given below and upload it to the Arduino Uno and perform the following instructions to calibrate all the motors steps.

After uploading the code, open serial monitor with the baud rate of 38400 and enable both CR and NL.

Now give the command to calibrate the motor pumps:

START <Pump To Calibrate>

"Pump to Calibrate" argument is needed to command the Arduino to which motor to calibrate and can take values:

C => For Cyan Motor
M => For Magenta Motor
Y => For Yellow Motor
K => For Key Motor

Wait for the pump to load the color into the tube.

After loading, clean the flask if some color spell into it, the Arduino will wait until you send the confirmation command to start calibrating. Send "Yes" (without quotation marks) to start calibrating.

Now the motor will pump the color into the flask which we are going to measure using a measuring cylinder.

Once we have the measured value of pumped color we can find out the Steps per Unit(ml) for the selected motor using given formula:

                      5000         (Default steps)
Steps Per ML = --------------------
                  Measured Value

Now put the Steps per Unit(ml) value for each motor in the main code in given constants:

line 7) const float Cspu => Holds the value for Steps per Unit of Cyan Motor
line 8) const float Mspu => Holds the value for Steps per Unit of Magenta Motor
line 9) const float Yspu => Holds the value for Steps per Unit of Yellow Motor
line 10) const float Kspu => Holds the value for Steps per Unit of Key Motor

NOTE: All the steps and procedure to properly calibrate the motors will be displayed during calibration in the serial monitor.

Step 17:

Step 18: Coding

After Calibrating the motors, its time to download the main code for making colours.

Download the Main Code given below and upload it to the Arduino Uno and use the available commands to use this machine:

LOAD                       => Used to load the color pigment into the silicon tube.
CLEAN                      => Used to unload the color pigment into the silicon tube.
SPEED <RPM>                => Used to update the pumping speed of the device.
			      <RPM> take the integer value representing the RPM of the motors.
			      Default is set 100 and can be updated from 100 to 400.
PUMP <R> <G> <B> <BASE>    => Used to command the device to make desired colour.
			      <R> takes the integer value representing Red value.
                              <G> takes the integer value representing Green value.
			      <B> takes the integer value representing Blue value.
                              <Base> takes the integer value representing the volume of white colour.

NOTE: Before using this code make sure to update the values of default steps for each motor from calibration code.


Step 19: And We're DONE !!

You're finally done! Here's how the final product should look and work like.

Click Here to see it in action

Step 20: Future Scope

As it is my first prototype, which comes out to be far better than what I expected but yes it requires a lot of optimization.

Here are some of the following upgrades which I am looking for the next version of this machine -

  • Experimenting with different Inks, Colors, Paints and Pigments.
  • Development of an Android App which can provide a better user interface by using Bluetooth that we already installed.
  • Installation of a Display and a Rotary Encoder which can make it a stand-alone device.
  • Will look for some better and reliable pumping options.
  • Installation of Google Assistance which can make it more responsive and smarter.


If you like this project, please vote it for the "First Time Author" Contest.

Really much appreciated! Hope you guys enjoyed the project!

Colors of the Rainbow Contest

Runner Up in the
Colors of the Rainbow Contest

1 Person Made This Project!


  • Game Design: Student Design Challenge

    Game Design: Student Design Challenge
  • Make It Bridge

    Make It Bridge
  • Big and Small Contest

    Big and Small Contest



Question 6 months ago on Introduction

What type of paints are u using for the colors, Acrylics ?


1 year ago

Can you plese update your project by adding white paint? Also I have question if I can replace pomps for bigger? Thank you :)


Question 3 years ago on Introduction

Hello, I am a student for a Master degree in robotics, I have to do a semestrial project. I have to adapt/ update an exiting equipment in order to control it using the internet and so on. Can I use your prototype as the equipment for modernising? (of course by mentioning the equipment source as being your creation) I am an art lover and technology passionate and I can say that this would be perfection if you manage to do all your updated. Good luck with that!


Answer 1 year ago

Hello DianaA96, did you created machine? can you show? Thanks

FabroLabs Technologies
FabroLabs Technologies

Reply 3 years ago

Hey Diana, we would love to help you out, but we doesn't have that much time to update this on our part. But if you want any assistance then, we can help you with that. :) And thank you for showing interest in our instructable.


1 year ago

2d file has no data


1 year ago

i am not able to pump in colors using this head you provided ? is there any thing I am doing wrong ?


Reply 1 year ago

Hey, same problem. Did you come up with something in these months?


Question 1 year ago

I realize this is a pretty old tutorial, but if you're still answering questions, may I ask what you used for the dyes/pigments? Is it just food coloring or is that a product you can buy?


2 years ago

Sir what is the price of this product? also from where you have given the supply to it? please respond :)


Question 2 years ago

why is the file for laser cutting is empty??


2 years ago on Step 5

how do i build it ?


2 years ago on Step 20

Have there been any updates on this?
I'd be VERY interested in it if it could be made to mix 17ml pots of model paints to pantone colours (fairly simple to convert pantone to RGB or CMYK)
It would need thinner tubers and a narrower nozle cluster, but I'm 100% certain it should be possible


2 years ago

What can be the cost of this parts


Question 2 years ago on Introduction

Let me start by saying I am just a father that fiddles a lot in the garage and when i saw this is blew my mind. I do a lot of halloween and christmas props a nd color matching was also an issue. I fly by the seat of my pants. I have zero knowledge of .ai files but when i tried the get the last cut file it wont open ot i get message empty or not readable. Am i doing something wrong. (i know i prob am , so my apologies). Is there some way to get a valid formatted set of the files.
EIther way, this would be an awesome help to anybody where exact colors make all th difference. THANKS YOU AGAIN for an awesome idea!!


Answer 2 years ago

Hi Stage1455

Not sure if you ever got this to work or still needed this but here is the .ai file as a dxf so should work with majority of programs.

saouali Ali
saouali Ali

2 years ago

Is there a possibility to add white to blend ? Where cmyk + w becomes


Question 3 years ago

Really fascinated with your project and best wishes for next one, I am sure it will be awesome. Also, I have a question...Why did not add a 5th pump to control white color instead pouring manually.


3 years ago

I wish I would have seen this when the voting was open. One of the best Instructables and very usable idea.
I hope the nice folks at Intructables fix the feed update problems so I don't miss more of the good ones.