Partekatzea - Compartir

Qué es un robot?

Un robot es un dispositivo electrónico y generalmente mecánico capaz de desempeñar tareas automáticamente, ya sea por medio de supervisión humana directa, a través de un programa predefinido o siguiendo un conjunto de reglas generales establecidas. Hay una gran variedad de robots diseñados para diferentes tareas y sectores: brazos robóticos para el montaje de vehículos, robots de limpieza…

 

El “FolToy” nace de la idea de dos alumnos con la finalidad de crear un proyecto visual, que se moviese, que llamara la atención de la gente y que fuera algo demostrable. Foltoy tendrá controlado en todo momento al objeto o color identificado

.

.

.

El robot está construido con piezas de plástico, PLA o ABS. Nos decidimos por las piezas de plástico por la sencillez y facilidad que teníamos en Don Bosco de usar las impresoras 3D. Las piezas de plástico son ligeras y lo suficientemente rígidas para la estructura del FolToy. Las piezas de plástico están impresas en la impresora 3D “Witbox BQ” que está en el taller. La unión de todas las piezas esta echo atraves de tornillos.

.

.

La estructura de Foltoy se compone de ruedas para los servos y para la rueda trasera. Chasis superior e inferior para poder almacenar la batería y el transmisor de vídeo, y un soporte para acoplar la rueda trasera a la estructura. Todos los archivos serán descargables en formato .stl.

Los movimientos son posibles mediante los servos FUTABA S3003. Estos servos están limitados de giro a 180º y hemos tenido que modificarlos para que sean de giro continuo 360º. Los servos de por si tienen tres conexiones, alimentación (5V), masa y control pero nosotros solo hemos utilizado dos alimentación (5V) y masa.

.

.

.

Para las ruedas se colocó unas cubiertas de un coche teledirigido con la intención de que no se resbalase con el roce del suelo, sin esas cubiertas el movimiento del robot hubiese sido nula.

.

.

Para el proyecto se utilizó el ATMEGA 328P, extraído del Arduino UNO.  Hemos escogido el Arduino UNO porque era suficiente para la comunicación de la cámara Pixy mediante conexión ICSP, y con el programa adecuado será suficiente para controlar los servos con salidas PWN.

.

.

Pixy es una cámara inteligente que le asignas un color u objeto y es capaz de identificarlo.

,

.

Transmisor de vídeo sirve para pasar la imagen grabada mediante una cámara. El transmisor esta conectado con la cámara mediante un cable. La visualización de la imagen puede hacerse en un smartphone, tablet o dispositivo que tenga el sistema operativo Android o IOS. Descargando la aplicación «WIFI AVIN» y conectando nuestro dispositivo al wifi del transmisor seremos capaz de visualizar lo que la cámara ve. La aplicación «WIFI AVIN» nos ofrece la posibilidad de grabar lo que ve la cámara o incluso sacar foto.

.

.

.

Mientras uno de los miembros del grupo iba montando el esqueleto del robot, el otro iba haciendo los esquemas en el ISIS y viendo el funcionamiento de este. El ISIS nos proporcionó una idea general de cómo iba a ser el proyecto de forma visual.
.

.

Una vez tengamos el circuito completo con todos los componentes en el ISIS, volcaremos el programa al ARES. En el tenemos la posibilidad de seguir con la misma sesión pero para diseñar la PCB entera. Colocaremos los componentes dentro de un cuadro que limitará el tamaño de la placa, orientaremos los componentes de forma que queden accesibles como por ejemplo interruptor, pulsador o conector. Rutearemos las pistas automáticamente. Como el proyecto presentaba un número importante de componentes, el ruteado de las pistas tuvo que hacerse por las dos caras. Al completarse las pistas sin errores, y después de colocar en cada pin a soldar el pad deseado, este es el diseño de la placa que vamos a exportar.

.

.

Programa Arduino:

Cuando tengamos toda la electrónica montada y soldada, cargaremos el programa que se incluye en la carpeta ArchivosFoltoy.zip.

El programa que cargaremos está pensado para que la cámara Pixy envíe la señal al micro y salga la señal hacia los motores para que tenga en objetivo en todo momento el objeto identificado. Modificando el programa se pueden hacer algunos cambios, por ejemplo, distancia del objeto, velocidad de motores,…

Este es el programa de Foltoy:

//Pixy arduino robot

//Arduino IDE 1.0.6

#include <SPI.h>    //Declarar conexion pixy con arduino

#include <Pixy.h>  //Declarar la Pixy

Pixy pixy;

 //Define un objeto y una zona para seguir el objeto.

int signature = 1;

int x = 0;            //Posicion eje X

int y = 0;            //Posicion eje Y

int width = 0;        //Ancho del objeto

int height = 0;       //Altura del objeto

int area = 0;  //Define el area

int maxArea = 1000;    //Área objeto max

int minArea = 800;     //Área objeto min

int Xmin = 140;        //Min posicion X

int Xmax = 180;        //Max posicion X

int DerAlan = 2;        //aPhase en Pin D2

int DerAtra = 3;       //aEnable en Pin D3

int IzqAlan = 4;        //bPhase en Pin D4

int IzqAtra = 5;       //bEnable en Pin D5

//int Speed = 255;        //Velocidad del motor

//Marcha alante

void forward(){

  digitalWrite(DerAlan, HIGH);

  digitalWrite(DerAtra, LOW);

  digitalWrite(IzqAlan, HIGH);

  digitalWrite(IzqAtra, LOW);

  }

//Marcha atras

void backward(){

  digitalWrite(DerAlan, LOW);

  digitalWrite(DerAtra, HIGH);

  digitalWrite(IzqAlan, LOW);

  digitalWrite(IzqAtra, HIGH);

  }

//Girar derecha

void turnRight(){

  digitalWrite(DerAlan, LOW);

  digitalWrite(DerAtra, LOW);

  digitalWrite(IzqAlan, HIGH);

  digitalWrite(IzqAtra, LOW); 

  }

//Girar izquierda

void turnLeft(){

  digitalWrite(DerAlan, HIGH);

  digitalWrite(DerAtra, LOW);

  digitalWrite(IzqAlan, LOW);

  digitalWrite(IzqAtra, LOW);  

  }

//Parar

void brake(){

  digitalWrite(IzqAlan, LOW);

  digitalWrite(IzqAtra, LOW);  

  }

void setup()

{

//D2 – D5 declarar como salidas  

  pinMode(DerAlan, OUTPUT);

  pinMode(IzqAlan, OUTPUT);

  pinMode(DerAtra, OUTPUT);

  pinMode(IzqAtra, OUTPUT);

  

  brake();

  

  Serial.begin(9600);

  Serial.print(«Starting…\n»);

  

  pixy.init();

  

//Test de inicializacion 

  forward();

  delay(1000);

  brake();

  backward();

  delay(1000);

  brake();

  turnLeft();

  delay(1000);

  brake();

  turnRight();

  delay(1000);

  brake();

  delay(1000);

//Finalizar test de inicializacion 

}

//infinity loop

void loop()

  static int i = 0;

  uint16_t blocks;

  

  blocks = pixy.getBlocks();  //Recibir datos de la camara pixy

   

  signature = pixy.blocks[i].signature;    //Obtener firma del objeto identificado

  x = pixy.blocks[i].x;                    //Obtener la posicion X

  y = pixy.blocks[i].y;                    //Obtener la posicion Y

  width = pixy.blocks[i].width;            //Obtener el ancho

  height = pixy.blocks[i].height;          //Obtener la altura

//looking for signature 1

if(signature == 1){

  area = width * height;    //Calcular el area del objeto

  //Girar izquierdas si X < posicion Xmax

  if (x < Xmin){

    turnLeft();

  }

  //Girar derecha si posicion X > posicion Xmax

  else if (x > Xmax){

    turnRight();

   

  }

  //Marcha alante si el objeto es muy pequeño

  else if(area < minArea){

  

  forward(); 

  }

  //Marcha atras si el objeto es muy grande

  else if(area > maxArea){

  

  backward(); 

  }

  

  //Sino parar

  else if(area > minArea && area < maxArea && x > Xmin && x < Xmax){

  brake(); 

  }

}

else{

  brake();

  }

}

//Terminar

Descargar archivos del proyecto.

.

Partekatzea - Compartir