I added an acceleration algorithm to the Nosy Monster. It helps a lot when stuck. One day I’ll document it and make the software available online.
Years in the making, many prototypes, and I hope a software stack which brings novelty and ease of use to the world of pen plotting. It’s been a marathon building the final version and documenting the process carefully. I’m too pooped to say anything more about it for now.
Quick points about this motor & driver
They are wonderfully cheap and extremely accurate due to 1/64 gearing. They move by 0.087890625° per step! However, the gearing is made of plastic and will wear out overtime, especially if moving heavy objects. Lastly the motors can become a little toasty if you work them hard.
#!/usr/bin/python3 import RPi.GPIO as GPIO import time in1 = 17 in2 = 18 in3 = 27 in4 = 22 # careful lowering this, at some point you run into the mechanical limitation of how quick your motor can move step_sleep = 0.002 step_count = 4096 # 5.625*(1/64) per step, 4096 steps is 360° direction = False # True for clockwise, False for counter-clockwise # defining stepper motor sequence (found in documentation http://www.4tronix.co.uk/arduino/Stepper-Motors.php) step_sequence = [[1,0,0,1], [1,0,0,0], [1,1,0,0], [0,1,0,0], [0,1,1,0], [0,0,1,0], [0,0,1,1], [0,0,0,1]] # setting up GPIO.setmode( GPIO.BCM ) GPIO.setup( in1, GPIO.OUT ) GPIO.setup( in2, GPIO.OUT ) GPIO.setup( in3, GPIO.OUT ) GPIO.setup( in4, GPIO.OUT ) # initializing GPIO.output( in1, GPIO.LOW ) GPIO.output( in2, GPIO.LOW ) GPIO.output( in3, GPIO.LOW ) GPIO.output( in4, GPIO.LOW ) motor_pins = [in1,in2,in3,in4] motor_step_counter = 0 ; def cleanup(): GPIO.output( in1, GPIO.LOW ) GPIO.output( in2, GPIO.LOW ) GPIO.output( in3, GPIO.LOW ) GPIO.output( in4, GPIO.LOW ) GPIO.cleanup() # the meat try: i = 0 for i in range(step_count): for pin in range(0, len(motor_pins)): GPIO.output( motor_pins[pin], step_sequence[motor_step_counter][pin] ) if direction==True: motor_step_counter = (motor_step_counter - 1) % 8 elif direction==False: motor_step_counter = (motor_step_counter + 1) % 8 else: # defensive programming print( "uh oh... direction should *always* be either True or False" ) cleanup() exit( 1 ) time.sleep( step_sleep ) except KeyboardInterrupt: cleanup() exit( 1 ) cleanup() exit( 0 )
Stuff you might need for this to run:
sudo apt-get update --fix-missing && sudo apt-get install python3-rpi.gpio
This motor takes 5.625*(1/64)° per step, this means 2048 steps for 180°:
and 4096 steps for 360°:
One thing that is super cool about the driver board are the LEDs. Projects are always cooler with blinky LEDs, but these guys also help show what is actually going on inside the stepper, and can help you find issues. They are supposed to light up in sequence.