Recomendamos nunca conectar una tensión de entrada al pin de +5V, cuando el jumper de selección de 5V se encuentre activado. Esto provocaría un corto y podría dañar permanentemente el módulo.
Este módulo basado en el chip L298N te permite controlar dos motores de corriente continua o un motor paso a paso bipolar de hasta 2 amperios.
El módulo cuenta con diodos de protección y un regulador LM7805 que suministra 5V a la parte lógica del integrado L298N. Cuenta con jumpers de selección para habilitar cada una de las salidas del módulo (A y B). La salida A esta conformada por OUT1 y OUT2 y la salida B por OUT3 y OUT4. Los pines de habilitación son ENA y ENB respectivamente.
En la parte inferior se encuentran los pines de control del módulo, marcados como IN1, IN2, IN3 e IN4.
Cuando el jumper de selección de 5V se encuentra activo, el módulo permite una alimentación de entre 6V a 12V DC. Como el regulador se encuentra activo, el pin marcado como +5V tendrá un voltaje de 5V DC. Este voltaje se puede usar para alimentar la parte de control del módulo ya sea un microcontrolador o un Arduino, pero recomendamos que el consumo no sea mayor a 500 mA.
Cuando el jumper de selección de 5V se encuentra inactivo, el módulo permite una alimentación de entre 12V a 35V DC. Como el regulador no esta funcionando, tendremos que conectar el pin de +5V a una tensión de 5V para alimentar la parte lógica del L298N. Usualmente esta tensión es la misma de la parte de control, ya sea un microcontrolador o Arduino.
int IN3 = 5; // Input3 conectada al pin 5
int IN4 = 4; // Input4 conectada al pin 4
int ENB = 3; // ENB conectada al pin 3 de Arduino
void setup()
{
pinMode (ENB, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
}
void loop()
{
//Preparamos la salida para que el motor gire en un sentido
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
// Aplicamos PWM al pin ENB, haciendo girar el motor, cada 2 seg aumenta la velocidad
analogWrite(ENB,55);
delay(2000);
analogWrite(ENB,105);
delay(2000);
analogWrite(ENB,255);
delay(2000);
// Apagamos el motor y esperamos 5 seg
analogWrite(ENB,0);
delay(5000);
}
//Definicion de pines de entrada del H
int IN1 = 4;
int IN2 = 5;
int IN3 = 6;
int IN4 = 7;
void setup()
{
//Definicion de pines como salida
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop()
{
//Gira Motor A sentido horario
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
delay(2000);
//Para motor A
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
delay(500);
//Gira Motor B sentido horario
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
delay(2000);
//Para motor B
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
delay(500);
//Gira Motor A sentido anti-horario
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
delay(2000);
//Para motor A
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
delay(500);
//Gira o Motor B sentido anti-horario
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
delay(2000);
//Para motor B
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
delay(500);
}
int sensor =2;
int led =3;
int val=0;
int IN1 = 4;
int IN2 = 5;
int IN3 = 6;
int IN4 = 7;
void setup() {
Serial.begin(9600);
pinMode(sensor,INPUT);
pinMode(led,OUTPUT);
digitalWrite(led,LOW);
pinMode(IN1,OUTPUT);
digitalWrite(IN1,LOW);
pinMode(IN2,OUTPUT);
digitalWrite(IN2,LOW);
pinMode(IN3,OUTPUT);
digitalWrite(IN3,LOW);
pinMode(IN4,OUTPUT);
digitalWrite(IN4,LOW);
}
void loop() {
val=digitalRead(sensor);
delay (100);
if (val==0) {
Serial.println("linea negra\n");
digitalWrite(led,HIGH);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
}
else{
Serial.println("linea blanca\n");
digitalWrite(led,LOW);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
}
}
* Alimentacion entre 6v y 12 v.
* Jumper NO se debe retirar.
* jumper ENA y ENB se deben retirar.
#define enA 8
#define in1 3
#define in2 4
#define enB 9
#define in3 5
#define in4 6
int vel_motor_A = 0;
int vel_motor_B = 0;
void setup() {
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}
void loop() {
int posicion_x = analogRead(A0); // lectura Joysticks X-axis
int posicion_y = analogRead(A1); // lectura Joysticks Y-axis
// Y-axis control forward y backward
if (posicion_y < 470) {
// Motor backward
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// Set Motor B backward
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
// Convertir de y-axis para ir de atrás de 470 a 0 en 0 a 255 de valor para la PWM señal para aumentar el motor de velocidad
vel_motor_A = map(posicion_y, 470, 0, 0, 255);
vel_motor_B = map(posicion_y, 470, 0, 0, 255);
}
else if (posicion_y > 550) {
// Set Motor A forward
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
// Set Motor B forward
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// Convertir de eje Y-axis para ir de 550 a 1023 en 0 a 255 valores para la PWM señal para aumentar el motor de velocidad
vel_motor_A = map(posicion_y, 550, 1023, 0, 255);
vel_motor_B = map(posicion_y, 550, 1023, 0, 255);
}
// Si el joystick permanece en el medio de los motors no se mueve
else {
vel_motor_A = 0;
vel_motor_B = 0;
}
// X-axis utilizado para control izquierdo y derecho
if (posicion_x < 470) {
// Convertir la declinación X-axis a partir de 470 a 0 en valores 0 a 255 valor
int xMapped = map(posicion_x, 470, 0, 0, 255);
// Mueve a la izquierda - disminuye izquierda motor velocidad, increase right motor speed
vel_motor_A = vel_motor_A - xMapped;
vel_motor_B = vel_motor_B + xMapped;
// rango de 0 a 255
if (vel_motor_A < 0) {
vel_motor_A = 0;
}
if (vel_motor_B > 255) {
vel_motor_B = 255;
}
}
if (posicion_x > 550) {
// Convertir el ascenso de las subescaladas de la izquierda de 550 a 1023 en 0 a 255 valor
int xMapped = map(posicion_x, 550, 1023, 0, 255);
// Mueve la derecha - velocidad del motor velocidad, ascendente izquierdo motor velocidad
vel_motor_A = vel_motor_A + xMapped;
vel_motor_B = vel_motor_B - xMapped;
// rango de 0 a 255
if (vel_motor_A > 255) {
vel_motor_A = 255;
}
if (vel_motor_B < 0) {
vel_motor_B = 0;
}
}
// en caso de un error
if (vel_motor_A < 70) {
vel_motor_A = 0;
}
if (vel_motor_B < 70) {
vel_motor_B = 0;
}
analogWrite(enA, vel_motor_A); // envia PWM a motor A
analogWrite(enB, vel_motor_B); // envia PWM a motor B
}
* Alimentacion entre 6v y 12 v.
* Jumper NO se debe retirar.
* jumper ENA y ENB se deben retirar.
int IN3 = 5; // Pin digital para IN3
int IN4 = 4; // Pin digital para IN4
int ENB = 3; // Pin digital con PWM para ENB
// Variables internas de control
int velocidad = 0;
int potenciometro = 0;
void setup()
{
pinMode (ENB, OUTPUT); // Pin digital 3 como salida
pinMode (IN3, OUTPUT); // Pin digital 5 como salida
pinMode (IN4, OUTPUT); // Pin digital 4 como salida
// El motor gira siempre en el mismo sentido
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
}
void loop()
{
// Leemos el valor del potenciómetro (0-1023)
potenciometro = analogRead(A0);
// Lo transformamos a velocidad (0-255)
velocidad = potenciometro/4;
// Aplicamos la velocidad al pin ENB del motor
analogWrite(ENB,velocidad);
}