Mostrando entradas con la etiqueta Quadcopter. Mostrar todas las entradas
Mostrando entradas con la etiqueta Quadcopter. Mostrar todas las entradas

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



sábado, 10 de marzo de 2012

1.- Controlar un outrunner brushlees motor.

Buenos días queridos lectores, el día de hoy vamos a controlar un motor sin escobillas tipo outrunner.


Antes que nada, para que queremos hacer esto?, bien, estos motores son muy usados en aplicaciones que requieren altos torques, altas revoluciones y un tiempo de vida alto. Es decir, para aplicaciones exigentes, por tanto estos motores son caros en comparación con cualquier motor de corriente directa normal. Son usados para muchas aplicaciones, desde lectores/quemadores de CD, avioes y helicopteros de hobbie, aeroplanos, etc...


Como esta entrada es parte de una serie de entradas que tienen el fin de construir un quadcopter vamos a hacer esto lo más sencillo y entendible posible.








Material:

  • Arduino (cualquier modelo, Uno, Mega ...) o un micro con PWM
  • Un outrunner brushless motor (Como este)
  • Un driver para brusless motor (ECS o BEC, puede ser como este)
  • Una fuente de energía de alta potencia, un cargador de minimo 500mA servirá, o una batería lipo (como esta). Pero te recomiendo mucho también que si tienes la oportunidad construyas esto ( http://hzsquare.blogspot.mx/2012/05/crea-una-fuente-de-poder-para-tus.html ), te servirá mucho.

Bien, si lo que quieres actualmente es documentarte para decidir si en verdad te convence armar un quadcopter o cualquier helicoptero, recomiendo este kit, que incluye casi todo lo necesario (aqui).

Este tuto esta orientado a controlar el motor por medio de arduino, pero si tu posees otro microcontrolador con salidas PWM también puedes seguirlo. Por desgracia sólo coloco codigo de arduino en esta entrada, espero puedas traducirlo tu al de tu microcontrolador y si gustas compartirlo conmigo para hacer mas completa esta entrada.





1.- Conectando todo
Coloco a continuación el esquemático de conexiones:




Coloco otro esquematico mas en vivo:


Esquemático.




Esquemático en Vivo
Descarga Esquematicos: aqui

2.- Como funciona


El funcionamiento de un motor outrunner brushless es el siguiente:



  1. Inicializar Motor
    1. Mandar un pulso PWM de cierto DutyCicle (por lo general 0us, pero varía con el motor)
    2. El motor dará uno o dos pitidos cuando esté inicializado
  2. Mandar el pulso PWM para la minima velocidad
  3. Si se requiere aumentar la velocidad, aumentarla de manera gradual.
  4. Si se requiere bajar la velocidad, disminuirla de manera gradual.

De manera general un motor tiene las siguientes características:
  • Su mínima velocidad se consigue alrededor de los 1100 us (microsegundos)
  • Su máxima velocidad se consigue al rededor de los 1600 us (microsegundos)
  • Para invertir el sentido de giro  basta con intercambiar dos de los cables entre el motor y el driver (yo recomiendo los dos de los extremos)


3.- Programar Arduino


Coloco a continuación un skecth de Arduino testeado y probado para funcionar con diferentes tipos de motores:

/*********************************************************************************
*  Hazael Fernando Mojica García, San Nicolás de los Garza, México NL
*  6 de Marzo del 2012
*  Control de Velocidad de un Outrunner Brushless Motor
*  Licencia GPL 2012
*********************************************************************************/

#include <Servo.h>

Servo outrunner;
int instruccion = 's';
int MAXPWMDC = 2500;
int MINPWMDC = 1200;



void setup()
{
  Serial.begin(115200);
  outrunner.attach(13);
//  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;
              outrunner.writeMicroseconds(DC);             
              Serial.print("Subiendo velocidad ");
              Serial.print("DC: ");
              Serial.println(DC);
            break;
 
             case 'z':
              DC = DC - 5;
              outrunner.writeMicroseconds(DC);                           
              Serial.print("Bajando velocidad ");             
              Serial.print("DC: ");             
              Serial.println(DC);             
            break;                    
        }
      }
    }
}


void Barrido_To_MINPWMDC()
{
  int MINPWMDC_aux = 0;
  Serial.println("Inicializando Driver...");
  while(MINPWMDC_aux < MINPWMDC)
  {
    outrunner.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, 'i' para inicializar 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...");
  outrunner.write(0);
  delay(2000);
}


Cabe aclarar que para poder controlar de una manera eficiente los pulsos PWM se recurre a la libreria Servo de arduino, la cual permite crear una instancia de la clase Servo y usar en ella el DutyCicle correspondiente en microsegundos por medio de la función writeMicrosecods.



4.- Testeando


Coloco el siguiente video que muestra el motor en funcionamiento:












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

0.- Principal Quadcopter

En construcción...


Bien, buenos días a todos, las siguientes entradas corresponden a un nuevo proyecto que estoy llevando acabo en mi facultad, se tratan del diseño y construcción de un quadcopter. Espero les guste, trataremos de que la documentación aquí presentada esté lo suficientemente completa para que cualquier persona pueda hacerlo.






=)


Material en General:




Quadcopter por Pasos:


  1. Controlar un outrunner brushlees motor.
  2. Construye Tu Esqueleto
  3. Colocando hélices y motores
  4. Prueba con cuatro Outrunner Brushless Motors
  5. Sensores y primera prueba de elevación


























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