https://www.wurst-wasser.net//wiki/api.php?action=feedcontributions&user=Heiko&feedformat=atomWurst-Wasser.net - User contributions [en]2024-03-28T12:16:33ZUser contributionsMediaWiki 1.39.3https://www.wurst-wasser.net//wiki/index.php?title=Migration_to_Linux:_Transferring_Music_and_Audiobooks&diff=7802Migration to Linux: Transferring Music and Audiobooks2024-03-24T19:21:28Z<p>Heiko: </p>
<hr />
<div>You are here: /[[Migrating from macOS to Linux]]/{{PAGENAME}}<br />
----<br />
Transferring audiobooks to internal storage:<br />
* With Nextcloud<br />
*# Go to settings, make sure you choose <code>/data/user/0/com.nextcloud.client/files</code><ref>https://help.nextcloud.com/t/storage-path-explained/62784</ref> as this will allow you to open the files in other Apps<br />
*# Use the kebap-menu for <code>Download</code> (Sync)<br />
*# Use <code>Export</code> (This will copy it to Internal Storage/Download)<br />
*# Use the <code>Files</code>-App to move it to Internal Storage/Audiobooks (or whatever folder you use as data root in <tt>Smart Audiobook Player</tt>)<br />
*# <del>If it's <code>.m4b</code>, rename it to <code>.mp3</code> or <code>.m4a</code> - it will then show up in Smart Audiobook Player</del><br />
*: Hint: If it's a whole folder of mp3s, do zip them. Extracting does not need a special app, Android will do that for you if you tap on files…<br />
* If you're near your PC…<br />
** …you can connect it using USB and mount your Phone like mass storage. Make sure, you enable File Access/AndroidCar in your on phone's USB preferences (not reliably working)<br />
** …use <tt>KDE Connect</tt> to transfer files<br />
<br />
Transferring audiobooks to internal storage:<br />
* As above, but to <code>Internal Storage/Music/</code> :-)<br />
<br />
[[Category:Linux]]<br />
[[Category:Mac OS X]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=Migration_to_Linux:_Transferring_Music_and_Audiobooks&diff=7801Migration to Linux: Transferring Music and Audiobooks2024-03-24T19:20:58Z<p>Heiko: </p>
<hr />
<div>You are here: /[[Migrating from macOS to Linux]]/{{PAGENAME}}<br />
----<br />
Transferring audiobooks to internal storage:<br />
* With Nextcloud<br />
*# Go to settings, make sure you choose <code>/data/user/0/com.nextcloud.client/files</code><ref>https://help.nextcloud.com/t/storage-path-explained/62784</ref> as this will allow you to open the files in other Apps<br />
*# Use the kebap-menu for <code>Download</code> (Sync)<br />
*# Use <code>Export</code> (This will copy it to Internal Storage/Download)<br />
*# Use the <code>Files</code>-App to move it to Internal Storage/Audiobooks (or whatever folder you use as data root in <tt>Smart Audiobook Player</tt>)<br />
*# <del>If it's <code>.m4b</code>, rename it to <code>.mp3</code> or <code>.m4a</code> - it will then show up in Smart Audiobook Player</del><br />
*: Hint: If it's a whole folder of mp3s, do zip them. Extracting does not need a special app, Android will do that for you if you tap on files…<br />
* If you're near your PC…<br />
** …you can connect it using USB and mount your Phone like mass storage. Make sure, you enable File Access/AndroidCar in your on phone's USB preferences (not reliably working)<br />
** …use <tt>KDE Connect</tt> to transfer files<br />
<br />
Transferring audiobooks to internal storage:<br />
* As above, but to Internal Storage/Music :-)<br />
<br />
[[Category:Linux]]<br />
[[Category:Mac OS X]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=Migration_to_Linux:_Transferring_Music_and_Audiobooks&diff=7800Migration to Linux: Transferring Music and Audiobooks2024-03-24T19:19:53Z<p>Heiko: Created page with "You are here: /Migrating from macOS to Linux/{{PAGENAME}} ---- Transferring audiobooks to internal storage: * With Nextcloud *# Go to settings, make sure you choose <code>/data/user/0/com.nextcloud.client/files</code><ref>https://help.nextcloud.com/t/storage-path-explained/62784</ref> as this will allow you to open the files in other Apps *# Use the kebap-menu for <code>Download</code> (Sync) *# Use <code>Export</code> (This will copy it to Internal Storage/Download)..."</p>
<hr />
<div>You are here: /[[Migrating from macOS to Linux]]/{{PAGENAME}}<br />
----<br />
Transferring audiobooks to internal storage:<br />
* With Nextcloud<br />
*# Go to settings, make sure you choose <code>/data/user/0/com.nextcloud.client/files</code><ref>https://help.nextcloud.com/t/storage-path-explained/62784</ref> as this will allow you to open the files in other Apps<br />
*# Use the kebap-menu for <code>Download</code> (Sync)<br />
*# Use <code>Export</code> (This will copy it to Internal Storage/Download)<br />
*# Use the <code>Files</code>-App to move it to Internal Storage/Audiobooks (or whatever folder you use as data root in <tt>Smart Audiobook Player</tt>)<br />
*# <del>If it's <code>.m4b</code>, rename it to <code>.mp3</code> or <code>.m4a</code> - it will then show up in Smart Audiobook Player</del><br />
*: Hint: If it's a whole folder of mp3s, do zip them. Extracting does not need a special app, Android will do that for you if you tap on files…<br />
* If you're near your PC, you can mount your Phone like mass storage. Make sure, you enable File Access/AndroidCar in your on phone's USB preferences<br />
<br />
<br />
Transferring audiobooks to internal storage:<br />
* As above, but to Internal Storage/Music :-)<br />
<br />
[[Category:Linux]]<br />
[[Category:Mac OS X]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=Migrating_from_macOS_to_Linux&diff=7799Migrating from macOS to Linux2024-03-24T19:18:10Z<p>Heiko: </p>
<hr />
<div>This is about my journey from [[macOS]] to [[Linux]].<br />
<br />
In 2023 I decided to switch my client from [[macOS]] to [[Linux]], see here for more:<br />
* [[Migration to Linux: The Decision]]<br />
* [[Migration to Linux: Migration Plan]]<br />
* [[Migration to Linux: Music]]<br />
* [[Migration to Linux: Transferring Music and Audiobooks]]<br />
* [[Migration to Linux: iPod]]<br />
* [[Migration to Linux: iPhone]]<br />
* [[Migration to Linux: Photos]]<br />
* [[Migration to Linux: Backup]]<br />
* [[Migration to Linux: Mail]]<br />
* [[Migration to Linux: Printer]]<br />
* [[Migration to Linux: Instant Messenger]]<br />
* [[Migration to Linux: VLC & H.264]]<br />
* [[Migration to Linux: Handbrake and libdvdcss]]<br />
* [[Migration to Linux: Samba server on OpenSUSE]]<br />
* [[Migration to Linux: Samba: Permission denied]]<br />
* [[Migration to Linux: Samba: Sharing removable media]]<br />
* [[Migration to Linux: VMs]]<br />
* [[Migration to Linux: VMs: Known issues]]<br />
* [[Migration to Linux: VMs: Migrating from VMWare Fusion]]<br />
* [[Migration to Linux: The proper CTRL-Key]]<br />
* [[Migration to Linux: Remote Management]]<br />
<br />
* Things to work on:<br />
** Make use of the built-in <tt>Goodix FingerPrint Device</tt>: https://wiki.archlinux.org/title/Fprint<br />
<br />
[[Category:Mac OS X]]<br />
[[Category:Linux]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=Migration_to_Linux:_iPhone&diff=7798Migration to Linux: iPhone2024-03-24T19:17:13Z<p>Heiko: /* Apps that caused me headaches */</p>
<hr />
<div>You are here: /[[Migrating from macOS to Linux]]/{{PAGENAME}}<br />
----<br />
<br />
= Why? =<br />
My iPhone 7 is now (Dec. 2023) several years old, battery is bad, updates won't be available for much longer, and the display size is no longer compatible with my 48 years old eyes…<br />
<br />
= How? =<br />
I purchased a Google Pixel 8 and I tried to migrate all the apps and services to the new device…<br />
* Automatic Transfer of Apps and Data with USB adapter is, besides of copied music, rubbish<br />
<br />
== Apps, that are identically available and working just fine ==<br />
* Floccus<br />
* Home Assistant<br />
* Signal<br />
* WhatsApp<br />
* Facebook<br />
* Instagram<br />
* Ingress<br />
* Pokemon Go<br />
* Amazon<br />
* eBay<br />
* Outlook & O365 relatives<br />
* …<br />
In general, you can assume commercial apps are just fine (somehow sad).<br />
<br />
== Apps, that needed to be replaced ==<br />
* BookPlayer &rarr; Smart AudioBook Player (Note: If Audiobooks from internal storage don't show up - rename <code>m4b</code> to <code>m4a</code>…)<br />
* FreeOTP &rarr; Google Authenticator<br />
* Music…<br />
** &rarr; VLC<br />
** &rarr; <br />
** &rarr; <br />
** &rarr; <br />
** &rarr; <br />
* iWriter Pro…<br />
** &rarr; Nextcloud App (if in editing mode, checking of todos works (Android)..why doesn't that in read-mode? THAT would be nice!)<br />
** &rarr; Nextcloud Notes (actually not very good - is that an official app?)<br />
** &rarr; Simple Markdown (yeah...no)<br />
* Strongbox &rarr; KeePassDX<br />
* &rarr;<br />
* &rarr;<br />
* &rarr;<br />
<br />
== Apps that caused me headaches ==<br />
* NextCloud App…<br />
** …was syncing very slow. Maybe because of this:<br />
**: <code>"{"reqId":"a2Itxu5TKuo32QDKfL5h","level":1,"time":"2023-12-03T08:58:08+00:00","remoteAddr":"2003:ed:f07:f900:b102:5bd3:1a45:ad88","user":"--","app":"no app in context","method":"POST","url":"/nextcloud/index.php/login","message":"IP address throttled because it reached the attempts limit in the last 30 minutes [action: login, delay: 400, ip: 2003:ed:f07:f900:b102:5bd3:1a45:ad88]","userAgent":"Mozilla/5.0 (Linux; Android 14; Pixel 8 Build/UD1A.231105.004; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/119.0.6045.164 Mobile Safari/537.36","version":"25.0.13.2","data":[],"id":"656c444b622c3"}"</code><br />
**: Admin --> Security --> Brute-force IP whitelist<ref>https://help.nextcloud.com/t/how-can-i-unblock-an-ip-blocked-through-brute-force-detection/5731/6</ref><br />
**: <code>sudo -u www-data php occ security:bruteforce:reset 2003:ed:f07:f900:b102:5bd3:1a45:ad88</code><br />
**:Generally: Wait for Download/Sync. It takes a while and there is no progress shown, but it will work in the end<br />
<br />
= New Apps =<br />
* KDE Connect<br />
<br />
= Footer =<br />
[[Category:Linux]]<br />
[[Category:Mac OS X]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=CAD_and_CAM_Software&diff=7797CAD and CAM Software2024-03-24T19:15:12Z<p>Heiko: /* LaserWeb4 */</p>
<hr />
<div>= Designing your product =<br />
== [[Inkscape]] ==<br />
In the 3D-world I prefer the simple [[OpenSCAD]] and in 2D it's the also fairly simple [[Inkscape]] which is free ''and'' awesome, too! ;)<br />
<br />
* Basic usage is pretty easy, just try it. If in doubt, there's plenty of manuals and tutorials online<br />
* [[Inkscape add CNC tabs]]<br />
<br />
<br />
= Creating [[GCODE]] =<br />
== Overview ==<br />
{|class="wikitable sortable"<br />
! Tool !! Still maintained !! Ease of use !! Functionality !! Comment<br />
|-<br />
| [[JSCut.org]] || no || ***** || ***-- || Missing/broken tabs operation, otherwise great, especially for newbies!<br />
|-<br />
| [[LaserWeb4]] || yes || ***** || ***** || Similar zu [[JSCut]], can do tabs (add them as path to/as svg and then to the tabs of the operation), AppImage/Binary for the popular systems.<br />
|-<br />
|}<br />
<br />
== [[JSCut.org]] ==<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
=== Creating Tabs With [[JSCut]] ===<br />
This is how it should work: https://www.youtube.com/watch?v=lwCatZ6q2Vw<br />
<br />
Unfortunately this functionality seems to be broken on [http://jscut.org]&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
Ooookay...<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
unzip main.zip<br />
cd emsdk-main/<br />
./emsdk install latest<br />
./emsdk activate latest<br />
Adding this to .bash_profile:<br />
PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
EMSDK=/root/emsdk-main<br />
EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
Which lead to...<br />
em++: error: --memory-init-file is no longer supported<br />
Then I removed the line from Makefile<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
Removed it, too.<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
Which lead to...<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
tar xzf boost_1_84_0.tar.gz <br />
mv cpp/boost ../boost_1_56_0<br />
THEN I IT COMPILED! UNBELIEVABLE! And no errors in UI!<br />
<br />
But the created gcode seems to be b0rken, so this plan is out of the window.<br />
<br />
It's 10 years old and its over. Whats the successor? ([[LaserWeb4]])<br />
<br />
== [[LaserWeb4]] ==<br />
[[Laserweb]] seems to be a very active project...<br/><br />
[[File:lasweb tabs clampksnip_2024-03-24_14-29-17.png|400px]]<br />
* First impression<br />
** Much more powerful than [[jscut]]<br />
** [[JSCut]] does honor visibility flags of layers and paths. [[LaserWeb]] doesn't<br />
** I like the material/tool library<br />
** It can create tabs the way [[JSCut]] does/did/should (converting from drawn paths)<br />
** Great visualization of the cutting path<br />
<br />
This shows the basic usage: https://www.youtube.com/watch?v=UCTDbdJotHY<br />
<br />
== [[PyCAM]] ==<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
== Blender CAM ==<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
== gcad3d ==<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
== Other Software (yet to test) ==<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
== [[krabzcam]] ==<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
== [[FreeCAD]] ==<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
=== Converting [[STL]] to solids in [[FreeCAD]] ===<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Sending [[GCode]] =<br />
What works fine for me:<br />
* [[cncjs]]<br />
* [[UGS]] (on my old T60 w/o visualization, might be an issue with the old machine)<br />
* not tested yet: [[LaserWeb]]<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=Migration_to_Linux:_iPhone&diff=7796Migration to Linux: iPhone2024-03-24T19:13:10Z<p>Heiko: /* Apps that caused me headaches */</p>
<hr />
<div>You are here: /[[Migrating from macOS to Linux]]/{{PAGENAME}}<br />
----<br />
<br />
= Why? =<br />
My iPhone 7 is now (Dec. 2023) several years old, battery is bad, updates won't be available for much longer, and the display size is no longer compatible with my 48 years old eyes…<br />
<br />
= How? =<br />
I purchased a Google Pixel 8 and I tried to migrate all the apps and services to the new device…<br />
* Automatic Transfer of Apps and Data with USB adapter is, besides of copied music, rubbish<br />
<br />
== Apps, that are identically available and working just fine ==<br />
* Floccus<br />
* Home Assistant<br />
* Signal<br />
* WhatsApp<br />
* Facebook<br />
* Instagram<br />
* Ingress<br />
* Pokemon Go<br />
* Amazon<br />
* eBay<br />
* Outlook & O365 relatives<br />
* …<br />
In general, you can assume commercial apps are just fine (somehow sad).<br />
<br />
== Apps, that needed to be replaced ==<br />
* BookPlayer &rarr; Smart AudioBook Player (Note: If Audiobooks from internal storage don't show up - rename <code>m4b</code> to <code>m4a</code>…)<br />
* FreeOTP &rarr; Google Authenticator<br />
* Music…<br />
** &rarr; VLC<br />
** &rarr; <br />
** &rarr; <br />
** &rarr; <br />
** &rarr; <br />
* iWriter Pro…<br />
** &rarr; Nextcloud App (if in editing mode, checking of todos works (Android)..why doesn't that in read-mode? THAT would be nice!)<br />
** &rarr; Nextcloud Notes (actually not very good - is that an official app?)<br />
** &rarr; Simple Markdown (yeah...no)<br />
* Strongbox &rarr; KeePassDX<br />
* &rarr;<br />
* &rarr;<br />
* &rarr;<br />
<br />
== Apps that caused me headaches ==<br />
* NextCloud App…<br />
** …was syncing very slow. Maybe because of this:<br />
**: <code>"{"reqId":"a2Itxu5TKuo32QDKfL5h","level":1,"time":"2023-12-03T08:58:08+00:00","remoteAddr":"2003:ed:f07:f900:b102:5bd3:1a45:ad88","user":"--","app":"no app in context","method":"POST","url":"/nextcloud/index.php/login","message":"IP address throttled because it reached the attempts limit in the last 30 minutes [action: login, delay: 400, ip: 2003:ed:f07:f900:b102:5bd3:1a45:ad88]","userAgent":"Mozilla/5.0 (Linux; Android 14; Pixel 8 Build/UD1A.231105.004; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/119.0.6045.164 Mobile Safari/537.36","version":"25.0.13.2","data":[],"id":"656c444b622c3"}"</code><br />
**: Admin --> Security --> Brute-force IP whitelist<ref>https://help.nextcloud.com/t/how-can-i-unblock-an-ip-blocked-through-brute-force-detection/5731/6</ref><br />
**: <code>sudo -u www-data php occ security:bruteforce:reset 2003:ed:f07:f900:b102:5bd3:1a45:ad88</code><br />
**:Generally: Wait for Download/Sync. It takes a while and there is no progress shown, but it will work in the end<br />
* Transferring music and audiobooks<br />
** …how to transfer audiobooks to internal storage<br />
*** With Nextcloud<br />
***# Go to settings, make sure you choose <code>/data/user/0/com.nextcloud.client/files</code><ref>https://help.nextcloud.com/t/storage-path-explained/62784</ref> as this will allow you to open the files in other Apps<br />
***# Use the kebap-menu for <code>Download</code> (Sync)<br />
***# Use <code>Export</code> (This will copy it to Internal Storage/Download)<br />
***# Use the <code>Files</code>-App to move it to Internal Storage/Audiobooks (or whatever folder you use as data root in <tt>Smart Audiobook Player</tt>)<br />
***# <del>If it's <code>.m4b</code>, rename it to <code>.mp3</code> or <code>.m4a</code> - it will then show up in Smart Audiobook Player</del><br />
***: Hint: If it's a whole folder of mp3s, do zip them. Extracting does not need a special app, Android will do that for you if you tap on files…<br />
*** If you're near your PC, you can mount your Phone like mass storage. Make sure, you enable File Access/AndroidCar in your on phone's USB preferences<br />
<br />
= New Apps =<br />
* KDE Connect<br />
<br />
= Footer =<br />
[[Category:Linux]]<br />
[[Category:Mac OS X]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=CAD_and_CAM_Software&diff=7795CAD and CAM Software2024-03-24T17:29:49Z<p>Heiko: /* LaserWeb4 */</p>
<hr />
<div>= Designing your product =<br />
== [[Inkscape]] ==<br />
In the 3D-world I prefer the simple [[OpenSCAD]] and in 2D it's the also fairly simple [[Inkscape]] which is free ''and'' awesome, too! ;)<br />
<br />
* Basic usage is pretty easy, just try it. If in doubt, there's plenty of manuals and tutorials online<br />
* [[Inkscape add CNC tabs]]<br />
<br />
<br />
= Creating [[GCODE]] =<br />
== Overview ==<br />
{|class="wikitable sortable"<br />
! Tool !! Still maintained !! Ease of use !! Functionality !! Comment<br />
|-<br />
| [[JSCut.org]] || no || ***** || ***-- || Missing/broken tabs operation, otherwise great, especially for newbies!<br />
|-<br />
| [[LaserWeb4]] || yes || ***** || ***** || Similar zu [[JSCut]], can do tabs (add them as path to/as svg and then to the tabs of the operation), AppImage/Binary for the popular systems.<br />
|-<br />
|}<br />
<br />
== [[JSCut.org]] ==<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
=== Creating Tabs With [[JSCut]] ===<br />
This is how it should work: https://www.youtube.com/watch?v=lwCatZ6q2Vw<br />
<br />
Unfortunately this functionality seems to be broken on [http://jscut.org]&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
Ooookay...<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
unzip main.zip<br />
cd emsdk-main/<br />
./emsdk install latest<br />
./emsdk activate latest<br />
Adding this to .bash_profile:<br />
PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
EMSDK=/root/emsdk-main<br />
EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
Which lead to...<br />
em++: error: --memory-init-file is no longer supported<br />
Then I removed the line from Makefile<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
Removed it, too.<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
Which lead to...<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
tar xzf boost_1_84_0.tar.gz <br />
mv cpp/boost ../boost_1_56_0<br />
THEN I IT COMPILED! UNBELIEVABLE! And no errors in UI!<br />
<br />
But the created gcode seems to be b0rken, so this plan is out of the window.<br />
<br />
It's 10 years old and its over. Whats the successor? ([[LaserWeb4]])<br />
<br />
== [[LaserWeb4]] ==<br />
[[Laserweb]] seems to be a very active project...<br/><br />
[[File:lasweb tabs clampksnip_2024-03-24_14-29-17.png|400px]]<br />
* First impression<br />
** Much more powerful than [[jscut]]<br />
** [[JSCut]] does honor visibility flags of layers and paths. [[LaserWeb]] doesn't<br />
** I like the material/tool library<br />
** It can create tabs the way [[JSCut]] does/did/should (converting from drawn paths)<br />
<br />
This shows the basic usage: https://www.youtube.com/watch?v=UCTDbdJotHY<br />
<br />
== [[PyCAM]] ==<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
== Blender CAM ==<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
== gcad3d ==<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
== Other Software (yet to test) ==<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
== [[krabzcam]] ==<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
== [[FreeCAD]] ==<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
=== Converting [[STL]] to solids in [[FreeCAD]] ===<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Sending [[GCode]] =<br />
What works fine for me:<br />
* [[cncjs]]<br />
* [[UGS]] (on my old T60 w/o visualization, might be an issue with the old machine)<br />
* not tested yet: [[LaserWeb]]<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=Cutting_speeds&diff=7794Cutting speeds2024-03-24T14:43:04Z<p>Heiko: /* 12mm OSB, 3.175 single flute */</p>
<hr />
<div>{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
= Plexiglas (PMMA) =<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
= Engraving =<br />
0.5mm deep TBD TBD<br />
<br />
= Poplar plywood (Pappelsperrholz) =<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
= Pine plywood (Kiefersperrholz) =<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
= OSB (Grobspanplatten) =<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 500 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 555 || 1.00 || 127 || 10,000 || none || Works out fine, more speed or attack should be possible.<br />
|-<br />
| single-flute || 3.175 || 555 || 2.00 || 127 || 10,000 || none || Works out fine, more speed or attack should be possible.<br />
|-<br />
|}<br />
<br />
== Examples ==<br />
=== 12mm OSB, 3.175 single flute ===<br />
<br />
[[GCode]] created with [[LaserWeb4]].<br />
* Left<br />
** Cutting speed: 555mm/min<br />
** Attack: 1.00mm<br />
* Left<br />
** Cutting speed: 555mm/min<br />
** Attack (only outer cut, inner are done with 1.00mm): 2.00mm<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=Cutting_speeds&diff=7793Cutting speeds2024-03-24T14:41:16Z<p>Heiko: /* Examples = */</p>
<hr />
<div>{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
= Plexiglas (PMMA) =<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
= Engraving =<br />
0.5mm deep TBD TBD<br />
<br />
= Poplar plywood (Pappelsperrholz) =<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
= Pine plywood (Kiefersperrholz) =<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
= OSB (Grobspanplatten) =<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 500 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 555 || 1.00 || 127 || 10,000 || none || Works out fine, more speed or attack should be possible.<br />
|-<br />
| single-flute || 3.175 || 555 || 2.00 || 127 || 10,000 || none || Works out fine, more speed or attack should be possible.<br />
|-<br />
|}<br />
<br />
== Examples ==<br />
=== 12mm OSB, 3.175 single flute ===<br />
<br />
[[GCode]] created with [[LaserWeb4]].<br />
* Left<br />
** Cutting speed: 555mm/min<br />
** Attack: 1.00mm<br />
* Left<br />
** Cutting speed: 555mm/min<br />
** Attack: 2.00mm<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=Cutting_speeds&diff=7792Cutting speeds2024-03-24T14:41:00Z<p>Heiko: /* OSB (Grobspanplatten) */</p>
<hr />
<div>{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
= Plexiglas (PMMA) =<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
= Engraving =<br />
0.5mm deep TBD TBD<br />
<br />
= Poplar plywood (Pappelsperrholz) =<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
= Pine plywood (Kiefersperrholz) =<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
= OSB (Grobspanplatten) =<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 500 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 555 || 1.00 || 127 || 10,000 || none || Works out fine, more speed or attack should be possible.<br />
|-<br />
| single-flute || 3.175 || 555 || 2.00 || 127 || 10,000 || none || Works out fine, more speed or attack should be possible.<br />
|-<br />
|}<br />
<br />
== Examples ===<br />
=== 12mm OSB, 3.175 single flute ===<br />
<br />
[[GCode]] created with [[LaserWeb4]].<br />
* Left<br />
** Cutting speed: 555mm/min<br />
** Attack: 1.00mm<br />
* Left<br />
** Cutting speed: 555mm/min<br />
** Attack: 2.00mm<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7791IndyMill2024-03-24T14:38:21Z<p>Heiko: /* General */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
=== [[CAD and CAM Software]] ===<br />
There is a lot of different [[CAD]] and [[CAM]] software: [[CAD and CAM Software]]<br />
=== [[Cutting speeds]] ===<br />
See [[Cutting speeds]].<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=CAD_and_CAM_Software&diff=7790CAD and CAM Software2024-03-24T13:30:52Z<p>Heiko: /* LaserWeb4 */</p>
<hr />
<div>= Designing your product =<br />
== [[Inkscape]] ==<br />
In the 3D-world I prefer the simple [[OpenSCAD]] and in 2D it's the also fairly simple [[Inkscape]] which is free ''and'' awesome, too! ;)<br />
<br />
* Basic usage is pretty easy, just try it. If in doubt, there's plenty of manuals and tutorials online<br />
* [[Inkscape add CNC tabs]]<br />
<br />
<br />
= Creating [[GCODE]] =<br />
== Overview ==<br />
{|class="wikitable sortable"<br />
! Tool !! Still maintained !! Ease of use !! Functionality !! Comment<br />
|-<br />
| [[JSCut.org]] || no || ***** || ***-- || Missing/broken tabs operation, otherwise great, especially for newbies!<br />
|-<br />
| [[LaserWeb4]] || yes || ***** || ***** || Similar zu [[JSCut]], can do tabs (add them as path to/as svg and then to the tabs of the operation), AppImage/Binary for the popular systems.<br />
|-<br />
|}<br />
<br />
== [[JSCut.org]] ==<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
=== Creating Tabs With [[JSCut]] ===<br />
This is how it should work: https://www.youtube.com/watch?v=lwCatZ6q2Vw<br />
<br />
Unfortunately this functionality seems to be broken on [http://jscut.org]&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
Ooookay...<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
unzip main.zip<br />
cd emsdk-main/<br />
./emsdk install latest<br />
./emsdk activate latest<br />
Adding this to .bash_profile:<br />
PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
EMSDK=/root/emsdk-main<br />
EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
Which lead to...<br />
em++: error: --memory-init-file is no longer supported<br />
Then I removed the line from Makefile<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
Removed it, too.<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
Which lead to...<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
tar xzf boost_1_84_0.tar.gz <br />
mv cpp/boost ../boost_1_56_0<br />
THEN I IT COMPILED! UNBELIEVABLE! And no errors in UI!<br />
<br />
But the created gcode seems to be b0rken, so this plan is out of the window.<br />
<br />
It's 10 years old and its over. Whats the successor? ([[LaserWeb4]])<br />
<br />
== [[LaserWeb4]] ==<br />
[[File:lasweb tabs clampksnip_2024-03-24_14-29-17.png|400px]]<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
* First impression<br />
** Much more powerful than [[jscut]]<br />
** [[JSCut]] does honor visibility flags of layers and paths. [[LaserWeb]] doesn't<br />
** I like the material/tool library<br />
** It can create tabs the way [[JSCut]] does/did/should (converting from drawn paths)<br />
<br />
This shows the basic usage: https://www.youtube.com/watch?v=UCTDbdJotHY<br />
<br />
== [[PyCAM]] ==<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
== Blender CAM ==<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
== gcad3d ==<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
== Other Software (yet to test) ==<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
== [[krabzcam]] ==<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
== [[FreeCAD]] ==<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
=== Converting [[STL]] to solids in [[FreeCAD]] ===<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Sending [[GCode]] =<br />
What works fine for me:<br />
* [[cncjs]]<br />
* [[UGS]] (on my old T60 w/o visualization, might be an issue with the old machine)<br />
* not tested yet: [[LaserWeb]]<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=CAD_and_CAM_Software&diff=7789CAD and CAM Software2024-03-24T13:29:54Z<p>Heiko: /* LaserWeb4 */</p>
<hr />
<div>= Designing your product =<br />
== [[Inkscape]] ==<br />
In the 3D-world I prefer the simple [[OpenSCAD]] and in 2D it's the also fairly simple [[Inkscape]] which is free ''and'' awesome, too! ;)<br />
<br />
* Basic usage is pretty easy, just try it. If in doubt, there's plenty of manuals and tutorials online<br />
* [[Inkscape add CNC tabs]]<br />
<br />
<br />
= Creating [[GCODE]] =<br />
== Overview ==<br />
{|class="wikitable sortable"<br />
! Tool !! Still maintained !! Ease of use !! Functionality !! Comment<br />
|-<br />
| [[JSCut.org]] || no || ***** || ***-- || Missing/broken tabs operation, otherwise great, especially for newbies!<br />
|-<br />
| [[LaserWeb4]] || yes || ***** || ***** || Similar zu [[JSCut]], can do tabs (add them as path to/as svg and then to the tabs of the operation), AppImage/Binary for the popular systems.<br />
|-<br />
|}<br />
<br />
== [[JSCut.org]] ==<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
=== Creating Tabs With [[JSCut]] ===<br />
This is how it should work: https://www.youtube.com/watch?v=lwCatZ6q2Vw<br />
<br />
Unfortunately this functionality seems to be broken on [http://jscut.org]&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
Ooookay...<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
unzip main.zip<br />
cd emsdk-main/<br />
./emsdk install latest<br />
./emsdk activate latest<br />
Adding this to .bash_profile:<br />
PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
EMSDK=/root/emsdk-main<br />
EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
Which lead to...<br />
em++: error: --memory-init-file is no longer supported<br />
Then I removed the line from Makefile<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
Removed it, too.<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
Which lead to...<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
tar xzf boost_1_84_0.tar.gz <br />
mv cpp/boost ../boost_1_56_0<br />
THEN I IT COMPILED! UNBELIEVABLE! And no errors in UI!<br />
<br />
But the created gcode seems to be b0rken, so this plan is out of the window.<br />
<br />
It's 10 years old and its over. Whats the successor? ([[LaserWeb4]])<br />
<br />
== [[LaserWeb4]] ==<br />
[[File:lasweb tabs clampksnip_2024-03-24_14-29-17.png|400px]]<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
* First impression: Much more powerful than [[jscut]]. For now, I prefer the simpler [[JSCut]]!<br />
* Second Impression: [[JSCut]] does honor visibility of layers and paths. [[LaserWeb]] doesn't.<br />
* Third Impression: I like the material/tool library. And it can create tabs the way [[JSCut]] does/did/should (converting from drawed objects).<br />
<br />
This shows the basic usage: https://www.youtube.com/watch?v=UCTDbdJotHY<br />
<br />
== [[PyCAM]] ==<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
== Blender CAM ==<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
== gcad3d ==<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
== Other Software (yet to test) ==<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
== [[krabzcam]] ==<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
== [[FreeCAD]] ==<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
=== Converting [[STL]] to solids in [[FreeCAD]] ===<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Sending [[GCode]] =<br />
What works fine for me:<br />
* [[cncjs]]<br />
* [[UGS]] (on my old T60 w/o visualization, might be an issue with the old machine)<br />
* not tested yet: [[LaserWeb]]<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=File:Lasweb_tabs_clampksnip_2024-03-24_14-29-17.png&diff=7788File:Lasweb tabs clampksnip 2024-03-24 14-29-17.png2024-03-24T13:29:48Z<p>Heiko: File uploaded with MsUpload</p>
<hr />
<div>File uploaded with MsUpload</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=CAD_and_CAM_Software&diff=7787CAD and CAM Software2024-03-24T13:27:05Z<p>Heiko: /* Overview */</p>
<hr />
<div>= Designing your product =<br />
== [[Inkscape]] ==<br />
In the 3D-world I prefer the simple [[OpenSCAD]] and in 2D it's the also fairly simple [[Inkscape]] which is free ''and'' awesome, too! ;)<br />
<br />
* Basic usage is pretty easy, just try it. If in doubt, there's plenty of manuals and tutorials online<br />
* [[Inkscape add CNC tabs]]<br />
<br />
<br />
= Creating [[GCODE]] =<br />
== Overview ==<br />
{|class="wikitable sortable"<br />
! Tool !! Still maintained !! Ease of use !! Functionality !! Comment<br />
|-<br />
| [[JSCut.org]] || no || ***** || ***-- || Missing/broken tabs operation, otherwise great, especially for newbies!<br />
|-<br />
| [[LaserWeb4]] || yes || ***** || ***** || Similar zu [[JSCut]], can do tabs (add them as path to/as svg and then to the tabs of the operation), AppImage/Binary for the popular systems.<br />
|-<br />
|}<br />
<br />
== [[JSCut.org]] ==<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
=== Creating Tabs With [[JSCut]] ===<br />
This is how it should work: https://www.youtube.com/watch?v=lwCatZ6q2Vw<br />
<br />
Unfortunately this functionality seems to be broken on [http://jscut.org]&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
Ooookay...<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
unzip main.zip<br />
cd emsdk-main/<br />
./emsdk install latest<br />
./emsdk activate latest<br />
Adding this to .bash_profile:<br />
PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
EMSDK=/root/emsdk-main<br />
EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
Which lead to...<br />
em++: error: --memory-init-file is no longer supported<br />
Then I removed the line from Makefile<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
Removed it, too.<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
Which lead to...<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
tar xzf boost_1_84_0.tar.gz <br />
mv cpp/boost ../boost_1_56_0<br />
THEN I IT COMPILED! UNBELIEVABLE! And no errors in UI!<br />
<br />
But the created gcode seems to be b0rken, so this plan is out of the window.<br />
<br />
It's 10 years old and its over. Whats the successor? ([[LaserWeb4]])<br />
<br />
== [[LaserWeb4]] ==<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
* First impression: Much more powerful than [[jscut]]. For now, I prefer the simpler [[JSCut]]!<br />
* Second Impression: [[JSCut]] does honor visibility of layers and paths. [[LaserWeb]] doesn't.<br />
* Third Impression: I like the material/tool library. And it can create tabs the way [[JSCut]] does/did/should (converting from drawed objects).<br />
<br />
This shows the basic usage: https://www.youtube.com/watch?v=UCTDbdJotHY<br />
<br />
== [[PyCAM]] ==<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
== Blender CAM ==<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
== gcad3d ==<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
== Other Software (yet to test) ==<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
== [[krabzcam]] ==<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
== [[FreeCAD]] ==<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
=== Converting [[STL]] to solids in [[FreeCAD]] ===<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Sending [[GCode]] =<br />
What works fine for me:<br />
* [[cncjs]]<br />
* [[UGS]] (on my old T60 w/o visualization, might be an issue with the old machine)<br />
* not tested yet: [[LaserWeb]]<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=CAD_and_CAM_Software&diff=7786CAD and CAM Software2024-03-24T13:26:47Z<p>Heiko: /* LaserWeb4 */</p>
<hr />
<div>= Designing your product =<br />
== [[Inkscape]] ==<br />
In the 3D-world I prefer the simple [[OpenSCAD]] and in 2D it's the also fairly simple [[Inkscape]] which is free ''and'' awesome, too! ;)<br />
<br />
* Basic usage is pretty easy, just try it. If in doubt, there's plenty of manuals and tutorials online<br />
* [[Inkscape add CNC tabs]]<br />
<br />
<br />
= Creating [[GCODE]] =<br />
== Overview ==<br />
{|class="wikitable sortable"<br />
! Tool !! Still maintained !! Ease of use !! Functionality !! Comment<br />
|-<br />
| [[JSCut.org]] || no || ***** || ***-- || Missing/broken tabs operation, otherwise great, especially for newbies!<br />
|-<br />
| [[LaserWeb4]] || yes || ***** || ***** || Similar zu [[JSCut]], can do tabs (add them as path to svg and then to the tabs of the operation), AppImage/Binary for the popular systems.<br />
|-<br />
|}<br />
<br />
== [[JSCut.org]] ==<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
=== Creating Tabs With [[JSCut]] ===<br />
This is how it should work: https://www.youtube.com/watch?v=lwCatZ6q2Vw<br />
<br />
Unfortunately this functionality seems to be broken on [http://jscut.org]&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
Ooookay...<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
unzip main.zip<br />
cd emsdk-main/<br />
./emsdk install latest<br />
./emsdk activate latest<br />
Adding this to .bash_profile:<br />
PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
EMSDK=/root/emsdk-main<br />
EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
Which lead to...<br />
em++: error: --memory-init-file is no longer supported<br />
Then I removed the line from Makefile<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
Removed it, too.<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
Which lead to...<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
tar xzf boost_1_84_0.tar.gz <br />
mv cpp/boost ../boost_1_56_0<br />
THEN I IT COMPILED! UNBELIEVABLE! And no errors in UI!<br />
<br />
But the created gcode seems to be b0rken, so this plan is out of the window.<br />
<br />
It's 10 years old and its over. Whats the successor? ([[LaserWeb4]])<br />
<br />
== [[LaserWeb4]] ==<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
* First impression: Much more powerful than [[jscut]]. For now, I prefer the simpler [[JSCut]]!<br />
* Second Impression: [[JSCut]] does honor visibility of layers and paths. [[LaserWeb]] doesn't.<br />
* Third Impression: I like the material/tool library. And it can create tabs the way [[JSCut]] does/did/should (converting from drawed objects).<br />
<br />
This shows the basic usage: https://www.youtube.com/watch?v=UCTDbdJotHY<br />
<br />
== [[PyCAM]] ==<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
== Blender CAM ==<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
== gcad3d ==<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
== Other Software (yet to test) ==<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
== [[krabzcam]] ==<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
== [[FreeCAD]] ==<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
=== Converting [[STL]] to solids in [[FreeCAD]] ===<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Sending [[GCode]] =<br />
What works fine for me:<br />
* [[cncjs]]<br />
* [[UGS]] (on my old T60 w/o visualization, might be an issue with the old machine)<br />
* not tested yet: [[LaserWeb]]<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=CAD_and_CAM_Software&diff=7785CAD and CAM Software2024-03-24T13:15:08Z<p>Heiko: /* Sending GCode */</p>
<hr />
<div>= Designing your product =<br />
== [[Inkscape]] ==<br />
In the 3D-world I prefer the simple [[OpenSCAD]] and in 2D it's the also fairly simple [[Inkscape]] which is free ''and'' awesome, too! ;)<br />
<br />
* Basic usage is pretty easy, just try it. If in doubt, there's plenty of manuals and tutorials online<br />
* [[Inkscape add CNC tabs]]<br />
<br />
<br />
= Creating [[GCODE]] =<br />
== Overview ==<br />
{|class="wikitable sortable"<br />
! Tool !! Still maintained !! Ease of use !! Functionality !! Comment<br />
|-<br />
| [[JSCut.org]] || no || ***** || ***-- || Missing/broken tabs operation, otherwise great, especially for newbies!<br />
|-<br />
| [[LaserWeb4]] || yes || ***** || ***** || Similar zu [[JSCut]], can do tabs (add them as path to svg and then to the tabs of the operation), AppImage/Binary for the popular systems.<br />
|-<br />
|}<br />
<br />
== [[JSCut.org]] ==<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
=== Creating Tabs With [[JSCut]] ===<br />
This is how it should work: https://www.youtube.com/watch?v=lwCatZ6q2Vw<br />
<br />
Unfortunately this functionality seems to be broken on [http://jscut.org]&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
Ooookay...<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
unzip main.zip<br />
cd emsdk-main/<br />
./emsdk install latest<br />
./emsdk activate latest<br />
Adding this to .bash_profile:<br />
PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
EMSDK=/root/emsdk-main<br />
EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
Which lead to...<br />
em++: error: --memory-init-file is no longer supported<br />
Then I removed the line from Makefile<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
Removed it, too.<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
Which lead to...<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
tar xzf boost_1_84_0.tar.gz <br />
mv cpp/boost ../boost_1_56_0<br />
THEN I IT COMPILED! UNBELIEVABLE! And no errors in UI!<br />
<br />
But the created gcode seems to be b0rken, so this plan is out of the window.<br />
<br />
It's 10 years old and its over. Whats the successor? ([[LaserWeb4]])<br />
<br />
== [[LaserWeb4]] ==<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
* First impression: Much more powerful than [[jscut]]. For now, I prefer the simpler [[JSCut]]!<br />
* Second Impression: [[JSCut]] does honor visibility of layers and paths. [[LaserWeb]] doesn't.<br />
* Third Impression: I like the material/tool library. And it can create tabs the way [[JSCut]] does/did/should (converting from drawed objects).<br />
<br />
== [[PyCAM]] ==<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
== Blender CAM ==<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
== gcad3d ==<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
== Other Software (yet to test) ==<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
== [[krabzcam]] ==<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
== [[FreeCAD]] ==<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
=== Converting [[STL]] to solids in [[FreeCAD]] ===<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Sending [[GCode]] =<br />
What works fine for me:<br />
* [[cncjs]]<br />
* [[UGS]] (on my old T60 w/o visualization, might be an issue with the old machine)<br />
* not tested yet: [[LaserWeb]]<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=CAD_and_CAM_Software&diff=7784CAD and CAM Software2024-03-24T13:11:35Z<p>Heiko: /* Creating GCODE */</p>
<hr />
<div>= Designing your product =<br />
== [[Inkscape]] ==<br />
In the 3D-world I prefer the simple [[OpenSCAD]] and in 2D it's the also fairly simple [[Inkscape]] which is free ''and'' awesome, too! ;)<br />
<br />
* Basic usage is pretty easy, just try it. If in doubt, there's plenty of manuals and tutorials online<br />
* [[Inkscape add CNC tabs]]<br />
<br />
<br />
= Creating [[GCODE]] =<br />
== Overview ==<br />
{|class="wikitable sortable"<br />
! Tool !! Still maintained !! Ease of use !! Functionality !! Comment<br />
|-<br />
| [[JSCut.org]] || no || ***** || ***-- || Missing/broken tabs operation, otherwise great, especially for newbies!<br />
|-<br />
| [[LaserWeb4]] || yes || ***** || ***** || Similar zu [[JSCut]], can do tabs (add them as path to svg and then to the tabs of the operation), AppImage/Binary for the popular systems.<br />
|-<br />
|}<br />
<br />
== [[JSCut.org]] ==<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
=== Creating Tabs With [[JSCut]] ===<br />
This is how it should work: https://www.youtube.com/watch?v=lwCatZ6q2Vw<br />
<br />
Unfortunately this functionality seems to be broken on [http://jscut.org]&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
Ooookay...<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
unzip main.zip<br />
cd emsdk-main/<br />
./emsdk install latest<br />
./emsdk activate latest<br />
Adding this to .bash_profile:<br />
PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
EMSDK=/root/emsdk-main<br />
EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
Which lead to...<br />
em++: error: --memory-init-file is no longer supported<br />
Then I removed the line from Makefile<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
Removed it, too.<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
Which lead to...<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
tar xzf boost_1_84_0.tar.gz <br />
mv cpp/boost ../boost_1_56_0<br />
THEN I IT COMPILED! UNBELIEVABLE! And no errors in UI!<br />
<br />
But the created gcode seems to be b0rken, so this plan is out of the window.<br />
<br />
It's 10 years old and its over. Whats the successor? ([[LaserWeb4]])<br />
<br />
== [[LaserWeb4]] ==<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
* First impression: Much more powerful than [[jscut]]. For now, I prefer the simpler [[JSCut]]!<br />
* Second Impression: [[JSCut]] does honor visibility of layers and paths. [[LaserWeb]] doesn't.<br />
* Third Impression: I like the material/tool library. And it can create tabs the way [[JSCut]] does/did/should (converting from drawed objects).<br />
<br />
== [[PyCAM]] ==<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
== Blender CAM ==<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
== gcad3d ==<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
== Other Software (yet to test) ==<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
== [[krabzcam]] ==<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
== [[FreeCAD]] ==<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
=== Converting [[STL]] to solids in [[FreeCAD]] ===<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Sending [[GCode]] =<br />
What works fine for me:<br />
* [[cncjs]]<br />
* [[UGS]] (on my old T60 w/o visualization, might be an issue with the old machine)<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=CAD_and_CAM_Software&diff=7783CAD and CAM Software2024-03-24T12:59:03Z<p>Heiko: /* LaserWeb4 */</p>
<hr />
<div>= Designing your product =<br />
== [[Inkscape]] ==<br />
In the 3D-world I prefer the simple [[OpenSCAD]] and in 2D it's the also fairly simple [[Inkscape]] which is free ''and'' awesome, too! ;)<br />
<br />
* Basic usage is pretty easy, just try it. If in doubt, there's plenty of manuals and tutorials online<br />
* [[Inkscape add CNC tabs]]<br />
<br />
<br />
= Creating [[GCODE]] =<br />
== Overview ==<br />
{|class="wikitable sortable"<br />
! Tool !! Still maintained !! Ease of use !! Functionality !! Comment<br />
|-<br />
| [[JSCut.org]] || no || ***** || ***-- || Missing/broken tabs operation, otherwise great, especially for newbies!<br />
|-<br />
|}<br />
<br />
== [[JSCut.org]] ==<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
=== Creating Tabs With [[JSCut]] ===<br />
This is how it should work: https://www.youtube.com/watch?v=lwCatZ6q2Vw<br />
<br />
Unfortunately this functionality seems to be broken on [http://jscut.org]&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
Ooookay...<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
unzip main.zip<br />
cd emsdk-main/<br />
./emsdk install latest<br />
./emsdk activate latest<br />
Adding this to .bash_profile:<br />
PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
EMSDK=/root/emsdk-main<br />
EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
Which lead to...<br />
em++: error: --memory-init-file is no longer supported<br />
Then I removed the line from Makefile<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
Removed it, too.<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
Which lead to...<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
tar xzf boost_1_84_0.tar.gz <br />
mv cpp/boost ../boost_1_56_0<br />
THEN I IT COMPILED! UNBELIEVABLE! And no errors in UI!<br />
<br />
But the created gcode seems to be b0rken, so this plan is out of the window.<br />
<br />
It's 10 years old and its over. Whats the successor? ([[LaserWeb4]])<br />
<br />
== [[LaserWeb4]] ==<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
* First impression: Much more powerful than [[jscut]]. For now, I prefer the simpler [[JSCut]]!<br />
* Second Impression: [[JSCut]] does honor visibility of layers and paths. [[LaserWeb]] doesn't.<br />
* Third Impression: I like the material/tool library. And it can create tabs the way [[JSCut]] does/did/should (converting from drawed objects).<br />
<br />
== [[PyCAM]] ==<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
== Blender CAM ==<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
== gcad3d ==<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
== Other Software (yet to test) ==<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
== [[krabzcam]] ==<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
== [[FreeCAD]] ==<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
=== Converting [[STL]] to solids in [[FreeCAD]] ===<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Sending [[GCode]] =<br />
What works fine for me:<br />
* [[cncjs]]<br />
* [[UGS]] (on my old T60 w/o visualization, might be an issue with the old machine)<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=Cutting_speeds&diff=7782Cutting speeds2024-03-24T12:58:03Z<p>Heiko: </p>
<hr />
<div>{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
= Plexiglas (PMMA) =<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
= Engraving =<br />
0.5mm deep TBD TBD<br />
<br />
= Poplar plywood (Pappelsperrholz) =<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
= Pine plywood (Kiefersperrholz) =<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
= OSB (Grobspanplatten) =<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 500 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 600 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=Cutting_speeds&diff=7781Cutting speeds2024-03-24T11:49:20Z<p>Heiko: Created page with "{{WIP|This is very much likely to change - I'm still learning every day!}} 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 sur..."</p>
<hr />
<div>{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
= Plexiglas (PMMA) =<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
= Engraving =<br />
0.5mm deep TBD TBD<br />
<br />
= Poplar plywood (Pappelsperrholz) =<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
= Pine plywood (Kiefersperrholz) =<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
= OSB (Grobspanplatten) =<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 500 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 600 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7780IndyMill2024-03-24T11:48:36Z<p>Heiko: /* General */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
* There is a lot of different [[CAD]] and [[CAM]] software: [[CAD and CAM Software]]<br />
* [[Cutting speeds]]<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7779IndyMill2024-03-24T11:48:20Z<p>Heiko: /* Cutting Speeds */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
* There is a lot of different [[CAD]] and [[CAM]] software: [[CAD and CAM Software]]<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=CAD_and_CAM_Software&diff=7778CAD and CAM Software2024-03-24T08:33:59Z<p>Heiko: /* Overview */</p>
<hr />
<div>= Designing your product =<br />
== [[Inkscape]] ==<br />
In the 3D-world I prefer the simple [[OpenSCAD]] and in 2D it's the also fairly simple [[Inkscape]] which is free ''and'' awesome, too! ;)<br />
<br />
* Basic usage is pretty easy, just try it. If in doubt, there's plenty of manuals and tutorials online<br />
* [[Inkscape add CNC tabs]]<br />
<br />
<br />
= Creating [[GCODE]] =<br />
== Overview ==<br />
{|class="wikitable sortable"<br />
! Tool !! Still maintained !! Ease of use !! Functionality !! Comment<br />
|-<br />
| [[JSCut.org]] || no || ***** || ***-- || Missing/broken tabs operation, otherwise great, especially for newbies!<br />
|-<br />
|}<br />
<br />
== [[JSCut.org]] ==<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
=== Creating Tabs With [[JSCut]] ===<br />
This is how it should work: https://www.youtube.com/watch?v=lwCatZ6q2Vw<br />
<br />
Unfortunately this functionality seems to be broken on [http://jscut.org]&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
Ooookay...<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
unzip main.zip<br />
cd emsdk-main/<br />
./emsdk install latest<br />
./emsdk activate latest<br />
Adding this to .bash_profile:<br />
PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
EMSDK=/root/emsdk-main<br />
EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
Which lead to...<br />
em++: error: --memory-init-file is no longer supported<br />
Then I removed the line from Makefile<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
Removed it, too.<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
Which lead to...<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
tar xzf boost_1_84_0.tar.gz <br />
mv cpp/boost ../boost_1_56_0<br />
THEN I IT COMPILED! UNBELIEVABLE! And no errors in UI!<br />
<br />
But the created gcode seems to be b0rken, so this plan is out of the window.<br />
<br />
It's 10 years old and its over. Whats the successor? ([[LaserWeb4]])<br />
<br />
== [[LaserWeb4]] ==<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
* First impression: Much more powerful than [[jscut]]. For now, I prefer the simpler [[JSCut]]!<br />
* Second Impression: [[JSCut]] does honor visibility of layers and paths. [[LaserWeb]] doesn't.<br />
* Third Impression: I like the material/tool library. Can't it create tabs???<br />
<br />
== [[PyCAM]] ==<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
== Blender CAM ==<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
== gcad3d ==<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
== Other Software (yet to test) ==<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
== [[krabzcam]] ==<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
== [[FreeCAD]] ==<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
=== Converting [[STL]] to solids in [[FreeCAD]] ===<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Sending [[GCode]] =<br />
What works fine for me:<br />
* [[cncjs]]<br />
* [[UGS]] (on my old T60 w/o visualization, might be an issue with the old machine)<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=CAD_and_CAM_Software&diff=7777CAD and CAM Software2024-03-24T08:33:28Z<p>Heiko: /* Creating GCODE */</p>
<hr />
<div>= Designing your product =<br />
== [[Inkscape]] ==<br />
In the 3D-world I prefer the simple [[OpenSCAD]] and in 2D it's the also fairly simple [[Inkscape]] which is free ''and'' awesome, too! ;)<br />
<br />
* Basic usage is pretty easy, just try it. If in doubt, there's plenty of manuals and tutorials online<br />
* [[Inkscape add CNC tabs]]<br />
<br />
<br />
= Creating [[GCODE]] =<br />
== Overview ==<br />
{|style="wikitable sortable"<br />
! Tool !! Still maintained !! Ease of use !! Functionality !! Comment<br />
|-<br />
| [[JSCut.org]] || no || ***** || ***-- || Missing/broken tabs operation, otherwise great, especially for newbies!<br />
|-<br />
|}<br />
<br />
== [[JSCut.org]] ==<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
=== Creating Tabs With [[JSCut]] ===<br />
This is how it should work: https://www.youtube.com/watch?v=lwCatZ6q2Vw<br />
<br />
Unfortunately this functionality seems to be broken on [http://jscut.org]&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
Ooookay...<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
unzip main.zip<br />
cd emsdk-main/<br />
./emsdk install latest<br />
./emsdk activate latest<br />
Adding this to .bash_profile:<br />
PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
EMSDK=/root/emsdk-main<br />
EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
Which lead to...<br />
em++: error: --memory-init-file is no longer supported<br />
Then I removed the line from Makefile<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
Removed it, too.<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
Which lead to...<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
tar xzf boost_1_84_0.tar.gz <br />
mv cpp/boost ../boost_1_56_0<br />
THEN I IT COMPILED! UNBELIEVABLE! And no errors in UI!<br />
<br />
But the created gcode seems to be b0rken, so this plan is out of the window.<br />
<br />
It's 10 years old and its over. Whats the successor? ([[LaserWeb4]])<br />
<br />
== [[LaserWeb4]] ==<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
* First impression: Much more powerful than [[jscut]]. For now, I prefer the simpler [[JSCut]]!<br />
* Second Impression: [[JSCut]] does honor visibility of layers and paths. [[LaserWeb]] doesn't.<br />
* Third Impression: I like the material/tool library. Can't it create tabs???<br />
<br />
== [[PyCAM]] ==<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
== Blender CAM ==<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
== gcad3d ==<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
== Other Software (yet to test) ==<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
== [[krabzcam]] ==<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
== [[FreeCAD]] ==<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
=== Converting [[STL]] to solids in [[FreeCAD]] ===<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Sending [[GCode]] =<br />
What works fine for me:<br />
* [[cncjs]]<br />
* [[UGS]] (on my old T60 w/o visualization, might be an issue with the old machine)<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=Cncjs&diff=7776Cncjs2024-03-24T08:27:26Z<p>Heiko: Redirected page to CNCjs</p>
<hr />
<div>#redirect [[CNCjs]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=CAD_and_CAM_Software&diff=7775CAD and CAM Software2024-03-24T08:26:24Z<p>Heiko: Created page with "= Designing your product = == Inkscape == In the 3D-world I prefer the simple OpenSCAD and in 2D it's the also fairly simple Inkscape which is free ''and'' awesome, too! ;) * Basic usage is pretty easy, just try it. If in doubt, there's plenty of manuals and tutorials online * Inkscape add CNC tabs = Creating GCODE = == JSCut.org == {{Tipp|Tipps: * If you're creating your own SVG, make sure the pockets are "closed paths", meaning "areas",..."</p>
<hr />
<div>= Designing your product =<br />
== [[Inkscape]] ==<br />
In the 3D-world I prefer the simple [[OpenSCAD]] and in 2D it's the also fairly simple [[Inkscape]] which is free ''and'' awesome, too! ;)<br />
<br />
* Basic usage is pretty easy, just try it. If in doubt, there's plenty of manuals and tutorials online<br />
* [[Inkscape add CNC tabs]]<br />
<br />
<br />
= Creating [[GCODE]] =<br />
== [[JSCut.org]] ==<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
=== Creating Tabs With [[JSCut]] ===<br />
This is how it should work: https://www.youtube.com/watch?v=lwCatZ6q2Vw<br />
<br />
Unfortunately this functionality seems to be broken on [http://jscut.org]&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
Ooookay...<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
unzip main.zip<br />
cd emsdk-main/<br />
./emsdk install latest<br />
./emsdk activate latest<br />
Adding this to .bash_profile:<br />
PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
EMSDK=/root/emsdk-main<br />
EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
Which lead to...<br />
em++: error: --memory-init-file is no longer supported<br />
Then I removed the line from Makefile<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
Removed it, too.<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
Which lead to...<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
tar xzf boost_1_84_0.tar.gz <br />
mv cpp/boost ../boost_1_56_0<br />
THEN I IT COMPILED! UNBELIEVABLE! And no errors in UI!<br />
<br />
But the created gcode seems to be b0rken, so this plan is out of the window.<br />
<br />
It's 10 years old and its over. Whats the successor? ([[LaserWeb4]])<br />
<br />
== [[LaserWeb4]] ==<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
* First impression: Much more powerful than [[jscut]]. For now, I prefer the simpler [[JSCut]]!<br />
* Second Impression: [[JSCut]] does honor visibility of layers and paths. [[LaserWeb]] doesn't.<br />
* Third Impression: I like the material/tool library. Can't it create tabs???<br />
<br />
== [[PyCAM]] ==<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
== Blender CAM ==<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
== gcad3d ==<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
== Other Software (yet to test) ==<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
== [[krabzcam]] ==<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
== [[FreeCAD]] ==<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
=== Converting [[STL]] to solids in [[FreeCAD]] ===<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Sending [[GCode]] =<br />
What works fine for me:<br />
* [[cncjs]]<br />
* [[UGS]] (on my old T60 w/o visualization, might be an issue with the old machine)<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7774IndyMill2024-03-24T08:18:57Z<p>Heiko: /* Lessons Learned */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
* There is a lot of different [[CAD]] and [[CAM]] software: [[CAD and CAM Software]]<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7773IndyMill2024-03-24T08:15:25Z<p>Heiko: /* Work with CAD- and CAM-Software */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=LaserWeb&diff=7772LaserWeb2024-03-24T08:13:43Z<p>Heiko: Redirected page to LaserWeb4</p>
<hr />
<div>#redirect [[LaserWeb4]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7771IndyMill2024-03-24T08:12:25Z<p>Heiko: /* LaserWeb4 */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Work with [[CAD]]- and [[CAM]]-Software =<br />
== Creating [[GCODE]] ==<br />
=== [[JSCut.org]] ===<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
==== Creating Tabs With [[JSCut]] ====<br />
This is how it should work: https://www.youtube.com/watch?v=lwCatZ6q2Vw<br />
<br />
Unfortunately this functionality seems to be broken on [http://jscut.org]&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
Ooookay...<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
unzip main.zip<br />
cd emsdk-main/<br />
./emsdk install latest<br />
./emsdk activate latest<br />
Adding this to .bash_profile:<br />
PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
EMSDK=/root/emsdk-main<br />
EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
Which lead to...<br />
em++: error: --memory-init-file is no longer supported<br />
Then I removed the line from Makefile<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
Removed it, too.<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
Which lead to...<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
tar xzf boost_1_84_0.tar.gz <br />
mv cpp/boost ../boost_1_56_0<br />
THEN I IT COMPILED! UNBELIEVABLE! And no errors in UI!<br />
<br />
But the created gcode seems to be b0rken, so this plan is out of the window.<br />
<br />
It's 10 years old and its over. Whats the successor? ([[LaserWeb4]])<br />
<br />
=== [[LaserWeb4]] ===<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
* First impression: Much more powerful than [[jscut]]. For now, I prefer the simpler [[JSCut]]!<br />
* Second Impression: [[JSCut]] does honor visibility of layers and paths. [[LaserWeb]] doesn't.<br />
* Third Impression: I like the material/tool library. Can't it create tabs???<br />
<br />
=== [[PyCAM]] ===<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
=== Blender CAM ===<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
=== gcad3d ===<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
=== Other Software (yet to test) ===<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
=== [[krabzcam]] ===<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
=== [[FreeCAD]] ===<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
==== Converting [[STL]] to solids in [[FreeCAD]] ====<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7770IndyMill2024-03-24T08:07:09Z<p>Heiko: /* Creating Tabs With JSCut */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Work with [[CAD]]- and [[CAM]]-Software =<br />
== Creating [[GCODE]] ==<br />
=== [[JSCut.org]] ===<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
==== Creating Tabs With [[JSCut]] ====<br />
This is how it should work: https://www.youtube.com/watch?v=lwCatZ6q2Vw<br />
<br />
Unfortunately this functionality seems to be broken on [http://jscut.org]&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
Ooookay...<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
unzip main.zip<br />
cd emsdk-main/<br />
./emsdk install latest<br />
./emsdk activate latest<br />
Adding this to .bash_profile:<br />
PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
EMSDK=/root/emsdk-main<br />
EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
Which lead to...<br />
em++: error: --memory-init-file is no longer supported<br />
Then I removed the line from Makefile<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
Removed it, too.<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
Which lead to...<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
tar xzf boost_1_84_0.tar.gz <br />
mv cpp/boost ../boost_1_56_0<br />
THEN I IT COMPILED! UNBELIEVABLE! And no errors in UI!<br />
<br />
But the created gcode seems to be b0rken, so this plan is out of the window.<br />
<br />
It's 10 years old and its over. Whats the successor? ([[LaserWeb4]])<br />
<br />
=== [[LaserWeb4]] ===<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
<br />
First impression: Much more powerful than jscut. For now, I prefer the simpler [[JSCut]]!<br />
<br />
Second Impression: JSCut does honor visibility of layers and paths. LaserWeb doesn't.<br />
<br />
Third Impression: Like the Material/Tool library. Can't it create tabs???<br />
<br />
=== [[PyCAM]] ===<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
=== Blender CAM ===<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
=== gcad3d ===<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
=== Other Software (yet to test) ===<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
=== [[krabzcam]] ===<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
=== [[FreeCAD]] ===<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
==== Converting [[STL]] to solids in [[FreeCAD]] ====<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7769IndyMill2024-03-23T19:53:55Z<p>Heiko: /* Other Software (yet to test) */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Work with [[CAD]]- and [[CAM]]-Software =<br />
== Creating [[GCODE]] ==<br />
=== [[JSCut.org]] ===<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
==== Creating Tabs With [[JSCut]] ====<br />
https://www.youtube.com/watch?v=lwCatZ6q2Vw<br />
<br />
Since this functionality seems to be broken&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
Ooookay...<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
unzip main.zip<br />
cd emsdk-main/<br />
./emsdk install latest<br />
./emsdk activate latest<br />
Adding this to .bash_profile:<br />
PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
EMSDK=/root/emsdk-main<br />
EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
Which lead to...<br />
em++: error: --memory-init-file is no longer supported<br />
Then I removed the line from Makefile<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
Removed it, too.<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
Which lead to...<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
tar xzf boost_1_84_0.tar.gz <br />
mv cpp/boost ../boost_1_56_0<br />
THEN I IT COMPILED! UNBELIEVABLE! And no errors in UI! (and sadly no tabs in gcode). Okay, that's it. It's 10 years old and its over. Whats the successor?<br />
<br />
=== [[LaserWeb4]] ===<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
<br />
First impression: Much more powerful than jscut. For now, I prefer the simpler [[JSCut]]!<br />
<br />
Second Impression: JSCut does honor visibility of layers and paths. LaserWeb doesn't.<br />
<br />
Third Impression: Like the Material/Tool library. Can't it create tabs???<br />
<br />
=== [[PyCAM]] ===<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
=== Blender CAM ===<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
=== gcad3d ===<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
=== Other Software (yet to test) ===<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
=== [[krabzcam]] ===<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
=== [[FreeCAD]] ===<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
==== Converting [[STL]] to solids in [[FreeCAD]] ====<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7768IndyMill2024-03-23T19:51:41Z<p>Heiko: /* Creating Tabs With JSCut */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Work with [[CAD]]- and [[CAM]]-Software =<br />
== Creating [[GCODE]] ==<br />
=== [[JSCut.org]] ===<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
==== Creating Tabs With [[JSCut]] ====<br />
https://www.youtube.com/watch?v=lwCatZ6q2Vw<br />
<br />
Since this functionality seems to be broken&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
Ooookay...<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
unzip main.zip<br />
cd emsdk-main/<br />
./emsdk install latest<br />
./emsdk activate latest<br />
Adding this to .bash_profile:<br />
PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
EMSDK=/root/emsdk-main<br />
EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
Which lead to...<br />
em++: error: --memory-init-file is no longer supported<br />
Then I removed the line from Makefile<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
Removed it, too.<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
Which lead to...<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
tar xzf boost_1_84_0.tar.gz <br />
mv cpp/boost ../boost_1_56_0<br />
THEN I IT COMPILED! UNBELIEVABLE! And no errors in UI! (and sadly no tabs in gcode). Okay, that's it. It's 10 years old and its over. Whats the successor?<br />
<br />
=== [[LaserWeb4]] ===<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
<br />
First impression: Much more powerful than jscut. For now, I prefer the simpler [[JSCut]]!<br />
<br />
Second Impression: JSCut does honor visibility of layers and paths. LaserWeb doesn't.<br />
<br />
Third Impression: Like the Material/Tool library. Can't it create tabs???<br />
<br />
=== [[PyCAM]] ===<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
=== Blender CAM ===<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
=== gcad3d ===<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
=== Other Software (yet to test) ===<br />
* https://pycam.sourceforge.net/other-programs/<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
=== [[krabzcam]] ===<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
=== [[FreeCAD]] ===<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
==== Converting [[STL]] to solids in [[FreeCAD]] ====<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7767IndyMill2024-03-23T16:12:20Z<p>Heiko: /* Creating Tabs With JSCut */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Work with [[CAD]]- and [[CAM]]-Software =<br />
== Creating [[GCODE]] ==<br />
=== [[JSCut.org]] ===<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
==== Creating Tabs With [[JSCut]] ====<br />
https://www.youtube.com/watch?v=lwCatZ6q2Vw<br />
<br />
Since this functionality seems to be broken&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
<br />
unzip main.zip<br />
<br />
cd emsdk-main/<br />
<br />
./emsdk install latest<br />
./emsdk activate latest<br />
<br />
Adding this to .bash_profile:<br />
<br />
3 PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
4 EMSDK=/root/emsdk-main<br />
5 EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
<br />
em++: error: --memory-init-file is no longer supported<br />
<br />
-> removed line from Makefile<br />
<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
<br />
-> removed<br />
<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
<br />
tar xzf boost_1_84_0.tar.gz <br />
<br />
mv ../boost cpp/<br />
<br />
mv cpp/boost ../boost_1_56_0<br />
<br />
<br />
THEN I IT COMPILED! UNBELIEVABLE! And no erros in UI! (and sadly no tabs in gcode). Okay, that's it. It's 10 years old and its over. Whats the successor?<br />
<br />
mv boost_1_84_0/ boost<br />
<br />
=== [[LaserWeb4]] ===<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
<br />
First impression: Much more powerful than jscut. For now, I prefer the simpler [[JSCut]]!<br />
<br />
Second Impression: JSCut does honor visibility of layers and paths. LaserWeb doesn't.<br />
<br />
Third Impression: Like the Material/Tool library. Can't it create tabs???<br />
<br />
=== [[PyCAM]] ===<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
=== Blender CAM ===<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
=== gcad3d ===<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
=== Other Software (yet to test) ===<br />
* https://pycam.sourceforge.net/other-programs/<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
=== [[krabzcam]] ===<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
=== [[FreeCAD]] ===<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
==== Converting [[STL]] to solids in [[FreeCAD]] ====<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7766IndyMill2024-03-23T16:09:12Z<p>Heiko: /* Creating Tabs With JSCut */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Work with [[CAD]]- and [[CAM]]-Software =<br />
== Creating [[GCODE]] ==<br />
=== [[JSCut.org]] ===<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
==== Creating Tabs With [[JSCut]] ====<br />
https://www.youtube.com/watch?v=lwCatZ6q2Vw<br />
<br />
Since this functionality seems to be broken&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
<br />
unzip main.zip<br />
<br />
cd emsdk-main/<br />
<br />
./emsdk install latest<br />
./emsdk activate latest<br />
<br />
Adding this to .bash_profile:<br />
<br />
3 PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
4 EMSDK=/root/emsdk-main<br />
5 EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
<br />
em++: error: --memory-init-file is no longer supported<br />
<br />
-> removed line from Makefile<br />
<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
<br />
-> removed<br />
<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
<br />
tar xzf boost_1_84_0.tar.gz <br />
<br />
mv ../boost cpp/<br />
<br />
mv cpp/boost ../boost_1_56_0<br />
<br />
<br />
THEN I IT COMPILED! UNBELIEVABLE!<br />
<br />
mv boost_1_84_0/ boost<br />
<br />
=== [[LaserWeb4]] ===<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
<br />
First impression: Much more powerful than jscut. For now, I prefer the simpler [[JSCut]]!<br />
<br />
Second Impression: JSCut does honor visibility of layers and paths. LaserWeb doesn't.<br />
<br />
Third Impression: Like the Material/Tool library. Can't it create tabs???<br />
<br />
=== [[PyCAM]] ===<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
=== Blender CAM ===<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
=== gcad3d ===<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
=== Other Software (yet to test) ===<br />
* https://pycam.sourceforge.net/other-programs/<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
=== [[krabzcam]] ===<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
=== [[FreeCAD]] ===<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
==== Converting [[STL]] to solids in [[FreeCAD]] ====<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7765IndyMill2024-03-23T16:06:29Z<p>Heiko: /* Creating Tabs With JSCut */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Work with [[CAD]]- and [[CAM]]-Software =<br />
== Creating [[GCODE]] ==<br />
=== [[JSCut.org]] ===<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
==== Creating Tabs With [[JSCut]] ====<br />
Since this functionality seems to be broken&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
<br />
unzip main.zip<br />
<br />
cd emsdk-main/<br />
<br />
./emsdk install latest<br />
./emsdk activate latest<br />
<br />
Adding this to .bash_profile:<br />
<br />
3 PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
4 EMSDK=/root/emsdk-main<br />
5 EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
<br />
em++: error: --memory-init-file is no longer supported<br />
<br />
-> removed line from Makefile<br />
<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
<br />
-> removed<br />
<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
<br />
tar xzf boost_1_84_0.tar.gz <br />
<br />
mv ../boost cpp/<br />
<br />
mv cpp/boost ../boost_1_56_0<br />
<br />
<br />
THEN I IT COMPILED! UNBELIEVABLE!<br />
<br />
mv boost_1_84_0/ boost<br />
<br />
=== [[LaserWeb4]] ===<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
<br />
First impression: Much more powerful than jscut. For now, I prefer the simpler [[JSCut]]!<br />
<br />
Second Impression: JSCut does honor visibility of layers and paths. LaserWeb doesn't.<br />
<br />
Third Impression: Like the Material/Tool library. Can't it create tabs???<br />
<br />
=== [[PyCAM]] ===<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
=== Blender CAM ===<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
=== gcad3d ===<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
=== Other Software (yet to test) ===<br />
* https://pycam.sourceforge.net/other-programs/<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
=== [[krabzcam]] ===<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
=== [[FreeCAD]] ===<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
==== Converting [[STL]] to solids in [[FreeCAD]] ====<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7764IndyMill2024-03-23T16:05:09Z<p>Heiko: /* Creating Tabs With JSCut */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Work with [[CAD]]- and [[CAM]]-Software =<br />
== Creating [[GCODE]] ==<br />
=== [[JSCut.org]] ===<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
==== Creating Tabs With [[JSCut]] ====<br />
Since this functionality seems to be broken&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
<br />
unzip main.zip<br />
<br />
cd emsdk-main/<br />
<br />
./emsdk install latest<br />
./emsdk activate latest<br />
<br />
Adding this to .bash_profile:<br />
<br />
3 PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
4 EMSDK=/root/emsdk-main<br />
5 EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
<br />
em++: error: --memory-init-file is no longer supported<br />
<br />
-> removed line from Makefile<br />
<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
<br />
-> removed<br />
<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
<br />
tar xzf boost_1_84_0.tar.gz <br />
<br />
mv ../boost cpp/<br />
<br />
mv cpp/boost ../boost_1_56_0<br />
<br />
<br />
THEN I GAVE UP!<br />
<br />
mv boost_1_84_0/ boost<br />
<br />
=== [[LaserWeb4]] ===<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
<br />
First impression: Much more powerful than jscut. For now, I prefer the simpler [[JSCut]]!<br />
<br />
Second Impression: JSCut does honor visibility of layers and paths. LaserWeb doesn't.<br />
<br />
Third Impression: Like the Material/Tool library. Can't it create tabs???<br />
<br />
=== [[PyCAM]] ===<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
=== Blender CAM ===<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
=== gcad3d ===<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
=== Other Software (yet to test) ===<br />
* https://pycam.sourceforge.net/other-programs/<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
=== [[krabzcam]] ===<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
=== [[FreeCAD]] ===<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
==== Converting [[STL]] to solids in [[FreeCAD]] ====<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7763IndyMill2024-03-23T16:00:08Z<p>Heiko: /* Creating Tabs With JSCut */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Work with [[CAD]]- and [[CAM]]-Software =<br />
== Creating [[GCODE]] ==<br />
=== [[JSCut.org]] ===<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
==== Creating Tabs With [[JSCut]] ====<br />
Since this functionality seems to be broken&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
<br />
unzip main.zip<br />
<br />
cd emsdk-main/<br />
<br />
./emsdk install latest<br />
./emsdk activate latest<br />
<br />
Adding this to .bash_profile:<br />
<br />
3 PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
4 EMSDK=/root/emsdk-main<br />
5 EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
<br />
em++: error: --memory-init-file is no longer supported<br />
<br />
-> removed line from Makefile<br />
<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
<br />
-> removed<br />
<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
<br />
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz<br />
<br />
THEN I GAVE UP!<br />
<br />
=== [[LaserWeb4]] ===<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
<br />
First impression: Much more powerful than jscut. For now, I prefer the simpler [[JSCut]]!<br />
<br />
Second Impression: JSCut does honor visibility of layers and paths. LaserWeb doesn't.<br />
<br />
Third Impression: Like the Material/Tool library. Can't it create tabs???<br />
<br />
=== [[PyCAM]] ===<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
=== Blender CAM ===<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
=== gcad3d ===<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
=== Other Software (yet to test) ===<br />
* https://pycam.sourceforge.net/other-programs/<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
=== [[krabzcam]] ===<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
=== [[FreeCAD]] ===<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
==== Converting [[STL]] to solids in [[FreeCAD]] ====<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7762IndyMill2024-03-23T15:58:28Z<p>Heiko: /* Creating Tabs With JSCut */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Work with [[CAD]]- and [[CAM]]-Software =<br />
== Creating [[GCODE]] ==<br />
=== [[JSCut.org]] ===<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
==== Creating Tabs With [[JSCut]] ====<br />
Since this functionality seems to be broken&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
<br />
unzip main.zip<br />
<br />
cd emsdk-main/<br />
<br />
./emsdk install latest<br />
./emsdk activate latest<br />
<br />
Adding this to .bash_profile:<br />
<br />
3 PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
4 EMSDK=/root/emsdk-main<br />
5 EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
<br />
em++: error: --memory-init-file is no longer supported<br />
<br />
-> removed line from Makefile<br />
<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
<br />
-> removed<br />
<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
<br />
got it from https://www.boost.org/doc/libs/1_68_0/boost/<br />
<br />
THEN I GAVE UP!<br />
<br />
=== [[LaserWeb4]] ===<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
<br />
First impression: Much more powerful than jscut. For now, I prefer the simpler [[JSCut]]!<br />
<br />
Second Impression: JSCut does honor visibility of layers and paths. LaserWeb doesn't.<br />
<br />
Third Impression: Like the Material/Tool library. Can't it create tabs???<br />
<br />
=== [[PyCAM]] ===<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
=== Blender CAM ===<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
=== gcad3d ===<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
=== Other Software (yet to test) ===<br />
* https://pycam.sourceforge.net/other-programs/<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
=== [[krabzcam]] ===<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
=== [[FreeCAD]] ===<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
==== Converting [[STL]] to solids in [[FreeCAD]] ====<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7761IndyMill2024-03-23T15:55:32Z<p>Heiko: /* Creating Tabs With JSCut */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Work with [[CAD]]- and [[CAM]]-Software =<br />
== Creating [[GCODE]] ==<br />
=== [[JSCut.org]] ===<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
==== Creating Tabs With [[JSCut]] ====<br />
Since this functionality seems to be broken&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
<br />
unzip main.zip<br />
<br />
cd emsdk-main/<br />
<br />
./emsdk install latest<br />
./emsdk activate latest<br />
<br />
Adding this to .bash_profile:<br />
<br />
3 PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
4 EMSDK=/root/emsdk-main<br />
5 EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
<br />
em++: error: --memory-init-file is no longer supported<br />
<br />
-> removed line from Makefile<br />
<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
<br />
-> removed<br />
<br />
./cam.h:22:10: fatal error: 'boost/polygon/polygon.hpp' file not found<br />
<br />
THEN I GAVE UP!<br />
<br />
=== [[LaserWeb4]] ===<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
<br />
First impression: Much more powerful than jscut. For now, I prefer the simpler [[JSCut]]!<br />
<br />
Second Impression: JSCut does honor visibility of layers and paths. LaserWeb doesn't.<br />
<br />
Third Impression: Like the Material/Tool library. Can't it create tabs???<br />
<br />
=== [[PyCAM]] ===<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
=== Blender CAM ===<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
=== gcad3d ===<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
=== Other Software (yet to test) ===<br />
* https://pycam.sourceforge.net/other-programs/<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
=== [[krabzcam]] ===<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
=== [[FreeCAD]] ===<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
==== Converting [[STL]] to solids in [[FreeCAD]] ====<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7760IndyMill2024-03-23T15:54:44Z<p>Heiko: /* LaserWeb4 */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Work with [[CAD]]- and [[CAM]]-Software =<br />
== Creating [[GCODE]] ==<br />
=== [[JSCut.org]] ===<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
==== Creating Tabs With [[JSCut]] ====<br />
Since this functionality seems to be broken&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
<br />
unzip main.zip<br />
<br />
cd emsdk-main/<br />
<br />
./emsdk install latest<br />
./emsdk activate latest<br />
<br />
Adding this to .bash_profile:<br />
<br />
3 PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
4 EMSDK=/root/emsdk-main<br />
5 EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
<br />
em++: error: --memory-init-file is no longer supported<br />
<br />
-> removed line from Makefile<br />
<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
<br />
-> removed<br />
<br />
THEN I GAVE UP!<br />
<br />
=== [[LaserWeb4]] ===<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
<br />
First impression: Much more powerful than jscut. For now, I prefer the simpler [[JSCut]]!<br />
<br />
Second Impression: JSCut does honor visibility of layers and paths. LaserWeb doesn't.<br />
<br />
Third Impression: Like the Material/Tool library. Can't it create tabs???<br />
<br />
=== [[PyCAM]] ===<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
=== Blender CAM ===<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
=== gcad3d ===<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
=== Other Software (yet to test) ===<br />
* https://pycam.sourceforge.net/other-programs/<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
=== [[krabzcam]] ===<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
=== [[FreeCAD]] ===<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
==== Converting [[STL]] to solids in [[FreeCAD]] ====<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7759IndyMill2024-03-23T15:26:30Z<p>Heiko: /* LaserWeb4 */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Work with [[CAD]]- and [[CAM]]-Software =<br />
== Creating [[GCODE]] ==<br />
=== [[JSCut.org]] ===<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
==== Creating Tabs With [[JSCut]] ====<br />
Since this functionality seems to be broken&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
<br />
unzip main.zip<br />
<br />
cd emsdk-main/<br />
<br />
./emsdk install latest<br />
./emsdk activate latest<br />
<br />
Adding this to .bash_profile:<br />
<br />
3 PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
4 EMSDK=/root/emsdk-main<br />
5 EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
<br />
em++: error: --memory-init-file is no longer supported<br />
<br />
-> removed line from Makefile<br />
<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
<br />
-> removed<br />
<br />
THEN I GAVE UP!<br />
<br />
=== [[LaserWeb4]] ===<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
<br />
First impression: Much more powerful than jscut. For now, I prefer the simpler [[JSCut]]!<br />
<br />
Second Impression: JSCut does honor visibility of layers and paths. LaserWeb doesn't.<br />
<br />
=== [[PyCAM]] ===<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
=== Blender CAM ===<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
=== gcad3d ===<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
=== Other Software (yet to test) ===<br />
* https://pycam.sourceforge.net/other-programs/<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
=== [[krabzcam]] ===<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
=== [[FreeCAD]] ===<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
==== Converting [[STL]] to solids in [[FreeCAD]] ====<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7758IndyMill2024-03-23T15:19:04Z<p>Heiko: /* Creating Tabs With JSCut */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Work with [[CAD]]- and [[CAM]]-Software =<br />
== Creating [[GCODE]] ==<br />
=== [[JSCut.org]] ===<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
==== Creating Tabs With [[JSCut]] ====<br />
Since this functionality seems to be broken&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
<br />
unzip main.zip<br />
<br />
cd emsdk-main/<br />
<br />
./emsdk install latest<br />
./emsdk activate latest<br />
<br />
Adding this to .bash_profile:<br />
<br />
3 PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
4 EMSDK=/root/emsdk-main<br />
5 EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
<br />
em++: error: --memory-init-file is no longer supported<br />
<br />
-> removed line from Makefile<br />
<br />
em++: error: invalid command line setting `-sFORCE_ALIGNED_MEMORY=1`: forced aligned memory is not supported in fastcomp<br />
<br />
-> removed<br />
<br />
THEN I GAVE UP!<br />
<br />
=== [[LaserWeb4]] ===<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
<br />
First impression: Much more powerful than jscut. For now, I prefer the simpler [[JSCut]]!<br />
<br />
=== [[PyCAM]] ===<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
=== Blender CAM ===<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
=== gcad3d ===<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
=== Other Software (yet to test) ===<br />
* https://pycam.sourceforge.net/other-programs/<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
=== [[krabzcam]] ===<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
=== [[FreeCAD]] ===<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
==== Converting [[STL]] to solids in [[FreeCAD]] ====<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7757IndyMill2024-03-23T15:16:29Z<p>Heiko: /* Creating Tabs With JSCut */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Work with [[CAD]]- and [[CAM]]-Software =<br />
== Creating [[GCODE]] ==<br />
=== [[JSCut.org]] ===<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
==== Creating Tabs With [[JSCut]] ====<br />
Since this functionality seems to be broken&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
<br />
unzip main.zip<br />
<br />
cd emsdk-main/<br />
<br />
./emsdk install latest<br />
./emsdk activate latest<br />
<br />
Adding this to .bash_profile:<br />
<br />
3 PATH=$PATH:/root/emsdk-main:/root/emsdk-main/upstream/emscripten:/root/emsdk-main/node/16.20.0_64bit/bin<br />
4 EMSDK=/root/emsdk-main<br />
5 EMSDK_NODE=/root/emsdk-main/node/16.20.0_64bit/bin/node<br />
<br />
=== [[LaserWeb4]] ===<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
<br />
First impression: Much more powerful than jscut. For now, I prefer the simpler [[JSCut]]!<br />
<br />
=== [[PyCAM]] ===<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
=== Blender CAM ===<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
=== gcad3d ===<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
=== Other Software (yet to test) ===<br />
* https://pycam.sourceforge.net/other-programs/<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
=== [[krabzcam]] ===<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
=== [[FreeCAD]] ===<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
==== Converting [[STL]] to solids in [[FreeCAD]] ====<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7756IndyMill2024-03-23T15:14:52Z<p>Heiko: /* Creating Tabs With JSCut */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Work with [[CAD]]- and [[CAM]]-Software =<br />
== Creating [[GCODE]] ==<br />
=== [[JSCut.org]] ===<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
==== Creating Tabs With [[JSCut]] ====<br />
Since this functionality seems to be broken&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
<br />
unzip main.zip<br />
<br />
cd emsdk-main/<br />
<br />
./emsdk install latest<br />
./emsdk activate latest<br />
<br />
Adding this to .bash_profile:<br />
<br />
PATH += /root/emsdk-main<br />
PATH += /root/emsdk-main/upstream/emscripten<br />
PATH += /root/emsdk-main/node/16.20.0_64bit/bin<br />
EMSDK = /root/emsdk-main<br />
EMSDK_NODE = /root/emsdk-main/node/16.20.0_64bit/bin/node<br />
<br />
=== [[LaserWeb4]] ===<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
<br />
First impression: Much more powerful than jscut. For now, I prefer the simpler [[JSCut]]!<br />
<br />
=== [[PyCAM]] ===<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
=== Blender CAM ===<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
=== gcad3d ===<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
=== Other Software (yet to test) ===<br />
* https://pycam.sourceforge.net/other-programs/<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
=== [[krabzcam]] ===<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
=== [[FreeCAD]] ===<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
==== Converting [[STL]] to solids in [[FreeCAD]] ====<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7755IndyMill2024-03-23T15:11:27Z<p>Heiko: /* Creating Tabs With JSCut */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Work with [[CAD]]- and [[CAM]]-Software =<br />
== Creating [[GCODE]] ==<br />
=== [[JSCut.org]] ===<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
==== Creating Tabs With [[JSCut]] ====<br />
Since this functionality seems to be broken&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip<br />
* <del>wget https://github.com/tbfleming/web-cam-cpp/archive/refs/heads/master.zip</del><br />
noc:/srv/www/htdocs/jscut # make<br />
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 <br />
/bin/sh: line 1: em++: command not found<br />
make: *** [Makefile:63: default] Error 127<br />
noc:/srv/www/htdocs/jscut # <br />
<br />
wget https://github.com/emscripten-core/emsdk/archive/refs/heads/main.zip<br />
<br />
unzip main.zip<br />
<br />
cd emsdk-main/<br />
<br />
./emsdk install latest<br />
./emsdk activate latest<br />
<br />
=== [[LaserWeb4]] ===<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
<br />
First impression: Much more powerful than jscut. For now, I prefer the simpler [[JSCut]]!<br />
<br />
=== [[PyCAM]] ===<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
=== Blender CAM ===<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
=== gcad3d ===<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
=== Other Software (yet to test) ===<br />
* https://pycam.sourceforge.net/other-programs/<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
=== [[krabzcam]] ===<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
=== [[FreeCAD]] ===<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
==== Converting [[STL]] to solids in [[FreeCAD]] ====<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7754IndyMill2024-03-23T14:55:03Z<p>Heiko: /* Creating GCODE */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Work with [[CAD]]- and [[CAM]]-Software =<br />
== Creating [[GCODE]] ==<br />
=== [[JSCut.org]] ===<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
==== Creating Tabs With [[JSCut]] ====<br />
Since this functionality seems to be broken&hellip;<br />
cam-cpp.js is unavailable; tried the following paths:<br />
js/cam-cpp.js<br />
http://api.jscut.org/js/cam-cpp.js<br />
on https://jscut.org<br />
&hellip;I installed my own server:<br />
* wget https://github.com/tbfleming/jscut/archive/refs/heads/gh-pages.zip<br />
* unzip gh-pages.zip <br />
<br />
<br />
=== [[LaserWeb4]] ===<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
<br />
First impression: Much more powerful than jscut. For now, I prefer the simpler [[JSCut]]!<br />
<br />
=== [[PyCAM]] ===<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
=== Blender CAM ===<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
=== gcad3d ===<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
=== Other Software (yet to test) ===<br />
* https://pycam.sourceforge.net/other-programs/<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
=== [[krabzcam]] ===<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
=== [[FreeCAD]] ===<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
==== Converting [[STL]] to solids in [[FreeCAD]] ====<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heikohttps://www.wurst-wasser.net//wiki/index.php?title=IndyMill&diff=7753IndyMill2024-03-23T14:49:22Z<p>Heiko: /* LaserWeb4 */</p>
<hr />
<div>= About =<br />
Somewhere in 2022 I decided I wanted a [[CNC]] machine. After lengthy consideration the many options I decided to build an [[IndyMill]].<br />
<br />
Project website: https://indystry.cc/indymill/<br />
<br />
The building volume with my current limit switch configuration is about (X * Y * Z): <code>340 * 330 * 100mm</code><br />
<br />
= Ordering =<br />
I ordered whenever reasonable priced in my home country (germany), and only if the price was noticable better, in asia.<br />
<br />
Ordering in asia came with disadvantages:<br />
* long shipping time<br />
* customs fees<br />
* damaged goods (f.e. warped parts)<br />
* magnetic parts were rejected from logistics provider and returned to sender<br />
* &hellip;<br />
<br />
<br />
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!<br />
<br />
= Building =<br />
TBD<br />
<br />
= Setting up [[GRBL]] =<br />
{{Danger|This might be a bad idea, since [[GRBL]] seems to be abandoned since 2019…<br />
<br />
* Official Info: https://github.com/gnea/grbl/wiki<br />
* Alternatives:<br />
** https://github.com/Paciente8159/uCNC (some boards, inkl. ESPs)<br />
** https://github.com/grblHAL (many boards)<br />
** https://github.com/bdring/FluidNC (TBD)<br />
** https://github.com/SourceRabbit/RabbitGRBL (for ESP32)<br />
<br />
<br />
}}<br />
<br />
== Installing [[GRBL]] ==<br />
<br />
# Install Arduino IDE 1.x (not 2.x!)<br />
# Setup board type<br />
# Setup serial/USB-connection (you might want to add your user to group <tt>dialout</tt> to allow accessing <code>/dev/ttyUSB0</code>…)<br />
# Download as .zip: https://github.com/gnea/grbl<br />
# Extract zip<br />
# Open Arduino IDE<br />
:: {{key press|Sketch}} &rarr; {{key press|Library Import as .ZIP}} &rarr; select <code>grbl-master/grbl</code><br />
:: {{key press|File}} &rarr; {{key press|Examples}} &rarr; {{key press|grbl}} &rarr; {{key press|grblUpload}} &rarr; {{key press|&rarr;}}<br />
<br />
== Testing Connection ==<br />
# Download CNCjs-AppImage: https://cnc.js.org/<br />
# Launch it, set Connection parameters (device / speed)<br />
# Enter something like this:<br />
* Get current settings with {{key press|$$}}<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyUSB0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=0 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=0 (Invert limit pins, boolean)<br />
[…]<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
</syntaxhighlight><br />
<br />
== [[GRBL]]-Settings ==<br />
=== Setting step width ===<br />
* Change settings as described in Nikodem's manual for stepwidth:<br />
<syntaxhighlight lang="gcode"><br />
$1=255<br />
ok<br />
$100=640<br />
ok<br />
$101=640<br />
ok<br />
$102=400<br />
ok<br />
$110=1000<br />
ok<br />
$111=1000<br />
ok<br />
$112=1000<br />
ok<br />
$120=80<br />
ok<br />
$121=80<br />
ok<br />
$122=80<br />
ok<br />
</syntaxhighlight><br />
<br />
I changed above to meet my (micro)-stepping-setup (DIP #2 of my TB6600, micro-step 8, Pulse/Rev 1600) and ball-screws.<br />
<syntaxhighlight lang="gcode"><br />
$100=320<br />
$101=320<br />
$102=400<br />
</syntaxhighlight><br />
''Hint: Make sure you reset the machine after changing values, my [[GRBL]] acted strangely when not.''<br />
<br />
=== Setting directions ===<br />
* Set directions<ref>https://forum.makerforums.info/t/how-do-i-invert-the-y-and-z-axis-of-my-grbl-cnc-arduino-uno/80114</ref><ref>https://www.diymachining.com/downloads/GRBL_Settings_Pocket_Guide_Rev_B.pdf</ref><ref>https://linuxcnc.org/docs/html/user/user-concepts.html#_machine_configurations</ref><ref>https://www.cnc4fun.com/wp-content/uploads/2019/12/Grbl-Commands-v1.1-2.pdf</ref>:<br />
** Inverting Z-axis:<syntaxhighlight>$3=4</syntaxhighlight><br />
<br />
=== My settings (preliminary) ===<br />
<syntaxhighlight lang="gcode"><br />
CNCjs 1.10.3 [Grbl]<br />
Connected to /dev/ttyACM0 with a baud rate of 115200<br />
Grbl 1.1h ['$' for help]<br />
client> $$<br />
[MSG:'$H'|'$X' to unlock]<br />
$0=10 (Step pulse time, microseconds)<br />
$1=25 (Step idle delay, milliseconds)<br />
$2=0 (Step pulse invert, mask)<br />
$3=5 (Step direction invert, mask)<br />
$4=0 (Invert step enable pin, boolean)<br />
$5=1 (Invert limit pins, boolean)<br />
$6=0 (Invert probe pin, boolean)<br />
$10=1 (Status report options, mask)<br />
$11=0.010 (Junction deviation, millimeters)<br />
$12=0.002 (Arc tolerance, millimeters)<br />
$13=0 (Report in inches, boolean)<br />
$20=0 (Soft limits enable, boolean)<br />
$21=0 (Hard limits enable, boolean)<br />
$22=1 (Homing cycle enable, boolean)<br />
$23=0 (Homing direction invert, mask)<br />
$24=25.000 (Homing locate feed rate, mm/min)<br />
$25=500.000 (Homing search seek rate, mm/min)<br />
$26=250 (Homing switch debounce delay, milliseconds)<br />
$27=2000.000 (Homing switch pull-off distance, millimeters)<br />
$30=1000 (Maximum spindle speed, RPM)<br />
$31=0 (Minimum spindle speed, RPM)<br />
$32=0 (Laser-mode enable, boolean)<br />
$100=320.000 (X-axis travel resolution, step/mm)<br />
$101=320.000 (Y-axis travel resolution, step/mm)<br />
$102=400.000 (Z-axis travel resolution, step/mm)<br />
$110=500.000 (X-axis maximum rate, mm/min)<br />
$111=500.000 (Y-axis maximum rate, mm/min)<br />
$112=500.000 (Z-axis maximum rate, mm/min)<br />
$120=23.000 (X-axis acceleration, mm/sec^2)<br />
$121=23.000 (Y-axis acceleration, mm/sec^2)<br />
$122=10.000 (Z-axis acceleration, mm/sec^2)<br />
$130=200.000 (X-axis maximum travel, millimeters)<br />
$131=200.000 (Y-axis maximum travel, millimeters)<br />
$132=200.000 (Z-axis maximum travel, millimeters)<br />
ok<br />
><br />
<br />
</syntaxhighlight><br />
<br />
== Enabling Limit-Switches ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=LZri0vlNrRs&list=PLktKi_COpyPRd8JZfjhskWSvsFN3Cb1v8&index=9<br />
** https://github.com/gnea/grbl/wiki/Set-up-the-Homing-Cycle<br />
** https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches<br />
* Do:<br />
** MAYBE NOT (but definitely while testing limit switches!): Enable hard limits: <code>$21=1</code><br />
** Enable homing cycle: <code>$22=1</code><br />
** Set top left home location: <code>$23=1</code> (see above links for more values)<br />
** Set <code>$5</code> according to NO/NC switches used<br />
=== Testing ===<br />
Try this:<br />
$H<br />
<br />
== Hold/Start-Button ==<br />
See: https://discuss.inventables.com/t/need-to-pause-a-carve-grbl-feed-hold-cycle-start/16419<br />
<br />
Picture TBD<br />
<br />
== Z-Axis-Probe ==<br />
* See also:<br />
** https://www.youtube.com/watch?v=l9o6ZUjb3k0<br />
* Do:<br />
** TBD<br />
<br />
= Work with [[CAD]]- and [[CAM]]-Software =<br />
== Creating [[GCODE]] ==<br />
=== [[JSCut.org]] ===<br />
{{Tipp|Tipps:<br />
* 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!<br />
* Adding tabs with [[Inkscape]]:<br />
** [[Inkscape add CNC tabs]]<br />
}}<br />
{{Info|1=[[JSCut]] is awesome, but has downsides:<br />
* Can't create tabs (or won't work at the time of testing)<br />
* Won't cut open-ended paths, only closed paths. Will close path if open with strange results<br />
* [[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)!<br />
<br />
More about [[JSCut]]: https://www.youtube.com/watch?v=dVgf0Hf91vA<br />
<br />
Since JSCut isn't developed any more, try using it's successor: [[Laserweb]]<br />
}}<br />
* Create [[SVG]] with [[Inkscape]]<br />
* Launch https://jscut.org/<br />
* Open [[SVG]]<br />
* Set units correctly (in my case <tt>mm</tt>)<br />
* Set speeds and diameters, material strength and so on...<br />
* Select object<br />
* Generate operation<br />
* Preview<br />
* Repeat operation-generation for all your objects<br />
* Download<br />
* Hope for the best :)<br />
<br />
<br />
=== [[LaserWeb4]] ===<br />
[[Laserweb]] seems to be a very active project...TBD STILL TESTING<br />
<br />
First impression: Much more powerful than jscut. For now, I prefer the simpler [[JSCut]]!<br />
<br />
=== [[PyCAM]] ===<br />
Still needs python 2.7 and seems to abandoned since 2019.<br />
<br />
=== Blender CAM ===<br />
NOT TESTED YET! <br />
<br />
https://blendercam.com/<br />
<br />
=== gcad3d ===<br />
NOT TESTED YET! <br />
<br />
https://www.gcad3d.org/<br />
<br />
=== Other Software (yet to test) ===<br />
* https://pycam.sourceforge.net/other-programs/<br />
* https://github.com/linuxcnc/simple-gcode-generators<br />
* [[GCode]]-Extension of [[Inkscape]]<br />
<br />
=== [[krabzcam]] ===<br />
NOT TESTED YET! Looks much like jscut, but a bit more sophisticated.<br />
<br />
* Launch: https://mkrabset.github.io/krabzcam/index.html<br />
* Manual: https://mkrabset.github.io/krabzcam/manual/manual.html<br />
<br />
=== [[FreeCAD]] ===<br />
See also<br />
* https://www.youtube.com/watch?v=XRNnWAUoXrk<br />
* https://wiki.freecad.org/Path_Job<br />
<br />
Do:<br />
* 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…<br />
* Launch [[FreeCAD]]<br />
* Make sure you have already created proper solids (see above)!<br />
* Make sure units are ok: {{key press|Preferences}} &rarr; {{key press|General}} &rarr; {{key press|Unit System}} &rarr; {{key press|Metric small parts & CNC}}<br />
* Create Job:<br/>[[File:1upmushroom coster path ksnip_2024-02-14_13-12-16.png|thumb|none|<br />
1. Select solid<br />
2. Choose {{key press|Path}}-Workbench<br />
3. Create Job|400px]]<br />
* Choose solid:<br/>[[File:freecad solid choose gcode ksnip_2024-02-15_13-35-40.png|200px]]<br />
* Set {{key press|Output}} to <code>grbl</code><br />
* Create tools as needed: {{key press|Path}} &rarr; {{key press|Toolbit Library Editor}}<br />
* Remove default tool<br />
* Choose Tool, set # to 1<br />
* Set H/V speed<br />
* TBD TBD TBD<br />
<br />
<br />
==== Converting [[STL]] to solids in [[FreeCAD]] ====<br />
See also: https://forum.freecad.org/viewtopic.php?t=14136<br />
<br />
# Open the [[STL]] file<br />
# Select object<br />
# {{key press|Part}} &rarr; {{key press|Create shape from mesh}}<br />
# Select new object<br />
# {{key press|Part}} &rarr; {{key press|Converte to solid}}<br />
<br />
= Lessons Learned =<br />
== General ==<br />
* Origin is in front-left corner, increasing up (Z), right (X) and back (Y)<br />
* Origin of [[SVG]]-designs is usually top-left corner, increasing right (X), decreasing towards you (Y)<br />
* Double-Check all settings before first use (most importantly step width, end switches)<br />
* Don't think it's as easy as [[3D-Printing]], where the slicer will do all the work for you!<br />
* You have to make decisions while creating the [[GCODE]] or even the design:<br />
** Which pockets should be done first?<br />
** Which pockets should be done last?<br />
** Will any operation make your part move or break?<br />
** Which speed is best?<br />
** What kind of operation do you need? Pocket? Engrave?<br />
** Which milling bits will you use?<br />
* If you don't use hard limits ($21=1), then [[GRBL]] will jog happily ahead, even if the endswitch has opened.<br />
** At least homing ($H) works without hard limits, since it retracts a bit to close the switches again.<br />
** Hard limits comes in very handy if your testing your limit switches!<br />
<br />
== Cutting Speeds ==<br />
{{WIP|This is very much likely to change - I'm still learning every day!}}<br />
<br />
I used a 500W china spindle for my tests.<br />
<br />
=== Plexiglas (PMMA) ===<br />
Melts at 160°C (even earlier than your printer's PLA or PETG).<br />
* [https://de.wikipedia.org/wiki/Polymethylmethacrylat More on PMMA at wikipedia]<br />
* [https://www.cnc-step.de/plexiglas-fraesen/ Great tipps at CNC-Step]<br />
* [https://www.cnc-step.de/plexiglas-gravieren/ Engraving tipps at CNC-Step]<br />
These are the main challenges:<br />
* Make sure the chips leave the flute so they can't friction weld (dust shoe, compressed air)<br />
* Finding the highest cutting volume (diameter*speed*attack) while keeping the tool as cool as possible<br />
<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 0.5 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
| single-flute || 2.0 || 400 || 30 || 0.75 || 10,000 || none || Looks good, might be the limit before it shows.<br />
|-<br />
|}<br />
<br />
==== Engraving ====<br />
0.5mm deep TBD TBD<br />
<br />
=== Poplar plywood (Pappelsperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 300 || 30 || 2.0 || 10,000 || none || Great result, more should be doable!<br />
|-<br />
|}<br />
<br />
=== Pine plywood (Kiefersperrholz) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 2.0 || 400 || 2.0 || 100|| 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
|}<br />
<br />
=== OSB (Grobspanplatten) ===<br />
{| border="1" class="wikitable sortable"<br />
! cutter !! diameter (mm) !! speed (mm/min) !! attack (mm) !! plunge (mm/min) !! rpm !! cooling !! notes <br />
|-<br />
| single-flute || 3.175 || 400 || 0.75 || 80 || 10,000 || none || Works out fine, more speed should be possible.<br />
|-<br />
| single-flute || 3.175 || 400 || 1.00 || 80 || 10,000 || none || TBD<br />
|-<br />
|}<br />
<br />
== Dust Shoe ==<br />
Cutting makes a lot of dirt&hellip;<br />
<br />
I used this design ( https://www.thingiverse.com/thing:3007107 ) and tweaked it a little:<br />
* Transparent plate: https://www.thingiverse.com/thing:6512697<br />
* Adaptor or my vaccumer: https://www.thingiverse.com/thing:6503052<br />
<br />
I have a dust shoe with brush/brizzles and one made out of PETG-sheet-leftovers (0.5mm).<br />
<br />
This is how it looks with a normal brush:<br />
<br />
[[File:PXL_20240302_121824163 small.jpg|400px]]<br />
<br />
This is how I made the PETG "brush":<br />
* Cut a about 70mm wide, 400mm long strip<br />
* Fold 5mm over:<br/>[[File:PXL_20240303_114526675 falzen small.jpg|200px]]<br/><br />
* Insert it into the rail of the shoe<br />
* Cut 10mm wide segments<br />
<br />
TBD<br />
- IMAGE<br />
- Link zu meinem Design<br />
<br />
= Troubleshooting =<br />
== 10mm are not 10mm ==<br />
Check <code>$100</code>, <code>$101</code>, <code>$102</code>, your driver's micro-step-settings and your ballscrews.<br />
<br />
== CNCjs-AppImage won't run on Lenovo T60 ==<br />
The T60 is kinda 32bit, that might be the catch.<br />
<br />
Try installing with [[npm]]: https://www.npmjs.com/package/cncjs<br />
<br />
Run it:<br />
heiko@T60-1951-debian:~$ cncjs<br />
2024-02-18T15:29:24.819Z - info init Loading configuration from "/home/heiko/.cncrc"<br />
(node:20609) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency<br />
(Use node --trace-warnings ... to show where the warning was created)<br />
2024-02-18T15:29:25.386Z - info init Starting the server at http://127.0.1.1:8000<br />
<br />
Use it:<br />
http://127.0.1.1:8000<br />
<br />
== Cut freezes ==<br />
=== The Problem ===<br />
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.<br />
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.<br />
<br />
=== The Analysis ===<br />
* Similar problems from the net:<br />
** https://github.com/grbl/grbl/issues/483<br />
** [https://github.com/winder/Universal-G-Code-Sender/wiki/Connecting-the-Controller this] about serial drivers and UNOs/replicas<br />
* Try another G-Code-Sender (like UGS instead if CNCjs) (UGS is more chatty when encountering problems than CNCjs)<br />
* Disable spindle<br />
* Disconnect limit-switches (and turn <code>$5</code> off accordingly (set to 0 if using normally-closed (as you should be))<br />
* Check stepper frequencies (vs. micro-stepping-settings) - can your Arduino UNO produce the required frequencies?<br />
* Disable steppers (shutting off power supply)<br />
* Disable WiFi<br />
* Try another, short, shielded USB-cable<br />
* Try an USB-isolator, I used some 18€ item from amazon, and it seems to worsen the problem, maybe this is just snakeoil<br />
* Unplugging the arduino power adaptor seems to help a little<br />
* Use another computer<br />
** Lenovo M72e: no luck<br />
** Lenovo T60: no luck<br />
** Apple MacBook Pro 13" (plug the power adaptor into Apple MacBook Pro 13", not the docking station &rarr; seems to work most of time)<br />
<br />
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.<br />
<br />
=== The Workaround ===<br />
None of the above brought up a viable solution.<br />
<br />
This is what works for me as a workaround:<br />
* Keep humidity low and temperature on a comfy level<br />
* Unplug the arduino power supply, let the PC power the UNO<br />
* Use MacBook Pro 13" with NO power supply attached (or maybe plugged in the MBP, not the docking station)<br />
<br />
=== The Solution ===<br />
Dump the crappy not-genuine UNO board and get a genuine one. Works like a charm.<br />
<br />
= Footer =<br />
* Links<br />
** TBD<br />
* Footnotes:<br />
<references/><br />
<br />
[[Category:CNC]]</div>Heiko