jumper     activado

jumper desactivado


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.


circuito

control de motor

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);

}



Control motores

//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);

}



QTR-A1 PUENTE H ARDUINO

CIRCUITO

CODIGO

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);
 }
}



CIRCUITO

* Alimentacion entre 6v y 12 v.

* Jumper NO se debe retirar.

* jumper ENA y ENB se deben retirar.

CODIGO

#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

}



Control motor dc con potenciometro

circuito

* 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);
  }