Designed to mount a time lapse camera for a 360 degree rotation over 1 hour. That's 1 degree rotation every 10 seconds.
Uses Adafruit LCD i2C board to display rotation information.
#!/usr/bin/env python import time from datetime import datetime import RPi.GPIO as GPIO from Adafruit_CharLCDPlate import Adafruit_CharLCDPlate lcd = Adafruit_CharLCDPlate() lcd.begin(16, 2) lcd.clear() lcd.backlight(lcd.ON) # Use BCM GPIO references # instead of physical pin numbers GPIO.setmode(GPIO.BCM) # Define GPIO signals to use # Pins 18,22,24,26 # GPIO24,GPIO25,GPIO8,GPIO7 StepPins = [24,25,8,7] # Set all pins as output for pin in StepPins: print "Setup pins" GPIO.setup(pin,GPIO.OUT) GPIO.output(pin, False) # Define some settings StepCounter = 0 WaitTime = 0.87890625 DegreesRun = 0 TotalSteps = 0 start_time = time.time() ShouldBeTime=0 # Define simple sequence StepCount1 = 4 Seq1 = [] Seq1 = range(0, StepCount1) Seq1[0] = [1,0,0,0] Seq1[1] = [0,1,0,0] Seq1[2] = [0,0,1,0] Seq1[3] = [0,0,0,1] # Define advanced sequence # as shown in manufacturers datasheet StepCount2 = 8 Seq2 = [] Seq2 = range(0, StepCount2) Seq2[0] = [1,0,0,0] Seq2[1] = [1,1,0,0] Seq2[2] = [0,1,0,0] Seq2[3] = [0,1,1,0] Seq2[4] = [0,0,1,0] Seq2[5] = [0,0,1,1] Seq2[6] = [0,0,0,1] Seq2[7] = [1,0,0,1] # Choose a sequence to use Seq = Seq2 StepCount = StepCount2 # Start main loop while StepCounter < 4096: for pin in range(0, 4): xpin = StepPins[pin] if Seq[StepCounter][pin]!=0: #print " Step %i Enable %i - Pin %s" %(StepCounter,xpin, x) GPIO.output(xpin, True) else: GPIO.output(xpin, False) StepCounter += 1 # If we reach the end of the sequence # start again if (StepCounter==StepCount): StepCounter = 0 if (StepCounter < 0): StepCounter = StepCount # Wait before moving on time.sleep(WaitTime) DegreesRun += 0.087890625 TotalSteps += 1 RuningTime = time.time() - start_time ShouldBeTime += WaitTime y=time.strftime('%H:%M:%S', time.gmtime(RuningTime)) z=time.strftime('%H:%M:%S', time.gmtime(ShouldBeTime)) lcd.clear() lcd.message(str(y) + " S=" + str(TotalSteps) + "\n") lcd.message(str(z) + " DR=" + str(round(DegreesRun,1)))