Puentes H
Si bien el arduino es capaz de mover motores DC de pequeño tamaño, no esta diseñado para esta tarea por la poca potencia que maneja en sus puertos, en su lugar, se ocupa otro chip que es capaz de manejar la corriente necesaria para esto, uno de esos chips son los puentes H. Los mas comunes son
- L293D
- L298N
- A4988 y similares
L293 y L298
estos puentes h son de bajo costo, controlan 2 motores como maximo y se conectan de manera similar
Control
Para cada motor se tiene un juego de 3 pines:
- Enable, marcado como ENA, ENB
, estos pines controlan la velocidad de cada motor segun el voltaje de entrada, a 0V el motor se detiene por completo, a 5V el motor avanza a la velocidad maxima.
- Pines de entrada, Estos pines definen el sentido de la corriente en el motor, IN1
corrsponde a OUT1
, IN2
corrsponde a OUT2
y asi sucesivamente. Cada par de entradas corrsponde a un solo motor.
Voltaje
en la placa hay un jumper que controla un regulador de 5V y se puede usar de dos modos:
- Cuando el voltaje que se va a usar es menor a 12V, se introduce este voltaje por los pines de 12V
y GND
, con el jumper puesto se puede usar la entrada de 5V
como una salida de voltaje para alimentar otros elemenos, como el Arduino
- Cuando el voltaje que se va a usar es mayor a 12V, se introduce este voltaje por los pines de 12V y GND, el jumper se debe remover para desactivar el regulador, y se debe introducir por la entrada de 5V otro voltaje para alimentar el L298
.
Uso Basico
Ejemplo: Giro
Ejemplo: Aceleracion
Mismo esquematico del ejemplo anterior, la diferencia es que el motor va acelerando y decelerando
Ejemplo: Controlado por Potenciometro
Ejemplo: Dos Motores
Uso con Funciones
Funcion motorl298
Usando el primer Esquematico:
#define ADELANTE 1
#define DETRAS 2
#define PARO 3
void motorl298(int sentido, int velocidad = 450) {
switch (sentido) {
case ADELANTE:
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
analogWrite(3, velocidad);
break;
case DETRAS:
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
analogWrite(3, velocidad);
break;
case PARO:
digitalWrite(4, LOW);
digitalWrite(5, LOW);
break;
}
}
Objeto l298n.h
Usando el primer Esquematico:
#include "l298.h"
l298::l298(int enable_pin, int in1, int in2) {
this -> enable_pin = enable_pin;
this -> in1_pin = in1;
this -> in2_pin = in2;
}
void l298::habilitar() {
pinMode(enable_pin, OUTPUT);
pinMode(in1_pin, OUTPUT);
pinMode(in2_pin, OUTPUT);
}
void l298::avanzar(int velocidad) {
digitalWrite(in1_pin, HIGH);
digitalWrite(in1_pin, LOW);
analogWrite(enable_pin, velocidad);
}
void l298::retroceder(int velocidad) {
digitalWrite(in1_pin, LOW);
digitalWrite(in1_pin, HIGH);
analogWrite(enable_pin, velocidad);
}
void l298::detener() {
digitalWrite(in1_pin, LOW);
digitalWrite(in1_pin, LOW);
analogWrite(enable_pin, 0);
}
#include "l298.h"
l298 motor_de_juguete(3, 4, 5);
void setup() {
motor_de_juguete.habilitar();
}
void loop() {
for (int i = 0; i < 256; i++) {
motor_de_juguete.avanzar(i);
delay(50);
}
motor_de_juguete.detener();
delay(1000);
for (int i = 255; i > 0; i++) {
motor_de_juguete.retroceder(i);
delay(50);
}
motor_de_juguete.detener();
delay(1000);
}