En este post empezaré a hablar acerca de lo que es un motor, los diferentes tipos de motores y la manera como utilizar estos dispositivos con Arduino utilizando aplicaciones en Java como interfaz.
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, sin embargo 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.
Los motores eléctricos consisten en una armadura llamada estator que envuelve una pieza móvil llamada rotor. En el rotor es donde se encuentra el eje móvil donde se entrega la energía mecánica.
Dependiendo del diseño del motor, la composición del rotor y del estator puede variar.
El principio de un motor es una pieza giratoria , un eje, con una serie de elementos magnéticos que podrían ser bobinas o imanes naturales. Dicho eje se coloca en una armadura en la cual se encuentra presente un campo magnético.
La experiencia nos dice que cuando tenemos un imán, el mismo tiene dos polos, el polo norte y el polo sur.
Si tenemos dos imanes con polos similares (Norte y Norte o Sur y Sur) y los acercamos, habrá repulsión. Si tenemos polos distintos (Norte y Sur) y los acercamos, habrá fuerza de atracción.
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 19 20 21 22 23 24 25 26 27 28 29 |
<span style="color: #cc6600;">int</span> input; <span style="color: #cc6600;">void</span> <span style="color: #cc6600;"><b>setup</b></span>() { <span style="color: #cc6600;">pinMode</span>(13, <span style="color: #006699;">OUTPUT</span>); <span style="color: #7e7e7e;">// Declaramos que utilizaremos el pin 13 como salida</span> <span style="color: #cc6600;"><b>Serial</b></span>.<span style="color: #cc6600;">begin</span>(9600); } <span style="color: #cc6600;">void</span> <span style="color: #cc6600;"><b>loop</b></span>() { <span style="color: #cc6600;">if</span> (<span style="color: #cc6600;"><b>Serial</b></span>.<span style="color: #cc6600;">available</span>() > 0) { input = <span style="color: #cc6600;"><b>Serial</b></span>.<span style="color: #cc6600;">read</span>(); <span style="color: #cc6600;">if</span> (input == <span style="color: #006699;">'1'</span>) { <span style="color: #cc6600;">digitalWrite</span>(13, <span style="color: #006699;">HIGH</span>); <span style="color: #7e7e7e;">//Si el valor de input es 1, se enciende el led</span> } <span style="color: #cc6600;">else</span> { <span style="color: #cc6600;">digitalWrite</span>(13, <span style="color: #006699;">LOW</span>); <span style="color: #7e7e7e;">//Si el valor de input es diferente de 1, se apaga el LED</span> } } } |
Con este código en Arduino podemos encender un LED con el teclado de la computadora.
Si le agregamos una interfaz en Java, podemos encender el LED con Java.
Si le agregamos un transistor NPN con un motor, podemos encender y apagar el motor en Arduino y Java.
Aquí está el proyecto en Java con la interfaz:
http://docs.google.com/file/d/0B0hsUkhqWH97U2NHQ0Qya3hNZmM/edit?usp=sharing
En el siguiente video se hace un resumen de lo que son los motores y se muestra el funcionamiento de un motor con Arduino y un programa en Java.
En mis próximos aportes explicaré como cambiar el sentido de giro de un motor utilizando algunos circuitos especiales para ello.
Si tienen alguna duda por favor comuníquense con migo a través de los comentarios.
Espero que les haya gustado.
Saludos.
gracias POr la informacion me fue muy util
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….
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… Read more »
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.
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
gracias por hacer estos post que nos ayudan a los novatos en arduino
A la orden siempre