En este artículo, abordaremos el mundo práctico y técnico de los motores eléctricos, una pieza clave en numerosas aplicaciones de ingeniería y robótica. Nos centraremos en cómo estos dispositivos pueden ser efectivamente controlados usando Arduino, un microcontrolador ampliamente utilizado, y cómo podemos interactuar con ellos a través de interfaces desarrolladas en Java.
Desde los fundamentos de los motores hasta su integración en sistemas más complejos, este post está diseñado para ofrecer una comprensión clara y aplicable de cómo aprovechar al máximo estas herramientas en tus proyectos.
Un motor es un dispositivo electromecánico, es decir, con propiedades eléctricas y mecánicas. Como sabemos, con un motor podemos transformar energía eléctrica en energía mecánica en forma de movimiento rotatorio. Dicho movimiento puede ser utilizado para movilizar mecanismos que pueden realizar distintas funciones.
Existen diferentes tipos de motores, pero en este post solamente hablaremos de los motores eléctricos ya que son los cuales podemos utilizar de manera directa con un micro controlador como Arduino. Controlar motores de combustión interna requeriría de una instrumentación a un nivel muy superior del que puedo presentar ante ustedes en este blog.
En el corazón de cada motor eléctrico se encuentra una estructura clave: el estator, una armadura fija que rodea una pieza central giratoria conocida como rotor. Es en el rotor donde se aloja el eje móvil, el cual es el responsable de transmitir la energía mecánica generada.
La configuración específica de estos componentes, tanto del rotor como del estator, puede variar significativamente según el diseño particular del motor. Esta diversidad en la construcción refleja la versatilidad y la adaptabilidad de los motores eléctricos a diferentes aplicaciones.
Fundamentalmente, el motor se basa en el principio de rotación de un eje central, equipado con elementos magnéticos que pueden ser tanto bobinas como imanes naturales. Este eje se sitúa dentro del estator, que alberga un campo magnético constante.
La teoría magnética nos enseña que un imán tiene dos polos: norte y sur. Cuando interactúan dos imanes, los polos similares (norte con norte o sur con sur) generan una fuerza de repulsión entre ellos. En contraste, cuando los polos opuestos se acercan (norte con sur), se atraen. Este juego de atracción y repulsión magnética es fundamental en el funcionamiento de los motores eléctricos.
Utilizando estas fuerzas de atracción y repulsión es como un motor funciona.
El rotor, que posee elementos magnéticos, sean bobinas o imanes naturales, se someten a un campo magnético variable. Dicho campo magnético varía varias veces por segundo, lo que hace que las fuerzas de atracción-repulsión entre los magnetos del rotor y el campo magnético del estator provoquen que el rotor empiece a girar.
Como vemos en la figura, el campo magnético en el estator (armadura) lo proporciona un imán natural. En el rotor hay bobinas que al energizarse provocan un campo magnético que reacciona con el campo magnético del imán natural provocando el movimiento del rotor.
La alternación del sentido de la corriente provoca un cambio en el campo magnético en el rotor. Con esto se evita que el polo norte del rotor se alinee con el polo sur del imán natural y se detenga el movimiento rotatorio del eje.
Los diseños varían de un modelo a otro. Es probable que se encuentre algunos modelos cono imanes naturales en el rotor y bobinas en el estator.
Ha motores que poseen un imán natural en el estator y un embobinado en el rotor, como es el caso de la figura que vimos un poco más arriba.
Por último hay motores que poseen embobinados tanto en el rotor como en el estator.
Con Arduino podemos utilizar virtualmente cualquier tipo de motor. Sin embargo debemos saber cuales son los requerimientos de voltaje y corriente de cada dispositivo para hacer los diseños del circuito que le ayudará a Arduino a controlar el motor.
Hay motores de corriente directa y hay corrientes de corriente alterna. Dentro de los motores de corriente alterna hay motores monofásicos y trifásicos con un consumo de corriente que podría ser miles de veces el soportado por Arduino. Incluso los motores de corriente directa que funcionan con voltajes más bajos y con menos corriente sobrepasan con creces los niveles soportados por el micro controlador.
El enfoque de este post estará dirigido a los motores de corriente directa.
Motores de Corriente Directa
Estos motores son los que encontramos comúnmente dentro de juguetes, impresoras, copiadoras y muchos otros dispositivos. Poseen diferentes voltajes operativos y los consumos de corriente varían de un modelo a otro.
En este blog deseamos presentar temas enfocados a la robótica. Los robots utilizan motores de corriente directa.
Sin embargo como todos sabemos, los motores un movimiento perpetuo y son incapaces de mantenerse en una posición estática, lo cual es necesario por ejemplo para un brazo mecánico.
Para este tipo de tareas se usan motores especiales, como los motores paso a paso o stepper motors o los servo motores o servos.
Motores paso a paso
Estos motores poseen una serie de bobinas internas en vez de un solo enbobinado. El movimiento del rotor se produce a medida que las bobinas se van energizando. Utilizando diferentes tipos de secuencias el motor puede moverse en adelanto, en atraso o permaneces estático en una posición determinada.
Servo motores
Estos motores funcionan de manera parecida a los motores paso a paso. Pueden moverse determinada cantidad de vueltas y permanecer en una posición estática. Requieren de un circuito de control que permita al usuario darle las instrucciones al motor.
***Tengo planeado dedicar un post especial para los servo motores y para los motores paso a paso, por lo que en esta ocasión no entraré en detalles más allá de las principales características de cada uno.
Los motores y Arduino
Existen diferentes tipos de interfaces electrónicas a través de las cuales Arduino puede controlar el movimiento de un motor.
Arduino por sí solo difícilmente puede hacer funcionar un motor ya que estos dispositivos funcionan con voltajes superiores (9-12 voltios) al que Arduino puede entregar (5 voltios). Arduino solo puede entregar 40mA de corriente; el consumo eléctrico de un motor es superior a lo que Arduino le puede entregar por lo que intentar alimentar un motor directamente desde la placa podría terminar estropeándola.
Afortunadamente existen dispositivos e interfaces electrónicas que le permiten a Arduino manipular desde los pequeños motores CD hasta los grandes motores de corriente alterna, e incluso, motores trifásicos con un sonsumo de potencia muy elevado.
Por lo pronto solamente utilizaremos un transistor NPN para manejar motores de corriente directa.
En el siguiente artículo se muestra qué es un transistor de unión bipolar (BJT) y su uso con Arduino:
En aquella ocasión mostré como encender un LED a través del uso de un transistor. Ahora el LED lo remplazaremos por un motor.
Vamos a usar una sencilla interfaz en Java con la que vamos a poner un motor en marcha con un programa en Java.
Implementaremos la librería Arduino disponible en el siguiente enlace:
https://panamahitek.com/libreria-panamahitek_arduino/
Utilizaremos un código que ya hemos usado varias veces para otros ejemplos en este blog:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
int input; void setup() { pinMode(13, OUTPUT); // Declare that we will use pin 13 as an output Serial.begin(9600); // Initialize serial communication with a baud rate of 9600 } void loop() { if (Serial.available() > 0) { // Check if there is data available on the serial port input = Serial.read(); // Read the incoming data if (input == '1') { digitalWrite(13, HIGH); // If the input value is '1', turn on the LED } else { digitalWrite(13, LOW); // If the input value is different from '1', turn off the LED } } } |
Hemos visto cómo un código en Arduino nos permite controlar un LED utilizando el teclado de una computadora, evidenciando la interacción fundamental entre el hardware y el software. Al incorporar una interfaz en Java, esta interacción se amplía, permitiendo el control del LED directamente desde una aplicación Java. Sumando un transistor NPN a esta configuración, podemos extender esta capacidad para encender y apagar un motor, fusionando efectivamente Arduino y Java en una aplicación práctica.
Les comparto el enlace al proyecto Java con su interfaz correspondiente para que puedan explorarlo más a fondo:
Además, no se pierdan el video resumen sobre los motores y su funcionamiento con Arduino y Java que he preparado:
En próximas publicaciones, detallaré cómo cambiar la dirección de giro de un motor, utilizando circuitos especialmente diseñados para tal propósito. Si tienen dudas o comentarios, por favor, háganmelos saber en la sección de comentarios. Espero que este contenido haya sido de su interés y utilidad. ¡Gracias por seguirme y hasta la próxima!
gracias por hacer estos post que nos ayudan a los novatos en arduino
A la orden siempre
Disculpa, como ya te habrás dado cuenta comento mucho tus pists jajajaja lo que pasa es que estoy haciendo un proyecto con motores paso a paso, Java y arduino y tengo entendido que necesito un driver para que el motor sea preciso en el movimiento. Es verdad eso? Como lo puedo usar con arduino? Gracias!!
El circuito de control de servomotores utiliza algo llamado PWM o modulación por ancho de pulsos. Arduino puede manejar dichas interfaces, pero no tengo servos para trabajar con ellos por lo que no puedo decirte cómo se hace
Hola , antes que nada. Excelente blog; muy claras tus expresiones. Te leo permanentemente.
Una consulta :
Crees que sea posible conectar de una forma similar al diagrama explicado en este post (Transistor NPN + motor DC ) lo siguiente :
* Igual función , solo que necesito escalarlo a 4 motores dc ( sin usar driver en lo posible).
* Cada motor es muy pequeño, 3V y corriente 90 am en su máximo. (son de vibración)
* Los motores no van a funcionar juntos de manera simultanea. Es posible usar la misma fuente de energía ¿? una batería de 3.7 V para los 4 motores dc ¿? repito : no estarían funcionando al mismo tiempo.Cuando funciona uno, no funcionan los demás. Eso lo regularia cada NPN enviando o no voltaje a su base
*Se podrían usar 4 transistores NPN y cada motor ser controlado por un pin del arduino , pero alimetados por la única batería de 3.7v ¿?
*los 4 motores tendrían que ir a gnd del arduino ¿?
Gracias infinitas !
Un respetuoso saludo.
Si es posible hacer lo que quieres pero tendrías que usar una fuente externa que proporcione el voltaje que necesitas. Cada motor debe llevar un transistor NPN tal como el que se muestra en este post y al final conectas el GND de la fuente al de Arduino.
Hola que tal disculpa una pregunta, es que tengo como proyecto hacer una animacion de un brazo robotico, el brazo tiene que estar simulado en java 3D y cuando movamos la simulacion del brazo en java 3D se tiene que mover un brazo real y hacer al mismo tiempo el movimiento que se haga en la simulacion, que consejo me das para poder hacerlo ya que en en cuestiones de esos la verdad no tengo ni idea de que hacer… por favor espero tu respuesta con mucha ansiedad y te lo agradeceria mucho….
gracias POr la informacion me fue muy util