Skip to content

Commit

Permalink
Merge pull request #1 from FrozenFire/master
Browse files Browse the repository at this point in the history
Addition of E axis calibration program and adding of *.pyc to .gitignore.
  • Loading branch information
kliment committed May 12, 2011
2 parents 72d6bd2 + 213b230 commit 88c1b89
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.pyc
85 changes: 85 additions & 0 deletions calibrateextruder.py
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)
print

#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
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()

0 comments on commit 88c1b89

Please sign in to comment.