Using mostly off the shelve parts, this project aims to build a homemade CNC machine known as Valkyrie Reloaded. The entire system has a neat feature of being built using Arduino and controlled using a Python script. From the photo of the CNC machine below, it has a maximum work area of 265×255mm and the machine size is 50×35x35cm.
A 16mm MDF is the main material used in the project along with the 10×20mm aluminum corner rails and 40 bearings. The standard 3 meter M8 type threads are used for the lead screws and for fixing the rails, M6 screws are used. The motors that are usually found in almost all older printers were used as they feature 7.5 degrees per step, 24 Volts, and can stack stepper motors.
The single-sided Arduino is the brain of the machine and the ATtiny2313 is paired with a 1298 to create the motor drivers. For data communication, an old pair of SCSI flat cable is used while CAT 5 pairs of wires are used for power. The front, back, left, and right side of the machine are shown below.
The lead screw transmission is the basis of the simple design due to the 3 advantages that it brings. These are the ease of implementation, precision, and high force ratio. To ensure that there is no side load on the lead screws and allow the axes to move freely along their axis, the linear rail system is implemented. Due to simplicity, the linear rails are easier to use although it requires a V-groove bearing which comes with a V-shaped groove along the center of the other housing. This can be achieved by using a pair of normal bearings placed side by side to create a small groove in the center as shown in the images below.
The Arduino board and the motor boards comprise the electronics shown below. All 3 axes can be controlled by using just two wires through the I2C protocol which comes from the homemade controller. There are three parts that divide the software and they are the motor controller side, Arduino side, and PC side. The excellent Inkscape to draw the shapes is used on the PC side and converts them to G-code coordinates with a plug-in. To send the G-code to the Arduino over the serial link, a simple Python script is used. The software takes different commands through I2C and executes them on the motor controller side.
The machine is using a single 12V rail from the ATX power source. The driver has one power input with a voltage regulator for the logic and a separate one for the motor since the motor power is independently routed. Up to 12V can be used on the logic power input and around 40V on the motor. The power unit is shown below.