martes, 29 de mayo de 2012

Materiales y Costos

A continuación coloco una lista de los materiales a ocupar, es un aproximado y su costo en pesos mexicanos, así como donde conseguirlos.


Minimo
Pieza
Costo $MX
Cantidad
Subtotal
Donde Comprar
Kit de Hélices, Drivers ESC, Motores
2003
1
2003
Arduino UNO
370
1
370
Acelerómetro 3 ejes ADXL335
330
1
330
Sensor ultrasónico Maxbotics
440
1
440
Batería LiPo 2500 mAh 11.1V
920
1
920
Bluetooth BlueSMiRF Gold
850
1
850
Solera Aluminio (Esqueleto Quadcopter)
50
2
100
Tornillos
5
12
60
Total:
5073
























Un paquete como este es lo que necesitaras


Un lindo Arduino UNO. Puede ser cualqueir arduino, siempre que tenga mínimo 4 PWM


Un sensor de proximidad, lo usamos para medir la altura. (Piso -> Quadcopter)

Acelerómetro de tres ejes. Medimos inclinación en vuelo
Batería LiPo de 2500mAh 11.1V. Necesitamos mucha potencia

Bluetootth BlueSMiRF Gold. Para comunicar con la PC. Igual puedes usar cualquier otro medio  (como un XBee...)


domingo, 27 de mayo de 2012

5.- Sensores y primera prueba de elevacion

Bien, para haber llegado hasta este punto necesitas tener:
* Esqueleto del quadcopter con motores, drivers y hélices montados
* Funcionamiento de los 4 motores con un solo PWM mínimo (como se vio en las entradas pasadas) con un Arduino




Para esta entrada se necesita 


* 1 arduino que mínimo soporte 4 PWM (UNO, MEGA etc... que es lo que venimos usando desde la primera entrada):
* 1 Acelerometro de 3 ejes (ADXL335 o cualquier otro que tenga una salida analógica por eje, en México puedes conseguirlo aqui, ese usaremos para este proyecto)
* 1 Sensor de Proximidad con salida analógica (En México puedes conseguirlo aquí, ese usaremos para este proyecto)

Arduino UNO. Usado para este proyecto (Imagen Propiedad de Arduino)

Acelerometro (Sensor de Inclinacion) tres ejes ADXL335 usado en este proyecto. Salida analoga (0 - 3.3V)

Sensor de proximidad ultrasonico Maxbotics usado en este proyecto salida analoga (0 - 5V)
Coloco a continuación el esquemático de las conexiones (pueden usar tanto MEGA como UNO o cualquier otro arduino, solo asegúrense de colocar en un pin PWM la señal al driver del motor y hacer lo cambios en el void setup() del código)


Esquemático para la primera prueba de elevación
Descarga esquemáticos aquí: aquí_pdf, aquí_jpg


Codigo para Arduino:


/*********************************************************************************
*  Hazael Fernando Mojica García, San Nicolás de los Garza, México NL
*  12 de Mayo del 2012
*  Prueba de elevacion 1
*  Licencia GPL 2012
*********************************************************************************/

#include <servo.h>

Servo outrunner1;
Servo outrunner2;
Servo outrunner3;
Servo outrunner4;


int instruccion = 's';
int MAXPWMDC = 2500;
int MINPWMDC = 1300;



void setup()
{
  Serial.begin(115200);
  outrunner1.attach(11);
  outrunner2.attach(10);
  outrunner3.attach(9);
  outrunner4.attach(3);
  
  outrunner1.write(0);
  outrunner2.write(0);
  outrunner3.write(0);
  outrunner4.write(0);  
  
  instruccion = RecibeInstruccion();
  //instruccion = 'c';
}


void loop()
{
  switch(instruccion)
  {
    case 'q':
      Stop();
      instruccion = RecibeInstruccion();      
    break;
    
    case 'c':
      Controla();
      instruccion = RecibeInstruccion();      
    break;
    
    default:
      instruccion = 'q';
    break;
  }
}

void Controla()
{
    int instruc = 's';
    boolean bucle = 1;
    int DC = MINPWMDC;
    
    Serial.println("Controlando");
    Stop();
    //Inicializa();
    Barrido_To_MINPWMDC();
    Serial.println("Presiona 'a' para subir la velocidad, 'z' para bajarla y 's' para salir");
    while(bucle)
    {
      if(Serial.available())
      {
        instruc = Serial.read();
        switch(instruc)
        {
           case 's':
              bucle = false;
            break; 
          
           case 'a':
              DC = DC + 5;
              outrunner1.writeMicroseconds(DC);    
              outrunner2.writeMicroseconds(DC);    
              outrunner3.writeMicroseconds(DC);    
              outrunner4.writeMicroseconds(DC);                  
              Serial.print("Subiendo velocidad ");
              Serial.print("DC: ");
              Serial.println(DC);
            break; 
  
             case 'z':
              DC = DC - 5;
              outrunner1.writeMicroseconds(DC);    
              outrunner2.writeMicroseconds(DC);    
              outrunner3.writeMicroseconds(DC);    
              outrunner4.writeMicroseconds(DC);                  
              Serial.print("Bajando velocidad ");              
              Serial.print("DC: ");              
              Serial.println(DC);              
            break;                     
        }
      }
      LecturaSensores();
    }
}

void LecturaSensores()
{
  int ejeX = 0;
  int ejeY = 0;
  int ejeZ = 0;
  int altura = 0;
  
  ejeX = analogRead(5);
  ejeY = analogRead(4);
  ejeZ = analogRead(3);
  altura = analogRead(6);
  
  Serial.print("EjeX: ");
  Serial.print(ejeX);
  Serial.print(" EjeY: ");
  Serial.print(ejeY);
  Serial.print(" EjeZ: ");
  Serial.print(ejeZ);
  Serial.print(" Altura:");
  Serial.println(altura);  
}

void Barrido_To_MINPWMDC()
{
  int MINPWMDC_aux = 0;
  Serial.println("Inicializando Driver...");
  while(MINPWMDC_aux < MINPWMDC)
  {
    outrunner1.writeMicroseconds(MINPWMDC_aux);
    outrunner2.writeMicroseconds(MINPWMDC_aux);
    outrunner3.writeMicroseconds(MINPWMDC_aux);
    outrunner4.writeMicroseconds(MINPWMDC_aux);    
    MINPWMDC_aux = MINPWMDC_aux + 10;    
    Serial.println(MINPWMDC_aux);
    delay(30);
  }   
}

int RecibeInstruccion()
{
  int instruc = 's';
  
  Serial.println("Presiona 'q' para Stop y 'c' para controlar");
  Serial.print("Recibiendo instruccion: ");
  
   while(1)
  {
     if(Serial.available())
     {
        instruc = Serial.read();
        break;
     }
  } 
  Serial.println(instruc);
  return instruc;
}


void Stop()
{
  Serial.println("Stop, detendiendo, espera...");
  outrunner1.write(0);
  outrunner2.write(0);
  outrunner3.write(0);
  outrunner4.write(0);  
  delay(2000);
}

Codigo aqui.



Bien, sólo les queda conectar y probar.






Coloco a continuación un video de nuestra prueba:




Y unas imágenes:

Se observa nuestro lindo Quadcopter y la fuente de poder usada para pruebas (Las baterías LiPo de 2500mAh estan muy caras).

Nuestro Quadcopter con sensores y todo el rollo. Falto el Modulo Bluetooth





Tags:




  • Arduino
  • Outrunner brushless motor
  • Controlar un outrunner brushless motor con arduino
  • Como controlar un motor sin escobillas
  • Motor sin escobillas
  • Controlar un motor sin escobillas con arduino
  • Como hacer un quadcopter
  • Como hacer mi propio helicoptero

sábado, 19 de mayo de 2012

4.- Prueba con cuatro Outrunner Brushless Motors

Bien, la siguiente fase es no solo poder controlar un solo motor, si no controlar los cuatro.


Para este paso, ya debemos tener cuando menos nuestro esqueleto montado.


Recomendaciones:



  • Probar motor por motor y establecer su sentido de giro correcto asignarle la hélice que le corresponde.
  • Si ya tenemos los cuatro motores montados sobre el esqueleto y ya se estableció su sentido de giro correcto (aquel que permitirá que el quadcopter se eleve sin provocar rotación) hay que soldar los cables
  • Aislar todos los cables y fijarlos bien a la armadura, puede usar una pistola de silicon para esto.

Si ya estas listo, procederemos a probar con un sólo PWM y el programa que usamos en la primera parte.

Por tanto el esquemático nos quedaría de la siguiente manera:

Esquematico para hacer funcionar los 4 motores con un solo PWM
Esquematicos: aqui_pdf y aqui_jpg
Código Arduino: aqui

Coloco a continuación un video de muestra:



Bien, una vez hecha esta prueba supongo estas listo para comenzar a controlar de manera independiente cada motor de tal manera que podamos disminuir o aumentar la velocidad por motor y así poder dar sentidos de giro a nuestro quadcopter.

3.- Colocando motores y hélices

Recordemos un poco de física.

Necesitamos que los torques que ejercerán nuestros motores se eliminen de tal manera que la única fuerza exista en el quadcopter sea la usada para levantarse, aun no queremos que gire sobre su eje. 

Imagen de WikiPedia

Bien, para lograr esto, necesitamos que las hélices, independientemente del sentido de giro que vayan a obedecer (dos en sentido horario y otras dos en sentido antihorario) entreguen una fuerza de ascenso. Esto se logra consiguiendo un par de cada tipo de hélices.

Estas hélices giraran en sentido antihorario, por la forma del aspa  brindaran una fuerza ascendente
Estas hélices giraran en sentido horario, por si forma brindarán una fuerza ascendente

Aquí tenemos el conjunto de cuatro hélices pusher.

Otra vista de las hélices.
Es muy importante tener el tipo correcto de hélices, es decir, un conjunto parecido al de arriba (dos para sentido horario y dos antihorario) es el ideal. Si tienes cuatro hélices exactamente iguales no te garantizo el funcionamiento (la teoría diría que tu quadcopter se elevará pero girará sobre su eje de manera descontrolada).

En la imagen siguiente mostramos de nuevo nuestro esqueleto, se logra apreciar la configuración de las hélices.

Una vez montados los motores estamos listos para cablear si es que no lo hiciste en este paso, y probar los cuatro motores trabajando juntos.

Nuestro diseño de esqueleto con motores y drivers




Quiero aclarar que si bien nuestro diseño es muy ligero, no es es el optimo, recomiendo ampliamente usar un juego de engranes reductores, debido a que el motor gira a velocidades enormes pero el torque que poseen no es suficiente (es alto para el tamaño del motor pero no es suficiente) para levantar fácilmente la estructura.



Por ejemplo, algo parecido al sistema que usa el Ar Drone Parrot:


Imagen de un Ar Drone Parrot (Propiedad de aqui)


Close Up del motor

Juego de Engranes de un Ar Drone Parrot

Motor de un AR Drone Parrot. Incluye driver ESC. Si bien no es el motor con mas torque del mundo, se compensa con los engranes

2.- Construyendo el esqueleto de nuestro Quadcopter

Para poder probar mas de un motor a la vez lo que necesitamos es una base firme, en la cual los motores no vibren y que no existan cortos en los cables, te recomiendo soldarlo una vez tengas todo bien preparado.


Recomendaciones para una buena base o esqueleto para tu quadcopter:

  1. Tiene que ser ligero, lo mas que puedas. Recomiendo aluminio o plástico, sin duda alguna la madera es facil de trabajar pero no es nada ligera y provoca mucha vibración si los motores no están bien sujetos.
  2. Que los brazos del esqueleto no obstruyan el paso del aire de las hélices.
  3. La superficie ideal debajo de los motores es aquella que solo ocupa el espacio exacto de la base del motor. (Permite el paso del aire de las hélices)




A continuación coloco una galería de imágenes de esqueletos que No nos Funcionaron:











Ya sea por una cosa u otra, como estabilidad, PESO, vibraciones etc etc, estos modelos fueron descartados.


Un modelo ideal y a seguir podría ser el del AR Drone Parrot (http://ardrone.parrot.com/parrot-ar-drone/es/), sin duda no es el mejor, pero sí es bueno:


Imagen del puro esqueleto del Parrot

Imagen del esqueleto del Parrot


El esqueleto que al final terminamos construyendo es el siguiente. Esta construido de aluminio y los motores están atornillados y el cableado ya esta soldado:








Comparamos nuestro modelo con el del Ar Drone Parrot



Crea una Fuente de Poder para tus proyectos con una Fuente ATX de PC

Bien, como observamos, el titulo es bastante claro, a partir de una fuente de poder ATX para PC haremos una fuente de poder para nuestros proyectos de ingeniería, una fuente de poder de PC siempre es magnífica para este tipo de cosas puesto que entregan suficiente voltaje, una potencia de 400W lo permiten, y dispone de voltajes que se ajustan al tipo de dispositivos que manejamos:
+ 3.3V
+ 5.0V
+12.0V
-12.0V


Las fuentes de poder ATX solo pueden ser encendidas logicamente por la tarjeta madre de nuestra PC o por un Geek como nosotros porque vamos a truquearla.


Ahora, las fuentes ATX poseen un pin llamado PWR ON, como muestra la imagen siguiente:


Distribucion de pines del conector 24 pin de una fuente ATX ( http://www.arreglamipc.com/la-fuente-de-poder-voltaje-de-los-pins-del-conector-atx-de-24-pins  )


Como el nombre lo dice, es para encenderla, mientras este pin se encuentre aterrizado, es decir, en corto circuito

Por tanto, puente este pin (patita 4 de arriba para abajo lado derecho) de cable verde, con cualquiera de tierra GND cable negro.


Y listo, nuestra fuente de poder debe quedar encendida siempre, coloco unas imagenes a continuación para que te des una idea:


Fuente de poder ATX a usar. Tenemos dos pequeños pedazos de alambre con los que vamos a puentear



Vista del conector de 24 pines de la fuente de poder


Vista del conector



Puenteamos el verde con cualquier negro


Damos unos bellos toques de silicon para que sirva como aislante





Tags:

  • Fuente de poder ATX
  • Eliminador de Baterías
  • Fuente de poder
  • Fuente de poder PC
  • Covertidor de corriente
  • Fuente de poder casera
  • Homemade power supply



Fuentes: