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

27 comentarios:

  1. Hola!
    Mi nombre es Luciano, muchas gracias por el tutorial!
    Tengo una pregunta, quiero probar tu tutorial, pero antes de empezar quiero saber si los materiales que tengo estan bien...

    Lo que me preoupa es si al ser todo bastante potente me funda el Arduino!...

    motor: NTM Prop Drive 50-50 580KV / 2000W

    http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=31045

    ESC: TURNIGY Plush 80A w/ UBEC Speed Controller

    http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=9109

    Y las baterias:
    Turnigy 5000mAh 4S 25C Lipo Pack

    http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=10913

    Y un Arduino UNO...

    de momento se que todo funciona, ya probe el motor con el ESC y las baterias, usando un Servo Tester, y manualmente todo va de maravilla!, pero ahora quiero usar el Arduino, para aprender, y probar si funciona... y ademas en mi proyecto necesitaria controlar la velocidad del motor con el Arduino...


    Bueno gracias!

    ResponderEliminar
    Respuestas
    1. Saludos lucianorueda.

      Recuerda que lo unico que conectas al Arduino es la señal PWM del ESC y la tierra GND. Por tanto no deberías ser capaz de fundir al Arduino (A menos que crees un corto el algún lado o el ESC estuviera dañado).


      Deberías testear sin problemas, y WOW que equipo tienes yo me consigue puros motores chinos =P los tuyos están con madre.

      Para que estés más seguro revisa el esquemático de un ESC (hay muchos y muy diversos) y verás que siempre traen un semiconductor aislante para proteger a tu micro.

      Mucha Suerte y Éxito!

      Eliminar
  2. Hola! Felicidades por el blog y por subir material como este, con respecto a el control de los motores he adquirido un paquete motores,ESC yhelices conecté como lo muestran varios diagramas, el motor en efecto hace el pitido, arranca y puedo variar la velocidad para aumentarla o disminuirla, he hecho apenas unas 2 pruebas con miedo ya que soy relativamente muuuuy nuevo en cuanto a entorno arduino y tambien con los cuadropters, y bueno mis preguntas son:
    1. ¿cual es la velocidad maxima o en este caso el pwm más alto que le puedo dar a mi motor para que trabaje a velocidad tope?
    2.¿El valor del PWM para que mi motor trabaje a velocidad tope depende de la marca y KV del motor? y
    3. Si es asi con que datos de mi motor puedo calcular o estimar el valor de pwm para que trabaje a velocidad tope.

    Trabajo con un motor como este:
    http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=18228

    Conectado a un ESC como este:
    http://hobbyking.com/hobbyking/store/__15205__Hobby_King_30A_ESC_3A_UBEC.html

    Con una bateria LI.po de 7.4 volts a 1000 mamp

    Espero me puedas orientar y muchas gracias.

    ResponderEliminar
    Respuestas
    1. Hola.

      Que lindo motor y ESC, se ven caros.

      Que te puedo decir amigo, me parece que tienes que probar tú mismo, he encontrado varios sitios web que te hablan de cieto DutyCicle para tal o cual velocidad pero no confío en ellos.

      La doc de tu ESC es:
      http://www.hobbyking.com/hobbyking/store/uploads/334491494X548179X1.pdf

      y pues no viene mucho acerca de eso, tienes que probar de manera práctica.

      Yo supongo que como mi motor usando mi código la Máxima velocidad es a un DutyCicle de: 1600 us

      Pero es una suposición

      Eliminar
  3. Hola que tal, buen tutorial amigo, tu programa me sirvio mucho, tengo una duda que quiza tu me puedas resolver, yo estoy armando un tricoptero desde cero y bueno me surgio una inquietud he visto en foros que para cambiar el sentido de giro de un brushless se necesita cambiar los dos cables de los extremos, cosa que he comprobado, sin embargo yo requiero poder cambiar el giro desde la programacion crees que dandole valores negativos a la señal pwm funcione? o tienes alguna idea de como usar esa libreria servo para poder invertir el giro del motor? o quiza se tenga que programar el esc? haha bueno son muchas preguntas, espero me puedas ayudar, de igual manera muchas gracias.

    ResponderEliminar
    Respuestas
    1. Hola.

      Antes que nada. invertir el sentido del motor de una hélice no es una práctica común hasta donde yo tengo entendido.

      Tricoptero ee!!! suena bien, espero puedas publicarlo algún día en algún lado, la única duda que me queda es como compensaras el torque producido por el motor que no tiene pareja para así hacer que en el aire el tricoptero no de vueltas como loco.

      Ahora, definitivamente no podrás invertir el sentido de giro únicamente por medio de software usando hardware convencional.

      Lo más seguro es que necesites ya sea un puente H de estado sólido por el que puedas pasar pulsos PWM o simples relays mecánicos (que es la forma más fácil), esto para poder invertir a tu voluntad la posición de los cables.

      http://www.mcmanis.com/chuck/robotics/tutorial/h-bridge/images/basic-bridge.gif

      De la imagen anterior imagina que tu outrunner es dicho motor y que los cables de los extremos son + y -. De esta manera lograras invertir el giro del motor como si se tratara de un simple motor de directa.

      Saludos.

      Eliminar
  4. Estimado, genial tu blog.

    Estoy en la fase 0.1 de la construcción de mi queadcopter. Pero estoy teniendo problemas para manejar el motor Brushless con el Arduino. Mi problemas es que cuando utilizo mi motor sin la hélice, este puede girar indefinidamente en la velocidad que programo, sin embargo, cuando le pongo la hélice (26cm de largo total) solo gira alrededor de 5 segundos y se detiene, es como que cuando pongo la hélice el motor se "cansa" y se detiene por si solo después de algunos segundos.

    *Circuito:
    https://drive.google.com/file/d/0B0qQBJc-C9h8NC1kNV80TTFVWGM/edit?usp=sharing

    *Estos son mis materiales de experimentación (al final el código arduino):

    - ESC Mystery 80A (http://dx.com/p/80a-brushless-electric-motor-speed-controller-for-r-c-helicopter-boat-car-120467#.Uwat9Wf0y00)

    - Brushless KV2500 (http://dx.com/p/kv2600-brushless-exterior-rotor-motor-outrunner-motor-yellow-154905#.Uwat8Wf0y00)

    - Hélice (http://dx.com/p/10-x-4-5-1045-rotating-shaft-propellers-for-multi-copter-black-2-pair-123222#.Uwat7mf0y00)

    - La energía la obtengo desde un transformador que entrega 12v. (http://e.kotear.pe/images/255098/adaptador-universal-transformador-toyoba-3v-a-12v-1322060125.jpg)

    *Código:

    #include
    #define PINMOTOR 9 //pin conectado al ESC, en este caso CH_5 en ARDUPILOT corresponde al pin 8
    #define MAXIMOPWM 150 // Son grados Podia llegar hasta 180,paramas seguridad lo dejo bajo
    #define MINIMOPWM 40// por si acaso empezar con un valor inferior, mi motor no arranca hasta 47 y 48
    #define PASO 1 // Incrementos del teclado
    #define BAUD 9600 //velocidad puerto serial funciona hasta 38400

    int pulsoMotor;
    int ordenTeclado=0;
    Servo myservo; // creamos el motor como elemento en la libreria
    byte recibiendoByte ;
    boolean iniciado = false;
    void setup()
    {
    Serial.begin(BAUD);
    myservo.attach(PINMOTOR); // inicializo el ESC en el pin determinado
    Serial.println(" Comienzo del test"); //
    Serial.println (" Pulsar 'A' para arrancar \n Cuando escuche el pitido de confirmación");
    while ( iniciado==false ){
    myservo.write(0); // Aramado
    recibiendoByte = Serial.read(); // Leemos el Byte recibido
    if (recibiendoByte == 65 || recibiendoByte ==97) { // A o a Mayusculas o minusculas
    iniciado=true;
    }
    }
    Serial.println("inicio del loop principal \n Para subir controlar velocidad pulse \n 'A' para subir \n 'Z' para bajar \n 'S' para terminar Stop \n");
    }

    void loop(){

    ordenTeclado =OrdenSubirBajar ();

    if (ordenTeclado != 0) { // entra solo si se ingreso un valor por teclado
    pulsoMotor = pulsoMotor + ordenTeclado;

    pulsoMotor= constrain( pulsoMotor , MINIMOPWM, MAXIMOPWM); // mantiene pulseMotor entre el minino y maxim
    myservo.write(pulsoMotor); //Mientras no hay cambios,automaticamente se siguen enviando los mismos pulsos
    Serial.println("cambie la velocidad");
    }

    Serial.print("Velocidad del pulso--> ");
    Serial.println (pulsoMotor);
    delay (200); //delay para no colapsar

    }

    int OrdenSubirBajar (){
    int orden=0;
    //Serial.flush();//-- Limpiamos el Bufer de entrada (evitar efecto ametralladora)
    //delay (150); //--

    if (Serial.available() > 0) {// Se entra a este if solo si se presiono una tecla
    recibiendoByte = Serial.read(); // Leemos el Byte recibido
    Serial.print("---- ------arecibiendoByte: ");
    Serial.println(recibiendoByte);

    if (recibiendoByte == 65 || recibiendoByte ==108) { // A o A Mayusculas o minusculas
    Serial.println( " SUBIR");
    orden = PASO;
    }
    if (recibiendoByte == 90 || recibiendoByte ==122) { // Z o z Mayusculas o minisculas
    Serial.println( " BAJAR");
    orden = -PASO;
    }
    if (recibiendoByte == 32){ // barra espaciadora
    Serial.println( " Stop!!: ");
    orden = -(pulsoMotor- MINIMOPWM); // Deja el pulso en MINIMOPWM
    Serial.println(orden);
    }
    }
    return (orden);
    }

    ResponderEliminar
    Respuestas
    1. La verdad suena tal y como comentas tú, el motor está sobrecargado (más que el motor, la fuente de energía) y no quiere avanzar más.

      Prueba la corriente que le llega con un multímetro, mide el consumo que pide el ESC (coloca el multimetro en el circuito para medir la corriente, entre el ESC y tu fuente).

      Si la corriente aumenta demasiado es posible que tu fuente no esté suministrando la energía necesaria (tendrías que usar algo más potente) al ESC y termina apagándose.

      Usa una fuente de PC que dé más de los 500mA que da tu cargador universal (mínimo unos 1100mA vas a usar).

      Me comentas a que conslusión llegaste.

      Saludos.

      Eliminar
    2. Estimado, tienes razón, conecté el motor brushless a una fuente de poder de computador y me funcionó perfectamente, ahora trabaja indefinidamente. Es claro que si bien tenia los 12 volt que me pide el motor, me faltaba amperaje, puesto que necesita por lo menos 1,2 amperes.

      Eliminar
    3. Así es Cristian, una fuente de poder de Computadora (que son de aprox. 500W) es lo suficiente para hacer funcionar el motor. Ahora, las baterias LiPO que hay en el mercado son de 1100mAh, checalas, lo sí es que no son baratas.

      Eliminar
  5. Amigo, Si tengo un Motor Turnigy 2204 14t , con un ESC de 10A, cuanta tension o voltaje, debo aplicarle a un solo motor para realizar la primera prueba de funcionamineto de un motor, y a futuro , cuanto eh de aplicarle a los 4. gracias . y este blog en verdad me encanto, Lo tiene Todo ,y en Verdad Lo Has Hecho Genial.

    ResponderEliminar
    Respuestas
    1. Hola Jefferson, suponiendo que este es el motor:
      http://www.hobbyking.com/hobbyking/store/__6547__turnigy_2204_14t_19g_outrunner.html

      Las especificaciones dependen mucho del ESC por igual, cual es el que usas, suponiendo usas uno que se adapte bien a tu motor y viendo las caracteristicas de tu motor:

      Ocupa un Voltaje de 11V, consumira Max 7.5A.
      Para mover un motor por tanto (11V)*(7.5A) = 82.5W

      Para mover 4 motores (11V)*((7.5A)*(4)) = 330W

      Los datos anteriores no son 100% reales, el consumo del motor depende obviamente de su velocidad, y estamos hablando que no consumirian los 7.5A siempre (se queman O.O) hablamos de un consumo de 3A nominal Maximo. Lo mejor es que tomes un Multimetro y veas la variacion de la corriente conforme aumentas/disminuyes la velocidad.

      Espero te sirva.
      Un Saludo.

      P.D. :D Me gusta que les guste... (mi blog obviamente)

      Eliminar
    2. Pues mi hermano, Uso un Esc10A , pero pues auno no me arriesgo a meterle corriente ah eso hasta no informarme bien, y pues no se si sirva un cargador universal, de esos que tienen diferentes clavijas, y especificaciones del cargador :
      OUTPUT : DC 1.5 - 12 v 1000mAh max. Model: NS-79MK2, estaria bien si aplico con este los 11v .?? gracias.

      Eliminar
    3. Podrias probar, pero definitivamente en velocidades bajas, el ESC que tienes es potente y demandara mucha corriente, definitivamente pondra a trabajar al tope tu cargador y cuando llegue el punto en que el motor necesite mas velocidad (y mas poder por ende) y no lo pueda obtener, se apagara.

      Pruebalo, pero no lo recomiendo para un uso prolongado. No explotara ni nada (en el peor escenario solo se derretira como chicle si lo dejas mucho tiempo trabajando continuo ejem. +30min).

      Y NUNCA inviertas la polaridad (conectar + donde es - y viceversa), podrias quemar el ESC =(.

      Eliminar
    4. Bien, mi hermano, al parecer funciona con los 11v perfectamente, pero permanece sonando sin que inicialize el monitor serial, y oviamente no tendria la opcion de controlarlo, porque sera esto?,
      otra cosa es cuando inicializo el monitor serial, me inicia de una vez en la parte de controlando, inicializando driver, y no funciona,y luego comienzo a aumentarle la velocidad, y debes en cuando entre los 1800- 2000 , reacciona pero muy poco y se detiene. Podria Ayudarme con eso, que error puede suceder,
      y Por ultimo :D , con la formula que hiciste (11V)*((7.5A)*(2)) = 165W, eso consumiria, pero aun asi puedo aplicarle los 11 voltios alos dos motores, o debo aumentarle.? gracias por tu ayuda.

      Eliminar
    5. En lo que corresponde al Sketch del Arduino puedo decirte que no hay errores, ya ha sido testeado por muchas personas.

      Y como te lo habia predicho, tu motor se apaga porque la fuente de poder que usas no da suficiente corriente, necesitas algo mas potente, desarma alguna PC vieja, o compra una Fuente de Poder para PC nueva, no son demasiado caras, aprox. 20 Dollar aprox = $300 MXN = 38,437 Peso Colombiano.

      El motor pide 11V, no puedes meterle mas de eso o lo quemas, lo que haces es colocar los dos motores (o los 4) en paralelo, asi reciben el mismo voltaje, la corriente en cambio es dividida entre cada uno, y por tanto ocuparias 7.5A mas por cada motor que uses.

      Eliminar
  6. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  7. Me ha sido de mucha ayuda, funciona muy bien. Muchas gracias

    ResponderEliminar
  8. disculpa pero soy nuevo en esto y no entiendo muy bien como mandar las ordenes al motor

    ResponderEliminar
    Respuestas
    1. Controlas la velocidad del motor por medio del DutyCicle del PWM que mandas.
      http://arduino.cc/en/Tutorial/PWM

      Eliminar
  9. hola como estas, primero que todo felicitarte por este excelente blog, amigo quería preguntarte algo sobre mi código tengo un montaje de 4 motores brusless con sus respectivos ESC y una batería de lipo, he conseguido que funcionen los motores pero nunca me funcionan los cuatro motores al mismo tiempo, avances solo me funcionan dos y los otros dos no funcionan, o me funcionan todos pero luego e un momento se detiene un motor, me podrías regalar tu correo para ponerme en contacto con usted o si tendría un facebook seria mejor para crearnos un grupo y poder colaborar en este proyecto soy estudiante de universidad pero tengo grandes avances en el proyecto del quadcopter, te adjunto el código que estoy corriendo:


    #include
    #define PINMOTOR 8 //pin conectado al ESC, en este caso CH_5 en ARDUPILOT corresponde al pin 8
    #define MAXIMOPWM 150 // Son grados Podia llegar hasta 180,paramas seguridad lo dejo bajo
    #define MINIMOPWM 40 // por si acaso empezar con un valor inferior, mi motor no arranca hasta 65
    #define PASO 1 // Incrementos del teclado
    #define BAUD 9600 //velocidad puerto serial funciona hasta 38400

    int pulsoMotor;
    int ordenTeclado=0;
    Servo myservo; // creamos el motor como elemento en la libreria
    byte recibiendoByte ;
    boolean iniciado = false;
    void setup()
    {
    Serial.begin(BAUD);
    myservo.attach(PINMOTOR); // inicializo el ESC en el pin determinado
    Serial.println(" Comienzo del test"); //
    Serial.println (" Pulsar 'A' para arrancar \n Cuando escuche el pitido de confirmación");
    while ( iniciado==false ){
    myservo.write(0); // Aramado
    recibiendoByte = Serial.read(); // Leemos el Byte recibido
    if (recibiendoByte == 65 || recibiendoByte ==97) { // A o a Mayusculas o minusculas
    iniciado=true;
    }
    }
    Serial.println("inicio del loop principal \n Para subir controlar velocidad pulse \n 'A' para subir \n 'Z' para bajar \n 'S' para terminar Stop \n");
    }

    void loop(){

    ordenTeclado =OrdenSubirBajar ();

    if (ordenTeclado != 0) { // Distinto de Cero
    pulsoMotor = pulsoMotor + ordenTeclado;

    pulsoMotor= constrain( pulsoMotor , MINIMOPWM, MAXIMOPWM); //
    myservo.write(pulsoMotor); //Mientras no hay cambios,automaticamente se siguen enviando los mismos pulsos
    Serial.print("Velocidad del pulso--> ");
    Serial.println (pulsoMotor);
    }

    delay (150); //delay para no colapsar
    }

    int OrdenSubirBajar (){
    int orden=0;
    // Serial.flush();// Limpiamos el Bufer de entrada (evitar efecto ametralladora)
    //delay (150);

    if (Serial.available() > 0) {
    recibiendoByte = Serial.read(); // Leemos el Byte recibido
    if (recibiendoByte == 65 || recibiendoByte ==97) { // A o A Mayusculas o minusculas
    Serial.println( " SUBIR");
    orden = PASO;
    }
    if (recibiendoByte == 90 || recibiendoByte ==122) { // Z o z Mayusculas o minisculas
    Serial.println( " BAJAR");
    orden = -PASO;
    }
    if (recibiendoByte == 83 || recibiendoByte == 115){ // t o T Mayusculas o minisculas
    Serial.println( " Stop!!");
    orden = -(pulsoMotor- MINIMOPWM); // Deja el pulso en MINIMOPWM
    }
    }
    return (orden);
    }

    ResponderEliminar
    Respuestas
    1. Por lo visto ya tienes perfectamente bien conectaso todo y estas corriendo bien mi código. Lo que sucede ahora es que no tienes suficiente energía, quita esa batería Lipo y pon una fuente de poder de mayor wattage, una fuente de PC o alguna de laboratorio, mínimo de 2A para las pruebas.
      Mi correo es mojica.hazael@gmail.com y en face buscame como Hazael Mojica.
      Saludos.

      Eliminar
    2. Amigo mira lo que pasa es que yo reemplace la batería que utilizaba ya que era una batería de lipo de 1000mA a 7.4v, pero ahora la remplace por una fuente de voltaje de 7.4v con 2000mA pero me surge el mismo error, claro esta si se nota una pequeña mejora pero me surge el mismo error de que todos los motores no arrancan al tiempo y se detienen por momentos, si es posible yo grabo un vídeo y te lo envío para que te des cuenta de lo que pasa me parece que es un problema de código o de los delay en el armado o al mandar un servo.write eso pienso que es. pero he revisado miles de veces el código y no consigo mejora alguna, tambien acabe de adquirir hace unos dias una batería de lipo de 2200mA a 7.4 v pero no consigo ver buenos resultados sigo con el mismo error , mira te adjunto este link donde están los detalles del fuselaje con los motores que estoy utilizando para que te hagas una idea sobre ello:

      http://www.mundorcx.com/promociones/5074-mini-quadcopter-frame-with-motors-550mm.html

      Tambien a quien le interese compartir información o códigos sobre quadcopters me podrian agregar a facebook este es mi perfil

      https://www.facebook.com/alvarodaniel.erazo

      Eliminar
    3. Problema raro.
      Te recomiendo escribir un pequeño código para el Arduino con el que puedas encender/apagar cada motor de manera manual.

      Y así comiences a probar de manera individual cada motor.
      Si todo marcha bien con un solo motor, enciende el segundo y así sucesivamente.

      Si en algún momento al encender un motor alguno de los que estaba funcionando se apaga, o el que tratabas de encender simplemente no arrancó, significa que sigues teniendo problemas de falta de energía.

      Recomiendo colocar un multímetro midiendo la corriente que va de tu fuente de poder a los 4 motores, cada vez que enciendes un motor el consumo de corriente debería aumentar, si cuando enciendes un motor la corriente medida NO aumenta y vez que algún motor FALLA, entonces insisto, es problema de alimentación (tu fuente no está dando el ancho).

      Eliminar
  10. Hola, me gustaría controlar un motor DC de un helicoptero RC con arduino pero no sé cómo hacerlo, me podrías apoyar con eso?, gracias de antemano.

    ResponderEliminar
  11. buenazo el código ,pero estoy intendo para tres motores y no me sale algun consejo porfa

    ResponderEliminar
  12. muy buenaazo el codigo,pero estoy intendo poner este coadigo a tres motores y no me sale ,algun consejo

    ResponderEliminar