Introduction: Arduino Powered Painting Robot
Have you ever wondered if a robot could make mesmerizing paintings and art? In this project I attempt to make that a reality with an Arduino Powered Painting Robot. The objective is for the robot to be able to make paintings on its own and use a reference image as a guide to replicate an artwork. I used the power of CAD and digital fabrication to create a robust chassis onto which I mounted an arm that could dip the paint brush into one of the 7 paint containers and draw on the canvas.
The robot is made using common parts such as stepper motors and servo motors and it is designed to work with any kind of paint.
Follow on to create your own Arduino Powered Painting Robot and do drop a vote for this project in the "Paint Challenge" if you enjoyed the project and decide to build your own version.
Step 1: Overview of the Design
The design of the painting robot is inspired by the structure of a Roomba cleaning robot. It consists of two major systems:
- The drive system which consists of two stepper motors attached to wheels and passive gliders. This allows the robot to move in any direction along the canvas.
- The brush system which consists of a third stepper motor which positions the brush over paint containers and a servo motor which dips the paint brush into the paint.
The robot can carry up to 7 different colors at the same time. The design was initially made on Autodesk's Fusion 360. The parts were then exported to the appropriate formats to be laser-cut or 3D printed.
The design of the chassis of the robot has been made with scalability in mind with multiple mounting points and modular parts. This allows the same chassis to be used for various other applications. In this context, the chassis is used to make wonderful pieces of art using paint.
Step 2: Materials Needed
Here is the list of all the components and parts required to make your very own Arduino Powered Painting Robot. All parts should be commonly available and easy to find in local hardware shops or online.
- Arduino Uno x 1
- Towerpro MG995 servo motor x 1
- NEMA17 Stepper motor x 3
- CNC Shield V3 x 1
- 11.1 V LiPo Battery x 1
- M4 nuts and bolts
- M3 nuts and bolts
- Wheels (7cm dia x 2)
- 3D printer filament (in case you don't own a 3D printer, there should be a 3D printer in a local workspace or the prints can be done online for quite cheap)
- Acrylic Sheets (3mm)
- Paint Brush
- 3D printer
- Laser cutter
Excluding the tools, the total cost of this project is approximately 60$.
Step 3: Digitally Fabricated Parts
Most of the parts required for this project are customized according to the requirements, that's why I decided to use the power of digitally fabricated parts. The parts were initially built on Fusion 360 and then the CAD models were used to laser-cut or 3D print the parts. The prints were made at 40% infill, 2 perimeters, 0.4mm nozzle, and a layer height of 0.1mm using PLA. Some of the parts require supports since they have a complex shape with overhangs, however, the supports are easily accessible and can be removed using some cutters. You can pick the color of your choice for the filament. The laser-cut pieces were cut out of 3mm clear acrylic.
Below you can find the complete list of parts along with the design files.
Note: From here on the parts will be referred to using the names in the following list.
3D printed parts:
- Stepper Bracket x 2
- Layer Spacer x 4
- Arm Connector x 1
- Passive Glider x 2
- Paint Pallet Holder x 2
- Paint Pallet x 2
- Bottom Panel x 1
- Top Panel x 1
- Brush Arm x 1
In total there are 13 3D printed parts and 3 laser-cut parts. The time required to manufacture all of the parts is approximately 12 hours.
Step 4: Building the Chassis and Drive System (bottom Layer)
Once all the parts are manufactured, you can begin to assemble the bottom layer of the painting robot. This layer is responsible for the drive system and also holds the electronics. Begin by mounting 2 stepper motors onto two stepper brackets using the provided screws. Next, used 8 x M4 nuts and bolts to secure the two stepper brackets onto the bottom plate. Once the steppers are mounted you can attach the two wheels to the axles of the stepper motors. You can also mount the Arduino in place using M3 nuts and bolts and some standoffs to make the Arduino easily accessible. Once the Arduino is secured, mount the CNC shield onto the Arduino. There are two holes at the front and rear of the robot. Pass the passive gliders through the holes and glue them in place. These pieces prevent the body of the robot from scraping along the surface of the canvas.
You can also mount the two rear layer spacers using M4 nuts and bolts.
Note: Don't attach the front two yet, since you would have to remove them eventually.
Step 5: Mounting the Paint Holder (top Layer)
Once the drive system is built, you can begin to assemble the top layer which holds the painting arm that moves the paintbrush and dips the brush into the various paint containers. Begin by attaching the two paint pallet holder pieces. The slot along the inside of the part aligns with the two front layer spacer pieces. The combined part is attached with two nuts and bolts to the top and bottom layers. The piece is further reinforced with four additional sets of nuts of bolts to the top panel.
The paint pallets are then attached to the bottom of the paint pallet holder pieces using two nuts and bolts for each side.
Slide the top panel into place and use two more nuts and bolts to attach the rear layer spacers to the top panel. Mount the pivoting stepper motor to the center of the top panel using the provided bolts with the axle pointing towards the top. With this, the chassis of the robot is built and we can begin to assemble the painting arm.
Step 6: Building the Painting Arm and Brush Assembly
To build the painting arm, begin by attaching the arm connector to the laser-cut brush arm using 4 nuts and bolts. Next, mount the servo motor to the other end using 4 more nuts and bolts. Make sure that the axle of the servo motor is towards the opposite end of the arm connector. Push the arm connector into the top stepper motor axle.
Use the long horn of the servo and attach the paint brush to it using rubber bands or zip ties. I would recommend using rubber bands since that gives the brush assembly some compliance which is necessary for the system to work well. Make sure that the brush is attached such that, once the horn is connected to the servo, the brush barely glides along the surface of the floor or paper.
With this, the hardware of the painting robot is complete and you can begin the wiring and programming.
Step 7: Electronics and Circuits
The electronics of this project is quite straightforward, it is explained in the following table:
- Left wheel stepper to X axis port of CNC shield
- Right wheel stepper to Y axis port of CNC shield
- Pivoting stepper to Z axis port of CNC shield
- Servo motor signal to Spindle enable pin on CNC shield
- Servo motor 5v to +5v on CNC shield
- Servo motor GND to GND on CNC shield
With this the circuit for this project is complete. The battery can be connected to the power terminals of the CNC shield with a toggle switch in series to turn on and off the robot.
Step 8: A Bit About the Theory
When it comes to positioning a point on a 2D grid, the most common and simple way to do this is to provide the cartesian coordinates of the point. This is done by specifying a tuple, generally (x, y) where x is the x coordinate or the distance between the projection of the point on the x axis to the origin and y is y coordinate of the point or the distance between the projection of the point on the y axis to the origin. In this way, any complex image or form can be described using a sequence of points, such that when you "join the dots" the image is formed. This is a convenient way of describing the position of a point with respect to an origin. However, for this project, a different system was used.
A point on a 2D grid can also be described using polar coordinates. In this method, the position of a point is described using another tuple, commonly denoted as (theta, r) where theta is the angle between the x axis and the half line that connects the origin and the point and r is the distance between the origin and the point.
The formula to convert from one to the other can be found in the attached image. It is not necessary to fully understand the formulas, although knowing them does help.
Step 9: Programming the Arduino
The program is made using an object oriented technique making the program simple to use. Begin by creating a robot object whose parameters are the widths and heights of the canvas (measure these using a ruler or a measuring tape in centimeters and replace the values in line 4 of the paintRobot.ino script). The object oriented programming techniques allows room for further developments.
You are then provided 3 simple functions:
- gotoXY takes a cartesian coordinate and moves the robot to that position. (E.g robot.gotoXY(100, 150))
- brushControl takes a boolean value: false raises the brush off the canvas while true places the brush on the canvas. (E.g robot.brushControl(true))
- pickPaint takes an integer -4, -3, -2, -1, 1, 2, 3, 4 which makes the robot dip the paint brush into the corresponding paint container. (E.g robot.pickPaint(3))
The program attached below makes the robot move to random positions and picks random colors which eventually creates a beautiful and unique piece of art. Although this can be easily changed to make the robot draw anything you feel like.
Note: Once the code is uploaded you may have to reposition the servo horn connected to the brush. When the p
Step 10: Adding the Paint
Once the hardware, electronics and programming is complete, you can finally add some paints to the individual paint containers. I would recommend diluting the paint slightly to make the painting smoother.
On the right pallet's outermost container add some plain water. The robot will use this water to clean the brush before swapping colors.
To begin a painting place the robot on the bottom left corner of the canvas making it face along the bottom edge and start the robot and sit back and watch as the piece of art slowly comes to life.
Step 11: Final Results
With the current program, the robot performs random movements on the canvas which produces unique and beautiful paintings. Although with some modifications, the robot can be made to perform specific paintings using a reference image. The current system provides a robust base to make developments on. The chassis of the robot is also designed in a modular way with multiple standardized mounting points so that the robot can easily be converted for an application of your need.
Hope you enjoyed this Instructable and it has inspired you to build your own painting robot.
If you liked the project do support it by dropping a vote in the "Paint Challenge".
Grand Prize in the