IndyMill: Difference between revisions

From Wurst-Wasser.net
Jump to navigation Jump to search
 
(23 intermediate revisions by the same user not shown)
Line 4: Line 4:
Project website: https://indystry.cc/indymill/
Project website: https://indystry.cc/indymill/


The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code>
The building volume with my current limit switch configuration is about (X * Y * Z): <code>400 * 330 * 100mm</code>


= Ordering =
= Ordering =
Line 21: Line 21:
= Building =
= Building =
TBD
TBD
= The Result =
[[File:PXL_20240425_161240178 public.jpg|666px]] [[File:PXL_20240425_161245005 public.jpg|666px]]


= Setting up [[GRBL]] =
= Setting up [[GRBL]] =
Line 143: Line 146:
$121=23.000 (Y-axis acceleration, mm/sec^2)
$121=23.000 (Y-axis acceleration, mm/sec^2)
$122=10.000 (Z-axis acceleration, mm/sec^2)
$122=10.000 (Z-axis acceleration, mm/sec^2)
$130=200.000 (X-axis maximum travel, millimeters)
$130=500.000 (X-axis maximum travel, millimeters)
$131=200.000 (Y-axis maximum travel, millimeters)
$131=500.000 (Y-axis maximum travel, millimeters)
$132=200.000 (Z-axis maximum travel, millimeters)
$132=200.000 (Z-axis maximum travel, millimeters)
ok
ok
Line 175: Line 178:
* Do:
* Do:
** TBD
** TBD
= Work with [[CAD]]- and [[CAM]]-Software =
== Creating [[GCODE]] ==
=== [[JSCut.org]] ===
{{Tipp|Tipps:
* If you're creating your own [[SVG]], make sure the pockets are "closed paths", meaning "areas", not open paths. Also use only infill, no stroke!
* Adding tabs with [[Inkscape]]:
** [[Inkscape add CNC tabs]]
}}
{{Info|1=[[JSCut]] is awesome, but has downsides:
* Can't create tabs (or won't work at the time of testing)
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results
* [[jscut]] ignores stroke and follows the actual path not the visible dimensions (Say you (using [[Inkscape]])have a square 100x100mm and stroke 10mm, then [[jscut]] will cut 5/5 to 5/95 to 95/95 to 95/5! &rarr; Design in Inkscape W/O STROKE (only fill)!
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]
}}
* Create [[SVG]] with [[Inkscape]]
* Launch https://jscut.org/
* Open [[SVG]]
* Set units correctly (in my case <tt>mm</tt>)
* Set speeds and diameters, material strength and so on...
* Select object
* Generate operation
* Preview
* Repeat operation-generation for all your objects
* Download
* Hope for the best :)
==== Creating Tabs With [[JSCut]] ====
Since this functionality seems to be broken&hellip;
cam-cpp.js is unavailable; tried the following paths:
js/cam-cpp.js
http://api.jscut.org/js/cam-cpp.js
on https://jscut.org
&hellip;I installed my own server:
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip
* unzip gh-pages.zip
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del>
noc:/srv/www/htdocs/jscut # make
cd cpp && em++ cam.cpp hspocket.cpp separateTabs.cpp vEngrave.cpp -I ../../boost_1_56_0 -std=c++11 --memory-init-file 0 -fcolor-diagnostics -Wall -Wextra -Wno-unused-function -Wno-unused-parameter -Wno-unused-variable -Wno-logical-op-parentheses -s ASSERTIONS=0 -s ALLOW_MEMORY_GROWTH=1 -s SAFE_HEAP=0 -s DISABLE_EXCEPTION_CATCHING=1 -s FORCE_ALIGNED_MEMORY=1 -s NO_EXIT_RUNTIME=1 -s EXPORTED_FUNCTIONS="['_hspocket', '_separateTabs', '_vPocket']" -o ../js/cam-cpp.js  -O3 --llvm-lto 1
/bin/sh: line 1: em++: command not found
make: *** [Makefile:63: default] Error 127
noc:/srv/www/htdocs/jscut #
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip
unzip main.zip
cd emsdk-main/
./emsdk install latest
./emsdk activate latest
Adding this to .bash_profile:
  3 PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin
  4 EMSDK=/root/emsdk-main
  5 EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node
em++: error: --memory-init-file is no longer supported
-> removed line from Makefile
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp
-> removed
THEN I GAVE UP!
=== [[LaserWeb4]] ===
[[Laserweb]] seems to be a very active project...TBD STILL TESTING
First impression: Much more powerful than jscut. For now, I prefer the simpler [[JSCut]]!
=== [[PyCAM]] ===
Still needs python 2.7 and seems to abandoned since 2019.
=== Blender CAM ===
NOT TESTED YET!
https://blendercam.com/
=== gcad3d ===
NOT TESTED YET!
https://www.gcad3d.org/
=== Other Software (yet to test) ===
* https://pycam.sourceforge.net/other-programs/
* https://github.com/linuxcnc/simple-gcode-generators
* [[GCode]]-Extension of [[Inkscape]]
=== [[krabzcam]] ===
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.
* Launch: https://mkrabset.github.io/krabzcam/index.html
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html
=== [[FreeCAD]] ===
See also
* https://www.youtube.com/watch?v=XRNnWAUoXrk
* https://wiki.freecad.org/Path_Job
Do:
* Make sure you played with [[Inkscape]]-[[SVG]]s and [[jsCut]] enough to understand the basics, otherwise handling (the much more complex [[FreeCAD]]) will be very frustrating…
* Launch [[FreeCAD]]
* Make sure you have already created proper solids (see above)!
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|
1. Select solid
2. Choose {{key press|Path}}-Workbench
3. Create Job|400px]]
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]
* Set {{key press|Output}} to <code>grbl</code>
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}
* Remove default tool
* Choose Tool, set # to 1
* Set H/V speed
* TBD TBD TBD
==== Converting [[STL]] to solids in [[FreeCAD]] ====
See also: https://forum.freecad.org/viewtopic.php?t=14136
# Open the [[STL]] file
# Select object
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}
# Select new object
# {{key press|Part}} &rarr; {{key press|Converte to solid}}


= Lessons Learned =
= Lessons Learned =
Line 323: Line 195:
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.
** Hard limits comes in very handy if your testing your limit switches!
** Hard limits comes in very handy if your testing your limit switches!
 
=== [[CAD and CAM Software]] ===
== Cutting Speeds ==
There is a lot of different [[CAD]] and [[CAM]] software: [[CAD and CAM Software]]
{{WIP|This is very much likely to change - I'm still learning every day!}}
=== [[Cutting speeds]] ===
 
See [[Cutting speeds]].
I used a 500W china spindle for my tests.
 
=== Plexiglas (PMMA) ===
Melts at 160°C (even earlier than your printer's PLA or PETG).
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]
These are the main challenges:
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible
 
{| border="1" class="wikitable sortable"
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes
|-
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!
|-
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.
|-
|}
 
==== Engraving ====
0.5mm deep TBD TBD
 
=== Poplar plywood (Pappelsperrholz) ===
{| border="1" class="wikitable sortable"
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes
|-
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!
|-
|}
 
=== Pine plywood (Kiefersperrholz) ===
{| border="1" class="wikitable sortable"
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes
|-
| single-flute || 2.0 || 400 || 2.0 ||  100|| 10,000 || none || Works out fine, more speed should be possible.
|-
|}
 
=== OSB (Grobspanplatten) ===
{| border="1" class="wikitable sortable"
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes
|-
| single-flute || 3.175 || 400 || 0.75 || 80  || 10,000 || none || Works out fine, more speed should be possible.
|-
| single-flute || 3.175 || 400 || 1.00 || 80  || 10,000 || none || TBD
|-
|}


== Dust Shoe ==
== Dust Shoe ==
Line 382: Line 206:
* Transparent plate: https://www.thingiverse.com/thing:6512697
* Transparent plate: https://www.thingiverse.com/thing:6512697
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052
* Dust shoe: https://www.thingiverse.com/thing:6547108


I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).
Line 394: Line 219:
* Insert it into the rail of the shoe
* Insert it into the rail of the shoe
* Cut 10mm wide segments
* Cut 10mm wide segments
 
* Made my own dust shoe: https://www.thingiverse.com/thing:6547108
TBD
[[File:Dust Shoe My Own.jpg|400px]]
- IMAGE
- Link zu meinem Design


= Troubleshooting =
= Troubleshooting =

Latest revision as of 11:05, 26 April 2024

About

Somewhere in 2022 I decided I wanted a CNC machine. After lengthy consideration the many options I decided to build an IndyMill.

Project website: https://indystry.cc/indymill/

The building volume with my current limit switch configuration is about (X * Y * Z): 400 * 330 * 100mm

Ordering

I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.

Ordering in asia came with disadvantages:

  • long shipping time
  • customs fees
  • damaged goods (f.e. warped parts)
  • magnetic parts were rejected from logistics provider and returned to sender


I ordered also from Nikodem ( https://indystry.cc/store/ ), the prices in his shop are absolutely fair and I'm more than happy with the quality! Also I'm very happy to support him!

Building

TBD

The Result

PXL 20240425 161240178 public.jpg PXL 20240425 161245005 public.jpg

Setting up GRBL

🛑 This might be a bad idea, since GRBL seems to be abandoned since 2019…


Installing GRBL

  1. Install Arduino IDE 1.x (not 2.x!)
  2. Setup board type
  3. Setup serial/USB-connection (you might want to add your user to group dialout to allow accessing /dev/ttyUSB0…)
  4. Download as .zip: https://github.com/gnea/grbl
  5. Extract zip
  6. Open Arduino IDE

SketchLibrary Import as .ZIP → select grbl-master/grbl

FileExamplesgrblgrblUpload

Testing Connection

  1. Download CNCjs-AppImage: https://cnc.js.org/
  2. Launch it, set Connection parameters (device / speed)
  3. Enter something like this:
  • Get current settings with

$$

CNCjs 1.10.3 [Grbl]
Connected to /dev/ttyUSB0 with a baud rate of 115200
Grbl 1.1h ['$' for help]
client> $$
$0=10 (Step pulse time, microseconds)
$1=25 (Step idle delay, milliseconds)
$2=0 (Step pulse invert, mask)
$3=0 (Step direction invert, mask)
$4=0 (Invert step enable pin, boolean)
$5=0 (Invert limit pins, boolean)
[…]
$132=200.000 (Z-axis maximum travel, millimeters)
ok

GRBL-Settings

Setting step width

  • Change settings as described in Nikodem's manual for stepwidth:
$1=255
ok
$100=640
ok
$101=640
ok
$102=400
ok
$110=1000
ok
$111=1000
ok
$112=1000
ok
$120=80
ok
$121=80
ok
$122=80
ok

I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.

$100=320
$101=320
$102=400

Hint: Make sure you reset the machine after changing values, my GRBL acted strangely when not.

Setting directions

My settings (preliminary)

CNCjs 1.10.3 [Grbl]
Connected to /dev/ttyACM0 with a baud rate of 115200
Grbl 1.1h ['$' for help]
client> $$
[MSG:'$H'|'$X' to unlock]
$0=10 (Step pulse time, microseconds)
$1=25 (Step idle delay, milliseconds)
$2=0 (Step pulse invert, mask)
$3=5 (Step direction invert, mask)
$4=0 (Invert step enable pin, boolean)
$5=1 (Invert limit pins, boolean)
$6=0 (Invert probe pin, boolean)
$10=1 (Status report options, mask)
$11=0.010 (Junction deviation, millimeters)
$12=0.002 (Arc tolerance, millimeters)
$13=0 (Report in inches, boolean)
$20=0 (Soft limits enable, boolean)
$21=0 (Hard limits enable, boolean)
$22=1 (Homing cycle enable, boolean)
$23=0 (Homing direction invert, mask)
$24=25.000 (Homing locate feed rate, mm/min)
$25=500.000 (Homing search seek rate, mm/min)
$26=250 (Homing switch debounce delay, milliseconds)
$27=2000.000 (Homing switch pull-off distance, millimeters)
$30=1000 (Maximum spindle speed, RPM)
$31=0 (Minimum spindle speed, RPM)
$32=0 (Laser-mode enable, boolean)
$100=320.000 (X-axis travel resolution, step/mm)
$101=320.000 (Y-axis travel resolution, step/mm)
$102=400.000 (Z-axis travel resolution, step/mm)
$110=500.000 (X-axis maximum rate, mm/min)
$111=500.000 (Y-axis maximum rate, mm/min)
$112=500.000 (Z-axis maximum rate, mm/min)
$120=23.000 (X-axis acceleration, mm/sec^2)
$121=23.000 (Y-axis acceleration, mm/sec^2)
$122=10.000 (Z-axis acceleration, mm/sec^2)
$130=500.000 (X-axis maximum travel, millimeters)
$131=500.000 (Y-axis maximum travel, millimeters)
$132=200.000 (Z-axis maximum travel, millimeters)
ok
>

Enabling Limit-Switches

Testing

Try this:

$H

Hold/Start-Button

See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419

Picture TBD

Z-Axis-Probe

Lessons Learned

General

  • Origin is in front-left corner, increasing up (Z), right (X) and back (Y)
  • Origin of SVG-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)
  • Double-Check all settings before first use (most importantly step width, end switches)
  • Don't think it's as easy as 3D-Printing, where the slicer will do all the work for you!
  • You have to make decisions while creating the GCODE or even the design:
    • Which pockets should be done first?
    • Which pockets should be done last?
    • Will any operation make your part move or break?
    • Which speed is best?
    • What kind of operation do you need? Pocket? Engrave?
    • Which milling bits will you use?
  • If you don't use hard limits ($21=1), then GRBL will jog happily ahead, even if the endswitch has opened.
    • At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.
    • Hard limits comes in very handy if your testing your limit switches!

CAD and CAM Software

There is a lot of different CAD and CAM software: CAD and CAM Software

Cutting speeds

See Cutting speeds.

Dust Shoe

Cutting makes a lot of dirt…

I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:

I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).

This is how it looks with a normal brush:

PXL 20240302 121824163 small.jpg

This is how I made the PETG "brush":

Dust Shoe My Own.jpg

Troubleshooting

10mm are not 10mm

Check $100, $101, $102, your driver's micro-step-settings and your ballscrews.

CNCjs-AppImage won't run on Lenovo T60

The T60 is kinda 32bit, that might be the catch.

Try installing with npm: https://www.npmjs.com/package/cncjs

Run it:

heiko@T60-1951-debian:~$ cncjs
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency
(Use node --trace-warnings ... to show where the warning was created)
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000

Use it:

http://127.0.1.1:8000

Cut freezes

The Problem

The cutting, or, to be more precise, the motion stops. The grbl console in CNCjs shows some garbled messages, mostly one "o" or "k". Status is then idle, and can be continued by pausing and restarting the cut. When using UGS, it shows a message about a stream (serial connection) can't be established. The problem is not 100% reproducible - sometimes the machine runs flawless for 15 minutes (my test cut), and sometimes it stalls every 10 seconds.

The Analysis

  • Similar problems from the net:
  • Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)
  • Disable spindle
  • Disconnect limit-switches (and turn $5 off accordingly (set to 0 if using normally-closed (as you should be))
  • Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?
  • Disable steppers (shutting off power supply)
  • Disable WiFi
  • Try another, short, shielded USB-cable
  • Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil
  • Unplugging the arduino power adaptor seems to help a little
  • Use another computer
    • Lenovo M72e: no luck
    • Lenovo T60: no luck
    • Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station → seems to work most of time)

I think it's safe to say, that the Arduino UNO (please note, that mine is a cheap-8€-knock-off from china) has a badly designed serial interface with shielding/grounding issues.

The Workaround

None of the above brought up a viable solution.

This is what works for me as a workaround:

  • Keep humidity low and temperature on a comfy level
  • Unplug the arduino power supply, let the PC power the UNO
  • Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)

The Solution

Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.

Footer

  • Links
    • TBD
  • Footnotes: