Last Updated or created 2023-03-20
Busy day: I’ve airbrushed some 3D pieces a few days ago, but i need 50 or so more.
Meanwhile is was reinstalling octoprint, and making a new version of my Bluetooth page flipper. (Android Music Sheet Pedal Thingy. Which i also didn’t post apparently)
But the main project was this:
I was curious how fast the stepper motors are on my laser cutter. And for what can we utilize this!
So I took a Raspberry Zero and some rotary encoders, lets make an etch-a-sketch like thingy.
Next to do: 3D print a pen holder, and alter the code to enable the laser when moving!
CODE
Below code uses a simple rotary class, and generates control GCodes for the steppers/Sculpfun
import time import serial import RPi.GPIO as GPIO from encoder import Encoder def valueChanged(value, direction): print("* New value: {}, Direction: {}".format(value, direction)) GPIO.setmode(GPIO.BCM) e1 = Encoder(20, 21, valueChanged) e2 = Encoder(16, 12, valueChanged) x = 0 y = 0 arduino = serial.Serial('/dev/ttyUSB0', 115200, timeout=.1) newx = 0 mystringx = "" newy = 0 mystringy = "" arduino.write(str.encode("G00 G17 G40 G21 G54\r\n")) arduino.write(str.encode('G90\r\n')) arduino.write(str.encode('M4\r\n')) arduino.write(str.encode('M8\r\n')) arduino.write(str.encode('G0 X41.5Y36.05\r\n')) arduino.write(str.encode('M3\r\n')) #arduino.write(str.encode('G91\r\n')) arduino.write(str.encode('G1 X2.5F6000S0\r\n')) arduino.write(str.encode('G1 X0\r\n')) arduino.write(str.encode('G1 Y0\r\n')) try: while True: data = arduino.readline()[:-2] #the last bit gets rid of the new-line chars if data: print (data) arduino.write(str.encode("G1 F10000\r\n")) newx=e1.getValue() *5 + 100 newy=e2.getValue() *5 + 100 mystringx=f"G1 X{newx}\r\n" mystringy=f"G1 Y{newy}\r\n" # print(mystringx) arduino.write(str.encode(mystringx)) arduino.write(str.encode(mystringy)) except Exception: pass GPIO.cleanup()