-
Notifications
You must be signed in to change notification settings - Fork 1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1 from FrozenFire/master
Addition of E axis calibration program and adding of *.pyc to .gitignore.
- Loading branch information
Showing
2 changed files
with
86 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
*.pyc |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
#!/usr/bin/python | ||
#Interactive RepRap e axis calibration program | ||
#(C) Nathan Zadoks 2011 | ||
#Licensed under CC-BY-SA or GPLv2 and higher - Pick your poison. | ||
t= 60 #Time to wait for extrusion | ||
n=100 #Default length to extrude | ||
m= 0 #User-entered measured extrusion length | ||
k=300 #Default amount of steps per mm | ||
port='/dev/ttyUSB0' #Default serial port to connect to printer | ||
|
||
try: | ||
from printdummy import printcore | ||
except ImportError: | ||
from printcore import printcore | ||
import time,getopt,sys | ||
|
||
def float_input(prompt=''): | ||
import sys | ||
f=None | ||
while f==None: | ||
s=raw_input(prompt) | ||
try: | ||
f=float(s) | ||
except ValueError: | ||
sys.stderr.write("Not a valid floating-point number.\n") | ||
sys.stderr.flush() | ||
return f | ||
def wait(t,m=''): | ||
import time,sys | ||
sys.stdout.write(m+'['+(' '*t)+']\r'+m+'[') | ||
sys.stdout.flush() | ||
for i in range(t): | ||
for s in ['|\b','/\b','-\b','\\\b','|']: | ||
sys.stdout.write(s) | ||
sys.stdout.flush() | ||
time.sleep(1.0/5) | ||
|
||
#Parse options | ||
help=""" | ||
%s [ -l DISTANCE ] [ -s STEPS ] [ -p PORT ] | ||
-l --length Length of filament to extrude for each calibration step (default: %d mm) | ||
-s --steps Initial amount of steps to use (default: %d steps) | ||
-p --port Serial port the printer is connected to (default: %s) | ||
-h --help This cruft. | ||
"""[1:-1]%(sys.argv[0],n,k,port) | ||
try: | ||
opts,args=getopt.getopt(sys.argv[1:],"hl:s:p:",["help","length=","steps=","port="]) | ||
except getopt.GetoptError,err: | ||
print str(err) | ||
print help | ||
sys.exit(2) | ||
for o,a in opts: | ||
if o in ('-h','--help'): | ||
print help | ||
sys.exit() | ||
elif o in ('-l','--length'): | ||
n=float(a) | ||
elif o in ('-s','--steps'): | ||
k=int(a) | ||
|
||
#Show initial parameters | ||
print "Initial parameters" | ||
print "Steps per mm: %3d steps"%k | ||
print "Length extruded: %3d mm"%n | ||
print "Serial port: %s"%port | ||
|
||
#Connect to printer | ||
print "Connecting to printer..", | ||
p=printcore(port,115200) | ||
print "connected." | ||
|
||
#Calibration loop | ||
while n!=m: | ||
p.send_now("G92 E0") #Reset e axis | ||
p.send_now("G1 E%d F100"%int(n)) #Extrude length of filament | ||
wait(t,'Extruding.. ') | ||
m=float_input("How many millimeters of filament were extruded? ") | ||
if n!=m: | ||
k=(n/m)*k | ||
p.send_now("M92 E%d"%int(round(k))) #Set new step count | ||
print "Steps per mm: %3d steps"%k #Tell user | ||
print 'Calibration completed.' #Yay! | ||
p.disconnect() |