Clase Motor: una clase para manejar motores de corriente continua
Presentación
En el presente proyecto se desarrollar usando micropython una clase que permite usar motores de corriente continua con el Driver L298N o algun otro puenta H.
Código
El código de la clase esta en el archivo motor.py.
# motor.py
from machine import Pin, PWM
class DCMotor:
def __init__(self, pin1, pin2, pin_control, minimo=750, maximo=1023):
self.pin1 = pin1
self.pin2 = pin2
self.pin_control = pin_control
self.minimo = minimo
self.maximo = maximo
def avance(self, velocidad):
self.pin1.value(1)
self.pin2.value(0)
self.pin_control.duty(self.ciclo(velocidad))
def retroceso(self, velocidad):
self.pin1.value(0)
self.pin2.value(1)
self.pin_control.duty(self.ciclo(velocidad))
def stop(self):
self.pin_control.duty(0)
self.pin1.value(0)
self.pin2.value(0)
def ciclo(self, velocidad):
if velocidad <= 0:
return 0
if velocidad > 100:
velocidad = 100
# Mapea 1-100% a minimo - maximo
return int(self.minimo + (self.maximo - self.minimo) * ((velocidad - 1) / 99))
A continuación, coloco a modo de ejemplo un pequeño código para mostrar cómo se utiliza esta clase.
from machine import Pin, PWM
import time
import motor # Importamos el módulo motor.py
# === Configuración de pines para ESP32 ===
PIN1 = Pin(12, Pin.OUT) # IN1 del puente H
PIN2 = Pin(14, Pin.OUT) # IN2 del puente H
PIN_CTRL = PWM(Pin(27), freq=1000) # EN del puente H (PWM)
# Crear instancia del motor
mi_motor = motor.DCMotor(pin1=PIN1, pin2=PIN2, pin_control=PIN_CTRL)
# === Prueba del motor ===
try:
print("Motor: Avanzando al 50% de velocidad")
mi_motor.avance(50)
time.sleep(2)
print("Motor: Avanzando al 100% de velocidad")
mi_motor.avance(100)
time.sleep(2)
print("Motor: Retrocediendo al 50% de velocidad")
mi_motor.retroceso(50)
time.sleep(2)
print("Motor: Deteniendo")
mi_motor.stop()
time.sleep(1)
print("Prueba finalizada.")
except KeyboardInterrupt:
print("Interrumpido por el usuario")
finally:
mi_motor.stop() # Aseguramos que el motor se detenga
Quedo disposición de quien quiera hacerme consultas o sugerencias mi correo electronico es carlosvaccaro1960@gmail.com