mechanical design, machine design¶
Assignment¶
Group assignment:
- [] Design a machine that includes mechanism + actuation + automation + application
- [] Build the mechanical parts and operate it manually
- [] Document the group project
Individual assignment:
- []Document your individual contribution
Unexpected Bonus¶
Beginning of this week was pretty fun. I hope to make it through the rest of this week.... with a smile. I really enjoyed the building and using my skills and familiarity with the parts in building.
Another bonus, I got to do some work in GIMP becuase claude wouldn't merge my photos how I wanted. Going back to these programs helps me learn more and more about them each time.
The Group Work¶
Link to our group page here
The Individual Work¶
My asset files are here.
day -1 Planning and Gathering¶
We met on a weekend to discuss what we might like to do. After we decided on the cookie decorator, we found some resources and made a plan for what we were going to try and how.
Then after Kim, Dorian, and Angela made the list of what we think we need, I asked Zack Budzichowski what we had available to use from last years projects. Then I helped sort through the parts. We had the motors, the motor controllers, the motor controller shield, pulleys and GT2 belt (which I am familiar with from our linear slides in our tech challenge robot). There were some of the rods, but they werent the right length, but we may be able to use them anyways.
Then Kim and Angela sent the list to Mr. Dubick to order our parts.
I am pretty helpful at this part since I am familiar with some of these parts from robotics. I really enjoy building, designing and problem solving.
Onshape Planning & Brainstorming¶
I brought up the Onshape model and started modifying one of the parts in CAD. I made a DXF of the plate that we didn't have, because we didn't have the metal plate that was in the kit. We don't know if we'll need it.

We did alot of brainstorming and modeling with what we had in the lab and in the onshape model that I had modified from the one we copied from the inkblot.
Motor Board Assy¶
Worked with Kim Alexander on setting up the arduino uno's and the motor drivers. Since I had done this before, I shared the resources from week 10 on motors with her and the team. We worked together to wire up the motors and get a basic code that moved each motor.
We also worked on getting all the parts that we needed. Some new orders had come in. I also found a a transformer in the lab and Mr. Dubick provided me another of the DC to power coord adapters. Then I sent the motors and the wiring with Kim and took the build parts with me. I also assembled another set of motors so that we could work collaboratively yet remotely over the weekend.
3D printing & Assembly¶
I worked on assembling the modified Ink Blot and a second set of motor drivers and motors. I added in the servo to the board. Some of the parts needed to be reprinted, so I modified them for our boards and printed them. I printed another one of the Tilty legs.

I coordinated with Dorian Fritze who was able to get us another transformer and adapter so we could run this set up together tomorrow at our weekend meeting.
Here are my assembly challenges and how I overcame them.
The acrylic was too thick - total bummer becuase its sturdier. So I printed one on the 3D printer.

So the nuts that we got from the lab were a bit thinner than what standard nuts are, so they were a bit wobly at times in the countersinks and slots that they were intended for. Alittle work with the Allen Key guided them in pretty well.

When using the eccentrics and the regular nuts. The eccentrics go in the holes with a little extra countersink for the perfectly rounded part of the nut.

The notches didnt match our board, so I just snipped them off.. but in the end, the whole thing was just a smidge too small.

I redesigned it without the buttons and wider, printed it and attached it.

I whipped up some code with claude and made the servo move to know that the set up worked, and the pins were correct.
PROMPT: give me simple movig servo code for an arduino with servo pin in pin 12 (SpinEn) . I want to be alble to move it with the serial monitor
Loading the GRBL on the Windows Machine¶
Kim has our machine working off of an apple machine. I wanted to be able to work on it over the weekend and I do not have an apple machine. So I took her code and her instructions and started to plug away at the lab with Garrett Nelson. We worked and worked at making that code fit onto the arduino that I have on this set up from the windows machine. I wonder if kims set up has a bigger chip/memory.
A few changes need to be made to make GRBL into COREXY. Kim gave me a step by step and I modified the config.h file.
THAT WAS ANNOYING AND HARD!!!!!!!!!!!!!!!!!!!
I am going to simplify here.. becuase 9 hours really should have taken 20 minutes.. I am going to list out the issues and then what actually worked.
First Issue - GBRL would say that it uploaded, but would not actually start up on UGS. Instead we would see the following:
*** Fetching device status (4 of 10)...
>>> ?
*** Fetching device status (5 of 10)...
>>> ?
*** Fetching device status (6 of 10)...
>>> ?
*** Fetching device status (7 of 10)...
>>> ?

Connection worked with the original config.h but once modified for the coreXY - it would no longer work.
After many rounds with claude, in a last desparate measure, I asked Gemini.
PROMPT: cant connect UGS when making core xy changes to GRBL file
GEMINI RESPONSE:
Connection issues in Universal G-code Sender (UGS) after modifying the config.h file for CoreXY typically stem from an incomplete firmware flash or a baud rate mismatch. When you change the source code to enable COREXY kinematics, you must re-compile and re-upload the entire library to your controller for those changes to take effect. [1, 2]
Immediate Troubleshooting Steps
- Check the Serial Monitor: Use the Arduino IDE Serial Monitor to see if you get a response from the board. Set the baud rate to 115200 (default for Grbl 0.9+). If you see "Grbl [version] ['$' for help]", the firmware is working, and the issue is with your UGS configuration.
- Verify Baud Rate in UGS: Ensure UGS is also set to 115200 baud. Even if it worked before, sometimes flashing a new build requires re-selecting the connection settings.
- Hard Reset: Send $RST=* in the serial monitor or UGS console to clear any corrupted EEPROM settings that might have occurred during the flash. [3, 4, 5, 6, 7, 8, 9]
Re-flashing Correctly for CoreXY If you edited config.h but didn't follow the specific "Grbl upload" procedure, your changes aren't actually on the board.
- Locate config.h: Ensure you have uncommented #define COREXY (typically around line 145).
- Clean Old Libraries: Delete any existing Grbl folders from your Documents/Arduino/libraries directory before re-adding your modified folder. Arduino IDE often fails to update if a library of the same name already exists.
- Upload via Example: In the Arduino IDE, go to File > Examples > Grbl > GrblUpload. This is the only sketch that properly compiles the Grbl library files (including your modified config.h) and pushes them to the board.
- Confirm Serial Port: Check your Device Manager (Windows) to ensure the board is recognized as a COM port. [1, 2, 5, 10, 11, 12, 13, 14]
Common CoreXY Errors
- Homing Conflicts: CoreXY requires specific homing cycles. If you enabled homing ($22=1) in your settings without having limit switches properly wired or configured in config.h, the machine may enter an ALARM state immediately upon connection, which sometimes blocks UGS from fetching the status.
- Cable Interference: Use a high-quality USB cable, preferably with a ferrite bead, as CoreXY setups can be more sensitive to EMI if cables are routed near stepper motors. [15, 16, 17, 18, 19]
Are you seeing any specific error messages in the UGS console (like "Fetching device status" hanging) or is the Connect button simply not responding?
[1] https://forum.arduino.cc [2] https://www.youtube.com [3] https://www.facebook.com [4] https://www.reddit.com [5] https://www.circuitist.com [6] https://forum.arduino.cc [7] https://www.reddit.com [8] https://github.com [9] https://www.reddit.com [10] https://github.com [11] https://forum.arduino.cc [12] https://inventableshardwaresupport.zendesk.com [13] https://docs.sainsmart.com [14] https://www.reddit.com [15] https://github.com [16] https://www.youtube.com [17] https://github.com [18] https://github.com [19] https://github.com
After working through most of those trouble shooting points either before this point or now.. next prompt.
PROMPT: board is not flashing correctly when we enable core xy
Gemini:
The most common reason for flashing failures after enabling COREXY is that the Arduino IDE is not actually using the file you edited. When you add Grbl as a library, the IDE copies the files into its own internal directory, and editing the original download folder does nothing. [1, 2, 3] 1. Fix the "Ghost Library" Issue [4] If you edit config.h in your Downloads folder but previously added Grbl to the Arduino IDE, the IDE will keep flashing the old "stock" version from its library folder.
- Locate the Active Library: On Windows, go to Documents\Arduino\libraries\grbl.
- Edit THIS File: Open the config.h located inside that library folder and uncomment #define COREXY there.
- Re-Flash: Restart the Arduino IDE, open File > Examples > grbl > grblUpload, and click Upload. [1, 3, 5, 6]
2. Solve Memory Overflow (Nano Users) If you are using an Arduino Nano, enabling CoreXY often makes the firmware too large to fit in the available memory. [7, 8]
- Symptom: The IDE says "Done uploading" but the board doesn't respond, or it gives a "Verification Error" during the flash.
- The Fix: You may need to flash the Arduino Uno bootloader onto your Nano to free up 1.5KB of space, or disable other features in config.h (like homing or spindle overrides) to reduce the file size. [8, 9, 10, 11]
3. Check for Required Homing Changes CoreXY requires a specific homing configuration to work. If you enabled homing ($22=1) but didn't update the homing cycle in config.h, the code may fail to compile or cause a boot-loop. [11]
- Ensure these lines in config.h match the CoreXY requirements:
-
define HOMING_CYCLE_0 (1<<X_AXIS)¶
-
define HOMING_CYCLE_1 (1<<Y_AXIS)¶
4. Direct Verification If the upload says "Done Uploading" but you still get no response in UGS or the Arduino Serial Monitor:
- Close UGS entirely.
- Open the Arduino IDE Serial Monitor.
- Set the baud rate to 115200 and "Both NL & CR".
- Press the Reset button on the Arduino. If you don't see a welcome message, the flash was unsuccessful despite what the IDE said. [6, 12, 13]
Are you seeing a "Done Uploading" message in green, or are there orange error messages at the bottom of your Arduino IDE?
[1] https://www.reddit.com [2] https://www.reddit.com [3] https://www.youtube.com [4] https://forum.arduino.cc [5] https://forum.arduino.cc [6] https://www.circuitist.com [7] https://github.com [8] https://github.com [9] https://github.com [10] https://www.youtube.com [11] https://github.com [12] https://forum.arduino.cc [13] https://www.youtube.com
AHA... #2 is something i had not tried yet.. so then i asked...
PROMPT: flash was unsuccessful despite what the IDE said. - how do i remove things to make it fit better
When you enable COREXY on a standard Arduino Nano, the firmware often exceeds the 30KB limit of the standard Nano bootloader. If the Arduino IDE says "Done Uploading" but the board is unresponsive, it typically means the program was too large and the bootloader was overwritten or corrupted during the process. [1, 2] To make the firmware fit, you must disable optional features in the config.h file before re-flashing. 1. Disable Coolant Control (Saves ~100-200 bytes) Coolant commands ($M7$, $M8$, $M9$) are rarely used on DIY CoreXY machines and are an easy way to save space. [1, 3]
- Action: Locate the line #define ENABLE_M7 and ensure it is commented out (has // in front of it).
- Advanced: You can also search for and comment out references to coolant_control.c if you are comfortable with the file structure.
2. Disable Spindle Direction and PWM Features If you are building a simple plotter or laser and don't need variable spindle speed or direction switching, you can save significant space. [4, 5]
- Action: Comment out #define VARIABLE_SPINDLE (Line ~339).
- Action: Comment out #define USE_SPINDLE_DIR_PIN.
3. Disable Other Optional Features
- Line Numbers: Ensure #define USE_LINE_NUMBERS is commented out. This frees up RAM and flash.
- Homing Cycle: If you don't have a Z-axis, ensure your homing cycle is simplified to only two axes to save a small amount of logic space. [6, 7, 8]
4. Use the "Uno" Bootloader (Recommended) [2] The best way to "make it fit" without losing features is to flash the Arduino Uno bootloader onto your Nano. The standard Nano bootloader uses 2KB, while the Uno (Optiboot) only uses 0.5KB. [2]
- Why: This frees up an extra 1.5KB, which is usually enough to fit CoreXY without deleting anything.
- How: You will need a second Arduino to act as an "ISP Programmer" to burn the new bootloader. Once done, you select "Arduino Uno" in the IDE instead of "Nano" when uploading to your board. [2, 9]
Summary of Space-Saving Edits
| Feature to Disable | Line to Comment Out in config.h | Approx Space Saved |
|---|---|---|
| Coolant Control | // #define ENABLE_M7 | 100+ bytes |
| Variable Spindle | // #define VARIABLE_SPINDLE | 200+ bytes |
| Line Numbers | // #define USE_LINE_NUMBERS | 50+ bytes |
| Uno Bootloader | N/A (Firmware change) | 1,500 bytes |
Are you using this for a laser/plotter (no Z-axis) or a 3D printer/CNC style setup? Knowing this helps me tell you exactly which lines are safe to delete.
[1] https://github.com [2] https://github.com [3] https://github.com [4] https://builds.openbuilds.com [5] https://millrightcnc.proboards.com [6] https://github.com [7] https://github.com [8] https://www.facebook.com [9] https://github.com
1 and 3 were already done, but the spindle modification.. I made that one.. and voila! I was able to connect and jog my machine. Now I focused on loading up the code that Angela made.
KICAD board or Direct Powererd REED.¶
I spent 3 hours making a KiCad board, but then had problems with milling at home. Since it was optional and team really wanted to use a REED without another switch. I ditched the miniPCB and headed back to the soldering station to put the REED switch onto the machine.

To put the reed switch direct , we could have cut into the fan wiring and then soldered at the top. I didn't want to do that becuase the wires were tiny and I dont have a back up. So instead, I pulled long wires that could get to the place where we connect to the board so that I could connect into the end of the servo and then direct to the CNC shield. I ran these wires with the fan wires so that we can hide them in the same way. I used collapsing solder tube connectors and my heat gun to add these wires in.

Key changes that needed to be made.
