One of us got the idea of making a CNC on wheels when he saw Intel's whiteboard drawing machine at Maker Faire 2017. During the summer, he bagan working on a small Arduino-based drawing CNC at home. However, the project was small and could only draw on a half sheet of paper. To challenge this limitation, we wanted to mount the part that holds the tool on a small vehicle that can navigate the xy-plane and is only limited by the dimensions of the surface.
We started planning a design on paper with a couple sketches, but since we had poor drawing skills and struggled to convey our ideas properly, we decided to start brainstorming using CAD models on Autodesk Fusion 360.
One of our main goals was to make the device as compact and portable as possible, so we immediately decided on a multilayer design. Our first design was only two layers with four NEMA 17 stepper motors on the bottom layer and the electronics on the top layer.
After we realized that two layers would not be enough, we began to sketch ideas for a three-layer design.
After taking into account the size of the battery, we made a design in which the battery would be inserted vertically down the middle.
Since a third layer would not work with the model above due to the height of the battery, we reworked the design with the battery resting horizontally.
And we finally arrived at our final chassis design, but we faced another problem. Due to the nature of the axle of the NEMA 17 stepper motor, it did not fit with the omni-directional wheels from VEX EDR or TETRIX Robotics, so we had to modify the VEX EDR omniwheels and design a custom mount for the wheels.
With this completed, we proceeded to 3D print all our components, assemble them, and wire all the electrical components.
Built an Adobe Illustrator Vector File to G-Code converter, which reads vector lines and curves. G-Code is the standard numerical control programming language used to control CNC machines, which is more memory efficient and is easier to read compared to a long list of coordinates for every single point. The computer-generated G-Code file is stored on a microSD card, which is inserted into the BsCNC’s microSD card reader module. The Arduino Mega (programmed using C++) pulls and interprets G-Code data from the SD card reader, line by line, and sends instructions to motor controller boards. There are four stepper motor stepstick drivers to control each wheel, and one H-bridge DC motor driver to control the pen clicker.
The initial plan for storing the G-code on the machine was to write it directly to the Arduino Mega, in the form of a giant string. After trying this, I soon realized that there was an upper limit on how long the string can be, because of indexing issues. I then tried splitting the G-code up into multiple strings, then traversing through each string as the program ran. This idea worked, but it wasn’t practical because onboard memory filled up very quickly, and would slow down processing time. I underestimated the size of the G-code files we were planning on storing. The only feasible option remaining was to use an SD card reader, which at the time I had no experience programming. The reader was quite difficult to get working correctly, as it would not detect the SD card in the slot and would sometimes skip lines in the G-code.
One of the biggest short comings of the current setup and circuitry is that we can only run one axis at a time, meaning that diagonal lines or curves would be impossible to draw. We used only one micro-controller, so we could not run both axis at the same time. As a work around, we devised an algorithm to divide vertical lines and curves into a series of horizontal and vertical lines, which would allow the curves and horizontal lines to be created without running both axis at once. Instead, the BsCNC would alternate between X and Y axis drive. To draw perfect curves and horizontal lines, we are upgrading the current system to use three micro-controllers: the main main micro-controller will send data to two smaller ones, which will simultaneously run their respective axes. The main micro-controller will also run the pen clicker.
After the G-code control worked perfectly, I implemented a manual control functionality that allowed for a bluetooth connected smartphone to control the machine. The BsCNC receives instructions through a bluetooth module, which instructs it to move in a specified direction.