sábado, 22 de junio de 2013

prueba del control del lanzallamas

Aqui estamos realizando la prueba del control de servos por medio del celular, y este video muestra el resultado:




trabajo finalizado, ultima prueba!!!

una vez realizado todos los circuitos, unimos primero la parte del arduino para ver que funcionara y si se moviera el carro, después se le colocaron los servos que mueven el tanque de gas para el lanzallamas. Una vez realizado todo el ensamblaje, este es el resultado del proyecto:





Programa del Arduino y control con la aplicación "Bluetooth RC".

Puedes descargar el programa que hicimos aquí MachineGun Arduino.

Éste es el código de Arduino:

#include <Servo.h>

Servo x;
Servo y;
Servo shoot;
int pos1;
int pos2;

int motorA = 2;
int motorB = 3;
int dirA = 4;
int dirB = 5;
int luz = 11;
int led=13;
char c;
boolean apuntar = false;

void adelante();
void reversa();
void parado();
void derecha();
void izquierda();
void adelanteDerecha();
void adelanteIzquierda();
void atrasDerecha();
void atrasIzquierda();


void encenderLuz();

void setup(){
  Serial.begin(9600);
  pinMode(led, OUTPUT); 
  pinMode(motorA, OUTPUT); 
  pinMode(motorB, OUTPUT); 
  pinMode(dirA, OUTPUT); 
  pinMode(dirB, OUTPUT); 
  pinMode(luz, OUTPUT);
  x.attach(9);
  y.attach(10);
  shoot.attach(8);
  x.write(90);
  y.write(90);
  shoot.write(50);  
}

void loop(){
  while (Serial.available()) {
    if (Serial.available() >0) {
      c = Serial.read();
    }
  }

  if(apuntar == false){
    switch(c){
    case 'F':
      adelante();
      break;
    case 'B':
      reversa();
      break;
    case 'S':
      parado();
      break;
    case 'L':
      izquierda();
      break;
    case 'R':
      derecha();
      break;
    case 'G':
      adelanteIzquierda();
      break;
    case 'I':
      adelanteDerecha();
      break;
    case 'H':
      atrasIzquierda();
      break;
    case 'J':
      atrasDerecha();
      break; 
    case 'W':
      encenderLuz();
      break;
    case 'w':
      apagarLuz();
      break;
    case 'X':
      apuntar = true; 
      break;
     case 'v':
      shoot.write(50);
      break; 
    }
  }
  else{
    switch(c){
    case 'B':              //HACIA ARRIBA
      pos1++;
      if(pos1 > 100){
        pos1=100;
      }
      y.write(pos1);
      break;
    case 'F':                //HACIA ABAJO
      pos1--;
      if(pos1 < 60){
        pos1=60;
      }
      y.write(pos1);
      break;
    case 'L':
      pos2++;
      if(pos2>180){
        pos2=180;
      }
      x.write(pos2);
      break;
    case 'R':
      pos2--;
      if(pos2<0){
        pos1=0;
      }
      x.write(pos2);
      break;
    case 'x':
      apuntar = false; 
      break;
    case 'V':
      shoot.write(100);
      break;
    case 'v':
      shoot.write(50);
      break;
    } 
    delay(5); 
  }
}

void adelante(){
  digitalWrite(motorA,HIGH);
  digitalWrite(motorB,LOW);
  digitalWrite(led,HIGH);
}

void reversa(){
  digitalWrite(motorA,LOW);
  digitalWrite(motorB,HIGH);
  digitalWrite(led,HIGH);
}

void parado(){
  digitalWrite(motorA,LOW);
  digitalWrite(motorB,LOW);
  digitalWrite(led,LOW);
  digitalWrite(dirA,LOW);
  digitalWrite(dirB,LOW);
}

void izquierda(){
  digitalWrite(dirB,LOW);
  digitalWrite(dirA,HIGH);
  digitalWrite(led,HIGH);
}

void derecha(){
  digitalWrite(dirB,HIGH);
  digitalWrite(dirA,LOW);
  digitalWrite(led,HIGH);
}

void adelanteIzquierda(){
  digitalWrite(dirB,LOW);
  digitalWrite(dirA,HIGH);
  digitalWrite(motorB,LOW);
  digitalWrite(motorA,HIGH);
  digitalWrite(led,HIGH);
}

void adelanteDerecha(){
  digitalWrite(dirB,HIGH);
  digitalWrite(dirA,LOW);
  digitalWrite(led,HIGH);
  digitalWrite(motorA,HIGH);
  digitalWrite(motorB,LOW);
}

void atrasIzquierda(){
  digitalWrite(dirB,LOW);
  digitalWrite(dirA,HIGH);
  digitalWrite(motorB,HIGH);
  digitalWrite(motorA,LOW);
  digitalWrite(led,HIGH);
}

void atrasDerecha(){
  digitalWrite(dirB,HIGH);
  digitalWrite(dirA,LOW);
  digitalWrite(led,HIGH);
  digitalWrite(motorB,HIGH);
  digitalWrite(motorA,LOW);
}

void encenderLuz(){
  digitalWrite(luz,HIGH);
}

void apagarLuz(){
  digitalWrite(luz,LOW);
}



Control del auto mediante la aplicación y cómo utilizamos los botones:





Control de los sevomotores.

Información sobre los servos, funcionamiento y construcción: Servomotores.

Código para controlar los servomotores que usamos para apuntar: Aim.

#include <Servo.h>    //INCLUIMOS LA LIBRERIA SERVO

Servo x;   //DECLARAMOS EL OBJETO SERVO QUE MUEVE EL LANZA LLAMAS EN EL EJE X
Servo y;   //DECLARAMOS EL OBJETO SERVO QUE MUEVE EL LANZA LLAMAS EN EL EJE Y
int pos1;  //DECLARAMOS LA VARIABLE DE LA POSICION DEL SERVO X
int pos2;  //DECLARAMOS LA VARIABLE DE LA POSICION DEL SERVO Y
char c;

void setup(){
  Serial.begin(9600);
  x.attach(9);     //EL SERVO X ESTA CONECTADO AL PIN 9
  y.attach(10);    //EL SERVO Y ESTA CONECTADO AL PIN 10
  x.write(90);     //EL SERVO X TIENE UNA POSICION INICIAL A 90 GRADOS
  y.write(90);     //EL SERVO Y TIENE UNA POSICION INICIAL A 90 GRADOS
}

void loop(){
  while (Serial.available()) {
    if (Serial.available() >0) {
      c = Serial.read();
    }
  }
  switch(c){
  case 'F':                  //HACIA ARRIBA
    pos1++;
    if(pos1 > 100){          //MAXIMO PARA QUE EL LANZA LLAMAS NO GOLPEE CON EL TANQUE
      pos1=100;
    }
    y.write(pos1);
    break;
  case 'B':                  //HACIA ABAJO
    pos1--;
    if(pos1 < 60){           //MAXIMO PARA QUE EL LANZA LLAMAS NO QUEME EL TANQUE
      pos1=60;
    }
    y.write(pos1);
    break;
  case 'L':                  //IZQUIERDA
    pos2++;
    if(pos2>180){
      pos2=180;
    }
    x.write(pos2);
    break;
  case 'R':                  //DERECHA
    pos2--; 
    if(pos2<0){
      pos1=0;
    }
    x.write(pos2);
    break;
  } 
  delay(5); 
}

viernes, 21 de junio de 2013

Circuito de potencia y control montado en el chasis del auto a control remoto




Circuitos de Control para los motores (puente H con relevadores y transistores).

TODO ESTO LO MONTAMOS EN UN CHASIS DE UN AUTO A CONTROL REMOTO.
MT1 ES EL MOTOR TRASERO QUE DA LA DIRECCIÓN.
MT2 ES EL SERVO DELANTERO QUE CONTROLA LA DIRECCIÓN.


La potencia a las salidas del integrado L293 no eran suficientes para mover los motores a la velocidad deseada, nosotros optamos por hacer un puente H con relevadores y transistores. Los transistores los utilizamos para amplificar la señal del Arduino ya que las bobinas de los relevadores consumen mucha corriente. Como los relees son mecánicos no hay perdidas a la salida así que los motores reciben casi todo el voltaje y toda la corriente. Diseñamos el siguiente circuito:
Seguimos utilizando el L293 para el servo de la dirección, los 600mA del integrado son suficientes para moverlos y ahorramos espacio al no poner más relevadores.

Material:

  • 1 Batería 9v (de preferencia utiliza la original del auto a control remoto).
  • 1 LED.
  • 4 resistencias 330 ohms.
  • 1 Switch.
  • 3 Relevadores de 5v.
  • 3 Transitores BC547 (BJT).
  • 1 Arduino.
  • 1 Diodo rectificador
  • 1 Protoboard.
  • Alambre para proto.



Pines del Transistor BC547.



Puente H

Un Puente H o Puente en H es un circuito electrónico que permite a un motor eléctrico DC girar en ambos sentidos, avance y retroceso. Son ampliamente usados en robótica y como convertidores de potencia. Los puentes H están disponibles como circuitos integrados, pero también pueden construirse a partir de componentes discretos.
El término "puente H" proviene de la típica representación gráfica del circuito. Un puente H se construye con 4 interruptores (mecánicos o mediante transistores). Cuando los interruptores S1 y S4 (ver primera figura) están cerrados (y S2 y S3 abiertos) se aplica una tensión positiva en el motor, haciéndolo girar en un sentido. Abriendo los interruptores S1 y S4 (y cerrando S2 y S3), el voltaje se invierte, permitiendo el giro en sentido inverso del motor.


El término puente H proviene de la típica representación gráfica del circuito.
El término "puente H" proviene de la típica representación gráfica del circuito. Un puente H se construye con 4 interruptores (mecánicos o mediante transistores). Cuando los interruptores S1 y S4 (ver primera figura) están cerrados (y S2 y S3 abiertos) se aplica una tensión positiva en el motor, haciéndolo girar en un sentido. Abriendo los interruptores S1 y S4 (y cerrando S2 y S3), el voltaje se invierte, permitiendo el giro en sentido inverso del motor.
Con la nomenclatura que estamos usando, los interruptores S1 y S2 nunca podrán estar cerrados al mismo tiempo, porque esto cortocircuitaría la fuente de tensión. Lo mismo sucede con S3 y S4.

Más información: Puente H wikipedia

Lanza Llamas

Para el Lanzallamas utilizamos un desodorante montado sobre dos servos que lo mueven en los ejes xy y un tercer servo para presionar la válvula y disparar.
Lo montamos de la siguiente manera:

Sujetamos un servo a la parte trasera para presionar la válvula.




Hicimos una pieza que encajara en la boquilla de la válvula para que al jalarla con el servo la presionara y saliera el desodorante.

Amarramos alambre a cada extremo de la pieza que hicimos y luego los sujetamos a un clavo para que el servo pudiera tirar de él.