Close

first painting with automated paint mixing

A project log for If ( ) Then {Paint}

a machine to create canvas paintings of your favorite digital images

john-opsahlJohn Opsahl 03/01/2020 at 05:570 Comments

The previous strategy to dispense paint in bead lines was abandoned. It was too difficult to find the correct dispense rate and dispense the correct paint volume per unit length on the palette. The main challenge with determining the correct dispense rate is the dispense response of the syringe. There is a delay between when the syringe plunger is advanced and when paint actually comes out of the syringe. The causes of the delay that I haven't been able to control and quantify are air pockets in the syringe and the viscosity of the paint. I check for large air pockets in the syringes by pressing down briefly on the syringe plunger. If it the plunger bounces back to the original location, you know there is a air pocket in the syringe. Even with this method I am still not able to detect all the air pockets. And the viscosity, it seems to vary by the batch of paint and the age of the paint. I found that the challenges of air pockets and paint viscosity can be avoided by dispensing paint in small beads and using a delay between each dispense that is long enough for the volume of paint to leave the syringe. This method results in the correct volume of paint being dispensed on the palette and an easier paint dispense calculation, but ultimately, is much slower than the previous paint bead line dispense method. 

Below is a gcode tool path visualization of the small paint bead method and an image of the paint palette after the machine has performed these gcode operations. Notice that one of the white paint beads is missing from the palette; this was due to an air pocket in the syringe that I wasn't able to remove.

The significant changes on the paint brush operations since my last post have been with the parameters that define each brush, the paint mixing operation, and the towel wiping operation. Brush movements are now controlled with parameters that reference what percent of the tip of the brush will be in contact with the work space component (i.e. palette, canvas, towel, or water). For example, the z_palette_load_percent of 0.4 (defined in the tool_profile objects) would result in 40% of the paint brush tip being pushed into the palette during a paint dip (i.e. brush loading) operation. The paint mixing operation is fairly simple, but took several tries to get right. It involves staring on one side of a paint bead group, wiping toward the center of the paint bead group, lifting up, moving to the other side, wiping in the other direction toward the center, and repeating this movement multiple times. The towel wiping operation now orients the A axis 90 deg prior to wiping on the towel and follows a linear pattern instead the previous circular pattern. 

Below is a gcode tool path visualization of the brush operations and an image of the painting that results. I have defaulted to using a simple "Hello World" painting for testing all the operations.  

At this point, the machine can mix up different paint colors and paint on canvas without supervision but I still have more to explore with which paints to mix together and in what proportion to achieve the desired paint color and finer brush control to achieve higher levels of detail in the painting. I am glad to have made it this far and look forward to the next set challenges on this project. 

Discussions