Thursday, April 30, 2020

Root 3 CNC - RAMPS Cooling Fan

The Root 3 plans call for a 25mm cooling fan to be installed above the RAMPS board.  Due to the amount of wiring and difficulty mounting the fan above, I opted instead for a 92mm fan to be installed next to the board.

Noctua 92mm CPU Fan


Thingiverse Customizable Fan Grill Cover


Custom-made Fan Mount


Rather than attempting to only run the fan while the spindle is operating, I chose to simplify the design and hard wire the fan directly to the DC 12V power supply.  The fan wiring connector was removed, and the red/black wires had solder terminals added and connected directly to the +/- ends of the power supply.


The fan was attached to the mount using M3 machine screws/washers/nuts.


Wednesday, April 29, 2020

Root 3 CNC - Axis Markers

In order to mark the X/Y extents of the work area, four axis markers were printed and glued directly to the y-axis supports for reference.


Saturday, April 25, 2020

Spring Cloud Gateway - Mutual Authentication


Spring Cloud Gateway is described by the vendor as:
This project provides a library for building an API Gateway on top of Spring MVC. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to them such as: security, monitoring/metrics, and resiliency.
The SCG default implementation for outbound connections is to use HTTP.   At the time of this blog post, documentation does not exist which shows an example of how to enable outbound HTTPS with mutual authentication.  This solution was made to fill that gap.

How to enable mutual authentication for a Spring Cloud Gateway instance: 

Thursday, April 23, 2020

Root 3 CNC - Power Switch

To increase safety, an emergency power switch was installed on the 12v power supply for the Arduino/RAMPS board (another will be added later for the spindle).



Wire clamps were added to the box:


110V power cable routed through box:


Removed plug from 12V Power Supply cable:
 

Wiring Diagram for the Powertec:


Connected wires to the screw terminals:


Added electrical tape to cover the screws for safety:


12V power supply connected:


Wires routed and switch connected to the cart:


Root 3 CNC - Cart

At some point a few months back, the project had finally outgrown my desktop and needed a more permanent base.  Standard 2x4 dimensional lumber was used to build a frame:



5" casters (3ARG5x1.25-SML Swivel Caster, 5" Red/Gray Polyurethane Precision Sealed Ball Bearing Wheel, with Total Lock Brake) were purchased from Caster City and installed:



The new base is very stable and the wheel locks are strong enough to keep the platform steady even while the spindle assembly is in motion:




Root 3 CNC - Y-Axis Drag Chain Guide

The y-axis drag chain has quite a few wires running through it and seems to have a tendency drift a bit along the x-axis while in motion.  To keep the drag chain honest, a small guide was printed and mounted to the base.

The part is available on Thingiverse.


The part was designed for #8 sheet metal screws:


After mounting, the drag chain no longer dances around the table...


Root 3 CNC - Dimensions

The final dimensions for my Root 3 CNC work area is:

X - 350mm
Y - 726mm (726.98)
Z - 90mm

Root 3 CNC - USB Booster

In order to move my laptop a safe distance away from sawdust clouds I purchased a long USB cable:

JSAUX Printer Cable, 15 feet

 Unfortunately attempting to use the cable resulted in the following error:


15 feet is at the end of the USB specification, and apparently was just too far for the signals to travel (either voltage drop or latency, not sure what was the problem here).  To remedy the problem, I found a USB booster and small 1 foot A-B converter cable:

Printer Cable 1 Foot, A Male to B Male


IOGEAR USB 2.0 Booster Extension Cable, 16 Feet


Using these two cables allowed the Arduino/RAMPS board to connect to the laptop at a 15 foot distance without issues.

Root 3 CNC - Endstop Software Testing

In order to test endstop functionality, the following application was used:  Pronterface.  It was originally designed for 3D Printers, but has a generic console which conveniently allows g-code commands to be sent directly to the Root 3 CNC.

The M119 command was used to test the endstops.  This g-code command reports the status of each endstop (open or triggered).  Each limit switch can be tested independently by manually pressing each switch and sending the M119 command:



 The default Marlin configuration did not meet my needs, so several firmware changes were needed:
  • enable maximum endstops at all times (not just during homing operations)
  • enable maximum endstops (defaults are only for minimum endstops)
  • set the work area limits

Research was performed online to find the relevant code, with these links being the most useful:

The changes were made by modifying the marlin files via the Arduino IDE, recompiling, and uploading the new firmware to the CNC.  The changes are shown below:


CONFIGURATION_ADV.H


CONFIGURATION.H


CONFIGURATION.H

Wednesday, April 15, 2020

Root 3 CNC - Endstop Breadboard

This is probably one of those cases where its best to start with a picture of the end state:


The endstops are fully connected and routing from the machine through a DB9.  The next task was to "unpack" the DB9 and get the signals to the RAMPS board.  The DB9 pinout is the following:


and the original schematic for an endstop is:


A smoothing capacitor was already mounted directly to the endstop (documented in previous post).  To complete the "normally closed" endstop hookup, the following steps remained:

  • unpack the signals from the DB9
  • add a pull-up resistor to the circuit
  • ground the cable shield/braid
  • route the signals to the RAMPS board 

The easiest way (for me, mileage may vary) to do this for each of the six endstops was to put together a small breadboard.  This took up a bit more space in my electronics drawer, but I liked the idea better than trying to cram everything inline around the cables (easier to maintain).  Each endstop would implement the following pattern, and the shield braids would be run to a common bus so that a single ground wire could be run to the RAMPS board:



Since the breadboad would have quite a few wires, I also designed a mount to keep the board stable.  The mount design was posted to Thingiverse.  The pictures below show a few snapshots of the construction.

3D Printed Breadboard Mount:


Mount with DB9 Breakouts Installed:



Solderable Breadboard found on Amazon:


Breadboard with pins and components installed:


DB9 interface cables:


Breadboard mounted and one inbound endstop cable installed:


All six inbound endstop cables installed:


Outbound cables for RAMPS endstop connections:


Outbound cables connect to RAMPS headers here:


Wiring strain relief designed and printed; file available on Thingiverse:


Outbound endstop wiring installed:


The completed setup (back to where this post started):


Saturday, April 4, 2020

Root 3 CNC - Creating the Endstop Panel

The default Root 3 CNC control panel has one DB9 connector slot available for endstops.  Most will use that connector for home/minimum and then program Marlin for the maximum extents of the machine.  However, since it is not uncommon to set home to the origin of the work piece and not the origin of the actual machine, I wanted to install minimum and maximum endstops for safety.

I made one attempt at soldering a DB9 connector before deciding that it was more trouble then it was worth for my purposes.  I opted instead for a DB9 breakout board found on Amazon:



Using the following specifications for a DB9:


I designed a quick panel to hold the breakout boards which can be found on Thingiverse:

Root 3 CNC Endstop Panel


The wiring of the DB9 is somewhat arbitrary, but I attempted to keep the axis wires together.  Red wire connects to limit switch NC, black wire connects to COM, and the cable shield/braid wire is a passthough so it can connect to GND on the Arduino/RAMPS board.


Final wiring seen below.  Note that heat shrink tubing was added to the cable shield wires (normally bare) in order to avoid accidental contact.