이 튜토리얼에서는 아두이노 기반 CNC 폼 커팅 머신을 만드는 방법을 배웁니다. 단순하고 저렴한 재료, 일부 3D 프린팅 부품, 아두이노 컨트롤러로 만든 전형적인 DIY CNC 머신입니다.
다음 영상을 시청하거나 아래 작성된 튜토리얼을 읽어보세요.
개요
비트나 레이저 대신 이 머신의 주 도구는 열선(핫 와이어)입니다. 전류가 흐르면 매우 뜨거워지는 특수 저항선을 사용합니다. 열선이 폼을 통과하며 녹이거나 기화시켜 원하는 형상을 정밀하고 쉽게 얻을 수 있습니다.
"쉽다"고 말한 이유는 CNC 머신 제작이 사실 그리 어렵지 않기 때문입니다. 초보자로서 첫 DIY CNC 머신을 만들어보고 싶다면 끝까지 시청하세요. 머신 설계부터 전자 부품 연결, 아두이노 프로그래밍, 도형 준비, G-코드 생성, 무료 오픈소스 프로그램으로 머신 제어까지 전 과정을 설명하겠습니다. 시작해볼까요.
아두이노 CNC 폼 커팅 머신 3D 모델
먼저 이 머신의 3D 모델입니다. 아래에서 다운로드하고 브라우저에서 탐색할 수 있습니다.
Thangs에서 어셈블리 3D 모델 다운로드.
3D 프린팅용 STL 파일:
기본 구조는 20x20mm T-슬롯 알루미늄 프로파일로 만들었습니다. 구멍을 뚫을 필요 없고 조립이 쉬우며, 분해 후 다른 프로젝트에 재사용할 수 있어 선택했습니다. 각 축의 움직임은 10mm 평봉(스무스 로드) 위를 미끄러지는 리니어 베어링으로 구현했습니다. 축당 두 개의 봉을 사용했습니다.
슬라이딩 블록이 좀 독특해 보이지만, 여러 기능을 하나의 부품으로 3D 프린팅하기 쉽게 설계했습니다. 예를 들어 X 슬라이딩 블록은 두 개의 리니어 베어링을 수용하고, Y축 봉을 고정하며, Y축 벨트 풀리를 장착하고, X축 벨트 체결용 핸들을 갖습니다.
슬라이딩 블록 구동에는 NEMA 17 스테퍼 모터를 사용합니다. 샤프트 커플러, 나사봉, 두 개의 풀리, 두 개의 벨트로 양쪽 슬라이딩 블록을 동시에 균일하게 구동합니다.
세 번째 스테퍼 모터도 있는데, 이를 통해 2.5D 형상 가공이 가능하며 나중에 설명하겠습니다.
구조와 강성 면에서는 최고는 아니지만, 최소한의 부품으로 기능하는 머신을 만드는 것이 목표였습니다.
3D 프린팅에는 Creality CR-10 3D 프린터를 사용했습니다. 합리적인 가격에 훌륭한 프린터입니다.
일부 3D 프린팅 부품은 후가공(서포트 제거)이 필요합니다.
슬라이서 소프트웨어의 서포트 설정 문제로 여분 재료를 줄로 다듬어야 하는 경우도 있었습니다.
CNC 조립
자재가 준비됐으니 머신 조립을 시작합니다.
이 CNC 머신에 사용된 주요 부품 목록입니다. 전자 부품 목록은 아래 회로도 섹션에 있습니다.
20x20mm 500mm T-슬롯 알루미늄 프로파일 6개
10mm 리니어 레일 봉 4개
T-슬롯 프로파일 코너 브라켓 6개
T-슬롯 프로파일용 M5 너트 50개
10mm 리니어 베어링 6개
GT2 벨트 + 톱니 풀리 + 아이들러 풀리
베어링 5x16x5mm 2개 (영상에서는 6mm 베어링도 사용했으나, 5mm가 더 흔해 구하기 쉽습니다. 따라서 STL 다운로드 파일에 샤프트 커플러와 마운팅 브라켓의 5mm/6mm 두 버전을 모두 포함했습니다. 3D 프린팅 시 이 점 고려하세요.)
가지고 있던 T-슬롯 프로파일이 60cm라 3D 모델 치수에 맞춰 금속 톱으로 잘랐습니다. 코너 브라켓으로 베이스 프레임을 조립했습니다. T-슬롯 프로파일 작업은 정말 쉽습니다. M5 볼트와 T-슬롯 너트만 있으면 무엇이든 부착할 수 있습니다.
X축 샤프트 클램프를 설치합니다. 샤프트 봉을 클램프에 반쯤 끼운 상태에서 X축 슬라이딩 블록도 끼웁니다. 블록에 베어링 두 개를 넣고 봉에 장착합니다. 봉을 반대쪽까지 밀어 넣고 M4 볼트와 너트로 고정합니다. 반대쪽도 같은 과정으로 진행합니다.
이제 Y축을 설치합니다. 먼저 Y축 봉을 X축 슬라이딩 블록에 끼우고, 블록 하단과 플러시되게 맞춘 뒤 M4 너트와 볼트로 고정합니다. 그런 다음 Y축 슬라이딩 블록을 끼웁니다. 이 블록들은 리니어 베어링을 하나만 사용합니다.
Y축 봉 위쪽에 마운팅 브라켓을 장착해 두 Y축 봉을 상단의 T-슬롯 프로파일과 연결합니다. 역시 같은 방식으로 봉에 고정합니다. T-슬롯 프로파일을 마운팅 브라켓에 부착할 때 M5 볼트와 T-슬롯 너트 3개를 먼저 브라켓에 끼운 뒤 프로파일을 밀어 넣고 볼트를 조입니다.
이제 X축과 Y축 모두 자유롭게 움직이는 메인 구조가 완성됐습니다.
베이스 프레임에 다리를 부착합니다. T-슬롯 프로파일이라 역시 간단합니다. 다리를 고정한 뒤 X축용 첫 번째 스테퍼 모터를 장착합니다. 여기서는 모터 샤프트를 다리 쪽으로 배치해 나중에 벨트 풀리를 장착할 수 있게 20mm 스페이서 너트를 사용했습니다.
두 벨트를 동시에 구동할 나사봉(6mm)을 준비합니다. 적당히 자르고, 스테퍼 반대쪽 다리에 6mm 내경 베어링을 끼운 뒤 나사봉을 통과시킵니다. 너트로 베어링에 봉을 고정하고 벨트용 톱니 풀리 두 개를 장착합니다.
나사봉과 스테퍼 모터 연결용 샤프트 커플러를 3D 프린팅했습니다(모터 측 5mm 홀, 봉 측 6mm 홀). 커플러에 M3 너트 슬롯이 있어 M3 볼트나 그럽 스크류로 모터 샤프트와 나사봉에 고정합니다. 풀리를 슬라이딩 블록 핸들과 일직선이 되게 위치시키고 그럽 스크류로 고정합니다.
머신 반대편에는 아이들러 풀리 두 개를 장착합니다. M5 볼트와 너트로 고정했습니다.
이제 X축용 GT2 벨트를 설치합니다. 먼저 벨트 한쪽을 슬라이딩 블록에 케이블 타이로 고정합니다. 톱니 풀리 → 반대편 아이들러 풀리 → 다시 슬라이딩 블록 순으로 벨트를 감고 적당히 잘라 다른 쪽도 케이블 타이로 고정합니다.
반대쪽도 같은 방식으로 진행합니다. 벨트 고정 시 두 슬라이딩 블록이 X축 상 같은 위치에 있어야 합니다. 레일 끝까지 밀어 붙여 벨트를 팽팽하게 당긴 뒤 케이블 타이로 고정하면 됩니다. X축 슬라이딩 메커니즘 완료.
같은 방식으로 Y축 메커니즘을 조립합니다. 벨트 고정에도 케이블 타이를 씁니다. 슬라이딩 블록에 핸들이 하나뿐이라, 벨트 한쪽을 케이블 타이로 묶고, 벨트를 팽팽하게 당긴 뒤 다른 케이블 타이로 양끝을 함께 잡습니다. 이전 타이 제거하고 여분 벨트 자르면 됩니다. 반대쪽 고정 시에도 두 블록이 Y축 상 같은 위치에 있게 하세요. Y축 메커니즘도 완료.
X축 위에 T-슬롯 프로파일 하나를 더 가로지릅니다. 이 프로파일은 3번째 스테퍼 모터 장착용이자 폼 조각을 올려놓는 용도입니다. 3번째 스테퍼로 2.5D, 즉 3차원 형상(예: 체스 말) 가공이 가능합니다.
이제 저항선(열선)을 설치합니다. 고열을 견디며 길이 방향으로 균일한 온도를 유지해야 합니다. 보통 니크롬선이나 스테인리스 낚시줄을 쓰는데, 저렴하고 구하기 쉽습니다. 선은 두 타워(슬라이딩 블록) 사이에 팽팽하게 당겨야 하는데, 방법은 다음과 같습니다. 양쪽 슬라이딩 블록에 M5 볼트를 달고 작은 익스텐션 스프링을 연결했습니다.
열선을 스프링에 연결하고 스프링이 허용하는 만큼 팽팽하게 당겼습니다. 스프링을 쓰는 이유는 열선이 가열되면 길이가 늘어나는데, 스프링이 이를 보상해주기 때문입니다.
저항선과 전기 배선을 연결합니다. DC 전원을 쓰므로 극성은 상관없고, 전류가 흘러 열선이 뜨거워지기만 하면 됩니다. 전기 배선은 3~5A 전류를 견딜 수 있을 만큼 굵어야 합니다. 저는 22게이지를 썼지만 20~18게이지를 추천합니다.
처음엔 두 너트 사이에 전기선을 끼워 코일을 통해 열선으로 전류가 흐르게 했습니다. 그런데 이게 잘 작동하지 않았습니다(나중에 설명). 배선은 슬라이딩 블록 핸들을 통과하게 해 열선과 거리를 뒀습니다.
이제 CNC 머신의 엔드스톱(리미트 스위치)을 설치합니다. 이 마이크로 리미트 스위치는 그라운드, 상시 개방(NO), 상시 폐쇄(NC) 3개 단자가 있습니다. 처음에는 NO로 연결했으나 테스트 후 NC로 바꿨습니다. NC 연결이 더 안정적으로 작동합니다.
문제는 CNC 머신 작동 시 발생하는 전기 노이즈가 스위치를 오작동시켜(마치 눌린 것처럼) 머신을 멈추게 한다는 점입니다.
아두이노 CNC 폼 커터 회로도
스테퍼 모터 케이블을 연결하고 모든 전자 부품 연결 방법을 살펴보겠습니다. 전체 회로도입니다.
이 CNC 머신의 두뇌는 아두이노 보드입니다. 여기에 아두이노 CNC 쉴드, A4988 스테퍼 드라이버 3개, 열선 온도 제어용 DC-DC 컨버터가 필요합니다.
필요한 부품:
스테퍼 모터 – NEMA 17
A4988 스테퍼 드라이버
아두이노 CNC 쉴드
아두이노 우노
DC-DC 컨버터
리미트 스위치
DC 파워 서플라이
전자 부품 거치대를 3D 프린팅해 T-슬롯 프로파일 한쪽에 고정했습니다. M3 볼트로 아두이노 보드를 거치대에 고정하고 그 위에 CNC 쉴드를 장착했습니다.
점퍼로 스테퍼 드라이버의 분해능(마이크로스텝)을 설정합니다. 1/16 스텝으로 설정하려고 드라이버당 점퍼 3개씩 꽂았습니다. 이렇게 하면 모터 움직임이 더 부드러워집니다.
드라이버 장착 시 방향이 맞는지 확인하세요. 작은 포텐쇼미터가 쉴드 하단 쪽을 향하면 올바른 방향입니다.
DC 컨버터를 고정하고, 세 스테퍼 모터를 CNC 쉴드에 연결했습니다. 두 리미트 스위치는 X+와 Y+ 엔드스톱 핀에 연결했습니다. 전원은 12V 6A DC 파워 서플라이를 사용합니다. 아두이노 CNC 쉴드는 12~36V에서 동작하고, 사용한 DC 컨버터도 같은 전압 범위에서 작동합니다. DC 컨버터 입력 측에 스위치를 달아 열선을 별도로 켜고 끌 수 있게 했습니다. DC 컨버터 출력에는 열선 양끝의 두 선을 연결했습니다. 마지막으로 아두이노는 USB로, CNC 쉴드와 스테퍼 모터는 DC 파워 잭으로 전원을 공급합니다.
이제 머신이 제대로 작동하는지 테스트해볼 차례입니다. 열선부터 테스트합니다. DC 컨버터 입력에 0V, 스위치 켜면 12V 입력. 출력은 처음에 0V지만 포텐쇼미터를 돌리면 0~12V로 조절돼 열선에 전류가 흐르고 온도가 올라갑니다.
적정 전압을 찾는 가장 좋은 방법은 폼 조각을 잘라보는 것입니다. 열선이 저항 없이 부드럽게 폼을 자를 정도면 적당합니다.
하지만 초기 테스트 후 열선이 열에 의해 늘어나고, 이를 보상해야 할 스프링이 제 역할을 못 했습니다.
원인은 이 구성에서 전류가 스프링에도 흐르면서 과열돼 스프링이 기능을 잃었기 때문입니다.
스프링을 새 것으로 교체하고, 악어 클립으로 전기선을 열선에 직접 연결해 스프링을 바이패스했습니다.
아두이노 CNC 머신용 소프트웨어
이제 이 머신에 생명을 불어넣어 진짜 CNC 머신으로 만들어보겠습니다.
먼저 머신 동작을 제어하는 펌웨어를 아두이노에 업로드해야 합니다. DIY CNC 머신에서 가장 대중적인 선택은 GRBL 펌웨어입니다.
오픈소스로 GitHub에서 다운로드 가능합니다. 압축 해제 후 "grbl" 폴더를 아두이노 라이브러리 디렉토리에 복사합니다. 아두이노 IDE에서 파일 > 예제 > grbl > grblUpload를 엽니다. 사용 중인 보드(아두이노 우노)와 COM 포트를 선택하고 스케치를 업로드합니다. 업로드 완료되면 아두이노가 G-코드를 읽고 그에 따라 머신을 제어할 수 있게 됩니다.
다음으로 아두이노와 통신하며 명령을 내릴 인터페이스/컨트롤러가 필요합니다. 역시 오픈소스인 Universal G-Code Sender(UGS)를 사용합니다.
2.0 Platform 버전을 다운로드했습니다. 압축 해제 후 bin 폴더의 ugsplatform 실행 파일을 실행합니다. 자바 프로그램이라 Java Runtime Environment(JRE)가 필요합니다(공식 사이트에서 무료 다운로드).
UGS를 열면 먼저 설정 마법사를 실행해 머신을 구성합니다.
포트만 제대로 선택해 아두이노와 연결하면 됩니다. 연결되면 버튼을 눌러 모터 회전 방향을 확인하고, 필요하면 반전시킵니다. 리미트 스위치가 있는 홈 위치에서 양의 방향으로 움직이게 설정했습니다.
다음으로 모터 스텝을 보정해 정확한 움직임을 구현합니다. 드라이버에서 1/16 스텝을 선택했고 모터가 200 스텝/회전이므로, 360도 회전에 3200 스텝이 필요합니다. 전송 방식(풀리 크기)에 따라 1mm 이동에 필요한 스텝 수를 계산합니다. 기본값은 250 스텝/mm입니다. 이동 버튼을 누르면 모터가 250 스텝 움직입니다.
자로 실제 이동 거리를 측정해 프로그램에 입력하면, 프로그램에서 변경해야 할 steps/mm 값을 계산해줍니다. 제 경우 83 steps/mm였습니다. Z축은 400 steps/mm로 설정했습니다(1mm 명령 시 45도 회전).
리미트 스위치 작동 확인도 필요합니다. NO/NC 연결 여부에 따라 여기서 반전 설정도 가능합니다. 앞서 말했듯 NC가 더 잘 작동했습니다. 주의할 점: 우리 머신엔 Z축 리미트 스위치가 없으므로 이를 꺼야 합니다. 안 끄면 호밍이 안 됩니다. 아두이노 라이브러리의 grbl 폴더에 있는 config.h 파일을 편집해야 합니다.
호밍 사이클 관련 줄을 찾아 3축 CNC 기본 설정을 주석 처리하고 2축 머신 설정을 주석 해제합니다. 저장 후 grblUpload 예제를 다시 아두이노에 업로드합니다. 프로그램을 재시작해야 제대로 작동할 수 있습니다.
이제 "Try homing" 버튼으로 호밍을 테스트합니다. 클릭하면 머신이 X 리미트 스위치 쪽으로 이동하고, 눌리면 Y축이 움직입니다. 필요하면 리미트 스위치 방향을 바꿉니다. 설정 마법사 마지막에 소프트 리미트(각 축 최대 이동 거리)를 설정합니다. 제 경우 45x45cm입니다.
이제 프로그램이 준비됐습니다. 사용 전 항상 호밍을 먼저 하고 원하는 작업을 수행하세요. 먼저 Jog 컨트롤러로 수동 이동 테스트를 해보고, 폼 조각을 잘라보며 가장 적합한 피드 레이트(이동 속도)를 찾으세요.
열선 온도와 피드 레이트를 조절해가며 가장 깨끗하고 정밀한 컷이 나오는 조건을 찾으세요.
CNC 머신용 G-코드 생성
마지막으로 도면을 준비해 CNC 머신이 형상을 깎아내게 하는 방법을 살펴보겠습니다. 벡터 그래픽 소프트웨어가 필요하며, 역시 오픈소스인 Inkscape를 사용합니다(공식 사이트에서 무료 다운로드).
Inkscape로 아두이노 CNC 머신용 G-코드를 준비하는 두 가지 예제를 보여드리겠습니다. 먼저 페이지 크기를 작업 영역 크기(45x45cm)로 설정합니다. 첫 예제로 아두이노 로고 이미지를 다운로드해 불러옵니다. Trace Bitmap(비트맵 추적) 기능으로 이미지를 벡터 형식으로 변환합니다.
열선으로 이 형상을 자르려면 형상이 연속된 경로(continuous path)여야 합니다. 열선은 작업 영역에 항상 존재하며, 비트나 레이저처럼 이동 중에 들리거나 끌 수 없기 때문입니다. 따라서 분리된 조각들을 간단한 사각형으로 연결했습니다. 조각들을 선택하고 Union(합집합) 기능을 사용합니다. 반면 내부 폐곡선은 열어서 Difference(차집합) 기능으로 열어야 합니다.
도면이 준비되면 Gcodetools 익스텐션으로 G-코드를 생성합니다. 먼저 오리엔테이션 포인트를 생성합니다.
모델을 원하는 크기로 스케일링합니다. 툴 라이브러리에서 아두이노 CNC 머신에 사용할 툴을 정의합니다. 열선이 원통형이므로 실린더를 선택합니다. 툴 직경(1mm로 설정), 피드 레이트 등을 지정합니다. 나머지 파라미터는 지금은 중요하지 않습니다. 이제 Path to Gcode 기능으로 형상의 G-코드를 생성합니다.
G-코드는 GRBL이나 아두이노가 이해하는 명령어 집합으로, 이에 따라 스테퍼 모터를 구동합니다. Universal G-code Sender에서 G-코드를 열면 Visualizer 창에서 머신이 따라갈 경로를 볼 수 있습니다.
여기서 노란 선은 공구 이동(비트나 레이저의 경우 공중 이동)을 나타냅니다. 앞서 말했듯 열선은 이 이동 중에도 소재를 자르므로 형상을 망칩니다. 로고 내부 폐곡선을 열지 않아 단일 경로가 안 된 것을 알 수 있습니다. 도면으로 돌아가 폐곡선을 열고 G-코드를 다시 생성하세요.
시작점을 직접 지정하는 것도 좋은 방법입니다. 형상을 더블클릭해 노드 선택 후 "Break path at selected node"를 선택하세요. 새 G-코드를 열면 경로가 A 글자에서 시작해 전체 형상을 돌고 다시 A로 끝납니다.
폼 조각 고정용으로 M3 볼트가 폼을 관통해 고정하는 간단한 홀더를 만들었습니다.
이제 3차원 형상 제작 예제를 하나 더 보여드리겠습니다. 네 면을 각각 90도씩 돌려 깎는 사각 기둥 형상입니다.
앞서 본 Trace Bitmap 방법으로 기둥 형상을 얻었습니다. 기둥 크기만큼 단순 사각형을 그리고 기둥을 빼줍니다. 한 면을 지워 기둥의 프로파일 경로 하나만 남깁니다. 이게 CNC가 따라갈 실제 경로이며, 패스마다 3번째 스테퍼를 90도 회전시킵니다.
오리엔테이션 포인트 생성 시 Z 깊이를 -8mm로 설정합니다. 툴 파라미터에서 깊이 단계(depth step)를 2mm로 설정합니다. G-코드 생성 후 G-코드 송신기에서 보면 같은 경로를 2mm 깊이 차이로 4번 패스합니다. CNC 라우터라면 비트가 매번 2mm 더 깊게 들어가지만, 여기선 앞서 설정한 대로 Z축 1mm당 45도, 2mm당 90도 회전합니다.
G-코드를 약간 수정해야 합니다. 기본 생성된 G-코드는 패스마다 Z축을 1mm로 이동시키는데(라우터의 경우 공구 올리기), 여기선 불필요한 Z축 이동(폼 불필요 회전)이 생깁니다. 따라서 각 반복 후 Z축 값이 1mm로 돌아가지 않게 수정하고 제자리에 머물게 합니다.
3D 형상용 폼 고정에는 M3 볼트가 폼에 박혀 고정하는 플랫폼을 사용합니다.
G-코드 실행 전 열선을 폼 조각 근처로 수동 이동시킵니다. 중심에서 열선까지 거리가 원하는 형상 두께가 됩니다. 도면상 정확한 치수를 원하면 도면에서 원점부터 형상 중심까지 거리를 측정하세요.
컨트롤러의 "Reset Zero" 버튼을 눌러 홈 위치가 아닌 여기부터 시작하도록 합니다. 이제 Play 버튼을 누르면 아두이노 CNC 머신이 3D 형상을 만듭니다.
모든 예제의 G-코드 파일과 Inkscape 파일은 여기서 다운로드 가능합니다:
이 튜토리얼은 여기까지입니다. 설명이 충분히 명확했길 바라며, 여러분도 직접 CNC 머신을 만들 수 있길 바랍니다. 질문은 댓글로 남겨주시고 아두이노 프로젝트 모음도 확인해보세요.