miércoles, 9 de julio de 2014

Arduino: Control de un motor con velocidad variable.

Qué pasa gente? Aquí os traigo una nueva curiosidad si estáis empezando en Arduino. Si queréis hacer algo con motores, lo primero que notaréis es que el motor corre a una velocidad exagerada. Hoy aprenderemos a controlarla con un sencillo programita. Para ello utilizaremos los pines PWD (los que tienen un signo ~ junto al número) pues éstos nos permiten variar la velocidad. Antes de nada os dejo un video del proyecto, para que veais cómo va:

El esquema que usaremos será el siguiente:

Conexiones.
Por si no se ve bien, el amarillo va a la salida de 5V, el negro al GND y el verde a la salida ~3.
Ahora os dejo el código:

int motor=3;     //Declara Pin del motor

void setup() {
  Serial.begin(9600); 
  Serial.println("Eliga de 0 a 9 la velocidad de giro del motor");
}


void loop() {

  // Si hay algun valor en la Consola Serial
  if (Serial.available()){

    //Variable donde se guarda el caracter enviado desde teclado
    char a = Serial.read();

    // Si el caracter ingresado esta entre 0 y 9
    if (a>='0' && a<='9'){ 

      //Variable para escalar el valor ingresado a rango de PWM
      int velocidad = map(a,'0','9',0,255);
      //Escritura de PWM al motor
      analogWrite(motor,velocidad);
      //Mensaje para el usuario
      Serial.print("El motor esta girando a la velocidad ");
      Serial.println(a);

    } else { 

      Serial.print("Velocidad invalida");
      Serial.println(a);

    }
  }
}

Como veis no es nada demasiado complicado. Una vez hecho tenéis que abrir la consola desde el programa de Arduino (Herramientas->Monitor Serial ó Control+Mayus+M).

Eso es todo. Espero que os hayais enterado bien y hasta la próxima.
Saludos;)

64 comentarios:

  1. Podrias decirme que Transistor ocupas??

    ResponderEliminar
    Respuestas
    1. La verdad es que lo único que recuerdo es que era un NPN de los más normalitos. El primero que pillé a mano puesto que como tampoco no es algo que requiera de mucha exactitud...
      Saludos;)

      Eliminar
  2. ya sabes que transistor se ocupa en esta práctica

    ResponderEliminar
  3. De cuanto es la resistencia?
    De cuanto es el motor DC? Puede funcionar con un motor mas grande y solo pasándole el voltaje del arduino?

    ResponderEliminar
    Respuestas
    1. La resistencia es de 10k.
      El motor de 80mA
      Lo del motor grande depende. La potencia máxima de salida del Arduino no es muy elevada. Infórmate bien antes de elegir motor. (Salida máxima de Arduino: 200mA en total).
      Saludos;)

      Eliminar
  4. use un npn 2n3904 y un motor de los de las unidades de CD y no me funciona, cual será el problema?

    ResponderEliminar
    Respuestas
    1. El 2N2222 (800mA) tiene una corriente maxima de colector mayor que el 2N3904 (200mA).
      Por tanto, si la corriente de entrada supera los 200mA no puedes usar el 2N3904.

      Saludos;)

      Eliminar
  5. Yo también usé un 2n3904 (no tenía otro) y lo que sucede es que los valores son muy mínimos, igual varía pero muy poco, le saqué la resistencia y le conecté un motor de celular (el vibrador) y ahí funciona.

    ResponderEliminar
  6. la pregunta ahora sería cómo hacer lo mismo pero con un motor más grande usando una batería externa obviamente???

    ResponderEliminar
  7. hola la imagen no se ve me la puedes mandar

    ResponderEliminar
    Respuestas
    1. Hola Jorge.
      La imagen sigue activa. Prueba con otro navegador o limpia las cookies..

      Saludos;)

      Eliminar
  8. no me funciona y el transistor se calienta... por que sera???

    ResponderEliminar
    Respuestas
    1. Como no me des más datos poco puedo hacer..
      Revisa las intensidades, ponle un ventilador si con el verano hace demasiada calor...

      Saludos;)

      Eliminar
  9. Buenas amigo quiero hacer eso con un motor dc usando el 2N2222 para controlar la velocidad y el puente H para controlar dirección del motor al mismo tiempo agradezco tu ayuda de antemano

    ResponderEliminar
  10. No me funciona, lo hice tal cual, pero el motor no gira

    ResponderEliminar
    Respuestas
    1. No puedo ayudarte con los datos que me das. Lo siento :s

      Eliminar
    2. Porque cuando bajo la velocidad se escucha un ruido del motor(si gira lento), es un motor DC a 12 V, alimentado con un l293d y una pila de 9V a 200mAh. Como puedo solucionar el ruido.

      Eliminar
    3. Buenas. A mi también me pasa pero supuse que se debería a que el motor no recibe potencia suficiente para echar a andar. Pienso que la forma más simple de solucionarlo es no permitir (en el código) que llegue a valores tan bajos de potencia.

      Ensayo y error.

      Saludos;)

      Eliminar
  11. hola amigo, gracias por compartir tu trabajo y proyecto consulta ya se que usarte un transistor npn 2n2222, pero me gustaria saber la conecion del mismo osea el COLECTOR, BASE Y EMOSOR, y cual de ellos va al motor, cual va al arduino y cual va a la resitencia, y lo otro como podria modificar tu codigo para que no se digamos que cada un segundo se valla elevando el voltaje hasta llegar al maximo y luego bajar por dar un ejemplo , saludos de nuevo y gracias

    ResponderEliminar
    Respuestas
    1. Buenas. A tu primera pregunta: https://www.google.es/search?q=emisor+base+y+colector+2n2222&rlz=1C1MSIM_enES598ES598&espv=2&biw=1920&bih=955&tbm=isch&tbo=u&source=univ&sa=X&ved=0ahUKEwjSg7_xq6TJAhVFtRQKHdkxCxMQsAQIHw

      Y a la segunda, si no sabes hacerlo aún deberías seguir aprendiendo primero a programar. En poco tiempo verás como eres capaz de hacerlo solo y no es complicado ;)

      Saludos.

      Eliminar
  12. Hola amigo, e consegido que tu proyecto me funcione.
    Gracias por la informacion. Mi pregunta es ¿como y donde puedo conectar un potenciometro para poder regular la velocidad y como deberia poder conectar una bareia mas grande como de 24v para mover un motor mas grande o un motor brusles.
    Gracias.

    ResponderEliminar
  13. hola
    lo hize con un transistor de 2n2222, una resistencia de rojo,rojo,cafe,cafe, y un mortor de 3v que hago no me funciona????

    ResponderEliminar
  14. siempre gira a la misma velocidad sin importar el numero que le indique

    ResponderEliminar
  15. Hola amigo, estoy usando un arduino mega, y un motor bipolar de 24v, como puedo invertir el giro sin utilizar el potenciometro, las variables que debo de controlar son velocidad y giro, saludos buena pagina

    ResponderEliminar
    Respuestas
    1. https://es.wikipedia.org/wiki/Puente_H_(electrónica)

      Un botoncito que alterne entre marcha adelante y marcha atrás.

      Saludos;)

      Eliminar
  16. hoye si me funciono con el 2n2222, utilize una resistencia de 1k, leei que decias en un comentario que la utilizavas de 10k, pero a lo que distingui en tu video tenias cafe negro rojo dorado que equivale a un kilo, bueno a lo que bengo es a esto: el motor ase un ruido cuando lo inicio en 1 al igual que el 2,3,4,5,6 pero parese que el voltaje del arduino le es muy pequeño al motor porque solo con 7,8,y 9 gira pero no con mucha fuerza, mi motor es uno chikito de echo creo que es igual que el que usas en el video, nesesito fuerza en el motor me podrias dar un consejo o ayudarme porfabor? sde te agradece tu atencion, pense que proporcionando voltaje con una pila de 9v alomejor funcione pero no quiero quemar el arduino como conectaria la pila y si es nesesario?

    ResponderEliminar
    Respuestas
    1. yo he conectado un conector a parte de 9v y igual como si nada

      Eliminar
  17. Esta practica se puede hacer con motor a pasos bipolar?

    ResponderEliminar
  18. Me funciono perfecto, pero quisiera saber como seria la programacion para dos motores es un problema que tengo y no se programacion

    ResponderEliminar
    Respuestas
    1. Depende de si quieres mover los dos a la vez o cada uno por su cuenta.

      En el primer caso con conectar ambos en paralelo debiera funcionarte perfectamente (Dándole el doble de corriente si de veras quieres que ande).

      En el segundo caso, con repetir el experimento en dos partes separadas de la placa es más que suficiente.

      Saludos;)

      Eliminar
    2. Puedo hacer el puente h con relay ?? y quiero agregarle unos push boton sin modificar la programacion se puede ?

      Eliminar
  19. Buen aporte Felicidades y gracias amigo :)

    ResponderEliminar
  20. Como controlo el giro de un servo motor continuo en un puerto serie, y también como paro el giro del servomotor con el puerto serie.
    Me pueden ayudar es que no se nada de programación.

    ResponderEliminar
  21. Muy buena ,oye se puede hacer con un IRF640??

    ResponderEliminar
  22. amigo me gustaría saber si podrás programarlo con un temporizador
    que cada sierto tiempo ... si puedes me dices ... gracias buen aporte

    ResponderEliminar
  23. buenas amigo como hago para que el motor se detenga después de cierto tiempo gracias por la ayuda

    ResponderEliminar
  24. Buenas tardes como puedo hacer para detener el motor luego de un tiempo que yo lo quiera

    ResponderEliminar
  25. Hola, si quiero usar un motor de 12v como tendría que hacer?Gracias

    ResponderEliminar
  26. Hola como estas, yo soy nueva en este campo. mi pregunta es la siguiente, Cual es la finalidad del transistor ya que he visto otros vídeo en los que conectan el motor directo al arduino y de igual forma funciona

    ResponderEliminar
  27. buenas quisiera hacer este mismo circuito pero controlado con c++

    ResponderEliminar
  28. una pregunta en el caso de que valla a usar un mosfet seguiria siendo la misma programacion o tedria que hacer otra

    ResponderEliminar
  29. hola muchas gracias por tu explicacion, hoy es mi primer dia con arduino, podrias explicarme la linea int velocidad = map(a,'0','9',0,255); entiendo que si pones 0 su valor sera 0 y si pones 9 sera 255, pero como sabe el programa que valores son para 1,2,3,etc, no se si se entiende mi pregunta, osea como se que valor es si le das un 5 por ejemplo

    muchas gracias por tu posible respuesta

    ResponderEliminar
  30. Buenas tardes tengo una pregunta tengo un arduino nano con el EL MOTOR PASO A PASO 28BYJ-48 y como lo programo para que gire en un sentido y pare cada 120 grados durante un tiempo y luego arranque gracias

    ResponderEliminar
  31. buenas tardes tengo un arduino nano y EL MOTOR PASO A PASO 28BYJ-48 y lo quiero programar para gire en un solo sentido y pare cada 120 grados durante un tiempo y lugo arranque gracias.

    ResponderEliminar
  32. Hola. se puede cambiar el valor que lo ingresas manual por unu automatico? por ejemplo un termometro. Ej: cuando el termometro marca un valor de 15 grados que se ponga automatica mente en 1. se puede?
    Gracias

    ResponderEliminar
  33. Hola soy un autentico inculto en este tema. soy tecnico de iluminación de espectaculos. utilizo el protocolo dmx512 mediante consola para comunicarme con las diferentes luminarias de las que dispongo. ahora quisiera Armar un motor para controlar unas cortina (apertura y cierre lateral) no quisiera utilizar un motor con su cuadro de mandos convencional ya que tendria que cablear hasta la cabiba todo el cuadro, y si ademas utilizo varios motores para otras aplicaciones me es demasiado costoso. he pensado (ya que la consola controla los motores de los diferentes aparatos) que pueda tambien controlar mediante un o varios canales el motor que haga esta función. no se por donde empezar, si hay que tener un driver, como se programa este driver, con que soft, que hardware se usa? si alguien ó tú me puedes ayudar, ruego me ilumines. enviadme algún videotutorial, o algunas nociones por donde empezar.

    ResponderEliminar
  34. Hola amigo como le puedo adicionar un sensor de luz al proyecto me puedes ayudar gracias.

    ResponderEliminar
  35. Una pregunta. Con este circuito y la programación Arduino adecuada se podría variar la velocidad del motor de forma que tengamos el motor girando diferentes tiempos a diferentes velocidades?

    Muchas gracias. Es muy interesante la edición.

    ResponderEliminar
  36. hermano me gustaria saber como puedo hacer que cambie la velocidad de los motores pero en ves de escribirlos en la pantalla poder pulsar un push y cambien de velocidad digamos uno de un push para lento y uno para rapido.

    ResponderEliminar
  37. amigo como podria hacer un escalamiento de 0.2 a 5 volt con pwm pero con pulsadores

    ResponderEliminar
  38. Saludos y buen proyecto e sio mi primera prueba con arduino mega y a sido excelente gracias.

    ResponderEliminar
  39. de cuantos voltajes es tu motor amigo?

    ResponderEliminar
  40. Es necesario tener una laptop o una computadora para que funcione???

    ResponderEliminar
  41. Hola Ayuda

    Utilizo el codigo y lo monto y cuando abro el "Monitor Serie" y elijo la velocidad me dice que la velocidad es invalida y no puedo girar el motor

    Estoy utilizando un TIP120

    ResponderEliminar
  42. Ayuda estoy conectando todo tal cual como en el diagrama y me sale dentro del Monitor "Numero invalido" asi que el motor no gira, pense que podria ser algo de potencia pero lo conecte directamente a 5V y funciona

    Estoy utilizando un TIP122, espero me puedas ayudar

    ResponderEliminar
  43. hola, copie los codigos igual, me sale velocidad invalida a que se debe

    ResponderEliminar
  44. se puede instalar con sensor tcs3200 con el motor y como

    ResponderEliminar
  45. que tal amigo, como aria si le quiero poner un led ?
    no se mucho de electrónica, alguien podría indicarme como hacerlo?
    es para un laboratorio escolar.

    ResponderEliminar
  46. Hola como estas, no me estaba funcionando. Lo arme para probar con un motor de 4.5v y nada me salia "El motor esta girando a la velocidad 9
    Velocidad invalida". dando vueltas y vueltas le saque la resistencia y funciona muy bien. Gracias.

    ResponderEliminar
  47. como puedo resolver lo de "velocidad invalida"?

    ResponderEliminar