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