기술연구

김경현 2016. 8. 26. 03:40

안녕하세요.


기술이 공유되지 않으면 미래의 사회는 지금보다 더욱 폐쇄적이고 불평등한 사회가 될 것입니다. 카피레프트(copyleft)는 개인의 지적재산권을 중시하는 기존의 카피라이트(copyright)에 대항해 사회적 공유를 강조하는 정신이자 운동입니다. DIY연구소는 카피레프트(copyleft) 정신과 4차 산업기술의 확산을 위하여 연구한 내용을 무료로 배포하고 있습니다. 오늘은 기본적인 3D프린터 업로드 구성, 디버깅 방법, 펌웨어, 프린터의 동작 컨트롤 모든 부분, 단계별 컨트롤과 프린터의 통신관리를 공부하고자 합니다. 현재 대부분은 아두이노 제어보드를 이용해 프린트하고 있습니다. 이러한 이유로 우리는 구성될 아두이노 환경을 사용하는 방법과 펌웨어 업로드 방법을 공부해야 합니다. 아두이노 스케치 프로그램을 이용하여 펌웨어 구성을 확인할수 있습니다. 오픈소스 3D프린터 키트를 사용하는 경우 중요한 대부분의 기본설정은 Configuration.h 폴더에 포함되어 있습니다. 강의용 자료로 비공개 합니다. 





DIY연구소 김경현 배상 (010 8604 6802)



[교육내용]


☞ 1. 3D프린터 설계제작

☞ 2. 3D프린터 프로그램

☞ 3. 3D프린터 의수제작

☞ 4. Core XY 3D프린터 구동방식과 조립

☞ 5. Prusa i3 3D프린터 조립

☞ 6. Prusa i3 3D프린터 배선

☞ 7. 3D프린터 전기조립 기초

☞ 8. Fun i3 3D프린터 조립

☞ 9. 3D프린터 오픈소스 RepRap

☞ 10. 20만원대 교육용 3D프린터 개발

☞ 11. 3D프린터 전기자전거 개발

☞ 12. 원노즐 듀얼 3D프린터 개발



그림 1.4.1. 멘델(Mendel) 3D프린터 프로그램



[프로그램 해석을 위한 C프로그래밍 기초]


※ C/C++ 언어편집컴파일러 프로그램 :

 

turbo_c___3.1.vol1.egg

turbo_c___3.1.vol2.egg

 

☞ 3D프린터 설계제작


1. C언어의 개요

2. C언어 자료형과 선행처리기

3. C언어 입출력함수와 연산자


[프로그램 소스파일] (※ 아래의 붉은색 파일명을 클릭하면 소스파일을 볼수 있습니다.)


1.4.1. Arduino file

Marlin.ino


1.4.2. PDE file

Marlin.pde


1.4.3. CPP files

BlinkM.cpp

cardreader.cpp

ConfigurationStore.cpp

digipot_mcp4451.cpp

LiquidCrystalRus.cpp

Marlin_main.cpp

MarlinSerial.cpp

motion_control.cpp

planner.cpp

qr_solve.cpp

Sd2Card.cpp

SdBaseFile.cpp

SdFatUtil.cpp

SdFile.cpp

SdVolume.cpp

Servo.cpp

stepper.cpp

temperature.cpp

ultralcd.cpp

vector_3.cpp

watchdog.cpp


1.4.4. H files

BlinkM.h

boards.h

cardreader.h

Configuration.h

Configuration_adv.h

ConfigurationStore.h

dogm_font_data_marlin.h

dogm_lcd_implementation.h

DOGMbitmaps.h

fastio.h

language.h

language_an.h

language_ca.h

language_de.h

language_en.h

language_es.h

language_eu.h

language_fi.h

language_fr.h

language_it.h

language_ko.h

language_nl.h

language_pl.h

language_pt.h

language_ru.h

LiquidCrystalRus.h

Marlin.h

MarlinSerial.h

motion_control.h

pins.h

planner.h

qr_solve.h

Sd2Card.h

Sd2PinMap.h

SdBaseFile.h

SdFatConfig.h

SdFatStructs.h

SdFatUtil.h

SdFile.h

SdInfo.h

SdVolume.h

Servo.h

speed_lookuptable.h

stepper.h

temperature.h

thermistortables.h

ultralcd.h

ultralcd_implementation_hitachi_HD44780.h

ultralcd_st7920_u8glib_rrd.h

vector_3.h

watchdog.h














[델타형 3D프린터]


소프트웨어 설치에이어 Marlin 펌웨어를 자신의 프린터에 맞게 수정해야합니다. Marlin.ino를 열어서 진행하시면 됩니다. 아래 예는 델타형 3D프린터의 경우를 예시합니다. 


스케치 내에 여러개 텝이 있지만 주로 프린터의 크기나 스펙에 관한 수정은 Configuration.h에서 이루어집니다. Configuration.h를 열어보시면 코드 스크롤의 압박이 느껴집니다. 전부 수정할 필요는 없고, 몇 가지만 수정하면 됩니다.



수정에 앞서 자신의 프린터 길이 정보, 서머커플 정보 등 다양한 정보들을 알아두셔야 합니다. 이 Configuration.h를 수정하는것이 프린터를 구동하는데 가장 중요한 부분입니다. 처음 입력하고 작동해보면서 계속 수정해주어야 합니다. 저도 모든 코딩을 이해하지 못했지만, 가장 중요하다고 생각되는 코드들을 설명하도록 하겠습니다. Marlin 펌웨어 기준은 위에 링크해둔 FSR 버전입니다. 먼저 코딩 내용 중 주석이라고 하여 작동에 영향을 주지 않는 내용들이 있습니다. 이 내용들은 앞에 //표시가 되어있으며, 회색으로 나타나 있습니다. 이 기능을 이용하여 각자 설정에 맞게 //를 쓰거나 지워서 기능을 조절하시면 됩니다. 지금부터 설명해드리는 코딩을 찾기 어려운 경우 ctrl+f를 눌러서 단어들을 검색해 찾으시면 됩니다. 하지만 한번 쭉~ 주석과 함께 읽어보시는걸 추천합니다. 위에서부터 순서대로 시작합니다.


#define SERIAL_PORT 0

- 이 설정은 PC와 통신하는 포트설정이 아닙니다. 따라서 0으로 설정해두어야 하고, 위에서 확인한 COM 넘버를 쓰시면 안됩니다.


#define BAUDRATE 250000

- 통신 속도를 나타내는 값입니다. 처음 여실 경우 아마 115200으로 되어있을텐데, 최대값인 250000로 설정하도록 합니다. MAC의 경우 115200을 사용하는걸로 알고 있습니다.


#ifndef MOTHERBOARD

#define MOTHERBOARD BOARD_RAMPS_13_EFB

#endif

- 마더보드의 종류를 설정하는 탭입니다. 위 BOARD_RAMPS_13_EFB는 RAMPS 1.3또는 1.4버전을 사용하고 익스트루더(E) 1개, 팬(F) 1개, 베드 (B) 1개를 사용한다는 설정입니다.  자세한 설정은 상단의 탭들 오른쪽 끝에 화살표를 누르면 여러가지 탭들이 나오는데 그 중 boards.h를 선택하여 다양한 정보를 얻을 수 있습니다. 만약 사용하는 보드의 종류가 다르다면 이 탭에서 정보를 찾아 define 값을 바꾸시면 됩니다.  예) RAMPS 1.2 이하 버전을 사용할 경우 BOARD_RAMPS_ORD로 값을 변경)

- 다른 버전의 Marlin 펌웨어는 숫자로 보드를 설정하는 경우도 있습니다. 이 경우 33에 해당합니다. 역시 자세한 보드 정보는 boards.h에서 확인 가능합니다.


#define CUSTOM_MENDEL_NAME "NAME"

- ""안에 해당하는 NAME을 원하는 이름으로 바꾸면 LCD 창에 그 이름이 뜨게 됩니다.  바꾸셔도 되고 앞에 //로 비활성화 시켜도 됩니다.


#define DELTA_SEGMENTS_PER_SECOND 200

- 델타봇이 원형을 그릴 때 사실 수 많은 직선들을 사용하여 원형을 표시합니다. 그 선들의 소밀함이라고 생각하시면 됩니다. 낮은 값으로 되어 있을 텐데 200으로 설정해줍니다.


#define DELTA_DIAGONAL_ROD 215.0 //mm

- 뒤에 // mm는 아시다시피 주석으로써 참고내용입니다. mm단위로 설정하라는 의미입니다. 앞으로 이러한 주석들이 달리니 참고하시기 바랍니다.

- diagonal rod의 길이를 설정하라는 내용입니다. 아래 사진을 참고하여 값을 설정하도록 합니다. 저는 처음 제작할 때 215mm의 길이로 고정해놓고 만들었기 때문에 215mm를 입력했습니다.



#define DELTA_SMOOTH_ROD_OFFSET 155.0 //mm

- 위 사진과 같이 노즐이 정 가운데에 있다고 할 때 휠이 지나가는 프레임 중심으로부터 노즐까지의 거리를 뜻합니다. 가능하면 정확히 측정하도록 합니다. (버니어캘리퍼스 추천)


#define DELTA_EFFECTOR_OFFSET 20.29 //mm

- diagonal rod의 중심축과 노즐 중심과의 거리를 입력합니다.


#define DELTA_CARRIAGE_OFFSET 26.44 //mm

- 캐리지에서 다이고날 로드의 중심부터 휠의 중심까지의 거리를 입력합니다.


#define DELTA_PRINTABLE_RADIUS 80.0

- 프린트 가능 영역의 반지름을 설정합니다.  저는 옵션으로 선택한 히터베드의 반지름이 80mm기 때문에 80mm를 입력했습니다.

 유리베드의 지름이 170mm이니 최대값은 85입니다. (비추)


#define TEMP_SENSOR_0 1

#define TEMP_SENSOR_1 0

#define TEMP_SENSOR_2 0

#define TEMP_SENSOR_BED 0

- 온도를 측정하는 서머커플의 종류를 선택합니다. 서머커플은 온도에 따른 저항값 변화로 온도를 측정하는데, 서머커플마다 기본 저항값들이 다르기 때문에 설정해주는것 입니다.  제가 구매한 Kossel mini의 경우 1번을 사용합니다. 마지막 BED 센서의 경우 옵션으로 선택한 FSR센서를 사용하기 때문에 5번을 선택했습니다. FSR센서도 결국 압력을 저항값으로 측정하기 때문에 이 값을 이용해 auto leveling을 합니다.

- 만약 히터베드를 사용할 경우 히터베드에 장착한 서머커플의 종류대로 입력합니다.


#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10

- 서머커플들의 오류로 인해 히터가 계속 열을 가하는데 읽어들이는 온도가 변화 없을 경우 고장이나 화재의 원인이 될 수 있습니다. 이에대한 안전장치로 값을 설정합니다. 두개의 온도센서를 사용하여 온도차이가 10도 이상 나면 정지시키는 내용입니다. 저는 온도센서가 1개이기 때문에 //로 비활성화 했습니다.


#define HEATER_0_MAXTEMP 275

#define HEATER_1_MAXTEMP 275

#define HEATER_2_MAXTEMP 275

#define BED_MAXTEMP 1000

- 각 히터의 최대온도를 설정합니다. 저의 경우 노즐의 히터만 사용하기 때문에 0번에 해당합니다. ABS나 PLA를 사용할때 250도 이상 올릴 일이 없기 때문에 적당한 맥스값을 설정하시면 됩니다.

- BED의 경우 저는 FSR 센서를 BED 센서에 장착할 예정이기 때문에 맥스를 1000으로 설정했습니다. 히터베드를 사용할 경우 100~150정도로 설정하시면 됩니다.


#define EXTRUDE_MINTEMP 170

- 익스트루더가 작동할 최저 노즐온도를 설정합니다. 노즐의 온도가 낮을때 익스트루더를 작동할 겨웅 필라멘트가 녹지않아 노즐, 바렐등이 막힐 수 있기 때문에 170~180정도로 설정합니다. 초기 캘리브레이션에서 익스트루더 값을 설정할 때 작동해야하는데 노즐온도를 매번 올리면 불편하기 때문에 //로 비활성시켰다가 실제 사용할 때 풀어두는걸 추천합니다.


const bool X_MIN_ENDSTOP_INVERTING = ture; // set to true to invert the logic of the end stop.

const bool Y_MIN_ENDSTOP_INVERTING = ture; // set to true to invert the logic of the end stop.

const bool Z_MIN_ENDSTOP_INVERTING = ture; // set to true to invert the logic of the end stop.

const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the end stop.

const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the end stop.

const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the end stop.

- end stop에서 오는 신호를 받을 때 사실대로 받을 것인지, 반대로 받을 것인지 선택합니다. 제가 구매한 휠타입 옵션은 end stop이 위에만 있기 때문에 MAX 값들만 선택하면 됩니다.


#define DELTA_PROBABLE_RADIUS (DELTA_PRINTABLE_RADIUS*0.8)

- 베드의 평형도를 자동으로 측정해주는 Auto leveling시 노즐로 베드를 직접 눌러서 FSR값의 변화로 계산을 하게 되는데 노즐이 눌러보는 범위를 설정하는 것입니다. 프린트범위의 0.8배로 설정하였습니다.


#define Z_PROBE_OFFSET_FROM_EXTRUDER 0.1

- Auto leveling을 하는 프로브와 노즐 사이의 높이 차를 설정하는 코딩인데, 저는 노즐이 프로브이기 때문에 높이차가 없습니다. 하지만 높이 차를 0으로 설정하게 되면 노즐이 베드와 붙어서 프린트를 시작하기 때문에 첫 레이어를 생각해 높이 차를 두어야 합니다. 저는 0.1로 입력하였습니다. 첫 레이어가 너무 얇거나 두껍다면 값을 수정하도록 합니다.


#define MANUAL_Z_HOME_POS 242.5

- 베드부터 노즐까지의 높이를 설정합니다. 이 값을 정확히 알아내는 방법은 추후에 캘리브레이션에 관한 포스팅에서 다룰 예정입니다. 먼저 대략적으로 측정하여 약간 값을 크게 입력하도록 합니다.


#define XYZ_FULL_STEPS_PER_ROTATION 200

#define XYZ_MICROSTEPS 16

#define XYZ_BELT_PITCH 2

#define XYZ_PULLEY_TEETH 16

- 스텝모터와 기어, 벨트의 정보를 입력하여 모터가 실제 거리대로 움직이도록 설정합니다. 제작에 사용한 스텝모터는 한바퀴에 200스텝을 갖는 모터이기 때문에 FULL_STEPS를 200으로 설정하고, MICROSTEPS는 드라이버의 점퍼를 3개 꽂았으니 16배, 16을 입력했습니다. 벨트 피치는 GT2벨트를 사용했기 때문에 2, 기어 이의 수는 16개이기 때문에 16으로 입력했습니다. 이 정보들을 입력하면 자동으로 계산하여 움직이는 거리가 설정됩니다.


#define XYZ_STEPS (XYZ_FULL_STEPS_PER_ROTATION * XYZ_MICROSTEPS / double(XYZ_BELT_PITCH) / double(XYZ_PULLEY_TEETH))

- 위에서 설정한 모터, 드라이버 점퍼, 기어잇 수 등을 자동으로 계산하기 위한 코드입니다. 구 버전의 경우 위에 해당하는 코드가 없기 때문에 직접 계산해주어야 하는데 많이 편해졌습니다. 계산식은 모터스텝x점퍼로 곱해지는 수/(2*벨트피치)/(2*기어 잇수)입니다.

 

#define DEFAULT_AXIS_STEPS_PER_UNIT {XYZ_STEPS, XYZ_STEPS, XYZ_STEPS, 425.3}

- 모터의 스텝을 계산값을 이용해 입력하는 코드입니다. {X, Y, Z, E} 순서이며, E는 익스트루더의 설정값인데, 딱히 값이 정해진게 아니기 때문에 일단 대략적으로 입력하고 나중에 캘리브레이션에서 정확한 값을 구합니다. 구 버전은 약간 다른데, #define DEFAULT_AXIS_STEPS_PER_UNIT {100, 100, 100, 425.3} 에서 100에 해당하는 X, Y, Z값을 계산해서 넣어주면 됩니다. 위에서 입력한 값들을 계산하면 100이 나옵니다. 


#define REPRAT_DISCOUNT_SMART_CONTROLLER

- LCD의 종류를 나타내는 코딩인데 원래는 //로 비활성화 되어있을겁니다. //를 지워서 활성화 시키고, 다른종류의 LCD를 사용한다면 다른 LCD에 해당하는 부분을 활성화하면 됩니다. 만약 다른 LCD가 설정되어있다면 비활성화 해줘야 합니다.


#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75

- 사용하는 필라멘트의 지름을 설정합니다. 1.75mm 필라멘트를 사용할 것이기 때문에 1.75를 입력했습니다.


이 외에도 코드가 상당히 많은데 가장 중요하다고 생각되는 부분들에 대해 알아봤습니다.추후에 auto leveling과 히터베드를 같이 사용하는 코드를 한번 더 포스팅하도록 하겠습니다. 코드 수정이 완료되었다면 아두이노에 업로드해야 합니다.



상단에 아래방향 화살표를 눌러서 스케치를 저장하고, 오른쪽 화살표를 눌러서 업로드합니다. 이때 PC와 프린터가 연결되어있어야 합니다. 업로드시 오류를 확인하는 스케치 컴파일을 실행하는데, 업로드 전에 따로 확인을 하고싶다면 오른쪽화살표 옆 V표시 버튼을 누르시면 확인할 수 있습니다. 업로드를 누르면 오른쪽 아래 상태바가 진행되고 끝나면 업로드가 완료됩니다. 아마 LCD에 화면이 출력될겁니다. 이제 PC로 프린터를 구동하여 기본적인 설정을 할 차례입니다. 프린터를 구동하는 인터페이스 소프트웨어를 실행해야 합니다.



이전 포스팅의 링크로 들어가 최신버전의 printrun을 다운받도록 합니다. 설치과정 없이 pronterface를 실행하면 됩니다.



실행하면 프로그램 하단에 아직 연결되지 않았다는 Not connected to printer 메세지가 나타납니다. 메쉬창이 보이지 않는다면 메쉬 오른쪽 상단의 화살표를 누르면 나타납니다. 또한 메쉬에서 영점 좌표가 왼쪽 아래 모서리로 설정되어 있기 때문에 상단의 Settings - Options를 열어 Build dimensions 설정의 X offset과 Y offset을 각각 -100으로 입력하고 OK를 누릅니다.



연결을 위해 포트를 COM3 (장치관리자에서 확인한 번호)을 선택하고 통신속도를 250000으로 변경합니다. 이제 프린터와 연결할 준비가 끝났습니다. USB연결이 되었는지 확인하고 상단의 Connect버튼을 눌러줍니다. 그럼 위 이미지와 같이 버튼들이 활성화 되고 오른쪽 대화창에 많은 메세지들이 나타나며 열결됩니다. 마지막에 등장하는 echo: SD init fail이란 메세지가 뜨는데 SD카드를 넣지않아서 입니다. 신경쓰지 않으셔도 됩니다. 이렇게 프린터 연결이 완료되었습니다. 저는 조립은 쉽다고 생각했는데 코드 수정과 프린터 설정이 어려웠습니다. 최대한 이해하기 쉽게 설명한다고 했는데 잘 전달되었을지 모르겠네요. 궁금하신 사항이 있다면 질문해주세요.


1. 기술수요조사 : 한국산업기술진흥원(www,kiat.or.kr), 지역산업종합정보망 (www.ritis.or.kr)

2. 범부처R&D국책과제 : http://iacf.ajou.ac.kr/iacf/board/board02.jsp

3. 입찰공고 : 조달청(http://www.pps.go.kr), 나라장터(http://www.g2b.go.kr)


조립용 키트(KIT)


1. 3D프린터 압출파이프 나사산 지름 6mm 길이 26mm

2. 3D프린터용 히팅블럭

3. 3D프린터 0.4mm 노즐

4. 3D프린터용 알루미늄 익스트루더 압출기 셋트

5. SMPS 350와트 29A 전원 공급장치.

6. 3D프린터용 베어링 LM8UU (*7ea 필요)

7. 3D프린터용 스텝모터 4-lead Nema17 Stepper Motor 42 motor NEMA 17 motor

8. 익스트루더 압출파이프 고정용 너트 6mm

9. 3D프린터 익스트루더 장력 스프링

10. 3D프린터 베드 고정용 스프링 (*4ea 필요)

11. 3D프린터 베드 고정용 스프링 (*4ea 필요)

12. 3D프린터 모터 연결용 커플러 5x5 (*2ea 필요)

13. 624ZZ 베어링 (*2ea 필요)

14. 3D프린터 펌웨어 업로드용 케이블

15. T2.0 Aluminum Pulleys (*2ea 필요)

16. 3D프린터 mk8 구조의 압출기 블럭(픽싱블럭)

17. 3D프린터 노즐용 압출기어

18. GT2 벨트(1미터 단위판매)

19. 3D프린터 냉각용 40mm팬

20. 3D프린터 노즐용 40W 히터

21. 3D프린터용 마이크로스위치

22. 3D프린터 서미스터

23. 3D프린터용 히팅베드 MK3


☞ "청년을 무릎 꿇리는 세상에 희망은 없다!"







[성남테크노과학고등학교 개발용 Configuration.h - 직교형 3D프린터]



#include <U8glib.h>

<= "U8gb.h 프로그램을 포함시킨다"


#ifndef CONFIGURATION_H

<= "if not define 만일 CONFIGURATION_H 가 지정되지 않았다면"


#define CONFIGURATION_H

<= "CONFIGURATION_H 를 지정한다"


#include "boards.h"

<= "boards.h 프로그램을 포함시킨다"


// This configuration file contains the basic settings. (configurtion 파일은 기본 설정이 포함되어 있습니다)

// Advanced settings can be found in Configuration_adv.h (고급 설정은 Configuration_adv.h에서 찾을 수 있습니다) 

// BASIC SETTINGS: select your board type, temperature sensor type, axis scaling, and endstop configuration (기본 설정 : 당신의 보드 유형, 온도 센서 유형, 축 크기 조절 및 endstop 구성을 선택)


//===========================================================================

//============================= DELTA Printer =============================== (델타형 3D프린터)

//===========================================================================

// For a Delta printer replace the configuration files with the files in the (델타 프린터에있는 파일과 구성 파일을 대체)

// example_configurations/delta directory. (예로 구성 / 델타 디렉토리)

//


//===========================================================================

//============================= SCARA Printer =============================== (직교형 3D프린터)

//===========================================================================

// For a Delta printer replace the configuration files with the files in the (델타 프린터에있는 파일과 구성 파일을 대체)

// example_configurations/SCARA directory. (예를 구성 / SCARA 디렉토리)

//


// User-specified version info of this build to display in [Pronterface, etc] terminal window during (이 빌드의 사용자 지정 버전 정보는 [Pronterface 등]를 시작하는 동안 터미널 창에서 표시합니다)

// startup. Implementation of an idea by Prof Braino to inform user that any changes made to this (교수 Braino에 의한 아이디어의 구현은 모든 변경 사항이 사용자에게 알려 사용자가이 빌드)

// build by the user have been successfully uploaded into firmware. (성공적으로 펌웨어에 업로드되었습니다)


#define STRING_VERSION_CONFIG_H __DATE__ " " __TIME__ // build date and time (빌드 날짜와 시간)

<= "프로그램을 생성한 날짜나 혹은 수정한 날짜를 기입하는 행이다. 비워두어도 상관은 없다"


#define STRING_CONFIG_H_AUTHOR "(DIY LAB, STH-1)" // Who made the changes. (변경 한 사람)

<= "프로그램을 만든 사람의 이름이나 모델의 명칭을 기입하는 난이다. 역시 비워두어도 관계없다"


// SERIAL_PORT selects which serial port should be used for communication with the host. (SERIAL_PORT 시리얼 포트가 호스트와의 통신을 위해 사용되어야 하는지를 선택한다)

// This allows the connection of wireless adapters (for instance) to non-default port pins. (이 기본이 아닌 포트 핀 (예를 들어) 무선 어댑터의 연결을 할 수 있습니다)

// Serial port 0 is still used by the Arduino bootloader regardless of this setting. (시리얼 포트 0이 설정에 관계없이 아두 이노 부트 로더에 의해 사용된다)


#define SERIAL_PORT 0             

<= "아두이노 시리얼 포트를 0 으로 선택. 아두이노 보드를 탑재한 3D프린터가 USB 케이블로 컴픁와 인터페이스 될 경우 통신포트를 지정해야 하는데, 이는 '아두이노 스케치' 프로그램에서 별도로 지정하여야 한다. 지정경로는 상부 메뉴바에서 도구>시러얼포트>COM1~COM12를 선택하며 포트 자동인식 기능을 사용하면 수월하다. 마더보드의 설정에서 일반적인 오류사항이 나타날수 있는데 통신포트의 설정과 보드의 설정이 일치하지 않을 경우에는 해당 오류 메시지가 표시된다. 이 경우에는 호스트가 여전히 보드에 연결되어 있는 경우에도 해당이 되므로, 마더보드를 재설정한 이후에 프린터의 USB 케이블 플러그를 뽑고 다시 연결하여 인식 시키면 된다."


// This determines the communication speed of the printer (이는 프린터의 통신 속도를 결정)


#define BAUDRATE 250000           

<= "프린터가 통신하는 속도를 250,000 으로 선택. 통신속도를 설정하는 탭이다. 주석을 표시하는 // 마크가 지워지면 활성이 되고 // 마크가 지워져 있지 않으면 비활성을 뜻한다. 속도가 높으면 이점이 있으나 사용하고 있는 컴퓨터에 따라 Baud Rate가 드라이버아 호환성이 결여되어 있는 경우가 더러 있는 편이다. 안정적으로 사용하려면 BAUDRATE를 115,200으로 셋팅하는것을 추천하지만 PC와의 통신에 문제가 있을 경우에는 BAUDRATE를 250,000으로 설정하여야 한다. 이는 시운전 단계에서 수정해도 무방하니 우선 250,000으로 설정하도록 한다."


// This enables the serial port associated to the Bluetooth interface (이는 시리얼포트가 블루투스 인터페이스에 연결되게 한다)

//#define BTENABLED  (BTENABLED를 정의)   // Enable BT interface on AT90USB devices (AT90USB 장치에 BT 인터페이스 사용)


// The following define selects which electronics board you have. (다음은 당신이 보유한 전자보드를 선택한다)

// Please choose the name from boards.h that matches your setup (당신이 선정할 보드 이름을 선택)


#ifndef MOTHERBOARD

<= "#ifndef MOTHERBOARD가 이전에 정의되어있지 않을때 #endif가 나오기 전까지의 코드를 실행시키는 역할을 한다. if NOT define으로 이해하면 된다. 참고로 #ifdef, #ifndef, #endif는 조건컴파일이다."


  #define MOTHERBOARD BOARD_RAMPS_13_EFB

<= "스텝핑 모터를 제어하는 보드의 사양을 선택하여 항목을 지정한다. 오리지널 프로그램에는 양산이 되고 있는 거의 모든 메이커의 스텝핑 모터 드라이브용 제어보드 사양이 전부 포함이 되어 있으므로 본인이 보유한 스텝모터(마더)보드의 사양을 확인하여 지정하면 되지남 여기서는 MOTHERBOARD에 // 번호 활성화 방식이 아닌 지정된 BOARD_RAMPS_13_EFB를 지정하였다. 전원출력이 Extruder, Fan, Heat Bed 3종류이므로 Extruder가 2개이거나 Fan을 2대 사용한다면 다른 항목으로 재지정해야 한다."


#endif

<= "#endif는 맨위의 #ifndef MOTHERBOARD와 한쌍이 되어 여기까지 실행이 된다."


// Define this to set a custom name for your generic Mendel, (당신의 유전 멘델의 사용자 이름을 설정하려면이 옵션을 정의)


#define CUSTOM_MENDEL_NAME "DIY LAB"

<= "사용자가 멘델타입의 3D프린터 형식이라면 "모델이름"을 지정할수 있다. 이 항목도 역시 옵션이며 비워두어도 관계없다."


// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)

// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)

// #define MACHINE_UUID "00000000-0000-0000-0000-000000000000"


// This defines the number of extruders


#define EXTRUDERS 1

<= "익스트루더(Extruder)의 수량을 지정하는 항목인데, 여기에서는 일단 수량을 1개로 지정하였다. 혹여 익스트루더 수량이 2개라면 수정을 해야한다."


//// The following define selects which power supply you have. Please choose the one that matches your setup

// 1 = ATX

// 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC) (PS_ON에 연결된 파란색 와이어 및 VCC에 빨간색 와이어 연결)


#define POWER_SUPPLY 1

<= "파워서플라이의 형식을 지정한다. 컴퓨터용이 ATX 파워서플라이와 X-Box용 203Watts 파워서플라이 중에서 ATX 파워서플라이를 지정하고 있다.


// Define this to have the electronics keep the power supply off on startup. If you don't know what this is leave it. (전원 공급 장치 선택)

// #define PS_DEFAULT_OFF


//===========================================================================

//=============================Thermal Settings  ============================ (열 설정)

//===========================================================================

//

//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table (일반적으로는 4.7kohm 풀업입니다. 1kohm 풀업은 올바른 저항과 테이블을 사용한 hotend 센서를 사용할 수 있습니다)

//

//// Temperature sensor settings: (온도 센서 설정)

// -2 is thermocouple with MAX6675 (only for sensor 0) (-2는 MAX6675와 함께하는 열전대로 센서0에만 적용된다)

// -1 is thermocouple with AD595 (-1은 AD595와 함께하는 열전대)


// 0 is not used

<= "주석을 표시하는 // 마크로 비활성화 되어 있으며, 온도센서 0번 사양은 is not used (사용안함) 의미"


// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)

<= "주석을 표시하는 // 마크로 비활성화 되어 있으며, 온도센서 1번 사양은100k thermistor - best choice for EPCOS 100k (4.7k 풀업) 의미"


// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup) (200K 서미스터입니다 - ATC Semitec 204GT-2 (4.7K 풀업))

// 3 is Mendel-parts thermistor (4.7k pullup) (부품 서미스터 (4.7K 풀업))

// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !! (hotend을 위해 사용하지 마십시오. 높은 온도에서 나쁜 해석을 제공합니다)

// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup) ((ParCan에서 사용) ATC Semitec 104GT-2 (4.7K 풀업))

// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup) (표 1 (우연 열전대를 사용하여 작성) (4.7K 풀업)만큼 정확하지 않음)

// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup) (하니웰 서미스터 135-104LAG-J01 (4.7K 풀업))

// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup) (이하 110번까지 아래는 서미스터 종류들 입니다. ^^)

// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) ( " )

// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup) ( " )

// 10 is 100k RS thermistor 198-961 (4.7k pullup) ( " )

// 11 is 100k beta 3950 1% thermistor (4.7k pullup) ( " )

// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed) ( " )

// 13 is 100k Hisens 3950  1% up to 300°C for hotend "Simple onE " & "Hotend "All In onE" ( " )

// 20 is the PT100 circuit found in the Ultimainboard V2.x ( " )

// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950 ( " )

//

//    1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k

//                          (but gives greater accuracy and more stable PID)

// 51 is 100k thermistor - EPCOS (1k pullup) ( " )

// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup) ( " )

// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup) ( " )

//

// 1047 is Pt1000 with 4k7 pullup ( " )

// 1010 is Pt1000 with 1k pullup (non standard) ( " )

// 147 is Pt100 with 4k7 pullup ( " )

// 110 is Pt100 with 1k pullup (non standard) ( " )


#define TEMP_SENSOR_0 1             

<= "온도센서를 선택하여 지정하는 항목이다. 상기 사용하는 서미스터 목록에서 골라서 설정한다. Ramps 1.3 보드의 경우 T0, T1이 핫엔드와 히트베드 센서로 할당되어 있는 경우도 있으니 유의해야 한다. 온도센서 0 번 (TEMP_SENSOR_0 : 노즐히터용)은 상기 1번 사양의 100k thermistor - best choice for EPCOS 100k (4.7k pullup) 선택"


#define TEMP_SENSOR_1 0

<= "온도센서 1 번은 상기 0번 사양의 is not used (TEMP_SENSOR_1 : 사용안함) 선택"


#define TEMP_SENSOR_2 0

<= "온도센서 2 번은 상기 0번 사양의 is not used (TEMP_SENSOR_2 : 사용안함) 선택"


#define TEMP_SENSOR_BED 1

<= "베드 온도센서 (TEMP_SENSOR_BED : 베드히터용)는 상기 1번 사양의 100k thermistor - best choice for EPCOS 100k (4.7k pullup) 선택"


// This makes temp sensor 1 a redundant sensor for sensor 0. If the temperatures difference between these sensors is to high the print will be aborted. (이는 온도 센서 1 센서 0에 대한 중복 센서를 만듭다. 이러한 센서들 사이의 온도 차이가 발생하면 인쇄가 중단됩니다)

//#define TEMP_SENSOR_1_AS_REDUNDANT (온도센서 1을 중복센서로 정의)


#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10

<= "온도센서(서머커플)들의 오류로 인해 히터가 계속 열을 가하는데 읽어들이는 온도가 변화 없을 경우 고장이나 화재의 원인이 될 수 있다. 이에 대한 안전장치로 값을 설정한다. 두개의 온도센서를 사용하여 온도차이가 10도 이상 나면 정지시키는 내용으로 온도센서가 1개면 //로 비활성화한다."


// Actual temperature must be close to target for this long before M109 returns success (실제 온도는 M109의 반환 성공 전 오랜 시간 목표값에 근접해야한다)


#define TEMP_RESIDENCY_TIME 1 // (seconds) (초)


#define TEMP_HYSTERESIS 3       // (degC) range of +/- temperatures considered "close" to the target one (목표에 "근접"으로 간주하는 +/- 온도)


#define TEMP_WINDOW     1       // (degC) Window around target to start the residency timer x degC early. (윈도우 목표 부근 저항시작 타이머 x degfC 시작전)


// The minimal temperature defines the temperature below which the heater will not be enabled It is used (최소 온도는 히터를 사용 가능하지 않는 그 이하의 온도를 정의)

// to check that the wiring to the thermistor is not broken. (서미스터 배선이 파손되지 않았는지 점검)

// Otherwise this would lead to the heater being powered on all the time. (그렇지 않으면이는 히터가 모든 시간에 전원이 공급되는으로 이어진다)


#define HEATER_0_MINTEMP 5

<= "노즐 히터의 최저온도를 설정한다. ABS나 PLA를 사용할때 5도 이하로 내릴 일이 없기 때문에 적당한 미니멈 값 5도 설정한다."


#define HEATER_1_MINTEMP 5

<= "적용되지 않은 히터이나 최저온도를 동일하게 미니멈 값 5도 설정한다."


#define HEATER_2_MINTEMP 5

<= "적용되지 않은 히터이나 최저온도를 동일하게 미니멈 값 5도 설정한다."


#define BED_MINTEMP 5

<= "BED 히터의 최저온도를 설정한다. ABS나 PLA를 사용할때 5도 이하로 내릴 일이 없기 때문에 적당한 미니멈 값 5도 설정한다."


// When temperature exceeds max temp, your heater will be switched off. (온도가 최대 온도를 초과하면 당신의 히터는 꺼집니다)

// This feature exists to protect your hotend from overheating accidentally, but *NOT* from thermistor short/failure! (이 기능은 실수로 과열됨으로부터 hotend을 보호하기 위해 존재하지만 서미스터의 짧은/장애에는 적용되지 않습니다)

// You should use MINTEMP for thermistor short/failure protection. (서미스터 / 단락 고장 보호를위한 MINTEMP를 사용해야합니다)


#define HEATER_0_MAXTEMP 275

<= "노즐 히터의 최고온도를 설정한다. ABS나 PLA를 사용할때 250도 이상 올릴 일이 없기 때문에 적당한 맥스값 275도 설정한다. 이 프린터에서는 실제 운전조건을 PLA 필라멘트 적용시 노즐히터 최고온도 205도, ABS 필라멘트 적용시 노즐히터 최고온도 240도를 적용하였다."


#define HEATER_1_MAXTEMP 275

<= "적용되지 않은 히터이나 최고온도를 동일하게 맥스값 275도 설정한다."


#define HEATER_2_MAXTEMP 275

<= "적용되지 않은 히터이나 최고온도를 동일하게 맥스값 275도 설정한다."


#define BED_MAXTEMP 150

<= "BED 히터의 최고온도를 설정한다. ABS나 PLA를 사용할때 100도 이상 올림 일이 없기 때문에 적당한 맥스값 150도 설정한다. 일반적으로 100~150도 정도 설정하면 된다. PLA는 BED 히터 최고온도 70도, ABS는 BED 히터 최고온도 150도까지 지정할수 있으나 이 프린터에서는 실제 운전조건을 PLA 필라멘트 적용시 BED 히터 최고온도 50도, ABS 필라멘트 적용시 BED 히터 최고온도 100도를 적용하였다."


// If your bed has low resistance e.g. .6 ohm and throws the fuse you can duty cycle it to reduce the (당신의 침대가 퓨즈를 0.6 옴 예를 들어 낮은 저항을 가지고 있으면, 듀티사이클을 줄일 수 있습니다)

// average current. The value should be an integer and the heat bed will be turned on for 1 interval of (평균 전류. 이 값은 정수 여야하며 히팅베드는 1 간격으로 켜집니다)

// HEATER_BED_DUTY_CYCLE_DIVIDER intervals. (HEATER_BED_DUTY_CYCLE_DIVIDER 간격)

//#define HEATER_BED_DUTY_CYCLE_DIVIDER 4  (HEATER_BED_DUTY_CYCLE_DIVIDER 4를 정의)


// If you want the M105 heater power reported in watts, define the BED_WATTS, and (shared for all extruders) EXTRUDER_WATTS (M105 히터 전원을 와트로 보고하려면, 베드와트와 압출기(모든 압출기들)를 와트로 정의한다)

//#define EXTRUDER_WATTS (12.0*12.0/6.7) //  P=I^2/R (압출기 와트를 정의 (12.0 * 12.0 / 6.7) // P = I ^ 2R)

//#define BED_WATTS (12.0*12.0/1.1)      // P=I^2/R (베드 와트를 정의 (12.0 * 12.0 / 1.1) // P = I ^ 2R)


// PID settings: (PID 설정)

// Comment the following line to disable PID and enable bang-bang. (PID를 해제하고 뱅뱅을 사용하려면 다음 줄을 주석으로 처리합니다)


#define PIDTEMP

<= "PIDTEMP 설정"


#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current

<= "BANG_MAX 현재 노즐 255 // 한계; 255 = 전체 현재. 255는 8bit 100%의 듀티펄스, 듀티사이클로 아두이노 5V이하만 가능한것을 SMPS 12V 전압을 트랜지스터 스위치 개념으로 전압증폭하여 히터 가열하는 기능수행"


#define PID_MAX 255 // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current

<= "PID_MAX 현재 노즐 255 // 한계; 255 = 전체 현재. 255는 8bit 100%의 듀티펄스, 듀티사이클로 아두이노 5V이하만 가능한것을 SMPS 12V 전압을 트랜지스터 스위치 개념으로 전압증폭하여 히터 가열하는 기능수행"


#ifdef PIDTEMP


  //#define PID_DEBUG // Sends debug data to the serial port. (시리얼 포트에 디버그 데이터를 전송 정의합니다)

  //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX (오픈 루프 PID를 넣 정의합니다. M104 / M140 PID_MAX는 0에서 출력 전력을 설정)


  #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature (목표 온도와 실제 온도의 온도차)

                                  // is more then PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max. (PID_FUNCTIONAL_RANGE 다음 PID가 차단되고 히터는 min/max로 설정된다)


  #define PID_INTEGRAL_DRIVE_MAX 255  //limit for the integral term (적분 기간 동안의 제한. 255는 8bit 100%의 듀티펄스, 듀티사이클로 아두이노 5V이하만 가능한것을 SMPS 12V 전압을 트랜지스터 스위치 개념으로 전압증폭하여 히터 가열하는 기능수행 )


  #define K1 0.95 //smoothing factor within the PID (스무딩)


  #define PID_dT ((OVERSAMPLENR * 10.0)/(F_CPU / 64.0 / 256.0)) //sampling period of the temperature routine (온도 루틴의 샘플링 기간)


// If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it (당신이 미리 hotend를 사용하는 경우 다음은 주석을 해제하여 값 세트 중 하나를 사용할 수 있습니다)

// Ultimaker (얼티메이커)


    #define  DEFAULT_Kp 22.2

<= "오버슈팅이나 언더값 교정을 위한 PID 디펄트값"

    #define  DEFAULT_Ki 1.08

<= "오버슈팅이나 언더값 교정을 위한 PID 디펄트값"

    #define  DEFAULT_Kd 114

<= "오버슈팅이나 언더값 교정을 위한 PID 디펄트값"


// MakerGear

//    #define  DEFAULT_Kp 7.0

//    #define  DEFAULT_Ki 0.1

//    #define  DEFAULT_Kd 12


// Mendel Parts V9 on 12V

//    #define  DEFAULT_Kp 63.0

//    #define  DEFAULT_Ki 2.25

//    #define  DEFAULT_Kd 440


#endif // PIDTEMP

<= "다음"


// Bed Temperature Control (베드온도 제어)

// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis (PIDTEMPBED와 함께 PID 또는 뱅뱅을 선택한다. 뱅뱅의 경우, BED_LIMIT_SWITCHING 이력을 가능하게 할 것이다)

//

//

// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder. (주석이 베드의 PID를 활성화합니다. 그것은 압출기와 같은 ferquency의 PWM을 사용합니다)

// If your PID_dT above is the default, and correct for your hardware/configuration, that means 7.689Hz, (당신의 PID_dT 가 디폴트값의 상위값이고, 하드웨어와 구성을 위한 올바른 값이면 그것은 7.689Hz을 의미합니다) 

// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating. (저항 부하에 구형파를 구동이 괜찮으면 당신에게 FET 가열시 크게 영향을주지 않습니다)

// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater. (이것은 또한 250W 히터에 Fotek SSR-10DA 솔리드 스테이트 릴레이에 잘 작동합니다)

// If your configuration is significantly different than this and you don't understand the issues involved, you probably (구성이보다 현저하게 다르며 문제를 이해하지 못할 경우)

// shouldn't use bed PID until someone else verifies your hardware works. (다른 사람이 당신의 장치는 작동을 확인할 때까지는 침대의 PID를 사용해서는 안됩니다)

// If this is enabled, find your own PID constants below. (불가능시, 아래에 당신의 PID를 찾아야 합니다)

//#define PIDTEMPBED (PIDTEMPBED 정의)

//

//#define BED_LIMIT_SWITCHING (BED_LIMIT_SWITCHING를 정의)


// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option. (이 침대에 delived 최대 전력을 설정하고, HEATER_BED_DUTY_CYCLE_DIVIDER 옵션을 대체합니다)

// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis) (침대 제어의 모든 형태 (이력과 함께 PID, 뱅뱅))

// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did, (255 이외의 다른 어떤 설정도, HEATER_BED_DUTY_CYCLE_DIVIDER가 그랬던 것처럼 침대에 PWM의 형식을 적용할수 있습니다)

// so you shouldn't use it unless you are OK with PWM on your bed.  (see the comment on enabling PIDTEMPBED) (당신의 침대에 PWM를 승인하지 않는 한 당신은 그것을 사용하지 말아야합니다. (가능 PIDTEMPBED에 대한 설명을 참조))


#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current (베드에 대한 제한 듀티 사이클; 255 = 전체 현재. 255는 8bit 100%의 듀티펄스, 듀티사이클로 아두이노 5V이하만 가능한것을 SMPS 12V 전압을 트랜지스터 스위치 개념으로 전압증폭하여 히터 가열하는 기능수행)


#ifdef PIDTEMPBED


//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) (120V 250W 실리콘 히터를 4mm 보로 실리케이트 (MendelMax 1.5 이상) 속으로) 

//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10) (FOPDT 모델에서 - KP = 0.39 Tp를 = 405 Tdead = 66, Tc를 79.2 으로 설정, aggressive 계수는 0.15 (vs 0.1, 1, 10) 설정)


    #define  DEFAULT_bedKp 10.00


    #define  DEFAULT_bedKi .023


    #define  DEFAULT_bedKd 305.4


//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) (120V 250W 실리콘 히터를 4mm 보로 실리케이트 (MendelMax 1.5 이상) 속으로) 

//from pidautotune (pidautotune 에서)

//    #define  DEFAULT_bedKp 97.1

//    #define  DEFAULT_bedKi 1.41

//    #define  DEFAULT_bedKd 1675.16


// FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles. (스스로 찾기: "M303 E-1 C8 S90" 8 사이클을 위한 베드위 90 degreC 자동튜닝 실행을 위하여)


#endif // PIDTEMPBED (PIDTEMPBED 다음)


//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit (이는 온도가 한계 아래 인 경우, 즉, 압출기의 위험한 이동을 방지)

//can be software-disabled for whatever purposes by (어떤 목적에 의해 소프트웨어 비활성화가 될 수 있습니다)


#define PREVENT_DANGEROUS_EXTRUDE

<= "PREVENT_DANGEROUS_EXTRUDE를 정의"


//if PREVENT_DANGEROUS_EXTRUDE is on, you can still disable (uncomment) very long bits of extrusion separately. (PREVENT_DANGEROUS_EXTRUDE가있는 경우, 당신은 별도의 매우 긴 비트(주석을)를 사용하지 않고 압출금지를 설정할 수 있습니다)


#define PREVENT_LENGTHY_EXTRUDE


#define EXTRUDE_MINTEMP 170


#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances. (매우 큰 거리의 압출을 방지 할 수 있습니다)


/*================== Thermal Runaway Protection ============================== (열폭주 보호)

This is a feature to protect your printer from burn up in flames if it has

a thermistor coming off place (this happened to a friend of mine recently and

motivated me writing this feature). (서미스터가 벗겨질 경우, 프린터를 화재로부터 보호 할 수있는 기능이다. (최근에 내 친구에게 일어나 동기 부여))


The issue: If a thermistor come off, it will read a lower temperature than actual.

The system will turn the heater on forever, burning up the filament and anything

else around. (문제 : 서미스터가 벗겨 질 경우에는 실제보다 낮은 온도를 읽습니다. 이 시스템은 계속해 히터가 켜지므로 필라멘트와 다른 주변을 태웁니다)


After the temperature reaches the target for the first time, this feature will 

start measuring for how long the current temperature stays below the target 

minus _HYSTERESIS (set_temperature - THERMAL_RUNAWAY_PROTECTION_HYSTERESIS). (온도가 처음 목표에 도달 한 후, 이 기능은 현재 온도가 마이너스 _HYSTERESIS (set_temperature - THERMAL_RUNAWAY_PROTECTION_HYSTERESIS) 목표 아래 켜져있는 시간에 대한 측정을 시작한다)


If it stays longer than _PERIOD, it means the thermistor temperature

cannot catch up with the target, so something *may be* wrong. Then, to be on the

safe side, the system will he halt.


Bear in mind the count down will just start AFTER the first time the 

thermistor temperature is over the target, so you will have no problem if

your extruder heater takes 2 minutes to hit the target on heating. 


*/

// If you want to enable this feature for all your extruder heaters,

// uncomment the 2 defines below:


// Parameters for all extruder heaters

//#define THERMAL_RUNAWAY_PROTECTION_PERIOD 40 //in seconds

//#define THERMAL_RUNAWAY_PROTECTION_HYSTERESIS 4 // in degree Celsius


// If you want to enable this feature for your bed heater,

// uncomment the 2 defines below:


// Parameters for the bed heater

//#define THERMAL_RUNAWAY_PROTECTION_BED_PERIOD 20 //in seconds

//#define THERMAL_RUNAWAY_PROTECTION_BED_HYSTERESIS 2 // in degree Celsius

//===========================================================================



//===========================================================================

//=============================Mechanical Settings=========================== (기계설정)

//===========================================================================


// Uncomment the following line to enable CoreXY kinematics (다음 행의 주석이 CoreXY의 운동을 가능하게 한다)

// #define COREXY (COREXY 정의)


// coarse Endstop Settings (개략적인 Endstop 설정)


#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors (주석처리(줄 맨앞에 // 사용시)는 endstop 풀업 저항을 사용하지 않도록 합니다)


#ifndef ENDSTOPPULLUPS


  // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined (엔드스탑 설정이 잘되면: 개별적 풀업들은 EDSTOPPULLUPS가 설정되면 무시될것입니다)

  // #define ENDSTOPPULLUP_XMAX 

  // #define ENDSTOPPULLUP_YMAX

  // #define ENDSTOPPULLUP_ZMAX

  // #define ENDSTOPPULLUP_XMIN

  // #define ENDSTOPPULLUP_YMIN

  // #define ENDSTOPPULLUP_ZMIN


#endif

=> "다음"


#ifdef ENDSTOPPULLUPS


  #define ENDSTOPPULLUP_XMAX


  #define ENDSTOPPULLUP_YMAX


  #define ENDSTOPPULLUP_ZMAX


  #define ENDSTOPPULLUP_XMIN


  #define ENDSTOPPULLUP_YMIN


  #define ENDSTOPPULLUP_ZMIN


#endif

=> "다음"


// The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins. (직접 신호와 접지 핀 사이의 기계적 endswitch를 연결하면 풀업이 필요하다)


const bool X_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.

const bool Y_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.

const bool Z_MIN_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.(const bool Z_MIN_ENDSTOP_INVERTING의 논리를 반전 true로 설정합니다)

const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.

const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.

const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.


#define DISABLE_MAX_ENDSTOPS


//#define DISABLE_MIN_ENDSTOPS


// Disable max endstops for compatibility with endstop checking routine


#if defined(COREXY) && !defined(DISABLE_MAX_ENDSTOPS)


  #define DISABLE_MAX_ENDSTOPS


#endif


// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1 (스테퍼 핀 (액티브 로우)를 사용하여 0을 사용 반전, 1을 사용하여 비반전)


#define X_ENABLE_ON 0


#define Y_ENABLE_ON 0


#define Z_ENABLE_ON 0


#define E_ENABLE_ON // For all extruders (모든 압출기들)


// Disables axis when it's not being used.(사용하지 않을때 축은 동작하지 않습니다)


#define DISABLE_X false


#define DISABLE_Y false


#define DISABLE_Z false


#define DISABLE_E false // For all extruders  (모든 압출기들)


#define DISABLE_INACTIVE_EXTRUDER true //disable only inactive extruders and keep active extruder enabled (비활성 압출기를 해제하고 활성 압출기를 사용할 수 유지)


#define INVERT_X_DIR true    // for Mendel set to false, for Orca set to true (멘델은 false로 설정, Orca는 true로 설정)


#define INVERT_Y_DIR true    // for Mendel set to true, for Orca set to false (멘델은 false로 설정, Orca는 true로 설정)


#define INVERT_Z_DIR true     // for Mendel set to false, for Orca set to true (멘델은 false로 설정, Orca는 true로 설정)


#define INVERT_E0_DIR true   // for direct drive extruder v9 set to true, for geared extruder set to false (직접 구동 압출기 V9 세트에 대하여 true로 설정, 기어 압출기에 대하여 false로 설정)


#define INVERT_E1_DIR false    // for direct drive extruder v9 set to true, for geared extruder set to false (직접 구동 압출기 V9 세트에 대하여 true로 설정, 기어 압출기에 대하여 false로 설정)


#define INVERT_E2_DIR false   // for direct drive extruder v9 set to true, for geared extruder set to false (직접 구동 압출기 V9 세트에 대하여 true로 설정, 기어 압출기에 대하여 false로 설정)


// ENDSTOP SETTINGS: (엔드스탑 설정)

// Sets direction of endstops when homing; 1=MAX, -1=MIN (원점 복귀 endstops의 방향을 설정; 1 = MAX, -1 = MIN)


#define X_HOME_DIR -1

<= "X축 원점 복귀 endstops의 방향을 MIN 설정"


#define Y_HOME_DIR -1

<= "Y축 원점 복귀 endstops의 방향을 MIN 설정"


#define Z_HOME_DIR -1

<= "Z축 원점 복귀 endstops의 방향을 MIN 설정"


#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS. (true의 경우, 축 HOME_POS 미만 좌표로 이동하지 않습니다)


#define max_software_endstops true  // If true, axis won't move to coordinates greater than the defined lengths below. (true의 경우, 축이 아래에 정의 된 길이보다 더 큰 좌표로 이동하지 않습니다)


// Travel limits after homing (원점 복귀 후 이동 제한)


#define X_MAX_POS 225

<= "원점 복귀후 X축 방향으로 최대 225mm 이상은 이동 제한"


#define X_MIN_POS 0

<= "원점 복귀후 X축 방향으로 최소 0mm 이하는 이동 제한"


#define Y_MAX_POS 310

<= "원점 복귀후 Y축 방향으로 최대 310mm 이상은 이동 제한 (※ 실측시 290mm, 슬라이서프로그램에서 교정가능)"


#define Y_MIN_POS 0

<= "원점 복귀후 Y축 방향으로 최소 0mm 이하는 이동 제한"


#define Z_MAX_POS 320

<= "원점 복귀후 Z축 방향으로 최대 320mm 이상은 이동 제한 ( 실측시 300mm, 슬라이서프로그램에서 교정가능)"


#define Z_MIN_POS 0

<= "원점 복기후 Z축 방향으로 최소 0mm 이하는 이동 제한"


#define X_MAX_LENGTH (X_MAX_POS - X_MIN_POS)

<= "원점 복귀후 X축 방향 치대 이동길이는 (X 최대거리 - X최소거리)"


#define Y_MAX_LENGTH (Y_MAX_POS - Y_MIN_POS)

<= "원점 복귀후 X축 방향 치대 이동길이는 (Y 최대거리 - Y최소거리)"


#define Z_MAX_LENGTH (Z_MAX_POS - Z_MIN_POS)

<= "원점 복귀후 X축 방향 치대 이동길이는 (Z 최대거리 - Z최소거리)"


//============================= Bed Auto Leveling =========================== (베드오토레벨링)


#define ENABLE_AUTO_BED_LEVELING // Delete the comment to enable (remove // at the start of the line) (사용시 줄의 시작 부분에 주석 명령인 // 제거)


#define Z_PROBE_REPEATABILITY_TEST  // If not commented out, Z-Probe Repeatability test will be included if Auto Bed Leveling is Enabled. (베드 자동 수평 기능이 사용되는 경우, 주석 처리하지 않으면 Z-조사 반복 테스트가 포함됩니다)


#ifdef ENABLE_AUTO_BED_LEVELING


// There are 2 different ways to pick the X and Y locations to probe: (프로브 X 및 Y 위치를 조사 선택하는 2 가지 방법이 있습니다)


//  - "grid" mode ("그리드" 모드)

//    Probe every point in a rectangular grid (사각형 격자의 모든 지점을 조사)

//    You must specify the rectangle, and the density of sample points (당신은 사각형 및 샘플 점의 밀도를 지정해야합니다)

//    This mode is preferred because there are more measurements. (좀더 많은 측정이 있기 때문 이 모드가 바람직하다)

//    It used to be called ACCURATE_BED_LEVELING but "grid" is more descriptive (정확한 침대 레벨링이라 일반적으로 부르지만 "그리드"라고 하는 것이 더 자세한 설명입니다)


//  - "3-point" mode ("3 점" 모드)

//    Probe 3 arbitrary points on the bed (that aren't colinear) (침대에 3 임의의 점 조사 (동일 선상이 되지 않습니다))

//    You must specify the X & Y coordinates of all 3 points (당신은 3 점의 X 및 Y 좌표를 지정해야합니다)


  #define AUTO_BED_LEVELING_GRID

=> "오토베드레벨링을 그리드 모드 지정"


  // with AUTO_BED_LEVELING_GRID, the bed is sampled in a (AUTO_BED_LEVELING_GRID와 베드는 샘플링 된다)

  // AUTO_BED_LEVELING_GRID_POINTSxAUTO_BED_LEVELING_GRID_POINTS grid (AUTO_BED_LEVELING_GRID_POINTSxAUTO_BED_LEVELING_GRID_POINTS 그리드)

  // and least squares solution is calculated (및 최소 제곱 해법은 계산)

  // Note: this feature occupies 10'206 byte (참고 :이 기능은 10,206 바이트를 차지)


  #ifdef AUTO_BED_LEVELING_GRID

=> "만약 오토베드레벨링을 그리드 모드 지정했다면"


    // set the rectangle in which to probe (베드의 사각크기 조사)


    #define LEFT_PROBE_BED_POSITION 35

<= "베드 좌측 조사위치 35mm" 


    #define RIGHT_PROBE_BED_POSITION 215

<= "베드 우측 조사위치 215mm" 


    #define BACK_PROBE_BED_POSITION 265

<= "베드 후면 조사위치 265mm ( 실측시 290mm)" 


    #define FRONT_PROBE_BED_POSITION 90

<= "베드 전면 조사위치 90mm ( 실측시 125mm)" 


     // set the number of grid points per dimension (사이즈별 격자 점의 개수를 설정)

     // I wouldn't see a reason to go above 3 (=9 probing points on the bed) (상기 3으로 가는 이유를 보지 않겠다 (=9 베드위 조사점들)


    #define AUTO_BED_LEVELING_GRID_POINTS 3

=> "베드 오토레벨링의 그리드 점 3군데를 정의한다"


  #else  // not AUTO_BED_LEVELING_GRID

=> "그렇지 않으면 베드 오토레벨링을 사용하지 않는다"


    // with no grid, just probe 3 arbitrary points.  A simple cross-product (그리드 아닌, 단지 3 임의의 점을 조사. 간단한 제품 간)

    // is used to esimate the plane of the print bed (은 인쇄 층의 평면을 추정하는 데 사용됩니다)


      #define ABL_PROBE_PT_1_X 30

<= "오토레벨링 조사를 위한 포인트 1의 X축 30mm로 정의 (※ 실측시 55mm)"


      #define ABL_PROBE_PT_1_Y 100

<= "오토레벨링 조사를 위한 포인트 1의 Y축 100mm로 정의 (※ 실측시 55mm)"


      #define ABL_PROBE_PT_2_X 30

<= "오토레벨링 조사를 위한 포인트 2의 X축 30mm로 정의 (※ 실측시 55mm)"


      #define ABL_PROBE_PT_2_Y 230

<= "오토레벨링 조사를 위한 포인트 2의 Y축 230mm로 정의 (※ 실측시 270mm)"


      #define ABL_PROBE_PT_3_X 200

<= "오토레벨링 조사를 위한 포인트 3의 X축 200mm로 정의 (※ 실측시 210mm)"


      #define ABL_PROBE_PT_3_Y 230

<= "오토레벨링 조사를 위한 포인트 3의 Y축 230mm로 정의 (※ 실측시 270mm)"


  #endif // AUTO_BED_LEVELING_GRID

<= "endif 는 if 문의 짝으로 모든 if 문 뒤에 붙여야 하며, 오토베드레벨링 그리드의 경우 종료를 의미합니다"


  // these are the offsets to the probe relative to the extruder tip (Hotend - Probe)


  #define X_PROBE_OFFSET_FROM_EXTRUDER -10


  #define Y_PROBE_OFFSET_FROM_EXTRUDER -29


  #define Z_PROBE_OFFSET_FROM_EXTRUDER -0.3


  #define Z_RAISE_BEFORE_HOMING 4       // (in mm) Raise Z before homing (G28) for Probe Clearance.

                                        // Be sure you have this distance over your Z_MAX_POS in case


  #define XY_TRAVEL_SPEED 4000         // X and Y axis travel speed between probes, in mm/min


  #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.

  #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points


  //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell

  //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.


  //If defined, the Probe servo will be turned on only during movement and then turned off to avoid jerk

  //The value is the delay to turn the servo off after powered on - depends on the servo speed; 300ms is good value, but you can try lower it.

  // You MUST HAVE the SERVO_ENDSTOPS defined to use here a value higher than zero otherwise your code will not compile.


//  #define PROBE_SERVO_DEACTIVATION_DELAY 300



//If you have enabled the Bed Auto Leveling and are using the same Z Probe for Z Homing,

//it is highly recommended you let this Z_SAFE_HOMING enabled!!!


  #define Z_SAFE_HOMING   // This feature is meant to avoid Z homing with probe outside the bed area.

                          // When defined, it will:

                          // - Allow Z homing only after X and Y homing AND stepper drivers still enabled

                          // - If stepper drivers timeout, it will need X and Y homing again before Z homing

                          // - Position the probe in a defined XY point before Z Homing when homing all axis (G28)

                          // - Block Z homing only when the probe is outside bed area.


  #ifdef Z_SAFE_HOMING


    #define Z_SAFE_HOMING_X_POINT (X_MAX_LENGTH/2)    // X point for Z homing when homing all axis (G28)


    #define Z_SAFE_HOMING_Y_POINT (Y_MAX_LENGTH/2)    // Y point for Z homing when homing all axis (G28)


  #endif


#endif // ENABLE_AUTO_BED_LEVELING



// The position of the homing switches (원점 복귀 스위치의 위치)

//#define MANUAL_HOME_POSITIONS  // If defined, MANUAL_*_HOME_POS below will be used (MANUAL_HOME_POSITIONS이 설명서는 _ * _ HOME_POS 아래 사용됩니다)

//#define BED_CENTER_AT_0_0  // If defined, the center of the bed is at (X=0, Y=0) (BED_CENTER_AT_0_0가 // 정의 된 경우, 침대의 중심에있다 (X = 0, Y = 0))


//Manual homing switch locations: (수동 원점 복귀 스위치 위치:)

// For deltabots this means top and center of the Cartesian print volume.


#define MANUAL_X_HOME_POS 0


#define MANUAL_Y_HOME_POS 0


#define MANUAL_Z_HOME_POS 0


//#define MANUAL_Z_HOME_POS 402 // For delta: Distance between nozzle and print surface after homing.


//// MOVEMENT SETTINGS (이동설정)


#define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E (모든 축 관련 배열의 축 순서는 X, Y, Z, E이다)


#define HOMING_FEEDRATE {50*60, 50*60, 4*60, 0}  // set the homing speeds (mm/min) (원점 복귀 속도를 설정 (mm/min))


// default settings (기본 설정)


#define DEFAULT_AXIS_STEPS_PER_UNIT   {100,100,4000,100}  // default steps per unit for Ultimaker (Ultimaker 용 단위별 기본 스텝들 설정)


#define DEFAULT_MAX_FEEDRATE          {8000, 8000, 2, 100}    // (mm/sec)


#define DEFAULT_MAX_ACCELERATION      {9000,9000,100,10000}    // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for Skeinforge 40+, for older versions raise them a lot. (가속 이동을위한 X, Y, Z, E 최대 시작 속도. E 기본 값은 skeinforge 40+와 이전 버전의 그들에게 많은 인상을 위하여 좋다)


#define DEFAULT_ACCELERATION          1500    // X, Y, Z and E max acceleration in mm/s^2 for printing moves (인쇄 이동을 위한 mm/s^2 X, Y, Z 및 E 최대 가속도)


#define DEFAULT_RETRACT_ACCELERATION  1500   // X, Y, Z and E max acceleration in mm/s^2 for retracts (후퇴들을 위한 mm/s^2 X, Y, Z 및 E 최대 가속도)


첫째줄  x, y, z, e (익스트루더) 순서 입니다. 둘째줄 초당 이동 속도 제한입니다. 8000 의미는 초당 800 cm 이상 못움직이게 한다는 의미입니다. 셋째줄은 가속도 입니다. 단위는 mm/sec^2 입니다. 가속도가 9000 mm/sec^2 이하를 의미합니다. z,e는 별로 수정이 필요없지만 x,y 부분은 너무 높으면 출력물에 잔상이 생깁니다. 너무 낮으면 모서리가 뭉툭해 집니다. 바꿔줄 부분은 첫째줄과 둘째줄이며 예로 둘째줄 세번째 숫자 2 를 올려주면 z축의 속도가 빨라집니다. 산업규격에서 쓰는 x, y축 모터 풀리기어 잇수나 z축 전산볼트를 다른 규격으로 교체시 첫번째 줄을 다르게 입력해주어야 합니다.


- 설명 -


1. 스텝이란 : 모터의 축은 360도 회전합니다. 일정한 전류를 주게 되면 일정한 각도로 회전하게됩니다. 그러면 몇번 회전해야 한바퀴(360도)를 도는지에서 '몇번'에 해당하는 것을 스텝 이라합니다.

2. 기어(풀라잇수)를 쓸경우 (x, y축) 계산식: (모터스텝 x 마이크로스텝) / (벨트피치 * 풀리잇수)

3. 기어를 않고 스크류를 쓰는경우 (z축) 계산식: (모터스텝 x 마이크로스텝) / 피치(리드)

4. 모터스텝 = 200 (고정) 이면 모터축은 360도 회전합니다. 일반적인 Nema 17 모터는 1.8도씩 돌아갑니다. 200번 돌면 360도가 됩니다.

그래서 모터스텝은 200 으로 3d프린터의 nema 17 은 대부분 1.8도입니다. 0.9도는 아주 고가 입니다.

5. 마이크로 스텝 = 16 (고정)으로 Ramps 보드에 점퍼 꼽는것으로 간단하게 모터의 스텝을 나눠주는 역할을 수행합니다. 1.8도씩 돌던것을 전류를 더 조금 줘서 0.9도 0.2도 이런식으로 변경하며 점퍼 3개를 꼽으면 전류를 16으로 나누어 주게 됩니다.

6. 벨트피치 = 2 (거의 고정) 으로 gt2 벨트의 뒤에 숫자 2는 2mm 입니다. 그러므로 예로 T2.5 벨트의 피치는 2.5mm 를 의미합니다.

7. 풀리잇수 = 16 (변경 가능) 으로 GT2 기어의 잇수입니다. 풀리의 잇수를 직접 세어보면 됩니다. 잇수가 20개 짜리도 있으나 3D프린터에서는 16개 짜리를 주로 사용합니다. 계산식은 상기 2항과 같이 (모터스텝 x 마이크로스텝) / (벨트피치 * 풀리잇수) 입니다. 입력하는 숫자가 클수록 더 작게 움직이게 되며, 결론적으로 gt2 사용시 1600 나누기 풀리기어 잇수가 됩니다. 

1) GT2 벨트를 쓰고 16 잇수풀리 GT2 기어를 쓸경우 = (200 x 16) / (2 x 16) = 100. 

예2) GT2 벨트를 쓰고 20 잇수풀리 GT2 기어를 쓸경우 = (200 x 16) / (2 x 20) = 80

8. z축 스텝 계산식 : (모터스텝 x 마이크로스텝) / 피치(리드)

전산볼트 : m5 의 경우 표준 피치(리드)규격이 0.8 mm 입니다

TM rod : TM 스크류의 경우 주문제작 품이기때문에 규격이 제각각 이나 TM 스크류를 4줄 나사 피치 2 mm 로 계산시 4 x2 = 8 을 입력하시면 됩니다.

예1) M5 전산볼트: (200 x 16) / 0.8 = 4000

예2) 4줄나사 피치 2 mm TM 스크류 : (200 x 16) / 8   = 400 로 입력하면 됩니다. 결론으로 3200 나누기 스크류 피치(리드) 가 됩니다.

9. 스텝 미세조정 : 100mm를 이동하게 한후 공식에 대입하면 새 스텝= 100/이동거리 x 옛날 스텝으로 이론상으론 이렇지만 100 mm를 정밀하게 측정하려면 gt2, m5 이런 것들은 전부 산업용 규격으로 오차가 거의없습니다. 측정도구, 문방구자, 눈 측정시 오차 많기에 개인이 산업규격품의 오차를 수정하는것은 거의 불가능 합니다. 그나마 익스트루더는 이 방법으로 수정할수 있지만 10 cm 당 1-2mm 오차로 압출량을 5 %단위로 조절해줍니다. 

10. 전산볼트의 경우 4000 TM의 경우 400 이니 동일한 정밀도인경우 전산볼트가 10배더 미세 하게 움직입니다.

10배 미세하게 움직일 경우

장점: 1 mm 씩 움직일거 0.1미리씩 움직이니 당연히 더 정밀합니다.

단점: 1 mm 움직일때 1 바퀴 돌을것을 10 바퀴 돌기에 속도가 느립니다. 

예1) M5 전산볼트의 최소 이동 거리는 전산볼트의 경우 한바퀴를 돌리면 Z축으로 0.8mm가 움직이기에 모터 200번을 움직여야 한바퀴 돌아갑니다. 200번 돌리는것을 또 16으로 나누어 주면 3200번을 움직여야 0.8mm 이동합니다. M5 전산볼트 1스텝당 0.8/3200  =0.00025 mm 씩 이동합니다. TM 스크류는 1스텝당 0.0025mm 씩 이동합니다. 

11. 3d프린터 레이어가 0.1 인것을 생각하면 더 정밀하게 하기 위해 더 작게 움직이는 스크류를 사용한다는것보다는 차라리 볼트와 너트간의 유격 벨트 장력등을 신경쓰시는것이 효율적일수 있습니다. 전산 볼트와 TM 스크류의 장단점은 다음과 같습니다. 정밀도의 차이는 모르겠고 단지 불편하고 편하고의 차이 입니다. 아무래도 TM 스크류에비해서 전산볼트가 체결용이라 직진도와 유격이 보장이 않되는 편이지만 전산볼트는 구경이 작다보니 어느정도 상쇄가 되는것 같습니다.

전산볼트 : 가격이 쌉니다. m5  전산볼트 1m 약 3500원. m5 너트 x 2개는 약 100원 입니다. 이동거리가 미세하여 회전수가 많습니다. 윤활류 안바를 경우 소음이 발생하며 오래쓸경우 너트가 닳아져 교체해야하는 귀찮음이 발생합니다. 

TM 스크류 : 가격이 전산볼트에 비해 10배로 장점은 전산볼트의 반대 입니다. 


// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).

// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).

// For the other hotends it is their distance from the extruder 0 hotend.

// #define EXTRUDER_OFFSET_X {0.0, 20.00} // (in mm) for each extruder, offset of the hotend on the X axis

// #define EXTRUDER_OFFSET_Y {0.0, 5.00}  // (in mm) for each extruder, offset of the hotend on the Y axis


// The speed change that does not require acceleration (i.e. the software might assume it can be done instantaneously)


#define DEFAULT_XYJERK                20.0    // (mm/sec)


#define DEFAULT_ZJERK                 0.4     // (mm/sec)


#define DEFAULT_EJERK                 5.0    // (mm/sec)


//===========================================================================

//=============================Additional Features=========================== (추가기능)

//===========================================================================


// Custom M code points (사용자 지정 M 코드 포인트)


#define CUSTOM_M_CODES

<= "CUSTOM_M_CODES을 정의"


#ifdef CUSTOM_M_CODES

<= "CUSTOM_M_CODES을 정의했다면"


  #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851

<= "CUSTOM_M_CODE의 Z축 OFFSET 설정을 851로 정의"


  #define Z_PROBE_OFFSET_RANGE_MIN -15

=> "Z축 OFFSET 범위 조사의 최소값을 -15로 정의"


  #define Z_PROBE_OFFSET_RANGE_MAX -5

=> "Z축 OFFSET 범위 조사의 최대값을 -5로 정의"


#endif


// EEPROM

// The microcontroller can store settings in the EEPROM, e.g. max velocity... (마이크로 컨트롤러, EEPROM에 예를 들어 최대 속도를 설정을 저장할 수 있습니다 ...)

// M500 - stores parameters in EEPROM (EEPROM에 저장 매개변수들)

// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily). (EEPROM에서 매개 변수를 읽어 (만일 당신이 일시적으로 변경 한 후에 다시 설정할 필요가있는 경우))

// M502 - reverts to the default "factory settings".  You still need to store them in EEPROM afterwards if you want to. (본 "공장 설정"으로 되돌아갑니다. 당신은 여전히 당신이 원하는 경우 나중에 EEPROM에 저장해야합니다)

//define this to enable EEPROM support (EEPROM 지원을 활성화하기 위해 정의)

//#define EEPROM_SETTINGS (EEPROM_SETTINGS 정의)

//to disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out: (주석을 밖으로 활성화 시키면 ~1700 바이트에 의해 EEPROM 시리얼 반응과 프로그램 공간 감소를 할수없다)

// please keep turned on if you can. (당신이 할 수있는 경우에 켜져 보관하십시오)

//#define EEPROM_CHITCHAT (EEPROM_CHITCHAT를 정의)


// Preheat Constants (예열 상수들)


#define PLA_PREHEAT_HOTEND_TEMP 205

<= "PLA 필라멘트시 노즐 예열온도 205도 의"


#define PLA_PREHEAT_HPB_TEMP 50

<= "PLA 필라멘트시 히팅베드 예열온도 50도 의"


#define PLA_PREHEAT_FAN_SPEED 255   // Insert Value between 0 and 255 (0과 255 사이 삽입값)

<= "PLA 필라멘트시 예열용 팬속도 255 . 255는 8bit 100%의 듀티펄스, 듀티사이클로 아두이노 5V이하만 가능한것을 SMPS 12V 전압을 트랜지스터 스위치 개념으로 전압증폭하여 히터 가열하는 기능수행"


#define ABS_PREHEAT_HOTEND_TEMP 240

<= "ABS 필라멘트시 노즐 예열온도 240도 의"


#define ABS_PREHEAT_HPB_TEMP 100

<= "ABS 필라멘트시 히팅베드 예열온도 100도 의"


#define ABS_PREHEAT_FAN_SPEED 255   // Insert Value between 0 and 255 (0과 255 사이 삽입값)

<= "ABS 필라멘트시 예열용 팬속도 255 . 255는 8bit 100%의 듀티펄스, 듀티사이클로 아두이노 5V이하만 가능한것을 SMPS 12V 전압을 트랜지스터 스위치 개념으로 전압증폭하여 히터 가열하는 기능수행"


//LCD and SD support (LCD 및 SD 지원)

//#define ULTRA_LCD  //general LCD support, also 16x2

//#define DOGLCD  // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)

//#define SDSUPPORT // Enable SD Card Support in Hardware Console

//#define SDSLOW // Use slower SD transfer mode (not normally needed - uncomment if you're getting volume init error)

//#define SD_CHECK_AND_RETRY // Use CRC checks and retries on the SD communication

//#define ENCODER_PULSES_PER_STEP 1 // Increase if you have a high resolution encoder

//#define ENCODER_STEPS_PER_MENU_ITEM 5 // Set according to ENCODER_PULSES_PER_STEP or your liking

//#define ULTIMAKERCONTROLLER //as available from the Ultimaker online store.

//#define ULTIPANEL  //the UltiPanel as on Thingiverse

//#define LCD_FEEDBACK_FREQUENCY_HZ 1000 // this is the tone frequency the buzzer plays when on UI feedback. ie Screen Click

//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100 // the duration the buzzer plays the UI feedback sound. ie Screen Click


// The MaKr3d Makr-Panel with graphic controller and SD support

// http://reprap.org/wiki/MaKr3d_MaKrPanel

//#define MAKRPANEL


// The RepRapDiscount Smart Controller (white PCB)

// http://reprap.org/wiki/RepRapDiscount_Smart_Controller

//#define REPRAP_DISCOUNT_SMART_CONTROLLER


// The GADGETS3D G3D LCD/SD Controller (blue PCB)

// http://reprap.org/wiki/RAMPS_1.3/1.4_GADGETS3D_Shield_with_Panel

//#define G3D_PANEL


// The RepRapDiscount FULL GRAPHIC Smart Controller (quadratic white PCB) (RepRapDiscount FULL GRAPHIC 스마트 컨트롤러 (2차 흰색 PCB)

// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller

//

// ==> REMEMBER TO INSTALL U8glib to your ARDUINO library folder: http://code.google.com/p/u8glib/wiki/u8glib


#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER


// The RepRapWorld REPRAPWORLD_KEYPAD v1.1

// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626

//#define REPRAPWORLD_KEYPAD

//#define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0 // how much should be moved when a key is pressed, eg 10.0 means 10mm per click


// The Elefu RA Board Control Panel

// http://www.elefu.com/index.php?route=product/product&product_id=53

// REMEMBER TO INSTALL LiquidCrystal_I2C.h in your ARUDINO library folder: https://github.com/kiyoshigawa/LiquidCrystal_I2C

//#define RA_CONTROL_PANEL


//automatic expansion


#if defined (MAKRPANEL)


 #define DOGLCD


 #define SDSUPPORT


 #define ULTIPANEL


 #define NEWPANEL


 #define DEFAULT_LCD_CONTRAST 17


#endif


#if defined (REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER)


 #define DOGLCD


 #define U8GLIB_ST7920


 #define REPRAP_DISCOUNT_SMART_CONTROLLER


#endif


#if defined(ULTIMAKERCONTROLLER) || defined(REPRAP_DISCOUNT_SMART_CONTROLLER) || defined(G3D_PANEL)


 #define ULTIPANEL


 #define NEWPANEL


#endif


#if defined(REPRAPWORLD_KEYPAD)


  #define NEWPANEL


  #define ULTIPANEL


#endif


#if defined(RA_CONTROL_PANEL)


 #define ULTIPANEL


 #define NEWPANEL


 #define LCD_I2C_TYPE_PCA8574


 #define LCD_I2C_ADDRESS 0x27   // I2C Address of the port expander


#endif


//I2C PANELS


//#define LCD_I2C_SAINSMART_YWROBOT


#ifdef LCD_I2C_SAINSMART_YWROBOT


  // This uses the LiquidCrystal_I2C library ( https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home )

  // Make sure it is placed in the Arduino libraries directory.


  #define LCD_I2C_TYPE_PCF8575


  #define LCD_I2C_ADDRESS 0x27   // I2C Address of the port expander


  #define NEWPANEL


  #define ULTIPANEL


#endif


// PANELOLU2 LCD with status LEDs, separate encoder and click inputs

//#define LCD_I2C_PANELOLU2


#ifdef LCD_I2C_PANELOLU2


  // This uses the LiquidTWI2 library v1.2.3 or later ( https://github.com/lincomatic/LiquidTWI2 )

  // Make sure the LiquidTWI2 directory is placed in the Arduino or Sketchbook libraries subdirectory.

  // (v1.2.3 no longer requires you to define PANELOLU in the LiquidTWI2.h library header file)

  // Note: The PANELOLU2 encoder click input can either be directly connected to a pin

  //       (if BTN_ENC defined to != -1) or read through I2C (when BTN_ENC == -1).


  #define LCD_I2C_TYPE_MCP23017


  #define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander


  #define LCD_USE_I2C_BUZZER //comment out to disable buzzer on LCD


  #define NEWPANEL


  #define ULTIPANEL


  #ifndef ENCODER_PULSES_PER_STEP


#define ENCODER_PULSES_PER_STEP 4


  #endif


  #ifndef ENCODER_STEPS_PER_MENU_ITEM


#define ENCODER_STEPS_PER_MENU_ITEM 1


  #endif



  #ifdef LCD_USE_I2C_BUZZER


#define LCD_FEEDBACK_FREQUENCY_HZ 1000


#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100


  #endif


#endif


// Panucatt VIKI LCD with status LEDs, integrated click & L/R/U/P buttons, separate encoder inputs

//#define LCD_I2C_VIKI


#ifdef LCD_I2C_VIKI


  // This uses the LiquidTWI2 library v1.2.3 or later ( https://github.com/lincomatic/LiquidTWI2 )

  // Make sure the LiquidTWI2 directory is placed in the Arduino or Sketchbook libraries subdirectory.

  // Note: The pause/stop/resume LCD button pin should be connected to the Arduino

  //       BTN_ENC pin (or set BTN_ENC to -1 if not used)


  #define LCD_I2C_TYPE_MCP23017


  #define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander


  #define LCD_USE_I2C_BUZZER //comment out to disable buzzer on LCD (requires LiquidTWI2 v1.2.3 or later)


  #define NEWPANEL


  #define ULTIPANEL


#endif


// Shift register panels

// ---------------------

// 2 wire Non-latching LCD SR from:

// https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/schematics#!shiftregister-connection

//#define SR_LCD


#ifdef SR_LCD


   #define SR_LCD_2W_NL    // Non latching 2 wire shift register


   //#define NEWPANEL


#endif


#ifdef ULTIPANEL

//  #define NEWPANEL  //enable this if you have a click-encoder panel

  #define SDSUPPORT


  #define ULTRA_LCD


  #ifdef DOGLCD // Change number of lines to match the DOG graphic display


    #define LCD_WIDTH 20


    #define LCD_HEIGHT 5


  #else


    #define LCD_WIDTH 20


    #define LCD_HEIGHT 4


  #endif


#else //no panel but just LCD


  #ifdef ULTRA_LCD


  #ifdef DOGLCD // Change number of lines to match the 128x64 graphics display


    #define LCD_WIDTH 20


    #define LCD_HEIGHT 5


  #else


    #define LCD_WIDTH 16


    #define LCD_HEIGHT 2


  #endif


  #endif


#endif


// default LCD contrast for dogm-like LCD displays


#ifdef DOGLCD


# ifndef DEFAULT_LCD_CONTRAST


#  define DEFAULT_LCD_CONTRAST 32


# endif


#endif


// Increase the FAN pwm frequency. Removes the PWM noise but increases heating in the FET/Arduino

//#define FAST_PWM_FAN


// Temperature status LEDs that display the hotend and bet temperature.

// If all hotends and bed temperature and temperature setpoint are < 54C then the BLUE led is on.

// Otherwise the RED led is on. There is 1C hysteresis.

//#define TEMP_STAT_LEDS


// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency

// which is not ass annoying as with the hardware PWM. on the other hand, if this frequency

// is too low, you should also increment SOFT_PWM_SCALE.

//#define FAN_SOFT_PWM


// Incrementing this by 1 will double the software PWM frequency,

// affecting heaters, and the fan if FAN_SOFT_PWM is enabled.

// However, control resolution will be halved for each increment;

// at zero value, there are 128 effective control positions.


#define SOFT_PWM_SCALE 0


// M240  Triggers a camera by emulating a Canon RC-1 Remote

// Data from: http://www.doc-diy.net/photo/rc-1_hacked/

// #define PHOTOGRAPH_PIN     23


// SF send wrong arc g-codes when using Arc Point as fillet procedure

//#define SF_ARC_FIX


// Support for the BariCUDA Paste Extruder.

//#define BARICUDA


//define BlinkM/CyzRgb Support

//#define BLINKM


/*********************************************************************\

* R/C SERVO support

* Sponsored by TrinityLabs, Reworked by codexmas

**********************************************************************/


// Number of servos

//

// If you select a configuration below, this will receive a default value and does not need to be set manually

// set it manually if you have more servos than extruders and wish to manually control some

// leaving it undefined or defining as 0 will disable the servo subsystem

// If unsure, leave commented / disabled

//

//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command


// Servo Endstops

//

// This allows for servo actuated endstops, primary usage is for the Z Axis to eliminate calibration or bed height changes.

// Use M206 command to correct for switch height offset to actual nozzle height. Store that setting with M500.

//

//#define SERVO_ENDSTOPS {-1, -1, 0} // Servo index for X, Y, Z. Disable with -1

//#define SERVO_ENDSTOP_ANGLES {0,0, 0,0, 70,0} // X,Y,Z Axis Extend and Retract angles


/**********************************************************************\

 * Support for a filament diameter sensor

 * Also allows adjustment of diameter at print time (vs  at slicing)

 * Single extruder only at this point (extruder 0)

 * 

 * Motherboards

 * 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector 

 * 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)

 * 301 - Rambo  - uses Analog input 3

 * Note may require analog pins to be defined for different motherboards

 **********************************************************************/

// Uncomment below to enable

//#define FILAMENT_SENSOR


#define FILAMENT_SENSOR_EXTRUDER_NUM  //The number of the extruder that has the filament sensor (0,1,2)


#define MEASUREMENT_DELAY_CM 14  //measurement delay in cm.  This is the distance from filament sensor to middle of barrel


#define DEFAULT_NOMINAL_FILAMENT_DIA  3.0  //Enter the diameter (in mm) of the filament generally used (3.0 mm or 1.75 mm) - this is then used in the slicer software.  Used for sensor reading validation


#define MEASURED_UPPER_LIMIT          3.30  //upper limit factor used for sensor reading validation in mm


#define MEASURED_LOWER_LIMIT          1.90  //lower limit factor for sensor reading validation in mm


#define MAX_MEASUREMENT_DELAY 20  //delay buffer size in bytes (1 byte = 1cm)- limits maximum measurement delay allowable (must be larger than MEASUREMENT_DELAY_CM  and lower number saves RAM)


//defines used in the code


#define DEFAULT_MEASURED_FILAMENT_DIA  DEFAULT_NOMINAL_FILAMENT_DIA  //set measured to nominal initially 


//When using an LCD, uncomment the line below to display the Filament sensor data on the last line instead of status.  Status will appear for 5 sec.

//#define FILAMENT_LCD_DISPLAY


#include "Configuration_adv.h"


#include "thermistortables.h"


#endif //__CONFIGURATION_H



[프린터 세팅 참고]




[전기이론 참고]







[G코드 M코드 해석방법 - 마네킹모델 예]






   






출처 http://reprap.org/wiki/G-code#Introduction


  • 7.1 G0 & G1: Move
  • 7.2 G2 & G3: Controlled Arc Move
  • 7.3 G4: Dwell
  • 7.4 G10: Tool Offset
  • 7.5 G10: Retract
  • 7.6 G11: Unretract
  • 7.7 G17..19: Plane Selection (CNC specific)
  • 7.8 G20: Set Units to Inches
  • 7.9 G21: Set Units to Millimeters
  • 7.10 G22 & G23: Firmware controlled Retract/Precharge
  • 7.11 G28: Move to Origin (Home)
  • 7.12 G29: Detailed Z-Probe
  • 7.13 G29.1: Set Z probe head offset
  • 7.14 G29.2: Set Z probe head offset calculated from toolhead position
  • 7.15 G30: Single Z-Probe
  • 7.16 G31: Set or Report Current Probe status
  • 7.17 G31: Dock Z Probe sled
  • 7.18 G32: Probe Z and calculate Z plane
  • 7.19 G32: Undock Z Probe sled
  • 7.20 G33: Measure/List/Adjust Distortion Matrix
  • 7.21 G38.x Straight Probe (CNC specific)
  • 7.22 G40: Compensation Off (CNC specific)
  • 7.23 G54..59: Coordinate System Select (CNC specific)
  • 7.24 G80: Cancel Canned Cycle (CNC specific)
  • 7.25 G90: Set to Absolute Positioning
  • 7.26 G91: Set to Relative Positioning
  • 7.27 G92: Set Position
  • 7.28 G93: Feed Rate Mode (Inverse Time Mode) (CNC specific)
  • 7.29 G94: Feed Rate Mode (Units per Minute) (CNC specific)
  • 7.30 G100: Calibrate floor or rod radius
  • 7.31 G130: Set digital potentiometer value
  • 7.32 G131: Remove offset
  • 7.33 G132: Calibrate endstop offsets
  • 7.34 G133: Measure steps to top
  • 7.35 G161: Home axes to minimum
  • 7.36 G162: Home axes to maximum
  • 8 M-commands




  • - 첨부파일

    turbo_c___3.1.vol1.egg  
    turbo_c___3.1.vol2.egg  
       
    사업자 정보 표시
    | | | 사업자 등록번호 : -- | TEL : -- | 사이버몰의 이용약관 바로가기
    안녕하세요 3d 프린터 초보 입니다..
    조립은 어떻게 해놓긴 했는데 좌표 설정이 안된것 같은데 하는방법을 모르겠습니다.ㅠ
    큐라로 돌리면 델타형 유리 밖으로 나가면서 바닥에 박아버리고 기둥에 베어링역활하는 볼까지 빠져나오면서 난리가 나는데요... 설계만 할줄알지, 아두이노나 프로그래밍을 몰라서 정말 미쳐버리겠습니다.ㅠ 정상가동 시키려면 어떻게 해야하나요 ? 제품은 - anycubic kossel plus (원형배드고요 230*230*320 입니다)
    pisielly님. 해당모델은 경험이 없습니다. 해당 제품 제조사에 문의하시기 바랍니다.
    대단하시네요
    와우님. 고맙습니다.