這篇文章來源于DevicePlus.com英語網站的翻譯稿。
如果您是初次接觸該項目,請先參考該項目第1部分和第2部分的內容再進行下一步的工作: 適用于初學者的DIY RepRap 3D 打印機教程—第1部分:構建 以及 適用于初學者的DIY RepRap 3D 打印機教程—第2部分: 接線。
在DIY RepRap 3D打印機系列的最后一部分中,我們將配置皮帶和擋塊,添加LCD顯示屏,并編寫程序代碼對打印機進行測試。讓我們開始吧!
最終打印機規格:
臺式機占地面積:11in x 13in x 13in
最大建造空間:105mm x 130mm x 80mm
硬件:
從第1部分中得到的3D打印機框架
Arduino Mega
Ramps 1.4
任意大小的SD卡
6 x 機械終端擋塊
20 x 公對母線
Discount RepRap的智能全屏圖形顯示器
電源(12V 30A, OEM)
三芯電纜和連接器(見圖 X)
6 x ?”環形壓接連接器
大規格導線
邏輯線
電工膠帶
膠帶,魔術貼,或其他電纜管理解決方案。
軟件
Arduino IDE
Marlin 3D 打印機固件
Cura 3D 打印切片軟件
工具
烙鐵
焊錫
剝線鉗
壓接器
概覽
連接皮帶裝置
連接機械擋塊
測試所有組件
連接屏幕
下載并配置Marlin固件
收尾工作
您的第一臺打印機
步驟1:連接皮帶裝置
本教程中的皮帶配置如圖1所示。您可能會對配置中的一些地方感到不解,我將會對其意圖進行說明。
圖1:皮帶配置
該系統使用了兩條皮帶,每條皮帶環繞一個步進電機,然后連接到擠出機滑塊的對角線上。也就是說,當僅運行一個步進電機時,皮帶將會沿對角線運動。如果兩個電機都沿相同方向旋轉,則擠出機沿x軸移動;如果它們沿相反方向旋轉,則擠出機沿y軸移動。這使得打印機可以沿對角線快速運動,從而節省了打印的時間和功耗。
為了設置此裝置,將同步帶切至2 x 140 cm長。這完全取決于打印機的尺寸,因此請先設置好皮帶,再按照尺寸進行裁切。從一側開始,將一條皮帶夾在擠出機滑塊的一角。最終結果應如下圖所示(圖2)。
圖2:僅連接了一根皮帶的打印機
以下是安裝技巧:
將平滑側纏繞在堆疊的底部同步皮帶輪上。
將皮帶的齒側纏繞在步進電機上的同步皮帶輪上。
將皮帶的齒側纏繞在緊挨著的兩個角處的底部軸承上。
將齒側纏繞在底部同步皮帶輪上,并將其夾緊在反對角線上。
使用頂部同步皮帶輪和軸承在另一個步進電機上重復上述步驟。
步驟2:測試所有組件
在繼續進行該項目之前,我們將對所有組件分別進行測試,確認能否正常工作。請確認已下載Arduino IDE。將以下代碼復制并粘貼到Arduino環境中。
#define X_STEP_PIN 54 #define X_DIR_PIN 55 #define X_ENABLE_PIN 38 #define X_MIN_PIN 3 #define X_MAX_PIN 2 #define Y_STEP_PIN 60 #define Y_DIR_PIN 61 #define Y_ENABLE_PIN 56 #define Y_MIN_PIN 14 #define Y_MAX_PIN 15 #define Z_STEP_PIN 46 #define Z_DIR_PIN 48 #define Z_ENABLE_PIN 62 #define Z_MIN_PIN 18 #define Z_MAX_PIN 19 #define E_STEP_PIN 26 #define E_DIR_PIN 28 #define E_ENABLE_PIN 24 #define Q_STEP_PIN 36 #define Q_DIR_PIN 34 #define Q_ENABLE_PIN 30 #define SDPOWER -1 #define SDSS 53 #define LED_PIN 13 #define FAN_PIN 9 #define PS_ON_PIN 12 #define KILL_PIN -1 #define HEATER_0_PIN 10 #define HEATER_1_PIN 8 #define TEMP_0_PIN 13 // ANALOG NUMBERING #define TEMP_1_PIN 14 // ANALOG NUMBERING void setup() { pinMode(FAN_PIN , OUTPUT); pinMode(HEATER_0_PIN , OUTPUT); pinMode(HEATER_1_PIN , OUTPUT); pinMode(LED_PIN , OUTPUT); pinMode(X_STEP_PIN , OUTPUT); pinMode(X_DIR_PIN , OUTPUT); pinMode(X_ENABLE_PIN , OUTPUT); pinMode(Y_STEP_PIN , OUTPUT); pinMode(Y_DIR_PIN , OUTPUT); pinMode(Y_ENABLE_PIN , OUTPUT); pinMode(Z_STEP_PIN , OUTPUT); pinMode(Z_DIR_PIN , OUTPUT); pinMode(Z_ENABLE_PIN , OUTPUT); pinMode(E_STEP_PIN , OUTPUT); pinMode(E_DIR_PIN , OUTPUT); pinMode(E_ENABLE_PIN , OUTPUT); pinMode(Q_STEP_PIN , OUTPUT); pinMode(Q_DIR_PIN , OUTPUT); pinMode(Q_ENABLE_PIN , OUTPUT); digitalWrite(X_ENABLE_PIN , LOW); digitalWrite(Y_ENABLE_PIN , LOW); digitalWrite(Z_ENABLE_PIN , LOW); digitalWrite(E_ENABLE_PIN , LOW); digitalWrite(Q_ENABLE_PIN , LOW); } void loop () { if (millis() %1000 <500) digitalWrite(LED_PIN, HIGH); else digitalWrite(LED_PIN, LOW); if (millis() %1000 <300) { digitalWrite(HEATER_0_PIN, HIGH); digitalWrite(HEATER_1_PIN, LOW); digitalWrite(FAN_PIN, LOW); } else if (millis() %1000 <600) { digitalWrite(HEATER_0_PIN, LOW); digitalWrite(HEATER_1_PIN, HIGH); digitalWrite(FAN_PIN, LOW); } else { digitalWrite(HEATER_0_PIN, LOW); digitalWrite(HEATER_1_PIN, LOW); digitalWrite(FAN_PIN, HIGH); } if (millis() %10000 <5000) { digitalWrite(X_DIR_PIN , HIGH); digitalWrite(Y_DIR_PIN , HIGH); digitalWrite(Z_DIR_PIN , HIGH); digitalWrite(E_DIR_PIN , HIGH); digitalWrite(Q_DIR_PIN , HIGH); } else { digitalWrite(X_DIR_PIN , LOW); digitalWrite(Y_DIR_PIN , LOW); digitalWrite(Z_DIR_PIN , LOW); digitalWrite(E_DIR_PIN , LOW); digitalWrite(Q_DIR_PIN , LOW); } digitalWrite(X_STEP_PIN , HIGH); digitalWrite(Y_STEP_PIN , HIGH); digitalWrite(Z_STEP_PIN , HIGH); digitalWrite(E_STEP_PIN , HIGH); digitalWrite(Q_STEP_PIN , HIGH); delay(1); digitalWrite(X_STEP_PIN , LOW); digitalWrite(Y_STEP_PIN , LOW); digitalWrite(Z_STEP_PIN , LOW); digitalWrite(E_STEP_PIN , LOW); digitalWrite(Q_STEP_PIN , LOW); } This code should activate all the steppers, fans, and heaters. The only problem with this code is that it does not activate both z-axis steppers; it only activates one. If you encounter any problems with any of the components, try isolating them and only running them in the code. If you would like to test the z-axis and thermistor, download the following codes: #ifndef THERMISTORTABLES_H_ #define THERMISTORTABLES_H_ #define OVERSAMPLENR 16 #if (THERMISTORHEATER_0 == 1) || (THERMISTORHEATER_1 == 1) || (THERMISTORHEATER_2 == 1) || (THERMISTORBED == 1) //100k bed thermistor const short temptable_1[][2] PROGMEM = { { 23*OVERSAMPLENR , 300 }, { 25*OVERSAMPLENR , 295 }, { 27*OVERSAMPLENR , 290 }, { 28*OVERSAMPLENR , 285 }, { 31*OVERSAMPLENR , 280 }, { 33*OVERSAMPLENR , 275 }, { 35*OVERSAMPLENR , 270 }, { 38*OVERSAMPLENR , 265 }, { 41*OVERSAMPLENR , 260 }, { 44*OVERSAMPLENR , 255 }, { 48*OVERSAMPLENR , 250 }, { 52*OVERSAMPLENR , 245 }, { 56*OVERSAMPLENR , 240 }, { 61*OVERSAMPLENR , 235 }, { 66*OVERSAMPLENR , 230 }, { 71*OVERSAMPLENR , 225 }, { 78*OVERSAMPLENR , 220 }, { 84*OVERSAMPLENR , 215 }, { 92*OVERSAMPLENR , 210 }, { 100*OVERSAMPLENR , 205 }, { 109*OVERSAMPLENR , 200 }, { 120*OVERSAMPLENR , 195 }, { 131*OVERSAMPLENR , 190 }, { 143*OVERSAMPLENR , 185 }, { 156*OVERSAMPLENR , 180 }, { 171*OVERSAMPLENR , 175 }, { 187*OVERSAMPLENR , 170 }, { 205*OVERSAMPLENR , 165 }, { 224*OVERSAMPLENR , 160 }, { 245*OVERSAMPLENR , 155 }, { 268*OVERSAMPLENR , 150 }, { 293*OVERSAMPLENR , 145 }, { 320*OVERSAMPLENR , 140 }, { 348*OVERSAMPLENR , 135 }, { 379*OVERSAMPLENR , 130 }, { 411*OVERSAMPLENR , 125 }, { 445*OVERSAMPLENR , 120 }, { 480*OVERSAMPLENR , 115 }, { 516*OVERSAMPLENR , 110 }, { 553*OVERSAMPLENR , 105 }, { 591*OVERSAMPLENR , 100 }, { 628*OVERSAMPLENR , 95 }, { 665*OVERSAMPLENR , 90 }, { 702*OVERSAMPLENR , 85 }, { 737*OVERSAMPLENR , 80 }, { 770*OVERSAMPLENR , 75 }, { 801*OVERSAMPLENR , 70 }, { 830*OVERSAMPLENR , 65 }, { 857*OVERSAMPLENR , 60 }, { 881*OVERSAMPLENR , 55 }, { 903*OVERSAMPLENR , 50 }, { 922*OVERSAMPLENR , 45 }, { 939*OVERSAMPLENR , 40 }, { 954*OVERSAMPLENR , 35 }, { 966*OVERSAMPLENR , 30 }, { 977*OVERSAMPLENR , 25 }, { 985*OVERSAMPLENR , 20 }, { 993*OVERSAMPLENR , 15 }, { 999*OVERSAMPLENR , 10 }, { 1004*OVERSAMPLENR , 5 }, { 1008*OVERSAMPLENR , 0 } //safety }; #endif #if (THERMISTORHEATER_0 == 2) || (THERMISTORHEATER_1 == 2) || (THERMISTORHEATER_2 == 2) || (THERMISTORBED == 2) //200k bed thermistor const short temptable_2[][2] PROGMEM = { {1*OVERSAMPLENR, 848}, {54*OVERSAMPLENR, 275}, {107*OVERSAMPLENR, 228}, {160*OVERSAMPLENR, 202}, {213*OVERSAMPLENR, 185}, {266*OVERSAMPLENR, 171}, {319*OVERSAMPLENR, 160}, {372*OVERSAMPLENR, 150}, {425*OVERSAMPLENR, 141}, {478*OVERSAMPLENR, 133}, {531*OVERSAMPLENR, 125}, {584*OVERSAMPLENR, 118}, {637*OVERSAMPLENR, 110}, {690*OVERSAMPLENR, 103}, {743*OVERSAMPLENR, 95}, {796*OVERSAMPLENR, 86}, {849*OVERSAMPLENR, 77}, {902*OVERSAMPLENR, 65}, {955*OVERSAMPLENR, 49}, {1008*OVERSAMPLENR, 17}, {1020*OVERSAMPLENR, 0} //safety }; #endif #if (THERMISTORHEATER_0 == 3) || (THERMISTORHEATER_1 == 3) || (THERMISTORHEATER_2 == 3) || (THERMISTORBED == 3) //mendel-parts const short temptable_3[][2] PROGMEM = { {1*OVERSAMPLENR,864}, {21*OVERSAMPLENR,300}, {25*OVERSAMPLENR,290}, {29*OVERSAMPLENR,280}, {33*OVERSAMPLENR,270}, {39*OVERSAMPLENR,260}, {46*OVERSAMPLENR,250}, {54*OVERSAMPLENR,240}, {64*OVERSAMPLENR,230}, {75*OVERSAMPLENR,220}, {90*OVERSAMPLENR,210}, {107*OVERSAMPLENR,200}, {128*OVERSAMPLENR,190}, {154*OVERSAMPLENR,180}, {184*OVERSAMPLENR,170}, {221*OVERSAMPLENR,160}, {265*OVERSAMPLENR,150}, {316*OVERSAMPLENR,140}, {375*OVERSAMPLENR,130}, {441*OVERSAMPLENR,120}, {513*OVERSAMPLENR,110}, {588*OVERSAMPLENR,100}, {734*OVERSAMPLENR,80}, {856*OVERSAMPLENR,60}, {938*OVERSAMPLENR,40}, {986*OVERSAMPLENR,20}, {1008*OVERSAMPLENR,0}, {1018*OVERSAMPLENR,-20} }; #endif #if (THERMISTORHEATER_0 == 4) || (THERMISTORHEATER_1 == 4) || (THERMISTORHEATER_2 == 4) || (THERMISTORBED == 4) //10k thermistor const short temptable_4[][2] PROGMEM = { {1*OVERSAMPLENR, 430}, {54*OVERSAMPLENR, 137}, {107*OVERSAMPLENR, 107}, {160*OVERSAMPLENR, 91}, {213*OVERSAMPLENR, 80}, {266*OVERSAMPLENR, 71}, {319*OVERSAMPLENR, 64}, {372*OVERSAMPLENR, 57}, {425*OVERSAMPLENR, 51}, {478*OVERSAMPLENR, 46}, {531*OVERSAMPLENR, 41}, {584*OVERSAMPLENR, 35}, {637*OVERSAMPLENR, 30}, {690*OVERSAMPLENR, 25}, {743*OVERSAMPLENR, 20}, {796*OVERSAMPLENR, 14}, {849*OVERSAMPLENR, 7}, {902*OVERSAMPLENR, 0}, {955*OVERSAMPLENR, -11}, {1008*OVERSAMPLENR, -35} }; #endif #if (THERMISTORHEATER_0 == 5) || (THERMISTORHEATER_1 == 5) || (THERMISTORHEATER_2 == 5) || (THERMISTORBED == 5) //100k ParCan thermistor (104GT-2) const short temptable_5[][2] PROGMEM = { {1*OVERSAMPLENR, 713}, {18*OVERSAMPLENR, 316}, {35*OVERSAMPLENR, 266}, {52*OVERSAMPLENR, 239}, {69*OVERSAMPLENR, 221}, {86*OVERSAMPLENR, 208}, {103*OVERSAMPLENR, 197}, {120*OVERSAMPLENR, 188}, {137*OVERSAMPLENR, 181}, {154*OVERSAMPLENR, 174}, {171*OVERSAMPLENR, 169}, {188*OVERSAMPLENR, 163}, {205*OVERSAMPLENR, 159}, {222*OVERSAMPLENR, 154}, {239*OVERSAMPLENR, 150}, {256*OVERSAMPLENR, 147}, {273*OVERSAMPLENR, 143}, {290*OVERSAMPLENR, 140}, {307*OVERSAMPLENR, 136}, {324*OVERSAMPLENR, 133}, {341*OVERSAMPLENR, 130}, {358*OVERSAMPLENR, 128}, {375*OVERSAMPLENR, 125}, {392*OVERSAMPLENR, 122}, {409*OVERSAMPLENR, 120}, {426*OVERSAMPLENR, 117}, {443*OVERSAMPLENR, 115}, {460*OVERSAMPLENR, 112}, {477*OVERSAMPLENR, 110}, {494*OVERSAMPLENR, 108}, {511*OVERSAMPLENR, 106}, {528*OVERSAMPLENR, 103}, {545*OVERSAMPLENR, 101}, {562*OVERSAMPLENR, 99}, {579*OVERSAMPLENR, 97}, {596*OVERSAMPLENR, 95}, {613*OVERSAMPLENR, 92}, {630*OVERSAMPLENR, 90}, {647*OVERSAMPLENR, 88}, {664*OVERSAMPLENR, 86}, {681*OVERSAMPLENR, 84}, {698*OVERSAMPLENR, 81}, {715*OVERSAMPLENR, 79}, {732*OVERSAMPLENR, 77}, {749*OVERSAMPLENR, 75}, {766*OVERSAMPLENR, 72}, {783*OVERSAMPLENR, 70}, {800*OVERSAMPLENR, 67}, {817*OVERSAMPLENR, 64}, {834*OVERSAMPLENR, 61}, {851*OVERSAMPLENR, 58}, {868*OVERSAMPLENR, 55}, {885*OVERSAMPLENR, 52}, {902*OVERSAMPLENR, 48}, {919*OVERSAMPLENR, 44}, {936*OVERSAMPLENR, 40}, {953*OVERSAMPLENR, 34}, {970*OVERSAMPLENR, 28}, {987*OVERSAMPLENR, 20}, {1004*OVERSAMPLENR, 8}, {1021*OVERSAMPLENR, 0} }; #endif #if (THERMISTORHEATER_0 == 6) || (THERMISTORHEATER_1 == 6) || (THERMISTORHEATER_2 == 6) || (THERMISTORBED == 6) // 100k Epcos thermistor const short temptable_6[][2] PROGMEM = { {28*OVERSAMPLENR, 250}, {31*OVERSAMPLENR, 245}, {35*OVERSAMPLENR, 240}, {39*OVERSAMPLENR, 235}, {42*OVERSAMPLENR, 230}, {44*OVERSAMPLENR, 225}, {49*OVERSAMPLENR, 220}, {53*OVERSAMPLENR, 215}, {62*OVERSAMPLENR, 210}, {73*OVERSAMPLENR, 205}, {72*OVERSAMPLENR, 200}, {94*OVERSAMPLENR, 190}, {102*OVERSAMPLENR, 185}, {116*OVERSAMPLENR, 170}, {143*OVERSAMPLENR, 160}, {183*OVERSAMPLENR, 150}, {223*OVERSAMPLENR, 140}, {270*OVERSAMPLENR, 130}, {318*OVERSAMPLENR, 120}, {383*OVERSAMPLENR, 110}, {413*OVERSAMPLENR, 105}, {439*OVERSAMPLENR, 100}, {484*OVERSAMPLENR, 95}, {513*OVERSAMPLENR, 90}, {607*OVERSAMPLENR, 80}, {664*OVERSAMPLENR, 70}, {781*OVERSAMPLENR, 60}, {810*OVERSAMPLENR, 55}, {849*OVERSAMPLENR, 50}, {914*OVERSAMPLENR, 45}, {914*OVERSAMPLENR, 40}, {935*OVERSAMPLENR, 35}, {954*OVERSAMPLENR, 30}, {970*OVERSAMPLENR, 25}, {978*OVERSAMPLENR, 22}, {1008*OVERSAMPLENR, 3} }; #endif #if (THERMISTORHEATER_0 == 7) || (THERMISTORHEATER_1 == 7) || (THERMISTORHEATER_2 == 7) || (THERMISTORBED == 7) // 100k Honeywell 135-104LAG-J01 const short temptable_7[][2] PROGMEM = { {46*OVERSAMPLENR, 270}, {50*OVERSAMPLENR, 265}, {54*OVERSAMPLENR, 260}, {58*OVERSAMPLENR, 255}, {62*OVERSAMPLENR, 250}, {67*OVERSAMPLENR, 245}, {72*OVERSAMPLENR, 240}, {79*OVERSAMPLENR, 235}, {85*OVERSAMPLENR, 230}, {91*OVERSAMPLENR, 225}, {99*OVERSAMPLENR, 220}, {107*OVERSAMPLENR, 215}, {116*OVERSAMPLENR, 210}, {126*OVERSAMPLENR, 205}, {136*OVERSAMPLENR, 200}, {149*OVERSAMPLENR, 195}, {160*OVERSAMPLENR, 190}, {175*OVERSAMPLENR, 185}, {191*OVERSAMPLENR, 180}, {209*OVERSAMPLENR, 175}, {224*OVERSAMPLENR, 170}, {246*OVERSAMPLENR, 165}, {267*OVERSAMPLENR, 160}, {293*OVERSAMPLENR, 155}, {316*OVERSAMPLENR, 150}, {340*OVERSAMPLENR, 145}, {364*OVERSAMPLENR, 140}, {396*OVERSAMPLENR, 135}, {425*OVERSAMPLENR, 130}, {460*OVERSAMPLENR, 125}, {489*OVERSAMPLENR, 120}, {526*OVERSAMPLENR, 115}, {558*OVERSAMPLENR, 110}, {591*OVERSAMPLENR, 105}, {628*OVERSAMPLENR, 100}, {660*OVERSAMPLENR, 95}, {696*OVERSAMPLENR, 90}, {733*OVERSAMPLENR, 85}, {761*OVERSAMPLENR, 80}, {794*OVERSAMPLENR, 75}, {819*OVERSAMPLENR, 70}, {847*OVERSAMPLENR, 65}, {870*OVERSAMPLENR, 60}, {892*OVERSAMPLENR, 55}, {911*OVERSAMPLENR, 50}, {929*OVERSAMPLENR, 45}, {944*OVERSAMPLENR, 40}, {959*OVERSAMPLENR, 35}, {971*OVERSAMPLENR, 30}, {981*OVERSAMPLENR, 25}, {989*OVERSAMPLENR, 20}, {994*OVERSAMPLENR, 15}, {1001*OVERSAMPLENR, 10}, {1005*OVERSAMPLENR, 5} }; #endif
#define _TT_NAME(_N) temptable_ ## _N #define TT_NAME(_N) _TT_NAME(_N) #ifdef THERMISTORHEATER_0 #define heater_0_temptable TT_NAME(THERMISTORHEATER_0) #define heater_0_temptable_len (sizeof(heater_0_temptable)/sizeof(*heater_0_temptable)) #else #ifdef HEATER_0_USES_THERMISTOR #error No heater 0 thermistor table specified #else // HEATER_0_USES_THERMISTOR #define heater_0_temptable 0 #define heater_0_temptable_len 0 #endif // HEATER_0_USES_THERMISTOR #endif #ifdef THERMISTORHEATER_1 #define heater_1_temptable TT_NAME(THERMISTORHEATER_1) #define heater_1_temptable_len (sizeof(heater_1_temptable)/sizeof(*heater_1_temptable)) #else #ifdef HEATER_1_USES_THERMISTOR #error No heater 1 thermistor table specified #else // HEATER_1_USES_THERMISTOR #define heater_1_temptable 0 #define heater_1_temptable_len 0 #endif // HEATER_1_USES_THERMISTOR #endif #ifdef THERMISTORHEATER_2 #define heater_2_temptable TT_NAME(THERMISTORHEATER_2) #define heater_2_temptable_len (sizeof(heater_2_temptable)/sizeof(*heater_2_temptable)) #else #ifdef HEATER_2_USES_THERMISTOR #error No heater 2 thermistor table specified #else // HEATER_2_USES_THERMISTOR #define heater_2_temptable 0 #define heater_2_temptable_len 0 #endif // HEATER_2_USES_THERMISTOR #endif #ifdef THERMISTORBED #define bedtemptable TT_NAME(THERMISTORBED) #define bedtemptable_len (sizeof(bedtemptable)/sizeof(*bedtemptable)) #else #ifdef BED_USES_THERMISTOR #error No bed thermistor table specified #endif // BED_USES_THERMISTOR #endif #endif //THERMISTORTABLES_H_ #include "thermistortables.h" #define X_STEP_PIN 54 #define X_DIR_PIN 55 #define X_ENABLE_PIN 38 #define X_MIN_PIN 3 #define X_MAX_PIN 2 #define Y_STEP_PIN 60 #define Y_DIR_PIN 61 #define Y_ENABLE_PIN 56 #define Y_MIN_PIN 14 #define Y_MAX_PIN 15 #define Z_STEP_PIN 46 #define Z_DIR_PIN 48 #define Z_ENABLE_PIN 62 #define Z_MIN_PIN 18 #define Z_MAX_PIN 19 #define E_STEP_PIN 26 #define E_DIR_PIN 28 #define E_ENABLE_PIN 24 #define Q_STEP_PIN 36 #define Q_DIR_PIN 34 #define Q_ENABLE_PIN 30 #define SDPOWER -1 #define EXTRUDERS 3 #define TEMP_SENSOR_AD595_OFFSET 0.0 #define TEMP_SENSOR_AD595_GAIN 1.0 #define THERMISTORHEATER_0 1 #define THERMISTORHEATER_1 1 #define THERMISTORHEATER_2 1 #define HEATER_0_USES_THERMISTOR 1 #define HEATER_1_USES_THERMISTOR 1 #define HEATER_2_USES_THERMISTOR 1 static void *heater_ttbl_map[EXTRUDERS] = { (void *)heater_0_temptable #if EXTRUDERS > 1 , (void *)heater_1_temptable #endif #if EXTRUDERS > 2 , (void *)heater_2_temptable #endif #if EXTRUDERS > 3 #error Unsupported number of extruders #endif }; static int heater_ttbllen_map[EXTRUDERS] = { heater_0_temptable_len #if EXTRUDERS > 1 , heater_1_temptable_len #endif #if EXTRUDERS > 2 , heater_2_temptable_len #endif #if EXTRUDERS > 3 #error Unsupported number of extruders #endif }; #define PGM_RD_W(x) (short)pgm_read_word(&x) #define SDSS 53 #define LED_PIN 13 #define FAN_PIN 9 #define PS_ON_PIN 12 #define KILL_PIN -1 #define HEATER_0_PIN 10 #define HEATER_1_PIN 8 #define TEMP_0_PIN 15 // ANALOG NUMBERING #define TEMP_1_PIN 14 // ANALOG NUMBERING #define TEMP_2_PIN 13 // ANALOG NUMBERING void setup() { pinMode(TEMP_0_PIN , INPUT); pinMode(TEMP_1_PIN , INPUT); pinMode(TEMP_2_PIN , INPUT); pinMode(FAN_PIN , OUTPUT); pinMode(HEATER_0_PIN , OUTPUT); pinMode(HEATER_1_PIN , OUTPUT); pinMode(LED_PIN , OUTPUT); pinMode(X_STEP_PIN , OUTPUT); pinMode(X_DIR_PIN , OUTPUT); pinMode(X_ENABLE_PIN , OUTPUT); pinMode(Y_STEP_PIN , OUTPUT); pinMode(Y_DIR_PIN , OUTPUT); pinMode(Y_ENABLE_PIN , OUTPUT); pinMode(Z_STEP_PIN , OUTPUT); pinMode(Z_DIR_PIN , OUTPUT); pinMode(Z_ENABLE_PIN , OUTPUT); pinMode(E_STEP_PIN , OUTPUT); pinMode(E_DIR_PIN , OUTPUT); pinMode(E_ENABLE_PIN , OUTPUT); pinMode(Q_STEP_PIN , OUTPUT); pinMode(Q_DIR_PIN , OUTPUT); pinMode(Q_ENABLE_PIN , OUTPUT); digitalWrite(X_ENABLE_PIN , LOW); digitalWrite(Y_ENABLE_PIN , LOW); digitalWrite(Z_ENABLE_PIN , LOW); digitalWrite(E_ENABLE_PIN , LOW); digitalWrite(Q_ENABLE_PIN , LOW); Serial.begin(115200); } float analog2temp(int raw, uint8_t e) { #ifdef HEATER_0_USES_MAX6675 if (e == 0) { return 0.25 * raw; } #endif if(heater_ttbl_map[e] != 0) { float celsius = 0; byte i; short (*tt)[][2] = (short (*)[][2])(heater_ttbl_map[e]); raw = (1023 * OVERSAMPLENR) - raw; for (i=1; i raw) && ((float)(PGM_RD_W((*tt)[i][0]) - PGM_RD_W((*tt)[i-1][0])) >0)) { celsius = PGM_RD_W((*tt)[i-1][1]) + (raw - PGM_RD_W((*tt)[i-1][0])) * (float)(PGM_RD_W((*tt)[i][1]) - PGM_RD_W((*tt)[i-1][1])) / (float)(PGM_RD_W((*tt)[i][0]) - PGM_RD_W((*tt)[i-1][0])); break; } } // Overflow: Set to last value in the table if (i == heater_ttbllen_map[e]) celsius = PGM_RD_W((*tt)[i-1][1]); return celsius; } return ((raw * ((5.0 * 100.0) / 1024.0) / OVERSAMPLENR) * TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET; } unsigned long prevMillis; void loop () { if (millis() %1000 <500) digitalWrite(LED_PIN, HIGH); else digitalWrite(LED_PIN, LOW); if (millis() %1000 <300) { digitalWrite(HEATER_0_PIN, HIGH); digitalWrite(HEATER_1_PIN, LOW); digitalWrite(FAN_PIN, LOW); } else if (millis() %1000 <600) { digitalWrite(HEATER_0_PIN, LOW); digitalWrite(HEATER_1_PIN, HIGH); digitalWrite(FAN_PIN, LOW); } else { digitalWrite(HEATER_0_PIN, LOW); digitalWrite(HEATER_1_PIN, LOW); digitalWrite(FAN_PIN, HIGH); } if (millis() %2000 <1000) { digitalWrite(X_DIR_PIN , HIGH); digitalWrite(Y_DIR_PIN , HIGH); digitalWrite(Z_DIR_PIN , HIGH); digitalWrite(E_DIR_PIN , HIGH); digitalWrite(Q_DIR_PIN , HIGH); } else { digitalWrite(X_DIR_PIN , LOW); digitalWrite(Y_DIR_PIN , LOW); digitalWrite(Z_DIR_PIN , LOW); digitalWrite(E_DIR_PIN , LOW); digitalWrite(Q_DIR_PIN , LOW); } digitalWrite(X_STEP_PIN , HIGH); digitalWrite(Y_STEP_PIN , HIGH); digitalWrite(Z_STEP_PIN , HIGH); digitalWrite(E_STEP_PIN , HIGH); digitalWrite(Q_STEP_PIN , HIGH); delay(1); digitalWrite(X_STEP_PIN , LOW); digitalWrite(Y_STEP_PIN , LOW); digitalWrite(Z_STEP_PIN , LOW); digitalWrite(E_STEP_PIN , LOW); digitalWrite(Q_STEP_PIN , LOW); if (millis() -prevMillis >500){ prevMillis=millis(); int t = analogRead( TEMP_0_PIN); Serial.print("T0 "); Serial.print(t); Serial.print("/"); Serial.print(analog2temp(1024 - t,0),0); Serial.print(" T1 "); t = analogRead( TEMP_1_PIN); Serial.print(t); Serial.print("/"); Serial.print(analog2temp(1024 - t,1),0); Serial.print(" T2 "); t = analogRead( TEMP_2_PIN); Serial.print(t); Serial.print("/"); Serial.println(analog2temp(1024 - t,2),0); } }
步驟3:連接機械終端擋塊
機械終端擋塊有兩種類型:兩個引腳和三個引腳。本教程中,我們使用三個引腳的終端擋塊,這與兩個引腳終端擋塊的安裝幾乎相同。對于三個引腳的終端擋塊,將綠色信號線插入RAMPS的S引腳,黑色接地線插入負極,紅色正極線插入正極。
圖3:機械終端擋塊連接
對于兩個引腳的終端擋塊,需要將紅色正極線插入RAMPS的S引腳,將黑色接地線插入負極。應使用6個終端擋塊:每個軸最大值處和最小值處。圖4顯示了完成了所有連接的RAMPS板。
圖4:連接到RAMPS的機械終端擋塊
可能需要反復試驗才能找到終端擋塊的最佳位置。
步驟4:連接屏幕
取出您的全圖形智能控制器。將兩條帶狀電纜與屏幕和擴展板連接。把擴展板按壓到RAMPS的末端。用膠帶將屏幕粘貼到奶箱上可以避免機械干擾的位置。圖5顯示了組件的設置方式。
圖5:屏幕放置視圖
步驟5:下載并配置Marlin
Marlin被用于打印機的運行,而非用于編寫整個代碼。它將文件轉換為G代碼,調整打印床平整度,并創建一個用戶友好的界面。可以在以下位置找到Marlin固件:https://github.com/MarlinFirmware/Marlin。下載文件并在Arduino IDE中打開。
Marlin可用于許多不同的應用程序,例如RAMPS。因此,我們需要進行一些配置。
首先,需要判斷一下自己使用的是什么板。教程中將假設您使用了RAMPS 1.4。如果您使用的是另一塊板,請檢查Marlin中的 boards.h 文件,以找到適合您的板的變量。打開Marlin中的 Configuration.h 文件。
搜索該命令行:#define MOTHERBOARD。刪除初始值并輸入與RAMPS 1.4 EFB板關聯的數字43。
搜索該語句:#define CUSTOM_MACHINE_NAME “3D Printer”。您可以根據自己的需要更改機器名稱。
搜索該語句:#define MACHINE_UUID “00000000-0000-0000-0000-000000000000”。將UUID更改為一個隨機生成的UUID,使它成為用于藍牙通信的唯一地址。
搜索該語句:#define EXTRUDERS 1。如果使用了一臺擠出機,請確保將其設置為1;如果使用了兩臺,請確保將其設置為2。此外,在本節中,您可以為第二臺擠出機定義其他參數。
搜索該語句:#define POWER_SUPPLY 1。如果使用的是OEM電源,則將1換為0。如果您使用的是ATX,請使用1。如果您使用了其他電源,請參閱相關文檔。
搜索該語句:#define TEMP_SENSOR_0。這定義了擠出機的熱敏電阻阻值。大多數為100K,應定義為1。請查看相關文檔來確定您的熱敏電阻阻值。在本節中的剩余部分中可以對您所使用的其他熱敏電阻阻值進行定義。
搜索該語句:#define HEATER_0_MINTEMP。本部分確定熱端的安全溫度范圍。請確保在本節中輸入安全值。
搜索該語句: #define EXTRUDE_MINTEMP 170。這表示如果擠出機的溫度低于170攝氏度,打印機將不會移動。如果您的熱敏電阻產生了問題,請切記這一要點。
搜索該語句:#define THERMAL_PROTECTION_HOTENDS。取消該行的注釋,可以啟用更智能的熱量控制功能。該功能使用熱敏電阻測量溫度,并設置了一個計時器。如果自測量開始,溫度顯著升高,那么將會停止打印。這樣可以防止會導致打印機過熱的熱敏電阻的松動。
搜索該語句:#define COREXY。這是本教程中使用的皮帶配置的名稱。本節中還可以對其他特殊配置進行設置。
搜索該語句:#define INVERT_X_DIR。在本部分中,您可以對任何軸的方向進行更改。這對于調試很有用。
搜索該語句:#define DEFAULT_AXIS_STEPS_PER_UNIT。本節是配置過程的關鍵部分,您可以在此設置每單位長度的步數。這取決于您的同步皮帶輪,螺桿和擠出機的型號。在本教程中,我們使用了:G2T同步帶和同步帶輪,一個Mk8擠出機和一個8mm螺距的螺釘。這表示我們要輸入的值為:78.74, 78.74, 2560, 和 95。
搜索該語句:#define EEPROM_SETTINGS。請確保其可以執行。您可以通過該語句在無需重新加載固件的前提下對固件設置進行更改。
搜索該語句:#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)。該語句用來選擇用戶界面的語言。請確保使用 language.h 文件將其設置為您的首選語言。
搜索該語句:#define SDSUPPORT。取消此行的注釋,您就可以使用智能控制器上的SD卡插槽進行打印。這可以使打印機成為獨立于您的計算機的系統。
搜索該語句:#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER。取消此行注釋,您就可以使用本文中所使用的智能控制器。如果您想要使用其他控制器,請在列表中搜索找到該控制器,并將其注釋取消掉。
最后,上傳您的代碼并進行測試。點擊按鈕以顯示菜單,找到準備(Prepare)菜單。找到移動軸選項。確保對每個軸都進行了測試。以下視頻將顯示一切正常情況下的測試結果。
步驟6:收尾工作
夾住頂板的邊緣。請確保所有的電纜都正確連接并收納妥當。
請確保所有坐標軸歸位于最小值。
請確保所有組件都可以正常工作。在必要時對設置進行調整。
步驟7:您的第一臺打印機
現在,您可以準備開始第一次3D打印了。通過以下鏈接下載3D打印切片程序Cura: https://ultimaker.com/en/products/cura-software。
下載后,打開程序并根據您的打印機對其進行配置。選擇自定義FDM打印機。輸入最大構建尺寸:105mm x 130mm x 80mm。對其他需要輸入的尺寸用尺子進行測量。請確保G代碼風格為RepRap Marlin。
現在,您只需要一張裝有要打印的STL文件的SD卡即可。基于RepRap的理念,我建議您以打印用于改進此打印機的零部件開始。
點擊此處閱讀第1部分:構建 >
點擊此處閱讀第2部分:接線 >
審核編輯黃宇
-
代碼
+關注
關注
30文章
4800瀏覽量
68728 -
3D打印
+關注
關注
26文章
3552瀏覽量
109226
發布評論請先 登錄
相關推薦
評論