My Final Project: 3-Axis CNC Pen Plotter¶
This is a sketch of my idea:
My final project plan is a 3-axis CNC pen plotter. As an artist, I found the concept of testing the creative limits of machine for art intriguing. In addition to the machine, I will design the base to be height adjustable so that it is able to draw on surfaces that are not necessarily level and flat. There would also be a sliding panel on the upper frame so that the machine is still able to operate on flat surfaces.
Last December, I had a meeting with Dr. David Taylor on my final project. He made me aware of looking into weeks of Fab I could incorporate into the final product. So, my current approach is to customize it further by adding sound and visual aids. A section of the frame will be resin-filled and have LED lighting within to indicate when the working pen needs to be changed to a different color, and which color it needs to be changed to. The sound output device will give me alerts about the progress, whether it be the software encountering an issue or the print being completed.
Potentially, I want to try to make it connectable through Bluetooth and and add a pad or touchscreen component where I can directly control the G-Code remotely. There could also be an AI component using ChatGPT to generate G-Code.
Garrett Nelson suggested that I could add another dimension, literally, by making the machine capable of drawing on vertical surfaces, which I thought was really interesting and could challenge me.
Modeling my Final Project¶
The 3D printing machine part of the project is based on the DIY Machines tutorials. I downloaded the .stl files.
I had used Fusion360 for engineering class before, but I had never created a 3D model of a project/machine. I consulted ChatGPT with these prompts.
Based on what I learned, I went to Create → Insert Mesh and added all the .stl files I downloaded.
I also changed the material through Modify → Appearance and I changed it to matte black PLA.
Adjustable Base Design¶
Upper Plate¶
For the base part, I was inspired by one of my previous projects and Angelina Yang's Pomo-desk.
Note: My design work in this section is done in cm.
On the XY plane, I drew a 40 x 50 cm rectangle.
Then, I drew a 36 cm square within, 2 cm centered leftward. I filleted the outer rectangle to have a radius of 1.50 cm and the inner square to have 1.00.
I extruded (keyboard shortcut "e") it to have a height of 1.50 cm and filleted the other edges by 0.3 cm.
I created a sketch on the topmost plane of this object and used a center diameter circle to draw the holes the screws will go through. I was inspired by this adjustable screw's cap design, but I plan on using an M14 hex head bolt. These ChatGPT prompts helped me through the process of figuring out how to make the base adjustable and details about the hex nut/bolt.
I calculated that the center of my circles should be 1.2 cm away from a non-filleted edge.
Because I plan on using an M14, the diameter for my circles is 1.4 cm.
I extruded the circles with a negative distance and used the operation cut to make them holes.
I used Create → Thread to add the spiral thread. For a standard M14 bolt, the threat pitch is 2.0 mm.
I did the same for the other 3 holes.
Note: "s" is the keyboard shortcut that lets you search up the tool you want.
Then, I tried to change the material to wood, but I got this error when I tried to:
To fix this, I went to the sidebar and clicked on bodies, selecting the entire thing. I then dragged the material to that selected body. I chose oak wood and it worked!
I realized that for the acrylic plate to not fall down, I needed to add tabs. I made each 0.30 cm x 1.5 cm.
I extruded each 0.25 cm.
I made 8 such tabs, 2 on each inner edge of the square.
Acrylic Plate¶
Next, to make the acrylic plate. I drew and filleted the square identically as before (36 cm with R1.00).
For its thickness, I subtracted the thickness of the tab from the thickness of the plate.
1.2-0.25=0.95
I made the material clear acrylic.
Bottom Plate¶
I also changed my plan for how the way the bottom panel would be: instead of an open square identical to the upper one, it would be better for it to be filled. So I remade the wood rectangle with the same size, but without the cut-out square.
M14 Hex Nuts and Bolts Design¶
I was worried my current plan for height adjustment wouldnt work and I didn't want to start designing something that wouldn’t work.
I did some research and thought this video was a plausible approach. However, I still didn't know how to account for the bottom panel.
I consulted Chat, and it gave me a few options:
To make the top panel height adjustable using a screw, you could use one of the following methods:
-
Threaded Standoff/Spacer Method Use threaded standoffs or spacers between the top and bottom panels. Drill tapped holes (threaded) in the bottom panel. Use long screws that pass through the top panel and thread into the spacers. To adjust, swap spacers of different lengths or use an adjustable-height standoff.
-
Slot and Screw Locking Mechanism Instead of fixed holes, create vertical slots in the top panel. Use screws with nuts (or wingnuts) that can slide along the slot This allows the panel to move up and down and lock at different heights.
-
Lead Screw Mechanism Use four lead screws (one at each corner). The screws are threaded into the bottom plate, and rotating them raises or lowers the top panel. This works similarly to adjustable tables or CNC Z-axis motion.
-
Spring-Loaded Knob Adjusters Use spring-loaded hand screws that allow quick height adjustments. These can be threaded into inserts in the bottom panel.
Which Method is Best? For simple adjustability → Use standoffs or spacers. For smooth height control → Use lead screws. For quick adjustments → Use slots and screws with wingnuts.
I even had it generate an image.
Which was not helpful. I went with something like the lead screw mechanism. I just needed to think of how the bottom could be secured. I also needed to change the upper panel so that it is not threaded and slighly wider than the bolt, or else it would not be easily adjusted. (I also need to figure out how to make sure screws adjust to the same height if I do it manually).
Nut Design¶
To make a hex nut for an M14, I roughly followed this technical drawing
as well as Kevin Kennedy's Hex Nut Chamfer Tutorial.
I made a circumscribed polygon (Create → Polygon → Circumscribed Polygon) on the XY plane.
And extruded 0.909 cm.
I created a sketch on the XZ origin plane and projected a corner point using Create → Project/Include → Project. Then, I could draw out my triangluar chamfer cutout.
I used Revolve, chose that triangle as my profile, and the Z-axis as my axis.
Next, to add a hole in this body using Create → Hole, we first select the desired planar face.
Extents: all Hole type: countersink Hole tap type: tapped Threat offset: full
I actually changed it to Isometric because thats the standard for the M14 hex nut I am using.
To give the other side the chamfer as well first go to Construct → Midplane and select the top and bottom of the object.
Then go to the Create → Mirror command for solids. Select all the faces that need to be mirrored and use the midplane as mirror plane.
It worked.
However, the thread is colliding with the bottom chamfer.
This is where parametric modeling comes in clutch. I went back to the hole action and changed one of the settings to offset. I set the distance to 0.81.
It it was all good.
Bolt Design¶
The design I figured for the bolt was to have a section close to the head be smooth, so that it can slide into the hole of the wood (I wont need the base plane threaded anymore). The rest will have the thread, which means the bottom one would not move when I twist the hex nut. The top board will be able to easily slide up and down the long bolt, but because gravity, it can only go as far as the nut lets it.
I made the nut again but did not thread or mirror the chamfers. On it, I drew a circle slightly smaller than the holes of the base boards so it can slide in and won't be too tight of a fit.
I extruded it by 1.5 cm, the thickness of the bottom board.
I extruded it again by 30 cm, thinking it would be a new component and I can thread just that one. But then I remembered that I could just adjust how far the threading goes in the settings.
To resize these images, I had to add
attr_list
undermarkdown_extensions:
in mymkdocs.yml
file. Then, After the closing parenthesis I added{width=300px}
I did so by de-selecting full length and using the arrows to adjust where the threads go.
Adjustable Base Assembly¶
According to Chat, for full editability, I would save my files as .f3d and if I want a fixed 3D model (e.g., for printing or use as a reference), I should save as .stl.
I did not need editability, so I went with .stl. I opened it through Mesh → Create → Insert Mesh → select from my computer. I arragned the mesh objects the way I intended them to be assembled, like so:
The material appearances did not translate, so I added them back on.
I also added my nuts and bolts and tested the assimilation of one corner. I adjusted the materials again, to stainless steel, and checked what it would look like.
The bolt looks long, but it needs to be that way to maximize how far up the plate can go. I also assembled the rest.
And that is my finished base!
Here are the .f3d files of all my Fusion work thus far in the order I completed them:
Add here your modeling and design.
Some other section¶
This is an updated text.
Materials¶
Qty | Description | Price | Link | Notes |
---|---|---|---|---|
1 | Material one | 22.00 $ | http://amazon.com/test | Order many |
1 | Material two | 22.00 $ | http://amazon.com/test | |
1 | Material three | 22.00 $ | http://amazon.com/test | |
1 | Material five | 22.00 $ | http://amazon.com/test | |
1 | Material eight | 22.00 $ | http://amazon.com/test | |
1 | Material twelve | 22.00 $ | http://amazon.com/test | |
1 | Material eleven | 22.00 $ | http://amazon.com/test |
Useful links¶
Code Example¶
Use the three backticks to separate code.
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
Gallery¶
Video¶
From Vimeo¶
Sound Waves from George Gally (Radarboy) on Vimeo.