Hallo,
in einem Projekt von mir kommen 3 Schrittmotoren und 2x 2 Servomotoren in den Einsatz. Später kommt noch eine Wiegezelle und eine Kamera hinzu.
Jetzt wollte ich damit anfangen, dass meine Mechanik funktioniert. Lasse ich das Demo für den Schrittmotor und den Servomotor separat laufen funktionieren diese.
Wenn ich jetzt aber Schrittmotor und Servo Motor in einem Script ansprechen möchte, dann klappt das nicht.
Die Funktion wiegeservo() sei nicht erreichbar, sie wird auch nicht ausgeführt.
Kann mir da jemand helfen?
Das ganze habe ich in Python geschrieben:
Code
!/usr/bin/python3
import RPi.GPIO as GPIO
import time
def kettenmotor(richtung, weite):
kmin1 = 20
kmin2 = 21
kmin3 = 19
kmin4 = 13
# 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 = 500 #698 5.625*(1/64) per step, 4096 steps is 360°
step_count = weite
#direction = True # hoch clockwise
#direction = False # runter counter-clockwise
direction = richtung
# 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( kmin1, GPIO.OUT )
GPIO.setup( kmin2, GPIO.OUT )
GPIO.setup( kmin3, GPIO.OUT )
GPIO.setup( kmin4, GPIO.OUT )
# initializing
GPIO.output( kmin1, GPIO.LOW )
GPIO.output( kmin2, GPIO.LOW )
GPIO.output( kmin3, GPIO.LOW )
GPIO.output( kmin4, GPIO.LOW )
motor_pins = [kmin1,kmin2,kmin3,kmin4]
motor_step_counter = 0 ;
def cleanup():
GPIO.output( kmin1, GPIO.LOW )
GPIO.output( kmin2, GPIO.LOW )
GPIO.output( kmin3, GPIO.LOW )
GPIO.output( kmin4, 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 )
def wiegeservo():
servoR = 23
servoL = 24
gpio.setmode(gpio.BCM)
gpio.setup(servoL, gpio.OUT)
gpio.setup(servoR, gpio.OUT)
pR = gpio.PWM(servoR, 50)
pL = gpio.PWM(servoL, 50)
pR.start(8)
pL.start(3)
try:
while True:
pR.ChangeDutyCycle(8)
pL.ChangeDutyCycle(3)
time.sleep(1)
pR.ChangeDutyCycle(2.7)
pL.ChangeDutyCycle(8.5)
time.sleep(1)
pR.ChangeDutyCycle(8)
pL.ChangeDutyCycle(3)
time.sleep(1)
except KeyboardInterrupt:
p.stop()
gpio.cleanup()
kettenmotor(True, 100)
wiegeservo()
Display More