/**
Geek Factory - "Dale vuelo a tus proyectos"
Tienda de electrónica, Arduino, Raspberry Pi, IoT
www.geekfactory.mx
GEEK FACTORY INVIERTE TIEMPO Y RECURSOS EN DESARROLLAR ESTOS EJEMPLOS Y TUTORIALES.
SI ENCUENTRAS ÚTIL ESTE CÓDIGO, CONSIDERA REALIZAR UNA COMPRA CON NOSOTROS.
EJEMPLO PUENTE H L298N PARA CONTROL DE VELOCIDAD
Descripción:
Este programa hace girar los motores en un sentido y luego en el otro. El programa
acelera gradualmente los motores y luego disminuye la velocidad hasta detenerlos
por completo, a continuación repite lo mismo, cambiando el sentido de giro.
Las conexiones a realizar son las siguientes:
* ENA - pin 10
* IN1 - pin 9
* IN2 - pin 8
* IN3 - pin 7
* IN4 - pin 6
* ENB - pin 5
*/
// pines de señales PWM
const int ena = 10;
const int enb = 5;
// pines de control de dirección
const int in1 = 9;
const int in2 = 8;
const int in3 = 7;
const int in4 = 6;
// variable para alternar el sentido de giro
bool giro = true;
/**
Función setup: se ejecuta una vez cuando encendemos el arduino
*/
void setup() {
// iniciar puerto y mostrar mensaje
Serial.begin(9600);
Serial.println(F("----------------------------------------------------"));
Serial.println(F(" L298N - CONTROL DE MOTORES "));
Serial.println(F(" https://www.geekfactory.mx "));
Serial.println(F("----------------------------------------------------"));
// configurar los pines de control de motores como salidas
// pines de control del motor A
// pin de control de velocidad motor A
pinMode(ena, OUTPUT);
// control de dirección motor A
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
// pines de control del motor B
// pin de control de velocidad motor B
pinMode(enb, OUTPUT);
// control de dirección motor B
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// configurar el estado de las salidas del puente H para detener motores
digitalWrite(ena, LOW);
digitalWrite(enb, LOW);
// motor A
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
// motor B
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(1000);
}
/**
Función loop: se ejecuta continuamente mientras el arduino permanece encendido
*/
void loop() {
if (giro) {
Serial.println(F("Motores hacia adelante!"));
// motor A adelante
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// motor B adelante
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
giro = false;
} else {
Serial.println(F("Motores en reversa!"));
// motor A adelante
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
// motor B adelante
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
giro = true;
}
Serial.println(F("Acelerando!"));
// acelerar motores hasta alcanzar la máxima velocidad
for (int i = 0; i <= 255; i += 17) {
delay(100);
Serial.print(F("Valor analogWrite: "));
Serial.println(i);
analogWrite(ena, i);
analogWrite(enb, i);
Serial.println(i);
}
// los motores permanecen encendidos en la dirección actual por 5 segundos
delay(5000);
Serial.println(F("Desacelerando!"));
// desacelerar el motor hasta detenerlo totalmente
for (int i = 255; i >= 0; i -= 17) {
delay(100);
Serial.print(F("Valor analogWrite: "));
Serial.println(i);
analogWrite(ena, i);
analogWrite(enb, i);
Serial.println(i);
}
// los motores permanecen encendidos en la dirección actual por 5 segundos
delay(5000);
}