{"id":758,"date":"2024-10-27T17:32:17","date_gmt":"2024-10-27T17:32:17","guid":{"rendered":"https:\/\/mechied.com\/?post_type=portfolio&#038;p=758"},"modified":"2024-10-27T17:59:40","modified_gmt":"2024-10-27T17:59:40","slug":"servo-coolant-nozzle","status":"publish","type":"portfolio","link":"https:\/\/mechied.com\/index.php\/portfolio\/servo-coolant-nozzle\/","title":{"rendered":"Servo Coolant Nozzle"},"content":{"rendered":"\n<p>On my journey to cut aluminum on my CNC as fast as possible, I&#8217;ve come to realize that coolant flow and chip extraction are the limiting factors for my machine (a Fadal 3016). I wanted to make sure the coolant always is hitting the tool at the ideal place, but don&#8217;t want to have to constantly pause the machine to move the nozzles to adjust for different length tools. Moderns machines have features like built in servo coolant nozzles, high pressure coolant pumps, and through spindle coolant to solve this and older machines generally can be retrofitted. Since these kits are worth more than my machine, I decided to build my own, plus I figured I would build something better with a web interface (instead of a small LCD screen) and I could sniff the command traffic to determine how to aim the nozzle at any given time.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"RPi Based Automatic Servo Coolant Nozzle for Fadal 3016\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/Wx994YhIOPg?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>The code is posted on <a href=\"https:\/\/github.com\/daleshort\/servocoolant\">my github<\/a>. The servo control, signal monitoring, and webserver are a go program that runs on the RPi. The web interface is written in typescript with React and React Bootstrap components. There is also a <a href=\"https:\/\/github.com\/daleshort\/serialsplitter\" data-type=\"link\" data-id=\"https:\/\/github.com\/daleshort\/serialsplitter\">serial tapping program<\/a> (written in go) that runs on the control computer and connects to a chrome browser serial port to report the sniffed traffic. The RPi has a CI\/CD script to automatically update the code and site on a git push.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69f448ebd38a8&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69f448ebd38a8\" class=\"aligncenter size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"266\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/mechied.com\/wp-content\/uploads\/2024\/10\/servo-500x266.jpg\" alt=\"\" class=\"wp-image-761\" srcset=\"https:\/\/mechied.com\/wp-content\/uploads\/2024\/10\/servo-500x266.jpg 500w, https:\/\/mechied.com\/wp-content\/uploads\/2024\/10\/servo-300x159.jpg 300w, https:\/\/mechied.com\/wp-content\/uploads\/2024\/10\/servo-768x408.jpg 768w, https:\/\/mechied.com\/wp-content\/uploads\/2024\/10\/servo-1536x816.jpg 1536w, https:\/\/mechied.com\/wp-content\/uploads\/2024\/10\/servo-400x213.jpg 400w, https:\/\/mechied.com\/wp-content\/uploads\/2024\/10\/servo-600x319.jpg 600w, https:\/\/mechied.com\/wp-content\/uploads\/2024\/10\/servo-800x425.jpg 800w, https:\/\/mechied.com\/wp-content\/uploads\/2024\/10\/servo.jpg 1920w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Control Interface<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"351\" src=\"https:\/\/mechied.com\/wp-content\/uploads\/2024\/10\/annotated-normas-for-site-500x351.png\" alt=\"\" class=\"wp-image-759\" srcset=\"https:\/\/mechied.com\/wp-content\/uploads\/2024\/10\/annotated-normas-for-site-500x351.png 500w, https:\/\/mechied.com\/wp-content\/uploads\/2024\/10\/annotated-normas-for-site-300x211.png 300w, https:\/\/mechied.com\/wp-content\/uploads\/2024\/10\/annotated-normas-for-site-400x281.png 400w, https:\/\/mechied.com\/wp-content\/uploads\/2024\/10\/annotated-normas-for-site.png 569w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><figcaption class=\"wp-element-caption\">Coolant Nozzle<\/figcaption><\/figure>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>RPi CNC coolant nozzle controller written in Golang with Typescript\/React frontend<\/p>\n","protected":false},"author":1,"featured_media":763,"menu_order":2,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"_vp_format_video_url":"","_vp_image_focal_point":[],"footnotes":""},"portfolio_category":[19,6,11,8,18],"portfolio_tag":[],"class_list":["post-758","portfolio","type-portfolio","status-publish","format-standard","has-post-thumbnail","hentry","portfolio_category-golang","portfolio_category-programming","portfolio_category-react","portfolio_category-rpi","portfolio_category-typescript"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mechied.com\/index.php\/wp-json\/wp\/v2\/portfolio\/758","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mechied.com\/index.php\/wp-json\/wp\/v2\/portfolio"}],"about":[{"href":"https:\/\/mechied.com\/index.php\/wp-json\/wp\/v2\/types\/portfolio"}],"author":[{"embeddable":true,"href":"https:\/\/mechied.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"version-history":[{"count":5,"href":"https:\/\/mechied.com\/index.php\/wp-json\/wp\/v2\/portfolio\/758\/revisions"}],"predecessor-version":[{"id":767,"href":"https:\/\/mechied.com\/index.php\/wp-json\/wp\/v2\/portfolio\/758\/revisions\/767"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mechied.com\/index.php\/wp-json\/wp\/v2\/media\/763"}],"wp:attachment":[{"href":"https:\/\/mechied.com\/index.php\/wp-json\/wp\/v2\/media?parent=758"}],"wp:term":[{"taxonomy":"portfolio_category","embeddable":true,"href":"https:\/\/mechied.com\/index.php\/wp-json\/wp\/v2\/portfolio_category?post=758"},{"taxonomy":"portfolio_tag","embeddable":true,"href":"https:\/\/mechied.com\/index.php\/wp-json\/wp\/v2\/portfolio_tag?post=758"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}