domingo, 15 de marzo de 2015

BRAZO-ROBOT

                                                   BRAZO - ROBOT


En este proyecto, lo que hemos tratado de conseguir es el control de este brazo robótico intentando controlar los 6 motores por los que está compuesto y hacerles girar tanto en un sentido como en otro.
Para ello hemos diseñado una placa compuesta principalmente por 3 integrados para poder controlar el giro de los motores: L293DNE (puente en H).



Aparte le hemos colocado unos pulsadores a esta placa para poder moverlos tambien desde ahí. Con cada integrado conseguimos mover y alimentar dos motores,los cuales los alimentaremos a 9V de corriente continua (podemos alimentarlos hasta 12V sin problema ya que este integrado aguanta hasta 36V y más de 1A de intensidad), tambien podemos destacar que cada motor viene con un final de carrera incorporado.

  Finales de carrera :                                                              Circuito integrado L293DNE                                                        

 Aparte de controlar el movimiento con pulsadores gracias a nuestro Arduino con un programa que más abajo veremos, hemos creado un programma de Processing y una aplicación en App Inventor para Android.
  • Para planificar este proyecto y organizarnos paso a paso he utilizado este Granttproyect:  

 Componentes utilizados para el diseño de la placa:
 - Intedragos L293DNE (3).
 - Pulsodres de dos patillas (12).
 - Condensadores 100 nanos para los integrados (3).
 - Diodos 1N4007 (24).
 - Resistencias SMD 5k6 (12).
 - Bornas de conexión pcb, 2 pines (12) y de 3 pines (6).
 - Pines hembra y macho.

  • DISEÑO DE NUESTRA PLACA EN ISIS Y EN ARES:


  •  Una vez terminado todo este proceso creamos la placa de pruebas en ácido, realizamos los taladros y empezamos a soldar componentes y resistencias smd y así nos quedo:                                


TODO ESTO HA SIDO CONTROLADO POR DOS MICROCONTROLADORES DE ARDUINO, ARDUINO UNO Y ARDUINO MEGA (para pulsadores).


 1. PULSADORES
             - PROGRAMA :
int motor6;
int motor5;

int btnRight = 2; // pulsadores
int btnLeft = 4;
int btnalante = 5;
int btnatras = 6;

int Right = 8;
int Left = 9;
int alante = 12;
int atras = 11;

int buttonRight;
int buttonLeft;
int buttonalante;
int buttonatras;

void setup(){
pinMode (btnRight, INPUT);
pinMode (btnLeft, INPUT);
pinMode (Right, OUTPUT);
pinMode (Left, OUTPUT);

pinMode (btnalante, INPUT);
pinMode (btnatras, INPUT);
pinMode (alante, OUTPUT);
pinMode (atras, OUTPUT);
}
void loop(){
buttonRight = digitalRead(btnRight);
buttonLeft = digitalRead(btnLeft);
if (buttonRight == HIGH){
digitalWrite(Right, HIGH);
}
else if (buttonLeft == LOW){
digitalWrite(Left, HIGH);
}
else{
digitalWrite(Right, LOW);
digitalWrite(Left, LOW);
}
buttonalante = digitalRead(btnalante);
buttonatras = digitalRead(btnatras);
if (buttonalante == HIGH){
 digitalWrite(alante, HIGH);
}
else if (buttonatras == LOW){
  digitalWrite(atras, HIGH);
}
else{
 digitalWrite(alante, LOW);
 digitalWrite(atras, LOW);
 }
delay(500); // retardo 0.5 segundo
}




                                      
2. PROCESSING Y APP INVENTOR

     PROCESSING:

 import cc.arduino.*;
import processing.serial.*;

Serial myPort;
int Izquierda = 2;
int Derecha = 3;
int Alante = 4;
int Atras = 5;
Arduino arduino;
void setup ()
{
  size(600, 300); // TAMAÑO DEL CUADRO DE MANDOS
println(Serial.list());
String portName = Serial.list()[0];
  myPort=new Serial(this, portName,9600);
  myPort.buffer(1);
}
void draw (){
 
 if (mousePressed == true){
 if(mouseX < 300 && mouseY < 50){
     fill(250,45,23);
      rect(0,0,300,50);    
  }
   else{
   if (mouseX > 300 && mouseY < 50){
   fill(33,250,23); // COLORES
     rect(300,0,600,50);  
   }
   }
 }
  if (mousePressed == true){
  if(mouseX < 300 && mouseY > 50 && mouseY < 100){
    fill(34,227,154);
    rect(0,50,300,50);
    }
   else{
     if(mouseX > 300 && mouseY > 50 && mouseY < 100){
     fill(240,204,73);
     rect(300,50,600,50);
   }
  }
  }
  textSize(20);
  fill(0);
  text("IZQUIERDA", 75,25,150,200);  // texto y cordenadas para que aparezca en su casilla correspondiente
  text("DERECHA", 400,25,500,100);
  text("ALANTE", 75,75,150,300);
  text("ATRAS", 400,75,500,400);
}
 }


void mousePressed(){


  if(mouseX > 0 && mouseX < 300 && mouseY > 0 && mouseY < 50){
   myPort.write('q');
  }
  if(mouseX > 300 && mouseX < 600 && mouseY > 0 && mouseY < 50){
    myPort.write('a'); 
  }
  if(mouseX > 0 && mouseX < 300 && mouseY > 50 && mouseY < 100){
    myPort.write('w');
  }
 if(mouseX > 300 && mouseX < 600 && mouseY > 50 && mouseY < 100){
    myPort.write('s'); 
 }
}
void mouseReleased(){

  println("Released");
 
   if(mouseX > 0 && mouseX < 300 && mouseY > 0 && mouseY < 50){
    myPort.write('o');
  }
  if(mouseX > 300 && mouseX < 600 && mouseY > 0 && mouseY < 50){
    myPort.write('o'); 
  }
  if(mouseX > 0 && mouseX < 300 && mouseY > 50 && mouseY < 100){
    myPort.write('o');
  }
 if(mouseX > 300 && mouseX < 600 && mouseY > 50 && mouseY < 100){
    myPort.write('o'); 
 }
}


 RESULTADO :  


VIDEO DEMOSTRATIVO:

https://www.youtube.com/watch?v=zxNLURThqe4






APP INVENTOR PARA ANDROID :



                        
Para este proceso hemos usado un modulo bluetooh para arduino, el cual conectamos asi:
Cogemos RX y TX de arduino y los cruzamos con TX y RX del bluetooh y ya alimentamos con 5V y GND.

VIDEO DEMOSTRATIVO DE LA APLICACIÓN CONECTADA MEDIANTE BLUETOOH:
https://www.youtube.com/watch?v=d_plIIJ2_4Q





POR ÚLTIMO EL PROGRAMA UTILIZADO PARA AMBRAS COSAS (bluetooh y processing):

int motorDerecha = 2; // pin 2 de L293 va a girar a derecha
int motorIzquierda = 3; // pin 7 de L293 va a girar a izquierda
int motorAlante = 4;
int motorAtras = 5;

void setup() { // declaramos los pines de salida
    pinMode(motorDerecha, OUTPUT);
    pinMode(motorIzquierda, OUTPUT);
    pinMode(motorAlante, OUTPUT);
    pinMode(motorAtras, OUTPUT);
Serial.begin(9600);
}
  char letras;
  void loop() {
 letras = 'z';
    if(Serial.available() > 0){    
     letras = Serial.read();  
      flag=0;
    }  
    if (letras == 'o') {
        digitalWrite(motorDerecha, LOW); // ponemos el pin 2 del L293 bajo
        digitalWrite(motorIzquierda, LOW); // ponemos el pin 7 de L293 en bajo tb, para que pare cuando pulsemos 0.
        digitalWrite(motorAlante, LOW);
        digitalWrite(motorAtras, LOW);
if(flag == 0){
          Serial.println("Motor: off");
          flag=1;
        }
    }
 
    else if (letras == 'q') {
        digitalWrite(motorDerecha, LOW); // pin 2 de L293 en bajo
        digitalWrite(motorIzquierda, HIGH); //  pin 7 de L293 en alto
        if(flag == 0){
          Serial.println("Motor: Derecha");
          flag=1;
        }
    }
    else if (letras == 'a') {
        digitalWrite(motorDerecha, HIGH); //  pin 2 de L293 en alto
         digitalWrite(motorIzquierda, LOW); //  pin 7 de L293 en bajo
        if(flag == 0){
          Serial.println("Motor: Izquierda");
          flag=1;
        }
    }
   
    else if (letras == 'w') {
        digitalWrite(motorAlante, HIGH); //  pin 10 de L293 en alto
         digitalWrite(motorAtras, LOW); //  pin 15 de L293 en bajo
        if(flag == 0){
          Serial.println("Motor: Alante");
          flag=1;
        }
    }
     else if (letras == 's') {
        digitalWrite(motorAtras, HIGH); //  pin 10 de L293 en alto
         digitalWrite(motorAlante, LOW); //  pin 15 de L293 en bajo
        if(flag == 0){
          Serial.println("Motor: Atras");
          flag=1;
            }
     }
}

  • DIARGRAMA DE ESTADO:







ARES


ARDUINO QUE INCORPORA:


PLACA FINAL:


  VIDEOS DEMOSTRATIVOS CON ESTA PLACA FINAL: 
 








No hay comentarios:

Publicar un comentario