Интегриране на РепРап в Blender
Това е първият ми опит за интегриране на РепРап в Blender.
За целта ще използваме последната версия на Blender [1], PySerial [2].
Необходим софтуер:
1. Blender 3.61
2. pyserial (инсталация за python3)
Хардуер:
1. RepRap Prusa с инсталиран Sprinter [3] firmware.
Последователност в Blender:
Примерна връзка на репрап в Блендер:
import sys # we should consider adding pyserial into blender path and make tests ! PYSERIAL_PATH = '/usr/local/lib/python3.2/dist-packages/' def checkpaths(): """checks if PySerial already defined in sys.path()""" """if defined do nothing, else add path to blender""" if (PYSERIAL_PATH in sys.path): print('PySerial path already defined.') else: sys.path.append(PYSERIAL_PATH) print('PySerial added to path.') checkpaths() # adds PySerial path to blender from serial import Serial import glob def scanserial(): """scan for available ports. return a list of device names.""" baselist=[] # if os.name=="nt": # try: # key=_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,"HARDWARE\\DEVICEMAP\\SERIALCOMM") # i=0 # while(1): # baselist+=[_winreg.EnumValue(key,i)[1]] # i+=1 # except: # pass return baselist+glob.glob('/dev/ttyUSB*') + glob.glob('/dev/ttyACM*') + glob.glob("/dev/tty.*") + glob.glob("/dev/cu.*") + glob.glob("/dev/rfcomm*") def testport(): """Test found available port from scanserial() function and returns 'port name' or 'none' '""" ok = 'none' port_name = scanserial() print(port_name) print('Number of ports found: ', len(port_name)) num = len(port_name) print('Found port numbers: ', num) for port_name[num-1] in port_name: printer = Serial(port_name[num-1], 115200, timeout = 20) answer = printer.readline().strip() printer.close() print(answer.decode('ascii')) if ('start' in answer.decode('ascii')): ok = port_name[num-1] print('OK port is: ', ok) else: pass if ok is not 'none': return ok else: return ok print( 'Port not found.' ) def move(axis, direction, value, speed): """Moves given 'axis' in '+' or '-' 'direction' with 'value' and 'speed'""" axis = str(axis) # X, Y, Z, E direction = str(direction) # '+' or '-' value = str(value) # relative move speed = str(speed) # set speed of movement from 0 to 3000 word = 'G1 ' + axis + direction + value + ' F' + speed + '\r\n' print( word.strip() ) return word.encode('ascii') port = testport() baud = 115200 print(port) if ('ACM' in port): printer = Serial(port, baud, timeout = 5) print(printer.readline().strip().decode('ascii')) word = 'G91\r\n' printer.write(word.encode('ascii')) word = move('X', '-', 15, 600) printer.write(word) else: pass if ('none' not in port): if printer.isOpen(): printer.close() else: pass print('That\'s all folks.')