{"id":213,"date":"2014-02-21T10:21:40","date_gmt":"2014-02-21T10:21:40","guid":{"rendered":"http:\/\/www.gaudi.ch\/GaudiLabs\/?page_id=213"},"modified":"2015-03-23T10:01:04","modified_gmt":"2015-03-23T10:01:04","slug":"small-batch-diy-pick-and-place-machine","status":"publish","type":"page","link":"http:\/\/www.gaudi.ch\/GaudiLabs\/?page_id=213","title":{"rendered":"Small batch DIY Pick and Place Machine"},"content":{"rendered":"<p>This DIY pick and place machine assembles small SMD parts like resistors and capacitors on electronic circuits. It is built form a flat bed scanner, from a printer carriage and from a CD drive. The three axes controlled through a <a href=\"http:\/\/reprap.org\/wiki\/RAMPS_1.2\">Ramps 1.2 electronic<\/a> from the amazing RepRap project. The gcode to control the movement is compiled through a C-script form the part list generated by the PCB design software (eagle). The machine can be controlled through a 3d printer host software like <a href=\"https:\/\/github.com\/kliment\/Printrun\">Printrun.<\/a><\/p>\n<p><a href=\"http:\/\/www.gaudi.ch\/GaudiLabs\/?attachment_id=216\" rel=\"attachment wp-att-216\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-large wp-image-216\" title=\"DIY Pick and Place Construction\" src=\"http:\/\/www.gaudi.ch\/GaudiLabs\/wp-content\/uploads\/PickPlace-1024x888.jpg\" alt=\"\" width=\"480\" height=\"416\" srcset=\"http:\/\/www.gaudi.ch\/GaudiLabs\/wp-content\/uploads\/PickPlace-1024x888.jpg 1024w, http:\/\/www.gaudi.ch\/GaudiLabs\/wp-content\/uploads\/PickPlace-300x260.jpg 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<br \/>\n<strong><\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>The plate for placing the PCBs as well as some support parts for the carrier are laser cut on measure from acrylic. The parts are presented to the machine through exchangable part carriers that snap on my magnets. The arts are positioned on the carrier through pins that reach into the holes of the SMD-tape carrier.<\/p>\n<p>See <a href=\"http:\/\/www.youtube.com\/watch?v=i0ZT4y3DYrY\">this video<\/a> showing the whole process of assmebling boards with the machine.<\/p>\n<p><a href=\"http:\/\/www.gaudi.ch\/GaudiLabs\/?attachment_id=217\" rel=\"attachment wp-att-217\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-medium wp-image-217\" title=\"Pick and Place - Side View\" src=\"http:\/\/www.gaudi.ch\/GaudiLabs\/wp-content\/uploads\/DSC08521-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"http:\/\/www.gaudi.ch\/GaudiLabs\/wp-content\/uploads\/DSC08521-300x225.jpg 300w, http:\/\/www.gaudi.ch\/GaudiLabs\/wp-content\/uploads\/DSC08521-1024x768.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/www.gaudi.ch\/GaudiLabs\/?attachment_id=218\" rel=\"attachment wp-att-218\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-medium wp-image-218\" title=\"Pick and Place - Top View\" src=\"http:\/\/www.gaudi.ch\/GaudiLabs\/wp-content\/uploads\/DSC08519-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"http:\/\/www.gaudi.ch\/GaudiLabs\/wp-content\/uploads\/DSC08519-300x225.jpg 300w, http:\/\/www.gaudi.ch\/GaudiLabs\/wp-content\/uploads\/DSC08519-1024x768.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><strong>C-script to translate eagle part list into gcode<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n#include&lt;stdio.h&gt;<br \/>\n#include&lt;stdlib.h&gt;<br \/>\n#include&lt;string.h&gt;<br \/>\n#include&#8221;coordinates.h&#8221;<\/p>\n<p>void Usage(char *filename) {<br \/>\nprintf(&#8220;Usage: %s &lt;parts_file&gt; &lt;gcode_file&gt;\\n&#8221;, filename);<br \/>\nprintf(&#8220;%s version 1.0 \\nCopyright(c) gaudi.ch\\n&#8221;, filename);<br \/>\n}<\/p>\n<p>int Search_in_File(char *fname, char *out_fname) {<br \/>\nFILE *fp;<br \/>\nFILE *pFile;<br \/>\nint part_num = 0;<br \/>\nint find_result = 0;<br \/>\nchar temp[4096];<br \/>\nchar teststr [20];<br \/>\nchar teststr2 [20];<br \/>\nint b,p = 0;<br \/>\nint x[100],y[100];<br \/>\nchar part_str[20][100];<\/p>\n<p>if((fp = fopen(fname, &#8220;r&#8221;)) == NULL) {<br \/>\nreturn(-1);<br \/>\n}<\/p>\n<p>pFile = fopen(out_fname,&#8221;w&#8221;);<br \/>\nprintf(&#8220;Output File: %s\\n\\n&#8221;, out_fname);<\/p>\n<p>while(fgets(temp, 512, fp) != NULL) {<\/p>\n<p>if (sscanf(temp, &#8220;%s %*s %*s %s ( %d %d&#8221;,part_str[part_num], teststr,&amp;x[part_num],&amp;y[part_num])&gt;0)<br \/>\n{<\/p>\n<p>printf(&#8220;Part %d &#8211; %s\u00a0 %s %d %d\u00a0 \\n&#8221;,part_num,part_str[part_num],teststr,x[part_num],y[part_num]);<br \/>\npart_num++;<br \/>\n};<br \/>\n}<br \/>\nprintf(&#8220;\\nNo. of Boards: %d&#8221;,NO_OF_BOARDS);<br \/>\nprintf(&#8220;\\nGenerating GCODE\\n\\n&#8221;);<\/p>\n<p>fprintf(pFile,&#8221;G1 F%d\\n&#8221;,FEEDRATE);<\/p>\n<p>for (p = 0; p &lt; part_num; p++){<br \/>\nfprintf(pFile,&#8221;;&#8212;&#8212;&#8212;&#8212;&#8212;\\n&#8221;,p,part_str[p]);<br \/>\nfprintf(pFile,&#8221;;Part %d %s\u00a0 \\n&#8221;,p,part_str[p]);<br \/>\nfprintf(pFile,&#8221;G1 Z%.02f\\n&#8221;,Z_DRIVE_POSITION);<br \/>\nfprintf(pFile,&#8221;G1 X0 Y0\\n&#8221;,Z_DRIVE_POSITION);<br \/>\nfprintf(pFile,&#8221;G28 X0 Y0\\n&#8221;);\u00a0 \/\/Re Zero<br \/>\nfprintf(pFile,&#8221;G92 X0 Y0\\n&#8221;);<\/p>\n<p>if (p%5==0){printf(&#8220;\\n&#8221;);};<br \/>\nprintf(&#8220;|%4.4s&#8221;,part_str[p]);<br \/>\nfor (b = 0; b &lt; NO_OF_BOARDS; b++){<br \/>\nprintf(&#8220;*&#8221;);<br \/>\nfprintf(pFile,&#8221;G1 Z%.02f\\n&#8221;,Z_DRIVE_POSITION);<br \/>\nfprintf(pFile,&#8221;G1 X%.02f Y%.02f\\n&#8221;,PARTS_X[p]+b*4+GLOBAL_CORRECTION_PARTS_X,PARTS_Y[p]+GLOBAL_CORRECTION_PARTS_Y);<br \/>\nfprintf(pFile,&#8221;G1 Z%.02f\\n&#8221;,Z_PICK_PART_POSITION);<br \/>\nfprintf(pFile,&#8221;M400\\nM106\\n&#8221;);<br \/>\nfprintf(pFile,&#8221;G4 P%d\\n&#8221;,PICK_REST_TIME);<br \/>\nfprintf(pFile,&#8221;G1 Z%.02f\\n&#8221;,Z_DRIVE_POSITION);<\/p>\n<p>\/\/fprintf(pFile,&#8221;G1 X%.02f Y%.02f\\n&#8221;,PARTS_X[p]+b*4+GLOBAL_CORRECTION_BOARDS_X,Y_CALIB_DRIVE_POSITION); \/\/ Calib Part<br \/>\n\/\/fprintf(pFile,&#8221;G1 Z%.02f\\n&#8221;,Z_CALIB_PART_POSITION);<br \/>\n\/\/fprintf(pFile,&#8221;G1 X%.02f Y%.02f\\n&#8221;,PARTS_X[p]+b*4+GLOBAL_CORRECTION_BOARDS_X,Y_CALIB_PART_POSITION);<br \/>\n\/\/fprintf(pFile,&#8221;M400\\n&#8221;);<br \/>\n\/\/fprintf(pFile,&#8221;G1 Z%.02f\\n&#8221;,Z_DRIVE_POSITION);<\/p>\n<p>fprintf(pFile,&#8221;G1 X%.02f Y%.02f\\n&#8221;,BOARDS_X[b]+x[p]*0.0254+GLOBAL_CORRECTION_BOARDS_X,BOARDS_Y[b]-y[p]*0.0254+GLOBAL_CORRECTION_BOARDS_Y);<br \/>\nfprintf(pFile,&#8221;G1 Z%.02f\\n&#8221;,Z_PLACE_PART_POSITION);<br \/>\nfprintf(pFile,&#8221;M400\\nM107\\n&#8221;);<br \/>\nfprintf(pFile,&#8221;G4 P%d\\n&#8221;,PLACE_REST_TIME);<br \/>\n}<br \/>\n}<br \/>\nfprintf(pFile,&#8221;G1 Z%.02f\\n&#8221;,Z_DRIVE_POSITION);<br \/>\nfprintf(pFile,&#8221;G1 X0 Y0\\n&#8221;,Z_DRIVE_POSITION);<\/p>\n<p>printf(&#8220;\\nDone.\\n\\n&#8221;);<\/p>\n<p>\/\/Close the file if still open.<br \/>\nif(fp) {<br \/>\nfclose(fp);<br \/>\nprintf(&#8220;Part File closed.\\n&#8221;);<br \/>\n};<br \/>\nif (pFile) { fclose (pFile);<br \/>\nprintf(&#8220;GCODE File closed.\\n&#8221;);}<\/p>\n<p>return(0);<br \/>\n}<\/p>\n<p>\/\/Our main function.<br \/>\nint main(int argc, char *argv[]) {<br \/>\nint result, errno;<\/p>\n<p>if(argc &lt; 3 || argc &gt; 3) {<br \/>\nUsage(argv[0]);<br \/>\nexit(1);<br \/>\n}<\/p>\n<p>system(&#8220;clear&#8221;);<br \/>\nprintf(&#8220;First Part Position: (%.02f, %.02f)\\n\\n&#8221;,PARTS_X[0],PARTS_Y[0]);<br \/>\nprintf(&#8220;First Board Position: (%.02f, %.02f)\\n\\n&#8221;,BOARDS_X[0],BOARDS_Y[0]);<\/p>\n<p>result = Search_in_File(argv[1], argv[2]);<br \/>\nif(result == -1) {<br \/>\nperror(&#8220;Error&#8221;);<br \/>\nprintf(&#8220;Error number = %d\\n&#8221;, errno);<br \/>\nexit(1);<br \/>\n}<br \/>\nreturn(0);<br \/>\n}<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p><strong>coordinates.h &#8211; include file<\/strong><\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/\/\/ SETTINGS<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>#define NO_OF_BOARDS\u00a0\u00a0 \u00a012<\/p>\n<p>#define FEEDRATE\u00a0\u00a0 \u00a03000<\/p>\n<p>#define Z_DRIVE_POSITION\u00a0\u00a0 \u00a05.4<br \/>\n#define Z_PICK_PART_POSITION\u00a0\u00a0 \u00a00.4<br \/>\n#define Z_PLACE_PART_POSITION\u00a0\u00a0 \u00a0-3.0<br \/>\n#define Z_CALIB_PART_POSITION\u00a0\u00a0 \u00a00.0<\/p>\n<p>#define Y_CALIB_PART_POSITION\u00a0\u00a0 \u00a044.3<br \/>\n#define Y_CALIB_DRIVE_POSITION\u00a0\u00a0 \u00a046.0<\/p>\n<p>#define PICK_REST_TIME 300<br \/>\n#define PLACE_REST_TIME 300<\/p>\n<p>#define GLOBAL_CORRECTION_PARTS_X 0<br \/>\n#define GLOBAL_CORRECTION_PARTS_Y -1.0<\/p>\n<p>#define GLOBAL_CORRECTION_BOARDS_X 0<br \/>\n#define GLOBAL_CORRECTION_BOARDS_Y -1.1<\/p>\n<p>#define X_PARTS_LINE1_POSITION1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1.00<br \/>\n#define Y_PARTS_LINE1_POSITION1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 7.90<\/p>\n<p>#define X_PARTS_LINE1_POSITION2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 49.00<br \/>\n#define Y_PARTS_LINE1_POSITION2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 7.90<\/p>\n<p>#define X_PARTS_LINE1_POSITION3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 96.90<br \/>\n#define Y_PARTS_LINE1_POSITION3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 7.90<\/p>\n<p>#define X_PARTS_LINE1_POSITION4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 144.8<br \/>\n#define Y_PARTS_LINE1_POSITION4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 7.90<\/p>\n<p>#define X_PARTS_LINE1_POSITION5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 192.7<br \/>\n#define Y_PARTS_LINE1_POSITION5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 7.90<\/p>\n<p>#define X_PARTS_LINE2_POSITION1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1.00<br \/>\n#define Y_PARTS_LINE2_POSITION1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 17.90<\/p>\n<p>#define X_PARTS_LINE2_POSITION2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 49.00<br \/>\n#define Y_PARTS_LINE2_POSITION2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 17.90<\/p>\n<p>#define X_PARTS_LINE2_POSITION3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 96.90<br \/>\n#define Y_PARTS_LINE2_POSITION3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 17.90<\/p>\n<p>#define X_PARTS_LINE2_POSITION4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 144.8<br \/>\n#define Y_PARTS_LINE2_POSITION4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 17.90<\/p>\n<p>#define X_PARTS_LINE2_POSITION5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 192.7<br \/>\n#define Y_PARTS_LINE2_POSITION5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 17.90<\/p>\n<p>#define X_PARTS_LINE3_POSITION1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1.00<br \/>\n#define Y_PARTS_LINE3_POSITION1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 27.90<\/p>\n<p>#define X_PARTS_LINE3_POSITION2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 49.00<br \/>\n#define Y_PARTS_LINE3_POSITION2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 27.90<\/p>\n<p>#define X_PARTS_LINE3_POSITION3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 96.90<br \/>\n#define Y_PARTS_LINE3_POSITION3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 27.90<\/p>\n<p>#define X_PARTS_LINE3_POSITION4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 144.8<br \/>\n#define Y_PARTS_LINE3_POSITION4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 27.90<\/p>\n<p>#define X_PARTS_LINE3_POSITION5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 192.7<br \/>\n#define Y_PARTS_LINE3_POSITION5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 27.90<\/p>\n<p>#define X_PARTS_LINE4_POSITION1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1.00<br \/>\n#define Y_PARTS_LINE4_POSITION1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 37.90<\/p>\n<p>#define X_PARTS_LINE4_POSITION2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 49.00<br \/>\n#define Y_PARTS_LINE4_POSITION2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 37.90<\/p>\n<p>#define X_PARTS_LINE4_POSITION3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 96.90<br \/>\n#define Y_PARTS_LINE4_POSITION3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 37.90<\/p>\n<p>#define X_PARTS_LINE4_POSITION4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 144.8<br \/>\n#define Y_PARTS_LINE4_POSITION4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 37.90<\/p>\n<p>#define X_PARTS_LINE4_POSITION5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 192.7<br \/>\n#define Y_PARTS_LINE4_POSITION5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 37.90<\/p>\n<p>const float PARTS_X[20] = {X_PARTS_LINE1_POSITION1, X_PARTS_LINE1_POSITION2, X_PARTS_LINE1_POSITION3, X_PARTS_LINE1_POSITION4, X_PARTS_LINE1_POSITION5, X_PARTS_LINE2_POSITION1, X_PARTS_LINE2_POSITION2, X_PARTS_LINE2_POSITION3, X_PARTS_LINE2_POSITION4,X_PARTS_LINE2_POSITION5, X_PARTS_LINE3_POSITION1, X_PARTS_LINE3_POSITION2, X_PARTS_LINE3_POSITION3, X_PARTS_LINE3_POSITION4,X_PARTS_LINE3_POSITION5,X_PARTS_LINE4_POSITION1, X_PARTS_LINE4_POSITION2, X_PARTS_LINE4_POSITION3, X_PARTS_LINE4_POSITION4,X_PARTS_LINE4_POSITION5};<br \/>\nconst float PARTS_Y[20] = {Y_PARTS_LINE1_POSITION1, Y_PARTS_LINE1_POSITION2, Y_PARTS_LINE1_POSITION3, Y_PARTS_LINE1_POSITION4, Y_PARTS_LINE1_POSITION5, Y_PARTS_LINE2_POSITION1, Y_PARTS_LINE2_POSITION2, Y_PARTS_LINE2_POSITION3, Y_PARTS_LINE2_POSITION4,Y_PARTS_LINE2_POSITION5, Y_PARTS_LINE3_POSITION1, Y_PARTS_LINE3_POSITION2, Y_PARTS_LINE3_POSITION3, Y_PARTS_LINE3_POSITION4,Y_PARTS_LINE3_POSITION5,Y_PARTS_LINE4_POSITION1, Y_PARTS_LINE4_POSITION2, Y_PARTS_LINE4_POSITION3, Y_PARTS_LINE4_POSITION4,Y_PARTS_LINE4_POSITION5};<\/p>\n<p>#define X_BOARD_POSITION1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2.5<br \/>\n#define Y_BOARD_POSITION1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 121.2<\/p>\n<p>#define X_BOARD_POSITION2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 62.5<br \/>\n#define Y_BOARD_POSITION2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 121.2<\/p>\n<p>#define X_BOARD_POSITION3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 122.5<br \/>\n#define Y_BOARD_POSITION3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 121.2<\/p>\n<p>#define X_BOARD_POSITION4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 182.5<br \/>\n#define Y_BOARD_POSITION4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 121.2<\/p>\n<p>#define X_BOARD_POSITION5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2.6<br \/>\n#define Y_BOARD_POSITION5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 205.8<\/p>\n<p>#define X_BOARD_POSITION6\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 62.6<br \/>\n#define Y_BOARD_POSITION6\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 205.8<\/p>\n<p>#define X_BOARD_POSITION7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 122.6<br \/>\n#define Y_BOARD_POSITION7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 205.8<\/p>\n<p>#define X_BOARD_POSITION8\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 182.6<br \/>\n#define Y_BOARD_POSITION8\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 205.8<\/p>\n<p>#define X_BOARD_POSITION9\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2.8<br \/>\n#define Y_BOARD_POSITION9\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 290.5<\/p>\n<p>#define X_BOARD_POSITION10\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 62.8<br \/>\n#define Y_BOARD_POSITION10\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 290.5<\/p>\n<p>#define X_BOARD_POSITION11\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 122.8<br \/>\n#define Y_BOARD_POSITION11\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 290.5<\/p>\n<p>#define X_BOARD_POSITION12\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 182.8<br \/>\n#define Y_BOARD_POSITION12\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 290.5<\/p>\n<p>const float BOARDS_X[12] = {X_BOARD_POSITION1, X_BOARD_POSITION2, X_BOARD_POSITION3, X_BOARD_POSITION4, X_BOARD_POSITION5, X_BOARD_POSITION6, X_BOARD_POSITION7, X_BOARD_POSITION8, X_BOARD_POSITION9, X_BOARD_POSITION10, X_BOARD_POSITION11, X_BOARD_POSITION12};<br \/>\nconst float BOARDS_Y[12] = {Y_BOARD_POSITION1, Y_BOARD_POSITION2, Y_BOARD_POSITION3, Y_BOARD_POSITION4, Y_BOARD_POSITION5, Y_BOARD_POSITION6, Y_BOARD_POSITION7, Y_BOARD_POSITION8, Y_BOARD_POSITION9, Y_BOARD_POSITION10, Y_BOARD_POSITION11, Y_BOARD_POSITION12};<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p><strong>example part list (coordinated in INCHES)<\/strong><\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>R1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1MOhm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (600 1900)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R270<br \/>\nR2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1MOhm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (1500 1900)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R270<br \/>\nR3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 470Ohm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (700 1900)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R270<br \/>\nR4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 470Ohm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (1400 1900)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R270<br \/>\nR18\u00a0\u00a0\u00a0\u00a0\u00a0 22kOhm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (625 500)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R270<\/p>\n<p>R5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 4.7MOhm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (700 2300)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R270<br \/>\nR6\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 4.7MOhm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (1375 2300)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R270<br \/>\nR7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 10kOhm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (600 2300)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R270<br \/>\nR8\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 10kOhm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (1475 2300)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R90<br \/>\nR23\u00a0\u00a0\u00a0\u00a0\u00a0 10kOhm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (1800 675)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R90<\/p>\n<p>R24\u00a0\u00a0\u00a0\u00a0\u00a0 390Ohm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (1050 1100)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R90<br \/>\nR25\u00a0\u00a0\u00a0\u00a0\u00a0 390Ohm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (575 150)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R90<br \/>\nR19\u00a0\u00a0\u00a0\u00a0\u00a0 100kOhm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (425 500)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R90<br \/>\nR20\u00a0\u00a0\u00a0\u00a0\u00a0 100kOhm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (725 500)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R90<br \/>\nR22\u00a0\u00a0\u00a0\u00a0\u00a0 100kOhm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (1900 850)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R270<\/p>\n<p>R9\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2.2kOhm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (550 1300)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R90<br \/>\nR10\u00a0\u00a0\u00a0\u00a0\u00a0 2.2kOhm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (900 1300)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R90<br \/>\nR11\u00a0\u00a0\u00a0\u00a0\u00a0 2.2kOhm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (350 1300)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R270<br \/>\nR12\u00a0\u00a0\u00a0\u00a0\u00a0 2.2kOhm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (800 1300)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R270<br \/>\nR21\u00a0\u00a0\u00a0\u00a0\u00a0 2.2kOhm\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 M0805\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resistor (1975 1100)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 R270<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p><strong>Sprinter Configuration.h file<\/strong><\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>&nbsp;<\/p>\n<p>#ifndef CONFIGURATION_H<br \/>\n#define CONFIGURATION_H<\/p>\n<p>\/\/ BASIC SETTINGS: select your board type, thermistor type, axis scaling, and endstop configuration<\/p>\n<p>\/\/\/\/ The following define selects which electronics board you have. Please choose the one that matches your setup<br \/>\n\/\/ MEGA\/RAMPS up to 1.2\u00a0 = 3,<br \/>\n\/\/ RAMPS 1.3\/1.4 = 33<br \/>\n\/\/ Gen6 = 5,<br \/>\n\/\/ Gen6 deluxe = 51<br \/>\n\/\/ Sanguinololu up to 1.1 = 6<br \/>\n\/\/ Sanguinololu 1.2 and above = 62<br \/>\n\/\/ Gen 7 @ 16MHZ only= 7<br \/>\n\/\/ Gen 7 @ 20MHZ only= 71<br \/>\n\/\/ Teensylu (at90usb) = 8<br \/>\n\/\/ Printrboard Rev. B (ATMEGA90USB1286) = 9<br \/>\n\/\/ Gen 3 Plus = 21<br \/>\n\/\/ gen 3\u00a0 Monolithic Electronics = 22<br \/>\n\/\/ Gen3 PLUS for TechZone Gen3 Remix Motherboard = 23<br \/>\n#define MOTHERBOARD 3<\/p>\n<p>\/\/\/\/ Thermistor settings:<br \/>\n\/\/ 1 is 100k thermistor<br \/>\n\/\/ 2 is 200k thermistor<br \/>\n\/\/ 3 is mendel-parts thermistor<br \/>\n\/\/ 4 is 10k thermistor<br \/>\n\/\/ 5 is ParCan supplied 104GT-2 100K<br \/>\n\/\/ 6 is EPCOS 100k<br \/>\n\/\/ 7 is 100k Honeywell thermistor 135-104LAG-J01<br \/>\n#define THERMISTORHEATER 1<br \/>\n#define THERMISTORBED 1<\/p>\n<p>\/\/\/\/ Calibration variables<br \/>\n\/\/ X, Y, Z, E steps per unit &#8211; Metric Prusa Mendel with Wade extruder:<br \/>\n#define _AXIS_STEP_PER_UNIT {756,380,100,700}<br \/>\n\/\/ Metric Prusa Mendel with Makergear geared stepper extruder:<br \/>\n\/\/#define _AXIS_STEP_PER_UNIT {80,80,3200\/1.25,1380}<br \/>\n\/\/ MakerGear Hybrid Prusa Mendel:<br \/>\n\/\/ Z axis value is for .9 stepper(if you have 1.8 steppers for Z, you need to use 2272.7272)<br \/>\n\/\/#define _AXIS_STEP_PER_UNIT {104.987, 104.987, 4545.4544, 1487}<\/p>\n<p>\/\/\/\/ Endstop Settings<br \/>\n#define ENDSTOPPULLUPS \/\/ Comment this out (using \/\/ at the start of the line) to disable the endstop pullup resistors<br \/>\n\/\/ The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins.<br \/>\n\/\/If your axes are only moving in one direction, make sure the endstops are connected properly.<br \/>\n\/\/If your axes move in one direction ONLY when the endstops are triggered, set [XYZ]_ENDSTOP_INVERT to true here:<br \/>\nconst bool X_ENDSTOP_INVERT = false;<br \/>\nconst bool Y_ENDSTOP_INVERT = false;<br \/>\nconst bool Z_ENDSTOP_INVERT = false;<\/p>\n<p>\/\/ This determines the communication speed of the printer<br \/>\n#define BAUDRATE 115200<br \/>\n\/\/#define BAUDRATE 250000<\/p>\n<p>\/\/ Comment out (using \/\/ at the start of the line) to disable SD support:<br \/>\n\/\/#define SDSUPPORT<\/p>\n<p>\/\/ Uncomment to make run init.g from SD on boot<br \/>\n\/\/#define SDINITFILE<\/p>\n<p>\/\/Only work with Atmega1284 you need +1 kb ram<br \/>\n\/\/#define SD_FAST_XFER_AKTIV<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/\/\/ STORE SETTINGS TO EEPROM<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/ the microcontroller can store settings in the EEPROM<br \/>\n\/\/ M500 &#8211; stores paramters in EEPROM<br \/>\n\/\/ M501 &#8211; reads parameters from EEPROM (if you need reset them after you changed them temporarily).<br \/>\n\/\/ M502 &#8211; reverts to the default &#8220;factory settings&#8221;. You still need to store them in EEPROM afterwards if you want to.<br \/>\n\/\/ M503 &#8211; Print settings<br \/>\n\/\/ define this to enable eeprom support<br \/>\n\/\/#define USE_EEPROM_SETTINGS<\/p>\n<p>\/\/ to disable EEPROM Serial responses and decrease program space by ~1000 byte: comment this out:<br \/>\n\/\/ please keep turned on if you can.<br \/>\n\/\/#define PRINT_EEPROM_SETTING<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/\/\/ ARC Function (G2\/G3 Command)<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/Uncomment to aktivate the arc (circle) function (G2\/G3 Command)<br \/>\n\/\/Without SD function an ARC function the used Flash is smaller 31 kb<br \/>\n#define USE_ARC_FUNCTION<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/\/\/ ADVANCED SETTINGS &#8211; to tweak parameters<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>#ifdef SDSUPPORT<br \/>\n#ifdef SD_FAST_XFER_AKTIV<br \/>\n\/\/Fast transfer chunk size (&gt; 1024 is unstable, change at your own risk).<br \/>\n#define SD_FAST_XFER_CHUNK_SIZE 1024<br \/>\n#endif<br \/>\n#endif<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/ For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n#define X_ENABLE_ON 0<br \/>\n#define Y_ENABLE_ON 0<br \/>\n#define Z_ENABLE_ON 0<br \/>\n#define E_ENABLE_ON 0<\/p>\n<p>\/\/Uncomment if you have problems with a stepper driver enabeling too late, this will also set how many microseconds delay there will be after enabeling the driver<br \/>\n\/\/#define DELAY_ENABLE 15<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/ Disables axis when it&#8217;s not being used.<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\nconst bool DISABLE_X = false;<br \/>\nconst bool DISABLE_Y = false;<br \/>\nconst bool DISABLE_Z = true;<br \/>\nconst bool DISABLE_E = false;<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/ Inverting axis direction<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\nconst bool INVERT_X_DIR = false;<br \/>\nconst bool INVERT_Y_DIR = true;<br \/>\nconst bool INVERT_Z_DIR = false;<br \/>\nconst bool INVERT_E_DIR = false;<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/\/\/ ENDSTOP SETTINGS:<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/ Sets direction of endstops when homing; 1=MAX, -1=MIN<br \/>\n#define X_HOME_DIR -1<br \/>\n#define Y_HOME_DIR -1<br \/>\n#define Z_HOME_DIR -1<\/p>\n<p>\/\/#define ENDSTOPS_ONLY_FOR_HOMING \/\/ If defined the endstops will only be used for homing<\/p>\n<p>const bool min_software_endstops = false; \/\/If true, axis won&#8217;t move to coordinates less than zero.<br \/>\nconst bool max_software_endstops = true; \/\/If true, axis won&#8217;t move to coordinates greater than the defined lengths below.<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/Max Length for Prusa Mendel, check the ways of your axis and set this Values<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\nconst int X_MAX_LENGTH = 247;<br \/>\nconst int Y_MAX_LENGTH = 297;<br \/>\nconst int Z_MAX_LENGTH = 100;<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/\/\/ MOVEMENT SETTINGS<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\nconst int NUM_AXIS = 4; \/\/ The axis order in all axis related arrays is X, Y, Z, E<br \/>\n#define _MAX_FEEDRATE {400, 400, 8, 45}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ (mm\/sec)<br \/>\n#define _HOMING_FEEDRATE {1500,1500,120}\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ (mm\/min) !!<br \/>\n#define _AXIS_RELATIVE_MODES {false, false, false, false}<\/p>\n<p>#define MAX_STEP_FREQUENCY 30000 \/\/ Max step frequency<\/p>\n<p>\/\/For the retract (negative Extruder) move this maxiumum Limit of Feedrate is used<br \/>\n\/\/The next positive Extruder move use also this Limit,<br \/>\n\/\/then for the next (second after retract) move the original Maximum (_MAX_FEEDRATE) Limit is used<br \/>\n#define MAX_RETRACT_FEEDRATE 100\u00a0\u00a0\u00a0 \/\/mm\/sec<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/\/\/ Not used at the Moment<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>\/\/ Min step delay in microseconds. If you are experiencing missing steps, try to raise the delay microseconds, but be aware this<br \/>\n\/\/ If you enable this, make sure STEP_DELAY_RATIO is disabled.<br \/>\n\/\/#define STEP_DELAY_MICROS 1<\/p>\n<p>\/\/ Step delay over interval ratio. If you are still experiencing missing steps, try to uncomment the following line, but be aware this<br \/>\n\/\/ If you enable this, make sure STEP_DELAY_MICROS is disabled. (except for Gen6: both need to be enabled.)<br \/>\n\/\/#define STEP_DELAY_RATIO 0.25<\/p>\n<p>\/\/\/Oscillation reduction.\u00a0 Forces x,y,or z axis to be stationary for ## ms before allowing axis to switch direcitons.\u00a0 Alternative method to prevent skipping steps.\u00a0 Uncomment the line below to activate.<br \/>\n\/\/ At this Version with Planner this Function ist not used<br \/>\n\/\/#define RAPID_OSCILLATION_REDUCTION<\/p>\n<p>#ifdef RAPID_OSCILLATION_REDUCTION<br \/>\nconst long min_time_before_dir_change = 30; \/\/milliseconds<br \/>\n#endif<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/\/\/ Acceleration settings<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/ 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.<br \/>\n#define _ACCELERATION 300\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Axis Normal acceleration mm\/s^2<br \/>\n#define _RETRACT_ACCELERATION 2000 \/\/ Extruder Normal acceleration mm\/s^2<br \/>\n#define _MAX_XY_JERK 20.0<br \/>\n#define _MAX_Z_JERK 0.4<br \/>\n#define _MAX_E_JERK 5.0\u00a0\u00a0\u00a0 \/\/ (mm\/sec)<br \/>\n\/\/#define _MAX_START_SPEED_UNITS_PER_SECOND {25.0,25.0,0.2,10.0}<br \/>\n#define _MAX_ACCELERATION_UNITS_PER_SQ_SECOND {5000,5000,50,5000}\u00a0\u00a0\u00a0 \/\/ X, Y, Z and E max acceleration in mm\/s^2 for printing moves or retracts<\/p>\n<p>\/\/ Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end<br \/>\n\/\/ of the buffer and all stops. This should not be much greater than zero and should only be changed<br \/>\n\/\/ if unwanted behavior is observed on a user&#8217;s machine when running at very slow speeds.<br \/>\n#define MINIMUM_PLANNER_SPEED 0.05 \/\/ (mm\/sec)<\/p>\n<p>#define DEFAULT_MINIMUMFEEDRATE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0.0\u00a0\u00a0\u00a0\u00a0 \/\/ minimum feedrate<br \/>\n#define DEFAULT_MINTRAVELFEEDRATE\u00a0\u00a0\u00a0\u00a0 0.0<\/p>\n<p>#define _MIN_SEG_TIME 20000<\/p>\n<p>\/\/ If defined the movements slow down when the look ahead buffer is only half full<br \/>\n#define SLOWDOWN<\/p>\n<p>const int dropsegments=5; \/\/everything with less than this number of steps will be ignored as move and joined with the next movement<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/ Machine UUID<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/ This may be useful if you have multiple machines and wish to identify them by using the M115 command.<br \/>\n\/\/ By default we set it to zeros.<br \/>\n#define _DEF_CHAR_UUID &#8220;00000000-0000-0000-0000-000000000000&#8221;<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/\/\/ Planner buffer Size<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>\/\/ The number of linear motions that can be in the plan at any give time<br \/>\n\/\/ if the SD Card need to much memory reduce the Values for Plannerpuffer (base of 2)<br \/>\n#ifdef SDSUPPORT<br \/>\n#define BLOCK_BUFFER_SIZE 16<br \/>\n#define BLOCK_BUFFER_MASK 0x0f<br \/>\n#else<br \/>\n#define BLOCK_BUFFER_SIZE 16<br \/>\n#define BLOCK_BUFFER_MASK 0x0f<br \/>\n#endif<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/\/\/ SETTINGS FOR ARC FUNCTION (Command G2\/G2)<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>\/\/ Arc interpretation settings:<br \/>\n\/\/Step to split a cirrcle in small Lines<br \/>\n#define MM_PER_ARC_SEGMENT 1<br \/>\n\/\/After this count of steps a new SIN \/ COS caluclation is startet to correct the circle interpolation<br \/>\n#define N_ARC_CORRECTION 25<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/\/\/ FANCONTROL WITH SOFT PWM<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>\/\/With this option its possible to drive the fan with SOFT PWM (500hz) and use<br \/>\n\/\/every Digital output for it, main usage for Sanguinololu<br \/>\n#define FAN_SOFT_PWM<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/\/\/ MINIMUM START SPEED FOR FAN<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>\/\/Minimum start speed for FAN when the last speed was zero<br \/>\n\/\/Set to 0 to deaktivate<br \/>\n\/\/If value is set the fan will drive with this minimum speed for MINIMUM_FAN_START_TIME<br \/>\n#define MINIMUM_FAN_START_SPEED\u00a0 0<\/p>\n<p>\/\/This is the time how long the minimum FAN speed is set<br \/>\n#define MINIMUM_FAN_START_TIME\u00a0 6000\u00a0\u00a0\u00a0 \/\/6sec<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/\/\/ HEATERCONTROL AND PID PARAMETERS<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>\/\/Testfunction to adjust the Hotend temperatur in case of Printingspeed<br \/>\n\/\/If the Printer print slow the Temp is going to AUTO_TEMP_MIN<br \/>\n\/\/At the moment this Value dont change the targettemp from the Hotend<br \/>\n\/\/The result of this function is only send with the Temperaturerequest to the host<br \/>\n\/\/#define AUTOTEMP<br \/>\n#ifdef AUTOTEMP<br \/>\n#define AUTO_TEMP_MAX 240<br \/>\n#define AUTO_TEMP_MIN 205<br \/>\n#define AUTO_TEMP_FACTOR 0.025<br \/>\n#define AUTOTEMP_OLDWEIGHT 0.98<br \/>\n#endif<\/p>\n<p>\/\/\/\/ AD595 THERMOCOUPLE SUPPORT UNTESTED&#8230; USE WITH CAUTION!!!!<\/p>\n<p>\/\/\/\/ PID settings:<br \/>\n\/\/ Uncomment the following line to enable PID support. This is untested and could be disastrous. Be careful.<br \/>\n#define PIDTEMP 1<br \/>\n#ifdef PIDTEMP<br \/>\n\/\/Sanguinololu 1.2 and above, the PWM Output Hotend Timer 1 is used for the Hardware PWM<br \/>\n\/\/but in this Software use Timer1 for the Stepperfunction so it is not possible to use the &#8220;analogWrite&#8221; function.<br \/>\n\/\/This Soft PWM use Timer 2 with 400 Hz to drive the PWM for the hotend<br \/>\n#define PID_SOFT_PWM<\/p>\n<p>\/\/Measure the MIN\/MAX Value of the Hotend Temp and show it with<br \/>\n\/\/Command M601 \/ Command M602 Reset the MIN\/MAX Value<br \/>\n\/\/#define DEBUG_HEATER_TEMP<\/p>\n<p>\/\/ M303 &#8211; PID relay autotune S&lt;temperature&gt; sets the target temperature.<br \/>\n\/\/ (default target temperature = 150C)<br \/>\n#define PID_AUTOTUNE<\/p>\n<p>\/\/PID Controler Settings<br \/>\n#define PID_INTEGRAL_DRIVE_MAX 80 \/\/ too big, and heater will lag after changing temperature, too small and it might not compensate enough for long-term errors<br \/>\n#define PID_PGAIN 2560 \/\/256 is 1.0\u00a0 \/\/ value of X means that error of 1 degree is changing PWM duty by X, probably no need to go over 25<br \/>\n#define PID_IGAIN 64 \/\/256 is 1.0\u00a0 \/\/ value of X (e.g 0.25) means that each degree error over 1 sec (2 measurements) changes duty cycle by 2X (=0.5) units (verify?)<br \/>\n#define PID_DGAIN 4096 \/\/256 is 1.0\u00a0 \/\/ value of X means that around reached setpoint, each degree change over one measurement (half second) adjusts PWM by X units to compensate<\/p>\n<p>\/\/ magic formula 1, to get approximate &#8220;zero error&#8221; PWM duty. Take few measurements with low PWM duty and make linear fit to get the formula<br \/>\n\/\/ for my makergear hot-end: linear fit {50,10},{60,20},{80,30},{105,50},{176,100},{128,64},{208,128}<br \/>\n#define HEATER_DUTY_FOR_SETPOINT(setpoint) ((int)((187L*(long)setpoint)&gt;&gt;8)-27)<br \/>\n\/\/ magic formula 2, to make led brightness approximately linear<br \/>\n#define LED_PWM_FOR_BRIGHTNESS(brightness) ((64*brightness-1384)\/(300-brightness))<br \/>\n#endif<\/p>\n<p>\/\/ Change this value (range 30-255) to limit the current to the nozzle<br \/>\n#define HEATER_CURRENT 255<\/p>\n<p>\/\/ How often should the heater check for new temp readings, in milliseconds<br \/>\n#define HEATER_CHECK_INTERVAL 500<br \/>\n#define BED_CHECK_INTERVAL 5000<\/p>\n<p>\/\/ Comment the following line to enable heat management during acceleration<br \/>\n#define DISABLE_CHECK_DURING_ACC<br \/>\n#ifndef DISABLE_CHECK_DURING_ACC<br \/>\n\/\/ Uncomment the following line to disable heat management during moves<br \/>\n\/\/#define DISABLE_CHECK_DURING_MOVE<br \/>\n#endif<\/p>\n<p>\/\/ Uncomment the following line to disable heat management during travel moves (and extruder-only moves, eg: retracts), strongly recommended if you are missing steps mid print.<br \/>\n\/\/ Probably this should remain commented if are using PID.<br \/>\n\/\/ It also defines the max milliseconds interval after which a travel move is not considered so for the sake of this feature.<br \/>\n#define DISABLE_CHECK_DURING_TRAVEL 1000<\/p>\n<p>\/\/\/\/ Temperature smoothing &#8211; only uncomment this if your temp readings are noisy (Gen6 without EvdZ&#8217;s 5V hack)<br \/>\n\/\/#define SMOOTHING<br \/>\n\/\/#define SMOOTHFACTOR 16 \/\/best to use a power of two here &#8211; determines how many values are averaged together by the smoothing algorithm<\/p>\n<p>\/\/\/\/ Experimental watchdog and minimal temp<br \/>\n\/\/ The watchdog waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature<br \/>\n\/\/ If the temperature has not increased at the end of that period, the target temperature is set to zero. It can be reset with another M104\/M109<br \/>\n\/\/#define WATCHPERIOD 5000 \/\/5 seconds<\/p>\n<p>\/\/ Actual temperature must be close to target for this long before M109 returns success<br \/>\n\/\/#define TEMP_RESIDENCY_TIME 20\u00a0 \/\/ (seconds)<br \/>\n\/\/#define TEMP_HYSTERESIS 5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ (C\u00b0) range of +\/- temperatures considered &#8220;close&#8221; to the target one<\/p>\n<p>\/\/\/\/ The minimal temperature defines the temperature below which the heater will not be enabled<br \/>\n#define MINTEMP 5<\/p>\n<p>\/\/\/\/ Experimental max temp<br \/>\n\/\/ When temperature exceeds max temp, your heater will be switched off.<br \/>\n\/\/ This feature exists to protect your hotend from overheating accidentally, but *NOT* from thermistor short\/failure!<br \/>\n\/\/ You should use MINTEMP for thermistor short\/failure protection.<br \/>\n#define MAXTEMP 275<\/p>\n<p>\/\/ Select one of these only to define how the nozzle temp is read.<br \/>\n#define HEATER_USES_THERMISTOR<br \/>\n\/\/#define HEATER_USES_AD595<br \/>\n\/\/#define HEATER_USES_MAX6675<\/p>\n<p>\/\/ Select one of these only to define how the bed temp is read.<br \/>\n#define BED_USES_THERMISTOR<br \/>\n\/\/#define BED_USES_AD595<\/p>\n<p>\/\/This is for controlling a fan to cool down the stepper drivers<br \/>\n\/\/it will turn on when any driver is enabled<br \/>\n\/\/and turn off after the set amount of seconds from last driver being disabled again<br \/>\n\/\/#define CONTROLLERFAN_PIN 23 \/\/Pin used for the fan to cool controller, comment out to disable this function<br \/>\n#define CONTROLLERFAN_SEC 60 \/\/How many seconds, after all motors were disabled, the fan should run<\/p>\n<p>\/\/This is for controlling a fan that will keep the extruder cool.<br \/>\n\/\/#define EXTRUDERFAN_PIN 66 \/\/Pin used to control the fan, comment out to disable this function<br \/>\n#define EXTRUDERFAN_DEC 50 \/\/Hotend temperature from where the fan will be turned on<\/p>\n<p>\/\/#define CHAIN_OF_COMMAND 1 \/\/Finish buffered moves before executing M42, fan speed, heater target, and so&#8230;<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\/\/ DEBUGING<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>\/\/Uncomment this to see on the host if a wrong or unknown Command is recived<br \/>\n\/\/Only for Testing !!!<br \/>\n\/\/#define SEND_WRONG_CMD_INFO<\/p>\n<p>\/\/ Uncomment the following line to enable debugging. You can better control debugging below the following line<br \/>\n\/\/#define DEBUG<br \/>\n#ifdef DEBUG<br \/>\n\/\/#define DEBUG_PREPARE_MOVE \/\/Enable this to debug prepare_move() function<br \/>\n\/\/#define DEBUG_MOVE_TIME \/\/Enable this to time each move and print the result<br \/>\n\/\/#define DEBUG_HEAT_MGMT \/\/Enable this to debug heat management. WARNING, this will cause axes to jitter!<br \/>\n\/\/#define DEBUG_DISABLE_CHECK_DURING_TRAVEL \/\/Debug the namesake feature, see above in this file<br \/>\n#endif<\/p>\n<p>#endif<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This DIY pick and place machine assembles small SMD parts like resistors and capacitors on electronic circuits. It is built form a flat bed scanner, from a printer carriage and<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-213","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"http:\/\/www.gaudi.ch\/GaudiLabs\/index.php?rest_route=\/wp\/v2\/pages\/213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gaudi.ch\/GaudiLabs\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/www.gaudi.ch\/GaudiLabs\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/www.gaudi.ch\/GaudiLabs\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gaudi.ch\/GaudiLabs\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=213"}],"version-history":[{"count":5,"href":"http:\/\/www.gaudi.ch\/GaudiLabs\/index.php?rest_route=\/wp\/v2\/pages\/213\/revisions"}],"predecessor-version":[{"id":215,"href":"http:\/\/www.gaudi.ch\/GaudiLabs\/index.php?rest_route=\/wp\/v2\/pages\/213\/revisions\/215"}],"wp:attachment":[{"href":"http:\/\/www.gaudi.ch\/GaudiLabs\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}