2026-07-10

Ender 3 V3 SE Klipper 전환 기록 (5) - 필라멘트 런아웃 센서

Ender 3 V3 SE를 Klipper로 전환하는 과정의 다섯 번째 게시글입니다.

3D PrintKlipperLinux

장시간 출력 시 가장 신경 쓰이는 것 중 하나는 필라멘트 잔량이다. 특히 거의 다 사용한 스풀을 계속 활용하다 보면, 이번 출력이 끝나기 전 필라멘트가 소진될지 판단하기가 쉽지 않다.

Klipper에도 출력 중 필라멘트가 끊기거나 소진되었을 때 자동으로 일시정지하는 기능이 있다. 이를 활용하려면 필라멘트 런아웃 센서가 필요하다. 이번 글에서는 저렴한 범용 센서를 장착하고 Klipper와 연동한 과정을 정리한다.

시작하기 전 참고

만약 서드파티 센서를 사용하려고 하는데 Klipper만 계속 사용할 예정이라면, 반드시 아래 내용처럼 순정 센서 포트에 연결할 필요는 없다. 호스트가 GPIO를 지원한다면 그곳에 연결하는 방법이 오히려 더 간단할 수도 있다.

여기서는 순정 센서 포트를 활용하는 방법만 다룬다.

사용한 센서

Creality는 Ender 3 V3 SE용으로 공식 센서 키트를 판매한다. 이 키트는 쉽게 설치할 수 있고, 베어링 홀더를 제공해 스풀이 마모되는 현상을 줄일 수 있는 장점이 있다. 그러나 이로 인해 비싸고, 장착 위치가 스풀 근처라 너무 멀리서 감지한다는 단점이 있다.

한편 알리익스프레스 등지를 뒤져 보면 1달러 대에 범용적인 센서를 구입할 수 있다. 내가 사용한 것 기준 마이크로스위치를 사용해 필라멘트가 존재하는지를 감지하는 방식이다. 이 센서는 3핀 구조로, 일반적인 3핀 스위치(SPDT)와 유사한 구조이다.

추가 준비물

메인보드 측 커넥터는 JST XH 4핀 커넥터이다. 후술하겠지만 대부분의 센서는 이 규격을 쓰지 않을 것이기 때문에 맞는 커넥터를 미리 구해야 한다. 나는 미리 배선된 피그테일을 구입했는데, 압착 등의 과정을 거칠 필요가 없으니 이것을 추천하는 편이다. 실제로 다른 용도로도 많이 쓰이는 커넥터이기 때문에, 많이 구해 두면 추후 유리할 것이라고 생각한다.

JST XH 4핀 피그테일 케이블

또한 역시 후술하겠지만 전압 레벨을 맞춰야 하기 때문에, 분압을 하기 위한 저항이 필요하다. 5V에서 3.3V로 분압해야 하기 때문에 1:2 비율의 저항이 필요하며, 대략 10kΩ / 20kΩ 정도의 저항을 사용할 수 있다.

장착 방법

이전에 Thingiverse에 이런 센서를 장착하기 위한 브라켓의 모델을 출력해 둔 것이 있어 이것을 사용했다. 아쉽게도 해당 모델을 첨부하려고 했으나 원본을 다시 찾지는 못했다. 프린터의 툴헤드 상단을 보면 나사 홀이 2개 있는 장착 위치가 있는데 M3을 통해 이 브라켓을 연결 가능하다. 브라켓과 센서는 케이블 타이를 통해 쉽게 연결할 수 있다. 이 위치에 설치하면 노즐 바로 위에 감지 위치가 있기 때문에, 감지 시점이 필라멘트를 거의 다 쓴 시점이 되는 장점이 있다.

툴헤드에 센서를 설치했다면 케이블 간섭이 없는지 점검해 봐야 한다. X축을 양 쪽 끝까지 움직여 보며 간섭하지 않는지 점검한다. 또한 케이블을 기존 툴헤드의 케이블과 묶어서 정리해 주면 깔끔하다.

툴헤드 상단에 장착한 필라멘트 런아웃 센서

배선 방법

프린터의 하단을 열어 보면 메인보드에 센서를 연결할 수 있는 위치가 있다. 또한 Z축의 뒤를 보면 위로 배선을 뺄 수 있을 만한 구멍도 있다. 이것을 사용해 센서의 배선을 메인보드로 가져온다.

핀아웃 맞추기

프린터를 정면에서 보고 그대로 눕힌 상태에서, 하단을 연 상태로 그대로 정면에서 보고 있다고 가정하겠다. 상단에 있는 메인보드에서 우측을 보면 필라멘트 센서를 연결하는 빈 커넥터가 보일 것이다. 이곳이 공식 센서가 연결되는 위치이다. 만약 찾았다면, 센서의 커넥터와 안 맞는다는 것을 바로 눈치챌 수 있을 것이다.

프린터 메인보드의 필라멘트 센서 커넥터에 연결한 모습

메인보드 측 단자는 센서와 달리 4핀인 것을 볼 수 있다. 핀아웃은 위부터 5V, GND, 필라멘트 신호선, 24V 순서이다. 이후 편의를 위해 신호선을 S라고 부르겠다. 공식 센서는 이 중 24V를 사용하지 않으며, 여기서도 마찬가지로 사용하지 않을 것이다. 이 커넥터의 정체는 앞서 언급한 대로 JST XH 4핀이며, 인터넷에서 쉽게 구입 가능하다.

커넥터를 구했다면 센서를 배선하면 되는데, 핀아웃만 맞춰서는 안 된다. 메인보드의 MCU는 GD32F303 계열인데, 로직 레벨이 3.3V이다. 앞서 언급한 대로 커넥터가 제공하는 전압은 5V이다. 따라서 이 5V로 3.3V를 만들어야 하는데, 이 수준에서는 저항 분압을 사용해도 무방하다. 3.3V는 5V의 약 2/3이기 때문에 1:2 비율의 저항을 쓰면 되는데, 예를 들자면 10㏀과 20㏀ 조합을 사용 가능하다. 이전에 실험해 본 결과 S가 HIGH일 때 필라멘트가 없다고 인식하는 것을 확인했는데, 즉 필라멘트가 없을 때 센서가 S에 3.3V를 출력하도록 배선해야 한다.

저항 분압 회로를 포함한 필라멘트 런아웃 센서 배선도

Klipper 설정

Klipper 설정은 printer.cfg 파일을 수정하여 수행한다. 내가 사용한 세팅은 아래와 같다.

[filament_switch_sensor filament_sensor]
switch_pin: !PC15
pause_on_runout: true
event_delay: 3.0
pause_delay: 0.5
debounce_delay: 0.5
runout_gcode:
    M117 Filament runout
insert_gcode:
    M117 Filament inserted

switch_pin의 경우 여기서는 !PC15를 사용했는데, PC15 핀의 입력을 반전해(!) 입력받는다는 뜻이다. 앞서 확인한 대로 공식 센서의 동작이 HIGH에서 필라멘트 없음을 의미하기 때문이다.

참고: Klipper만 사용할 예정이라면 센서 연결 시 일반적인 방식대로 LOW가 필라멘트 없음을 의미하게 해도 된다. 다만 회로 구조상 가능한지는 확인해 보지 못했다.

pause_on_runout은 필라멘트 런아웃이 감지되면 프린터를 일시 정지시키는 옵션이다. 바로 이것이 우리가 원하는 동작이므로 true로 설정하면 된다.

event_delay는 이 센서의 상태 변경 이벤트를 처리하기 전 대기 시간을 의미한다. 필라멘트가 순간적으로 흔들리거나 할 때 발생할 수 있는 오동작을 줄이는 데 도움이 된다.

debounce_delay 옵션은 필라멘트 런아웃 센서의 입력을 디바운싱하는 데 사용된다. 센서가 마이크로스위치 기반이기 때문에 사용하는 것이 좋다.

이후 이미지와 같이 Mainsail UI에서 센서가 감지되는 것을 알 수 있다.

필라멘트 런아웃 센서가 감지된 Mainsail UI

결론

결과적으로 약 1달러 수준의 저렴한 범용 센서와, 약간의 배선 작업만으로 필라멘트 감지 기능을 추가할 수 있었다. 이후 실제로 출력 중 필라멘트가 소진된 적이 있는데, 이때 정상적으로 일시 정지하는 것을 확인할 수 있었다. 다만 로직 레벨을 맞추는 것이 복잡했으며, 다음에 시도한다면 이 방법 대신 BTT Pi에 직접 연결하는 방법으로 작업할 것 같다.

다음에 다룰 내용

다음으로는 BTT Pi의 전원을 프린터에서 얻도록 하는 작업을 진행하려고 한다. 이 작업은 BTT Pi가 프린터와 하나로 보이게 하기 위한 과정의 중요한 단계이다. 작업을 마치고 나면 본격적으로 BTT Pi 및 TFT35 디스플레이의 외장 케이스 설계 및 프린터에 거치하는 단계에 들어갈 수 있을 것이라고 기대한다.