from machine import Pin, PWM, ADC
import time
# Configuración del motor DC controlado por PWM en el pin GPIO26
motor_pwm = PWM(Pin(26)) # Pin PWM para el motor DC
motor_pwm.freq(1000) # Frecuencia de PWM (ajustar según sea necesario)
# Configuración de los pines de la barra de LEDs
leds = [Pin(20, Pin.OUT), Pin(21, Pin.OUT), Pin(22, Pin.OUT), Pin(23, Pin.OUT)] # Pines para los LEDs
# Configuración del pin ADC para leer el valor del potenciómetro
potentiometer = ADC(Pin(26)) # Pin ADC0 (GPIO26)
#potentiometer.atten(ADC.ATTN_11DB) # Configuración de atenuación
#potentiometer.width(ADC.WIDTH_10BIT) # Resolución de 10 bits (0-1023)
# Configuración de los pines del motor paso a paso
step_pins = [Pin(17, Pin.OUT), Pin(18, Pin.OUT), Pin(19, Pin.OUT), Pin(21, Pin.OUT)] # Ajusta los pines según sea necesario
# Secuencia de pasos para el motor paso a paso
step_sequence = [
[1, 0, 0, 1],
[1, 0, 1, 0],
[0, 1, 1, 0],
[0, 1, 0, 1]
]
# Función para mover el motor paso a paso
def move_stepper(steps, delay):
step_count = len(step_sequence)
for _ in range(steps):
for step in range(step_count):
for pin in range(4):
step_pins[pin].value(step_sequence[step][pin])
time.sleep(delay)
# Función para actualizar los LEDs según la velocidad del motor
def update_leds(speed_percentage):
# Apagar todos los LEDs
for led in leds:
led.value(0)
# Calcular cuántos LEDs encender (limitado a 4 LEDs)
if speed_percentage < 25:
led_count = 1
elif speed_percentage < 50:
led_count = 2
elif speed_percentage < 75:
led_count = 3
else:
led_count = 4
# Encender los LEDs de manera permanente (por debajo de cada umbral)
for i in range(led_count):
leds[i].value(1)
while True:
# Leer el valor del potenciómetro (de 0 a 1023)
potentiometer_value = potentiometer.read_u16() # Valor del potenciómetro
# Mapear el valor del potenciómetro (0-1023) a un porcentaje de velocidad (0-100)
motor_speed_percentage = potentiometer_value / 10.23 # 1023 / 10.23 = 100
# Ajustar el ciclo de trabajo del PWM para controlar la velocidad del motor DC
motor_pwm.duty_u16(int(motor_speed_percentage / 100 * 65535)) # Ajustar el ciclo de trabajo del PWM
# Actualizar la barra de LEDs según la velocidad del motor DC
update_leds(motor_speed_percentage)
# Mover el motor paso a paso (con la misma velocidad)
# Usaremos un retraso inversamente proporcional a la velocidad del motor DC
delay = max(0.001, 1 - (motor_speed_percentage / 100)) # Cuanto mayor la velocidad, menor el retardo
move_stepper(1, delay) # Mover un paso a la vez
# Retardo para evitar lecturas demasiado rápidas
time.sleep(0.1)