miércoles, 27 de marzo de 2019

CÓMO MOVER DOS MOTORES USANDO EL CHIP 293 (FILTRO DE TRANSISTORES "EN H")



//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);  
  
  pinMode (enableB, OUTPUT);
  pinMode (motorB1, OUTPUT);
  pinMode (motorB2, OUTPUT);  
  
}
void loop() {
  //activamos motor A
  Serial.println (“Activamos motores”);
  digitalWrite (enableA, HIGH);
  digitalWrite (enableB, HIGH);
  delay (1000);
  
  //Nos movemos
  Serial.println (“Hacia delante”);
  digitalWrite (motorA1, LOW);
  digitalWrite (motorA2, HIGH);
  digitalWrite (motorB1, LOW);
  digitalWrite (motorB2, HIGH);
  //Durante 3 segundos
  delay (3000);
  
  Serial.println (“Hacia atrás);
  digitalWrite (motorA1,HIGH);
  digitalWrite (motorA2,LOW);  
  digitalWrite (MotorB1,HIGH);
  digitalWrite (MotorB2,LOW);  
  //Durante 3 segundos
  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;
}
}




No hay comentarios:

Publicar un comentario