Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Objetivos
Con el integrado L293D control de un robot.
aprender a controlar motores de corriente continua y controladores de motores
basados en puentes H.
Material requerido
El esquema.
El esquema será exactamente igual al de la entrada anterior, pero conectando el segundo
motor.
El programa.
//Testeando Motores con L293D
//Definimos pins
//Motor A
int enableA = 5;
int motorA1 = 6;
int motorA2 = 7;
//Motor B
int enableB = 8;
int motorB1 = 9;
int motorB2 = 10;
void setup() {
Serial.begin (9600);
//configuración
pinMode (enableA, OUTPUT);
pinMode (motorA1, OUTPUT);
pinMode (motorA2, OUTPUT);
}
void loop() {
//activamos motor A
Serial.println (“Activamos motores”);
digitalWrite (enableA, HIGH);
digitalWrite (enableB, HIGH);
delay (1000);
//Nos movemos
delay (3000);
delay (3000);
Serial.println (“Paramos motores”);
//stop
digitalWrite (enableA, LOW);
digitalWrite (enableB, LOW);
delay (3000);
}
Pero podemos mejorar esta programación. Escribiremos código para controlar mediante
ordenador el robot con 2 motores CC desde el puerto serie.
// declaración de variables
char val;
int enableA = 5; //velocidad motor A
int dirmotorA1 = 6; // direccion motor a
int dirmotorA2= 7; // direccion motor a
int enableB = 8; //velocidad motor B
int dirmotorB1 = 9; // direccion motor b
int dirmotorB2= 10; // direccion motor b
int velocidad = 120;
//Métodos para el control adelante, atras, derecha
// izquierda y stop
void adelante(){
digitalWrite (dirmotorA1,HIGH);// gira motor A derecha
digitalWrite (dirmotorA2,LOW);
analogWrite (enableA, velocidad);
digitalWrite (dirmotorB1,LOW);// gira motor B izquierda
digitalWrite (dirmotorB2,HIGH);
analogWrite (enableB, velocidad);
}
void atras(){
digitalWrite (dirmotorA1,LOW);// gira motor A izquierda
digitalWrite (dirmotorA2,HIGH);
analogWrite (enableA, velocidad);
digitalWrite (dirmotorB1,HIGH);// gira motor B derecha
digitalWrite (dirmotorB2,LOW);
analogWrite (enableB, velocidad);
}
void izquierda(){
digitalWrite (dirmotorA1,HIGH);// gira motor A derecha
digitalWrite (dirmotorA2,LOW);
analogWrite (enableA, velocidad);
digitalWrite (dirmotorB1,HIGH);// gira motor B derecha
digitalWrite (dirmotorB2,LOW);
analogWrite (enableB, velocidad);
}
void derecha(){
digitalWrite (dirmotorA1,LOW);// gira motor A izquierda
digitalWrite (dirmotorA2,HIGH);
analogWrite (enableA, velocidad);
digitalWrite (dirmotorB1,LOW);// gira motor B izquierda
digitalWrite (dirmotorB2,HIGH);
analogWrite (enableB,velocidad);
}
void paro(){
digitalWrite (dirmotorA1,HIGH);// para motor A
digitalWrite (dirmotorA2,HIGH);
analogWrite (enableA, 0);
digitalWrite (dirmotorB1,HIGH);// para motor B
digitalWrite (dirmotorB2,HIGH);
analogWrite (enableB, 0);
}
// comenzamos parando los motores
void setup(){
int i;
for(i=5;i<11;i++){
pinMode(i, OUTPUT); //poner pin 5,6,7,8,9,10,11 de salida
}
Serial.begin(9600);
paro();
}
// Y el bucle principal
void loop() {
if( Serial.available() ) {
val = Serial.read();
}
switch (val) {
case ‘s’:
paro();
break;
case ‘a’:
adelante();
break;
case ‘r’:
atras();
break;
case ‘i’:
izquierda();
break;
case ‘d’:
derecha();
break;
}
}
QUE ES Y PARA QUE SIRVE EL PUENTE H L293B
En las mayoría de las aplicaciones electrónicas orientadas a Reboticas nos vemos
en la necesidad de controlar y generar movimientos. Según la naturaleza del
requerimiento recurrimos a Servo Motores o Motores de continua.
Me interesa mostrarles la forma adecuada de controlar un motor de continua, para
esto necesitamos controlar dos variables (Dirección y Velocidad).
Es importante tener en cuenta que este integrado se alimenta con dos niveles de
tensión diferente, uno corresponde a la alimentación propia de integrado, que no
debe ser superior a 7V(VSS) y otra es la tensión con la que alimentaremos los
motores, pudiendo en este ultimo hacerlo con hasta 36V(VC).
int speedPin2 = 10; // Motor 2 aceleracion (PWM) Pin Enable del L293
void setup() {
Serial.begin (9600);
//configuracion de pines
pinMode(switchPin, INPUT);
// Control Motor 1
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(speedPin1, OUTPUT);
//Control Motor 2
pinMode(motor2Pin1, OUTPUT);
pinMode(motor2Pin2, OUTPUT);
pinMode(speedPin2, OUTPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(speedPin1, HIGH);
digitalWrite(speedPin2, HIGH);
blink(ledPin, 3, 100);
void loop() {
digitalWrite(motor1Pin2, HIGH); //
Serial.print("motor 1 = "); //
Serial.println(speedpin); //
delay (50); //
digitalWrite(motor2Pin2, HIGH); //
Serial.println(speedpin); //
delay(50); //
else {
digitalWrite(motor1Pin2, LOW); //
Serial.print("motor 1 = "); //
Serial.println(speedpin); //
delay (50); //
digitalWrite(motor2Pin2, LOW); //
speedpin = analogRead(potPin2); // Lectura del valor del potenc
iometro
Serial.print("motor 2 = "); //
Serial.println(speedpin); //
delay(50); //
/*
si todo va bien, solo parpadea tres veces, si hay algun error que reset
ee el arduino,
*/
int i = 0;
digitalWrite(whatPin, HIGH);
delay(milliSecs/2);
digitalWrite(whatPin, LOW);
delay(milliSecs/2);
http://www.iescamp.es/miarduino/2016/02/22/robot-con-2-motores-de-cc/
http://www.electrontools.com/Home/WP/2016/03/09/como-funciona-el-puente-h-l293b/