Novedades
Más comprados
- T7000 HNBC Pegamento Adhesivo T-7000 15ml NEGRO transparente Pantalla LCD Móvil 3,14€
- T7000 HNBC Pegamento Adhesivo T-7000 50ml NEGRO transparente Pantalla LCD Móvil 5,14€
- PANTALLA DE CRISTAL PARA GAME BOY 54,40€
- 3x caja plastico almacenaje joyas electrónica herramientas collar 16.5x12x6 16,00€
- 3x caja plastico almacenaje joyas electrónica herramientas collar 14.2x8.2x3.4 10,50€
Lo que nos diferencia del resto
Atención Personalizada
Estamos aquí para ayudarle, si necesita información sobre un producto, tiene alguna duda o requiere asistencia con su pedido, no dude en contactar con nosotros.
Presupuestos a medida
Pida presupuesto sin ningún tipo de compromiso, tenemos descuentos para docentes y precios especiales por volumen.
¿Necesita distribuidor?
Queremos ser su proveedor de electrónica ¿Necesita productos que no tenemos en el catálogo? Los buscaremos y le daremos presupuesto y plazo de entrega.
Para empezar a hacer tus pinitos en la robótica, es imprescindible aprender a controlar motores de corriente continua y controladores de motores basados en puentes H.
En esta sesión, usaremos el L298N, este driver para motores es uno de los más populares entre los aficionados a la electrónica y la robótica.
Material necesario
Arduino UNO R3 | |
Controlador de Motores L298N | |
Ruedas reductoras para robot | |
Cables para Protoboard |
Algo sobre motores de C.C. (Corriente Continua)
El motor CC. es una máquina encargada de convertir la energía eléctrica en energía mecánica.
Estos motores están formados por dos partes fundamentalmente:
- Estator: Es la parte inmóvil del motor y esta compuesto por unos potentes imanes.
- Rotor: Es la parte móvil del motor. Esta parte está compuesta por una serie de bobinas de hilos de cobre enrolladas en un núcleo ferreomagnético.
Conozcamos el controlador L298N.
Para entender el funcionamiento del L298N, primero tenemos que conocer el puente H.
El puente H esta compuesto principalmente por 4 interruptores, los cuales se accionan de dos en dos. En la primera imagen activamos los interruptores 1 y 4, así el positivo le llega al motor por la borna derecha y el motor gira en sentido de las agujas del reloj.
En la segunda imagen, desactivamos los interruptores 1 y 4 y activamos los interruptores 2 y 3, de esta forma el positivo le llega al motor por la borna izquierda y el motor gira en sentido antihorario.
Estos interruptores se pueden sustituir por componentes electrónicos que hagán la misma función, como por ejemplo, transistores y reles.
El L298N tiene en su interior dos puentes H.
Características:
Tensión de funcionamiento | 6 – 48V |
Intensidad por canal | 2A |
Salida | 5V |
Peso | 48g |
Esquema de conexión
Nota: Si usamos alimentaciones diferentes para el controlador de motores y Arduino, hay que unir GND de ambas placas.
Código
En esta ocasión tenemos dos códigos, el primero usamos directamente el L298N con las funciones de Arduino, en el segundo código de ejemplo usamos una librería desarrollada por Leantec.ES para facilitar el control de dos motores de cc con este driver.
Código 1 (Sin librería)
#include <LEANTEC_ControlMotor.h> //Incluimos la librería control de motores
// Configuramos los pines que vamos a usar
ControlMotor control(2,3,7,4,5,6);
int MotorDer1=2; //El pin 2 de arduino se conecta con el pin In1 del L298N
int MotorDer2=3; //El pin 3 de arduino se conecta con el pin In2 del L298N
int MotorIzq1=7; //El pin 7 de arduino se conecta con el pin In3 del L298N
int MotorIzq2=4; //El pin 4 de arduino se conecta con el pin In4 del L298N
int PWM_Derecho=5; //El pin 5 de arduino se conecta con el pin EnA del L298N
int PWM_Izquierdo=6; //El pin 6 de arduino se conecta con el pin EnB del L298N
int velocidad=150; //Declaramos una variable para guardar la velocidad
void setup() { //Configuramos los pines como salida
pinMode(MotorDer1, OUTPUT); pinMode(MotorDer2, OUTPUT);
pinMode(MotorIzq1, OUTPUT); pinMode(MotorIzq2, OUTPUT);
pinMode(PWM_Derecho, OUTPUT); pinMode(PWM_Izquierdo, OUTPUT);
}
void derecha_antihorario_izquierda_horario()
{
/*En esta fución la rueda derecha girará en sentido antihorario y la izquierda en sentido horario. En este caso, si las ruedas estuvieran en el chasis de un robot, el robot retrocederia.*/
digitalWrite(MotorDer1,HIGH);
digitalWrite(MotorDer2,LOW);
digitalWrite(MotorIzq1,HIGH);
digitalWrite(MotorIzq2,LOW);
analogWrite(PWM_Derecho,200);//Velocidad motor derecho 200
analogWrite(PWM_Izquierdo,200);//Velocidad motor izquierdo 200
}
void derecha_horario_izquierda_antihorario(){
/*En esta fución la rueda derecha girará en sentido horario y la izquierda en sentido antihorario. En este caso, si las ruedas estuvieran en el chasis de un robot, el robot avanzaría.*/
digitalWrite(MotorDer1,LOW);
digitalWrite(MotorDer2,HIGH);
digitalWrite(MotorIzq1,LOW);
digitalWrite(MotorIzq2,HIGH);
analogWrite(PWM_Derecho,200);//Velocidad motor derecho 200
analogWrite(PWM_Izquierdo,200);//Velocidad motor izquierdo 200
}
void giro_horario(){
/*En esta fución ambas ruedas girarán en sentido horario. En este caso, si las ruedas estuvieran en el chasis de un robot, el robot giraria a la derecha.*/
digitalWrite(MotorDer1,HIGH);
digitalWrite(MotorDer2,LOW);
digitalWrite(MotorIzq1,LOW);
digitalWrite(MotorIzq2,HIGH);
analogWrite(PWM_Derecho,200);//Velocidad motor derecho 200
analogWrite(PWM_Izquierdo,200);//Velocidad motor izquierdo 200
}
void giro_antihorario(){
/*En esta fución ambas ruedas girarán en sentido antihorario. En este caso, si las ruedas estuvieran en el chasis de un robot, el robot giraria a la izquierda.*/
digitalWrite(MotorDer1,LOW);
digitalWrite(MotorDer2,HIGH);
digitalWrite(MotorIzq1,HIGH);
digitalWrite(MotorIzq2,LOW);
analogWrite(PWM_Derecho,200);//Velocidad motor derecho 200
analogWrite(PWM_Izquierdo,200);//Velocidad motor izquierdo 200
}
void parar(){ /*Función para que las ruedas paren*/
digitalWrite(MotorDer1,LOW);
digitalWrite(MotorDer2,LOW);
digitalWrite(MotorIzq1,LOW);
digitalWrite(MotorIzq2,LOW);
analogWrite(PWM_Derecho,200);//Velocidad motor derecho 200
analogWrite(PWM_Izquierdo,200);//Velocidad motor izquierdo 200
}
void loop() {
giro_horario(); //Llamamos a la función giro_horario
delay(3000); //Durante 3 segundos ejecutamos esa función
giro_antihorario(); //Llamamos a la función giro_antihorario
delay(3000); //Durante 3 segundos ejecutamos esa función
derecha_horario_izquierda_antihorario(); //Llamamos a la función derecha_horario_izquierda_antihorario
delay(3000); //Durante 3 segundos ejecutamos esa función
derecha_antihorario_izquierda_horario(); //Llamamos a la función derecha_antihorario_izquierda_horario
delay(3000); //Durante 3 segundos ejecutamos esa función
parar(); //Llamamos a la función parar
delay(3000); //Durante 3 segundos ejecutamos esa función
}
Código 2 (Con librería)
Librería control de motores.
Esta librería se configura en con una sola linea de código.
#include <LEANTEC_ControlMotor.h>//Incluimos la librería control de motores
// Configuramos los pines que vamos a usar
ControlMotor control(2,3,7,4,5,6); // MotorDer1,MotorDer2,MotorIzq1,MotorIzq2,PWM_Derecho,PWM_Izquierdo
control.Motor(200,100);
Y el control de motores se hace con la siguiente linea de código,donde el primer número que está en el parentesis es la velocidad con la que se mueven los motores y el siguiente número nos indica el giro que hacen y la direccíon.
/* Si los motores estuvieran en el chasis de un robot, este haría un giro del 100% a la derecha a una velociad de 200.*/
control.Motor(200,100);
/* Si los motores estuvieran en el chasis de un robot, este haría un giro del 100% a la izquierda a una velociad de 200.*/
control.Motor(200,-100);
/* Si los motores estuvieran en el chasis de un robot, este haría un giro del 70% a la derecha a una velociad de 200.*/
control.Motor(200,70);
/* Si los motores estuvieran en el chasis de un robot, este avanzaría recto una velociad de 180.*/
control.Motor(180,1);
Código 2 para cargar en Arduino
#include <LEANTEC_ControlMotor.h>//Incluimos la librería control de motores // Configuramos los pines que vamos a usar ControlMotor control(2,3,7,4,5,6); // MotorDer1,MotorDer2,MotorIzq1,MotorIzq2,PWM_Derecho,PWM_Izquierdo int velocidad=150;//Declaramos una variable para guardar la velocidad. 150 es la velocidad en la que empezará. void setup() { //En esta ocasión no necesitamos configurar pines ya que la librería lo hace. } void loop() {//Un motor gira en sentido horario y el otro antihorario //Si estuvierán montados en un robot el robot avanzaria. while(velocidad<254){ velocidad++; control.Motor(velocidad,1); delay (200);} //Un motor gira en sentido horario y el otro antihorario //Si estuvierán montados en un robot el robot retrocedería. control.Motor(-180,1); delay(3000); //Los dos motores giran en sentido horario. //Si estuvieran montados en un robot este giraria a la derecha. control.Motor(200,100); delay(3000); //Los dos motores giran en sentido antihorario. //Si estuvieran montados en un robot este giraria a la derecha. control.Motor(200,-100); delay(3000); //Los motores se paran. control.Motor(0,1); delay(3000); velocidad=150;//Reseteamos la velocidad }
Vídeo de ejemplo con los motores funcionando
Written by leantec.ES
Equipo de Leantec.ES
Hola,una pregunta,¿Se pueden usar 3 motores en el l298?
Hola
Ya monte este proyecto pero al compilar el programa en arduino me sale el error:
La librería «LEANTEC – Libreria ControlMotor (1)» no se puede usar.
Los nombres de librería deben contener sólo números y letras.
(Sólo ASCII y sin espacios, y no pueden empezar con un número)
ayuda por favor!! es para el proyecto de una clase de la universidad.
gracias por su ayuda
eStà pahína me a aiudo muitcho a azer my plaka (:
eStà Pàjina ne aiudo muxo a azer la plaka arduino.de berdad kq mhe aiudo muxo. grazias.
Una pregunta, Como le haria si el giro de esas ruedas dependen de lo que unos sensores infrarrojos detecten? Seria de mucha ayuda
hechenme la mano estoy empesando con arduino y tengo una duda, quiero controlar 6 motores dc con 3 modulos L298N
todo funsiona bien , pero cuando quiero variar los tiempos, no me respeta los delay, le pongo un Segundo y me da 6 segundos
me podrian ayudar
Estoy desesperado, pero no consigo hacerlo funcionar. El amperaje de salida es demasiado bajo y solo mueve el motor si le doy un empujoncito. No se que hacer uso el mismo circuito que planteas, aunque he probado de todo, hasta he comprado un controlador nuevo,
Alguna idea?
Gracias
Necesitas alimentar el circuito con mas amperaje.
Hola, estoy trabajando con un arduino Nano y tengo el siguiente inconveniente. He asignado como PWM de un motor el pin D10, pero cuando mido tensión solo mido 3,6V y no alcanza a habilitarlo. En el Pin D2 del otro motor mido 4,6V. Podrían comentarme que puede llegar a ser? La nano está montada sobre una protoboard sin ningun cable.
Les paso mi código:
#include//Incluimos la librería control de motores
ControlMotor control(A3, A2, 7, 8, 2, 10); //
void setup() {
}
void loop() {
control.Motor(200, 1); //Motores de avance encendidos.
}
Hola de nuevo, he estado haciendo varias pruebas y parece que la librería ha dejado de funcionar correctamente, debe ser algún cambio en el IDE de Arduino. He cargado programas viejos que andaban perfectamente y ya no funcionan. Ahora estoy utilizando otra librería y anda perfectamente. Espero puedan corregir el error porque estaba muy buena la librería.
Saludos!
Que libreria ?
Buenas ivan, he probado de todas las maneras y no se que puede fallar.
He probado con el jumper quitado y puesto, alimentando asi externamente el L298N pero ni por esas..
Si pudieras enviarme un circuito correcto de las conexiones (mi correo es: gorkagmv@gmail.com)
Los pines PWM los tengo conectados igual que los que pones tu aqui…
Gracias de antemano
Un saludo
Hola,
Es un tutorial estupendo, enhorabuena y muchas gracias.
Pero tengo una preguntilla; al montar el circuito los jumper de EnA y EnB deben estar puestos o quitados???
Y si debieran de estar quitados, cual de los dos pines que hay en cada «En» se conectar al pin 5 y 6 del arduino?? el de más a dentro o el de más a fuera??
Muchas gracias y recibid un cordial saludo,
Rafael
Rafael, tengo el mismo problema, lo solucionastes? gracias.
esta bien culera esta pagina
Tengo une problema con el kit y los motores o mas probablamente, con el 298 : parece que cuando tengo el robot en las manos, los motores funcionnan pero Cuando pongo el robot al suelo, solamente puede girar (un motor), cada vez que los 2 motores deben funcionnar juntos, el robot no se mueve, especialmente Cuando debe avancar…
Pienso que las batterias 4 x AA no es sufficiente (voy a probar…).
Tiene pinta que no le llega suficiente potencia (No voltaje, si no amperaje)