Programa inicial: gira un nombre de passos en ambdós sentits
from stepmotor import mystepmotor # importa la llibreria
from time import sleep # per definir pauses en l'execució
motor = mystepmotor(26,27,14,12) # configuracio: nom i pins (IN1, IN2, IN3, IN4)
motor.moveSteps(1,2048,2000) # fem-lo girar un nombre especific de passos
# sentit de la rotacio: 1 horari - 0 antihorari
# nombre de passos: 1 volta == 2048 passos
# durada d'un pas en microsegons: minim 2000 us
sleep(2) # petita pausa abans d'invertir el sentit de rotació
motor.moveSteps(0,2048,2000)
motor.stop() # conve aturar el motor
Imprimir posició:
Per anar imprimint el nombre de passos en temps real mentre el motor es mou, cal dividir el moviment total en passos petits i, després de cada pas, actualitzar la consola:
from stepmotor import mystepmotor # importa la llibreria
from time import sleep # per definir pauses en l'execució
motor = mystepmotor(26,27,14,12) # configuracio: nom i pins (IN1, IN2, IN3, IN4)
# Funció per moure el motor i imprimir el nombre de passos en temps real:
def mou(direccio, passos, durada): # el valor dels arguments es defineix en cridar l'execució
for pas in range(passos):
motor.moveSteps(direccio, 1, durada) # moure un únic pas
print(pas + 1) # imprimir el nombre de passos realitzats
sleep(0.001) # petita pausa per no saturar l'execució
mou(1, 2048, 2000) # executa la funció amb aquests arguments (direcció, passos, durada)
sleep(2)
mou(0, 2048, 2000)
motor.stop()
Control amb potenciòmetre:
Cal llegir el potenciòmetre i mapejar-lo al nombre màxim de passos:
from machine import Pin, ADC
from stepmotor import mystepmotor # importa la llibreria
from time import sleep # per definir pauses en l'execució
motor = mystepmotor(26,27,14,12) # configuració motor
pot = ADC(Pin(33)) # configuració potenciòmetre
pot.atten(ADC.ATTN_11DB) # atenuació per permetre el rang de 0 a 3.3V
pot.width(ADC.WIDTH_12BIT)
conversio = 2048 / 4095 # relació valors potenciòmetre / passos motor
l_anterior=0
x=0
while True:
l_actual = pot.read() # llegir potenciòmetre
if (l_actual != l_anterior):
x= l_actual-l_anterior
if (x>=0) and (x<1000):
motor.moveSteps(0,(abs(x*conversio)),2000)
elif (x<0) and (x>-1000):
motor.moveSteps(1,(abs(x*conversio)),2000)
print(x)
l_anterior = l_actual
sleep(0.1)