티스토리 뷰

반응형

자! 오늘은 최근 소형 3D 프린터의 핫 이슈인 (주) 아나츠의 토이프린터 튜닝기이다.

토이프린터는 빌드 사이즈가 90*80*70인 소형 3D 프린터이며 가격대비 사이즈가 매우 작은 편이다.

때문에 큰 사이즈의 3D 프린터를 원한다면 타 기종을 구매하는 것이 맞지만

4년동안 여러 3D 프린터를 사용해본 결과 둘 다 장단점이 있다.

대형 프린터는 한 번에 큰 사이즈의 모델을 출력할 수 있다는 장점이 있지만

필라멘트를 애매하게 남겨놓고 새로 구매해야 한다는 점에서 단점이 있다.

때문에 이렇게 남은 필라멘트들은 집에서 방치되고 있었는데 토이프린터를 구매하고 나서

방치된 필라멘트를 모두 소진할 수 있었다.

소형 3D 프린터는 가정용으로 가장 적합한 사이즈라고 볼 수 있다.

특히 토이프린터는 아담한 사이즈와 아기자기한 디자인으로 인하여

디자인 소품으로도 아주 안성 맞춤이다.


아나츠 워크샵에서 가장 놀란점은 아크릴로 제작되었고, 상당히 안정적이지 않은 모양임에도 불구하고

크기 대비 엄청난 성능을 보여줬다. 이렇게 작은 프린터가 아주 정교하고 출력이 잘 된다는 점에서

입문용으로 일일이 손봐줘야 하는 대형 3D프린터를 구입하는 것보다 토이프린터를 구입하는 것이

훨씬 적합하다는 생각이 들었다. 세미오토 레벨링 기능이 포함되어있어 초반에 레벨링을 잡아두면 

계속 출력을 해도 레벨링이 틀어지지 않아서 출력물이 변형되거나 안착이 잘 안되는 경우는 전혀 없었다.


아무튼! 토이프린터 강력추천 박아드리면서 Neopixel 장착 방법에 대해 소개하려고 한다.

Neopixel은 WS2812 칩을 베이스로 한 LED이다.

네오픽셀은 다른 RGB LED에 비해서 제어가 간단하며 Adafruit 라이브러리를 설치하여

다양한 효과를 구현할 수 있기 때문에 상당히 확장성이 좋은 LED이다.


먼저 3D 프린터는 Marlin이나 Repetier라는 펌웨어를 가장 많이 사용하고

제어보드는 RAMPS 1.4, MKS gen 1.4를 많이 사용한다.


제어보드인 RAMPS 1.4와 MKS gen 1.4의 차이점은 일체형 보드이냐, 분리형 보드이냐의 차이인데

아래 사진과 같이 사용한다.

좌측이 MKS gen 1.4, 우측이 RAMPS 1.4이다.

MKS gen 1.4는 아두이노 메가 + 3D프린터 제어보드가 일체형인 모델이고

RAMPS 1.4는 아두이노 메가 위에 RAMPS 1.4 보드를 장착하여 사용하는 형태이다.

기본적인 인터페이스는 거의 동일하지만 사용하는 칩이 일부 다르고 MKS gen 1.4는

가격이 다소 비싼 대신 일체형 보드이기 때문에 별도의 부품 장착을 할 필요가 없다.

장착할거라곤 모터드라이버....?


필자는 RAMPS 1.4를 사용하였고 Neopixel을 장착하기 위한 위치는 다음과 같다.

먼저 전원부와 SERVOS 핀을 잘 보면 되는데 Neopixel LED를 구입할 때 5V 전원을 입력하는 모델인지

12V 전원을 입력하는 모델인지 확인해야 한다. 12V 전원을 입력하는 모델일 경우 별도의 스텝 다운 DC컨버터를 장착하지 않아도 된다.

하지만 5V 모델일 경우 RAMPS 보드의 12V 전원 입력단에서 선을 빼서 스텝다운 DC 컨버터를 연결하여

네오픽셀 LED의 전원부에 연결해줘야 한다.

그렇다면 왜? SERVO 핀에도 5v전원이 있는데 사용하지 않는 것일까?

정답은 아두이노에 있다. 아두이노에는 12V를 5V로 내려주는 리니어 레귤레이터가 장착되어 있어

아두이노 칩의 전원을 공급해주고 주변 센서들의 전원으로 사용한다. 때문에 출력 전류가 700mA로

제한되어 있어 고출력의 기기를 사용할 경우 아두이노가 고장날 우려가 있으며, 정상작동 하지 않는다.


필자는 5V 네오픽셀 LED를 구매하여 별도의 스텝다운 DC컨버터를 장착하였다.


우선 준비물은 다음과 같다.

Neopixel LED 3 EA, 3핀 듀폰 커넥터 1 EA, 배선용 전선, 전원부 전선, LM2596 DC 컨버터

먼저 위와 같이 IN +에는 노란색 전선을, IN-에는 검정색 전선을 납땜하였다.

전선의 색은 상관없으며 본인이 알아볼 수 있는 색으로 사용하면 된다.


다음은 RAMPS 보드의 전원 커넥터에 스텝다운 DC 컨버터의 전선을 연결해준다.

좌측부터 (+)(-)(+)(-) 이므로 극성에 주의해서 연결해준다.

토이프린터는 제일 우측 두개만 사용하기 때문에 우측의 극성에 맞게 연결을 해주었다.


연결이 완료되면 위와 같은 형태로 연결이 된다. 그 다음 OUT+와 OUT-에 네오픽셀 LED에 연결할 전선을 납땜해준다.


RAMPS 보드에 연결하여 전원을 공급해주면 정상작동하는 것을 확인할 수 있다.

이제 DC컨버터의 출력 전압을 조절해줘야 하는데 파란색이 가변저항이다.

금색 노브를 좌측으로 한~참 돌리다보면 전압이 변하는 것을 확인할 수 있다.


정확히 5V로 맞추지 않아도 괜찮다.

보통 5V를 사용하는 기기는 3.3V ~ 5.5V사이의 입력전압을 갖기 때문에 4 ~ 5V 사이로 맞추는 것이 가장 안정적이다.


전압 조절이 완료되면 전원을 끄고 위와 같이 캡톤 테이프로 절연 처리를 해준다.

절연처리는 어떤 방법을 사용하든 무관하며, 근처의 금속에 전원 단자가 닿지 않도록 하는 것이 핵심이다.


DC컨버터 하단에 양면테잎을 부착하여 고정을 해주었다.


그 다음 네오픽셀 LED에 납땜을 해준다. 여기서 주의할 것은 꼭 IN, VCC, GND에 연결해야 한다.

OUT, VCC, GND에 연결하면 네오픽셀 제어 신호가 입력되지 않기 때문이다.

필자는 납땜을 한 뒤 수축튜브로 감싸주었다. 절연 처리를 하기 위함이다.


총 3개의 네오픽셀 LED가 장착되는데, 정면에서 바라봤을때 좌측에 1개

우측에 1개, 가운데 1개를 장착해주었다.

배선은 뒤로 빼주는 것이 추후 배선에 편리하다.

그 다음 3핀 듀폰커넥터를 준비해서 좌측엔 초록색, 우측엔 검정색을 연결하고 가운데는 비워둔다.


RAMPS 1.4 보드의 도면을 보면 SERVOS의 가장 마지막 핀(D4)에 연결을 해주었다.

위에서 아래로 Data / VCC / GND 순서이므로 초록색 핀이 가장 안쪽으로 가도록 연결해주면 된다.


그리고 나서 각 네오픽셀의 VCC와 스텝다운 DC컨버터의 (+) 선을 하나로 묶어주고

네오픽셀 GND와 스텝다운 DC컨버터의 (-)선, 3핀 듀폰커넥터의 검정색 선을 하나로 묶어준 뒤 수축튜브로 감싸주었다.

이렇게 해서 하드웨어 부분은 완료가 되었다.

이제 소스코드를 수정해야 한다. 소스코드는 아나츠 대표님께서 제공해주셨다.

공개적 배포는 아직 허락을 받지 않았기 때문에 네오픽셀 튜닝을 하고 싶으면 

아나츠에 연락해서 받아보시길....

먼저 Configuration.h에서 맨 아래쯤

 //#define NEOPIXEL_LED

이라는 부분이 있다. //을 지워서 주석을 해제해준다.

필자가 구매한 네오픽셀은 RGB타입이기 때문에 NEO_GRB로 바꿔주었다.

NEOPIXEL_PIN은 4로 적어주는데, 아까 위에서 3핀 듀폰커넥터를 연결한 부분이 4번 핀이기 때문이다.

궁금하면 RAMPS 1.4보드 핀아웃 정보를 확인하면 된다.

그리고 필자가 구매한 네오픽셀 LED 스틱은 총 8개의 LED가 장착되어 있으므로 

NEOPIXEL_PIXELS에 8을 적어준다.

NEOPIXEL_BRIGHTNESS는 밝기인데 그냥 절반 수치인 127로 적어주었다. 너무 밝게 설정하면

눈부실것 같기 때문이다.

마지막으로 

//#define NEOPIXEL_STARTUP_TEST에서 //을 지워서 주석을 해제해준다.

NEOPIXEL_STARTUP_TEST는 부팅 시 효과를 적용할 수 있도록 해준다.


<소스코드 : Configuration.h>

#define NEOPIXEL_LED
#if ENABLED(NEOPIXEL_LED)
  #define NEOPIXEL_TYPE   NEO_GRB // NEO_GRBW / NEO_GRB - four/three channel driver type (defined in Adafruit_NeoPixel.h)
  #define NEOPIXEL_PIN    4        // LED driving pin on motherboard 4 => D4 (EXP2-5 on Printrboard) / 30 => PC7 (EXP3-13 on Rumba)
  #define NEOPIXEL_PIXELS 8       // Number of LEDs in the strip
  #define NEOPIXEL_IS_SEQUENTIAL   // Sequential display for temperature change - LED by LED. Disable to change all LEDs at once.
  #define NEOPIXEL_BRIGHTNESS 127  // Initial brightness (0-255)
  #define NEOPIXEL_STARTUP_TEST  // Cycle through colors at startup
#endif


두 번째는 neopixel.cpp이다. 기본 파일에는 효과를 넣는 함수가 없기 때문에 효과 넣는 함수를 적어줘야 한다.

<소스코드 : neopixel.cpp>

void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  if(WheelPos < 85) {
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if(WheelPos < 170) {
   WheelPos -= 85;
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}


그리고 맨 아래에 safe_delay(1000) 함수를 모두 지워준다.

safe_delay 부분에서 에러가 발생하기 때문에 rainbowCycle(10);로 대체해야 한다.


그리고 Marlin_main.cpp에서 함수를 사용할 수 있도록

void rainbowCycle(uint8_t wait);

uint32_t Wheel(byte WheelPos);

를 추가해준다.


세 번째는 1128 라인에 가면

#if ENABLED(SDSUPPORT) 라는 부분이 있다.

1170 라인에 if(card_eof)를 아래 코드로 바꿔준다.

1160번 라인에 가면 

if (card_eof) 라는 부분이 있다. 코드를 아래 코드로 바꿔준다.

<소스코드 : Marlin_main.cpp>

if (card_eof) {

          card.printingHasFinished();

          if (card.sdprinting)
            sd_count = 0; // If a sub-file was printing, continue from call point
          else {
            SERIAL_PROTOCOLLNPGM(MSG_FILE_PRINTED);
            #if ENABLED(PRINTER_EVENT_LEDS)
              LCD_MESSAGEPGM(MSG_INFO_COMPLETED_PRINTS);
              #if ENABLED(NEOPIXEL_LED) && ENABLED(NEOPIXEL_STARTUP_TEST)
                rainbowCycle(10);
              #else
                leds.set_green();
              #if HAS_RESUME_CONTINUE
                enqueue_and_echo_commands_P(PSTR("M0")); // end of the queue!
              #else
                safe_delay(1000);
              #endif
              leds.set_off();
              #endif
            #endif
            card.checkautostart(true);
          }
        }

위 코드는 부팅 시 Neopixel LED를 무지개 색으로 켜주는 역할을 한다.

자 이제 설정을 마쳤으면 토이프린터의 USB포트에 USB를 연결하고 펌웨어를 업로드 해주면 된다!

그리고 전원을 켜면...!


두둥

두두둥


두두두둥


너무나 이쁜 토이프린터가 완성되었다...!

조금만 노력하면 3D 프린터를 더욱 이쁘게 꾸밀 수 있었다.

네오픽셀을 추가하면 온도가 증가할 때 색도 변하고

프린팅 진행 상황에 따라 LED가 점점 색이 변하는 것을 확인할 수 있다.

토이프린터의 변화는 계속된다!


- 이 글은 (주) 아나츠의 금전적 지원을 전혀 받지 않고 제가 제 돈주고 사서 작업한 글입니다. -


반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함