Archivo de la etiqueta: Motor DC

Transporte con Arduino

Drones

Otra de las aplicaciones de Arduino es su uso en drones.

Firmware usado con Drones con MCUs iguales a las de Arduino:

Ardupilot:

Placa de control:

Los motores brushless se usan habitualmente en los drones son trifásicos con un variador para controlar de forma muy exacta la velocidad del motor. Motores DC brushless: https://en.wikipedia.org/wiki/Brushless_DC_electric_motor

Para cotrolar los motores brushless necesitaremos un ESC (Electronic Speed Control) https://en.wikipedia.org/wiki/Electronic_speed_control

Y el esquema de conexiones en un drone es:

Más información: https://learn.adafruit.com/adafruit-motor-selection-guide/brushless-dc-motor-control  

Montar un drone es sencillo usando el programa de Ardupilot y el SW que facilita es el mission planner: http://ardupilot.org/planner/index.html

Rovers

Es muy habitual ver desarrollos de coches o rovers con Arduino e incluso ya venden kits para montar tu propio coche con Arduino

Hay coches basados en Arduino comerciales como Moway: http://moway-robot.com/category/productos-mowayduino/

KITs de coches:

También hay un proyecto Rover con Arduino derivado de ardupilot:

Robot 1 – Basado en el bq printbot evolution. Se puede comprar el kit completo o imprimir las pieza y comprar BQ zum kit y montarlo o incluso comprar las piezas por separado.

Programación con IDE Arduino o bitbloq: http://bitbloq.bq.com/#/

Montaje: http://diwo.bq.com/montaje-del-printbot-evolution/

Placa ZUM: http://diwo.bq.com/placa-controladora-conexion-zum/

Componentes electronicos: http://diwo.bq.com/descubre-los-componentes-electronicos-del-kit-de-robotica/

Partes imprimibles:

Robot 2 –  basado en el kit de chasis de coche 4×4 con 4 motores DC y reductora

Kit Chasis:

Montado:

En este caso se opta por un Arduino Yun al tener un interfaz wifi integrado y la posibilidad de poner una web embebida en el SO linux y usar la API REST para comunicar con el microcontrolador.

Driver: L298N Breakout Board (Esta breakout board es muy sencilla y bien documentada):

Specification:

  • chipset: L298N
  • Driving power supply voltage Vs: +5V  to +46V
  • Peak current of driving power supply Io: 2A
  • Vss: +5V to +7V
  • Current of logic power supply: 0 – 36mA
  • PWM control signal range:
    • Low level: -0.3V < Vin < 1.5V
    • High level: 2.3V < Vin< Vss
  • Enable signal range:
    • Low level: -0.3V
    • High level: 2.3V < Vin< Vss
  • Maximum power consumption: 25W
  • Working temperature: -25C to 130C
  • Regulador de tensión para los 5V.

Para las conexiones se usa un shield de conectores grove: Base Shield V2: http://www.seeedstudio.com/depot/Base-Shield-V2-p-1378.html?cPath=98_16

Esquema del shield: https://www.arduino.cc/en/uploads/Main/arduino_MotorShield_Rev3-schematic.pdf

Alimentación:

Código del proyecto: https://github.com/jecrespo/Coche_AprendiendoArduino

Uso de Motores

Motores DC

Ejercicio Motor DC Básico. Mover un motor DC variando la velocidad y sentido mediante un potenciómetro.

Basado en http://diymakers.es/control-velocidad-y-sentido-de-motor-dc/

Esquema de conexión.

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio54-MotorDC_Basico

Ejercicio Avanzado 1. Mover un motor DC de 9V usando un integrado L293D (Quadruple Half-H driver). Para controlar la velocidad del motor se usará un potenciómetro conectado al pin A0. Además se usarán dos botones, uno conectado al pin digital 4 para controlar el sentido de giro del motor y otro conectado al pin digital 5 que controlará el encendido y apagado del motor. Con cada pulsación encendemos y apagamos el motor o usamos una dirección de giro u otra con el otro botón.

NOTA: en este caso para controlar la velocidad del motor uso el pin enable del L293D en lugar de los dos pines de control.

Datasheet: https://www.arduino.cc/documents/datasheets/H-bridge_motor_driver.PDF

Montaje:

ejercicio21_bb

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio21-MotorDC_1

Ejercicio Motor Shield: Uso del Arduino Motor Shield para controlar la dirección de giro un motor DC. En este caso es necesario alimentar Arduino con una fuente de alimentación o mediante una batería, puesto que con la energía de USB no es posible mover el motor. También es posible alimentar Arduino por USB y alimentar independientemente el shield a través de las bornas marcadas con + y -. El voltaje debe ser el correspondiente al que use el motor DC.

Tutorial: https://www.arduino.cc/en/Tutorial/DueMotorShieldDC

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio47-Motor_Shield

Servo

Ejercicio: Controlar la posición de un servo con un potenciómetro.

Tutorial: http://arduino.cc/en/Tutorial/Knob

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio55-Servo/Knob

Ejercicio: Programar un barrido continuo del 0 a 180º en un servo. Activar y desactivar el barrido con una pulsación de un botón. p.e. activación de un limpiaparabrisas.

Tutorial: http://arduino.cc/en/Tutorial/Sweep

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio55-Servo/Sweep

Ejercicio avanzado: controlar la posición del servo como en el ejercicio Knob pero en lugar de hacerlo con un potenciómetro, hacerlo desde el puerto serie mandando el ángulo al que debe ir.

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio55-Servo/Knob_Serial

Proyecto – Arranque y Parada Motor DC

Enunciado

Mover un motor DC de 9V usando un integrado L293D (Quadruple Half-H driver). Para controlar la velocidad del motor se usará un potenciómetro conectado al pin A0. Además se usarán dos botones, uno conectado al pin digital 4 para controlar el sentido de giro del motor y otro conectado al pin digital 5 que controlará el encendido y apagado del motor. Con cada pulsación encendemos y apagamos el motor o usamos una dirección de giro u otra con el otro botón.

Sobre este montaje, añadir una rampa de arranque y otra de parada cuando se detecte el encendido y apagado. También añadir una rampa de parada y arranque cuando se detecte un cambio de sentido. Añadir un botón de parada de emergencia, que al pulsarlo, se pare el motor inmediatamente.

Información o referencias usadas

Ejemplo básico: http://diymakers.es/control-velocidad-y-sentido-de-motor-dc/

Esquema de conexión

ejercicio21_bb

Diagrama de flujo

Solución

https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/tree/master/Proyecto_02-Motor_DC_Controlado

Uso de Motores

Motores DC

Ejercicio. Mover un motor DC de 9V usando un integrado L293D (Quadruple Half-H driver). Para controlar la velocidad del motor se usará un potenciómetro conectado al pin A0. Además se usarán dos botones, uno conectado al pin digital 4 para controlar el sentido de giro del motor y otro conectado al pin digital 5 que controlará el encendido y apagado del motor. Con cada pulsación encendemos y apagamos el motor o usamos una dirección de giro u otra con el otro botón.

Datasheet: https://www.arduino.cc/documents/datasheets/H-bridge_motor_driver.PDF

Montaje:

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio21-MotorDC_1

Ejercicio Avanzado. Añadir rampa de aceleración/deceleración para arranque, parada y cambio de sentido para que pase por cero con una compilación de “seguridad” y sin ella. Añadir una parada de emergencia que tenga preferencia sobre todo y pare de golpe al pulsar un botón de emergencia (seta de emergencia), ver manejo de prioridades.

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio21-MotorDC_2

Ejercicio Motor Shield: Uso del Arduino Motor Shield para controlar la dirección de giro un motor DC. En este caso es necesario alimentar Arduino con una fuente de alimentación o mediante una batería, puesto que con la energía de USB no es posible mover el motor. También es posible alimentar Arduino por USB y alimentar independientemente el shield a través de las bornas marcadas con + y -. El voltaje debe ser el correspondiente al que use el motor DC.

Tutorial: https://www.arduino.cc/en/Tutorial/DueMotorShieldDC

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio47-Motor_Shield

Servo

Ejercicio: Controlar la posición de un servo con un potenciómetro.

Solución: http://arduino.cc/en/Tutorial/Knob

Ejercicio: Programar un barrido continuo del 0 a 180º en un servo. Activar y desactivar el barrido con una pulsación de un botón. p.e. activación de un limpiaparabrisas.

Solución: http://arduino.cc/en/Tutorial/Sweep

Motores

Como ya se ha visto anteriormente, un pin de Arduino solo puede tener los valores de 0 y 5 voltios y dar hasta 40 mA. Esto es insuficiente para mover un motor del tipo que sea, por lo tanto si queremos que Arduino maneje un motor, deberemos usar un driver.

Un motor driver es un amplificador de corriente cuya función es tomar una pequeña señal de control de baja corriente y convertirla en una señal de alta corriente que pueda alimentar el motor.

Hay muchos tipos de motor drivers en función del motor a manejar, máximo voltaje, máxima corriente de salida, etc…

Más información: http://www.futureelectronics.com/en/drivers/motor-driver.aspx

Motor DC

Un motor de corriente continua convierte la energía eléctrica en mecánica. Se compone de dos partes: el estator y el rotor. El estator es la parte mecánica del motor donde están los polos del imán. El rotor es la parte móvil del motor con devanado y un núcleo, al que llega la corriente a través de las escobillas. Si queremos cambiar el sentido de giro del rotor, tenemos que cambiar el sentido de la corriente que le proporcionamos al rotor, basta con invertir la polaridad de la pila o batería.

Para controlar un motor DC desde Arduino, tendremos que usar un driver para motores para proporcionar más corriente al motor ya que las salidas del Arduino sólo dan hasta 40mA. Con el driver podemos alimentar el motor con una fuente de alimentación externa.

Más información: http://www.prometec.net/motorcc/

El L293D es un integrado para controlar motores DC que usa el sistema puente en H. Es un sistema para controlar el sentido de giro de un motor DC usando cuatro transistores y también la velocidad del motor.  En la imagen vemos que los transistores se comportan como interruptores y dependiendo que transistores conducen y cuáles no cambia la polarización del motor, y con esto el sentido de giro.

El L293D tiene dos puentes H y proporciona 600mA al motor y soporta un voltaje entre 4,5V y 36V tal y cómo pone en el datasheet: http://www.ti.com/lit/ds/symlink/l293d.pdf

Nosotros usaremos la parte de la izquierda (los diodos externos hay que ponerlos para evitar las corrientes inducidas del motor si usamos el modelo L293 y están incluidos en el integrado si usamos el L293D). Como se aprecia en la imagen, los pins 3 y 6 son las salidas y se conectan a los bornes del motor. Y los pins 2 y 7 son las entradas donde conectaremos las salidas del Arduino. Dependiendo qué valor ponemos entre los pines 2 y 7 el motor girará en un sentido o en otro.

Es muy IMPORTANTE que se utiliza el driver L293, hay que poner diodos para evitar dañar el integrado con las corrientes parásitas generadas por los propios solenoides de las cargas. No obstante el modelo L293D no los necesita, ya que, los lleva incorporados el propio integrado, lo que se hace “más sencillo” y “económico” su uso. También es cierto que L293 al no llevarlos integrados nos permite escoger los que mejor se adapten a nuestras cargas o necesidades.

Para controlar la velocidad del motor se usa la técnica de PWM. Sabemos que hay que atacar los pins 2 y 7 del L293D desde dos salidas del Arduino. En estas dos salidas habrá un PWM a cada una. Pero tenemos que invertir un PWM. ¿Qué quiere decir invertir? Pues que cuando en un PWM tengamos un pulso a un valor alto, en el otro PWM el mismo pulso sea valor bajo. En la imagen lo entenderemos de una manera más gráfica.

Montaje:

Más información y código en: http://diymakers.es/control-velocidad-y-sentido-de-motor-dc/

Tutorial para controlar un motor con Arduino: http://www.allaboutcircuits.com/projects/use-an-arduino-to-control-a-motor/

Ejemplo del playground de Arduino: http://playground.arduino.cc/Main/DirectionalMotorControlWithAL293D

Otro driver de motor muy utilizado es el L298 (datasheet) que es el utilizado por el motor shield. Este driver es similar en funcionamiento al anterior pero posee un sensor de corriente muy útil.

Montaje

Diagrama

Esquema de conexión

Diferencias entre el L293 y el L298:

  • L293 es un quadruple half-H driver y el L298 es un dual full-H driver
  • El L293 al tener 4 canales permite manejar motores paso a paso de 4 hilos y el L298 solo tiene dos canales perfecto para manejar dos motores DC. En el L293 las cuatro lineas de entrada/salida son independientes.
  • La corriente de salida por canal en el L293 es de 1A, mientras que en el L298 es de 2A, por ese motivo el L298 puede llevar un disipador.
  • Los diodos protectores del L293D deben ponerse externamente en el L293 y L298

Motores DC Brushless

Hay motores DC brushless: https://en.wikipedia.org/wiki/Brushless_DC_electric_motor

Para cotrolar los motores brushless necesitaremos un ESC (Electronic Speed Control) https://en.wikipedia.org/wiki/Electronic_speed_control

Los motores brushless se usan habitualmente en los drones son trifásicos con un variador para controlar de forma muy exacta la velocidad del motor.

Más información: https://learn.adafruit.com/adafruit-motor-selection-guide/brushless-dc-motor-control  

Arduino Motor Shield

El Arduino motor shield está basado en el L298 que es un dual full-bridge diseñado para cargas inductivas como relés, solenoides y motores DC o paso a paso. Me permite manejar dos motores DC controlando las velocidad y dirección de cada motor de forma independiente. También permite medir la corriente absorbida por cada motor entre otras características. La corriente máxima que puede manejar con 2A por canal y el voltaje máximo de suministro es de 50V.

Esquemático: https://www.arduino.cc/en/uploads/Main/arduino_MotorShield_Rev3-schematic.pdf

Arduino motor shield puede ser alimentado por una fuente externa, por lo tanto debemos alimentar al Arduino conectado al motor shield mediante el alimentador y no es posible alimentarlo por USB porque la corriente del motor puede exceder la corriente máxima del estándar USB. El L298 también tiene un alimentación lógica que toma de los 5V de Arduino.

El L298 necesita dos alimentaciones, una para la parte de control (5V) y otra para los motores (12V). La de los motores en tu caso la coge del Vin al que conectas la fuente conmutada de 12V.

Al alimentar desde LSP5 (Borna marcada con Vin MAX 12V), es el VMOT que alimenta Vin según el esquemático de motor shield y al L298P. La alimentación lógica del L298P se hace a través del regulador de tensión del Arduino.

Al alimentar el Arduino mediante el Vin el Motor Shield, puede ser problemático, puesto que al alimentar Arduino a través del Vin no tenemos la protección del diodo M7 ni el condensador para estabilizar el voltaje, por lo que en caso de intercambiar la polaridad se puede dañar Arduino y además si al arrancar un motor el voltaje de Vin cae por debajo de un valor puede ocurrir que el regulador de tensión NCP1117 no sea capaz de dar 5V a su salida y en ese caso Arduino se reiniciaría. Además el NCP1117 tiene una caída de tensión, por lo que para alimentar el Arduino a través de Vin como indica la documentación de Arduino debe ser con un valor entre 7 y 12 V.

Tener en cuenta que si alimento a través de Vin, pero tengo conectado el USB a Arduino, entonces, el MOSFET FDN340P permitirá alimentar el microcontrolador cuando Vin/2 < 3.3V y no se produce el reinicio de la MCU, actuando como una fuente de alimentación de backup.

Esquema del Arduino UNO: https://www.arduino.cc/en/uploads/Main/arduino-uno-schematic.pdf

Para evitar posibles daños al Arduino sobre el que va montado el motor shield, si el motor requiere más de 9V, es recomendable separar las líneas de alimentación del shield y del Arduino, esto es posible cortando el jumper “Vin Connect” que está en la parte trasera del shield.

En caso de problemas, la solución es alimentar por separado Arduino y el motor shield y cortar el Vin-Connect.

Los pines de alimentación en el Arduino motor shield son:

  • Vin en la borna de conexiones, es la entrada de alimentación a los motores conectados al shield. Una fuente de alimentación externa conectada a esta borna también alimenta a la placa Arduino sobre la que va montada el shield. Cortando el jumper “Vin Connect” se elimina esta alimentación a Arduino.
  • GND es la masa de los motores que va unida a la masa del Arduino.

Este shield dispone de dos canales llamados A y B y cada uno usa 4 de los pines de Arduino para manejar o monitorizar el motor. En total se usan 8 pines. Se pueden usar los canales separados para manejar dos motores DC o combinarlos para manejar un motor paso a paso bipolar.

Los pines son:

Function pins per Ch. A pins per Ch. B
Direction D12 D13
PWM D3 D11
Brake D9 D8
Current Sensing A0 A1

Si no se necesita el freno y el sensor de corriente, es posible deshabilitar estas características cortando los correspondientes jumpers en la parte trasera del shield.

Los pines de freno al ponerlos a HIGH frenan el motor en lugar de dejarlos correr libremente al cortar la alimentación.

Mediante la función analogRead()  es posible leer la corriente en los pines de current sensing  como una entrada analógica normal. Está calibrado para medir 3.3V para la corriente máxima de 2A.

Esquema: https://www.arduino.cc/en/uploads/Main/arduino_MotorShield_Rev3-schematic.pdf

Más información: https://www.arduino.cc/en/Main/ArduinoMotorShieldR3

Ejemplos de uso:

NOTA: El Motor Shield de arduino.cc ha sido retirado, pero arduino.org comercializa el Arduino Motor Shield que es el mismo: http://www.arduino.org/products/shields/arduino-motor-shield

Otros shields y breakout board para motores DC

Adafruit Motor Shield:

L298N Breakout Board (Esta breakout board es muy sencilla y bien documentada):

Specification:

  • chipset: L298N
  • Driving power supply voltage Vs: +5V  to +46V
  • Peak current of driving power supply Io: 2A
  • Vss: +5V to +7V
  • Current of logic power supply: 0 – 36mA
  • PWM control signal range:
    • Low level: -0.3V < Vin < 1.5V
    • High level: 2.3V < Vin< Vss
  • Enable signal range:
    • Low level: -0.3V
    • High level: 2.3V < Vin< Vss
  • Maximum power consumption: 25W
  • Working temperature: -25C to 130C
  • Regulador de tensión para los 5V.

Esquemático:

Servomotor

Servomotor (o también llamado servo) es similar a un motor de corriente continua pero con la capacidad de posicionarse en una posición determinada y permanecer fija en esta. Normalmente el ángulo es de 0 a 180 grados, y se alimentan a 5 voltios mínimo.

Algunos servos servos pueden alimentarse directamente desde Arduino sin necesidad de un driver, lo que supone una ventaja en algunos casos.

Un servomotor está formado por un motor de corriente continua, una caja reductora, un juego de engranajes, un potenciómetro y un circuito de control. Puede aguantar cierto peso a través del par o torque del servo indicado en sus características. Normalmente se indica con Kg/cm, que quiere decir los kilos que aguanta a 1 cm de distancia.

 

Para controlar un servo, se usa el PWM. La mayoría trabaja en una frecuencia de 50 Hz (20ms). Cuando se manda un pulso, la anchura de este determina la posición angular del servo. La anchura varía según el servomotor pero normalmente es entre 0,5ms a 2,5ms.

El Arduino utiliza la librería <Servo.h> para controlar los servos y usa las siguientes funciones:

Fuente, más información y códigio en: http://diymakers.es/controlar-servomotor-con-mando-ir/

Más información: http://en.wikipedia.org/wiki/Servomotor

Si queremos tener control de bucle cerrado con un motor DC como tenemos con los servos, podemos hacerlo incorporando un encoder al motor DC.

Servo de rotación continua

Un servo de rotación continua es un motor cuyo circuito electrónico nos permite controlar la dirección de giro. A diferencia del servos anteriormente mencionados, no se detiene en una posición, sino que gira continuamente. Son muy utilizados en robótica y en muchas aplicaciones electrónicas, como en lectores de DVD.

En un servo de rotación continua, la función write() configura la velocidad del servo en lugar del ángulo de posición. En este caso 0 es máxima velocidad en giro contrario al sentido horario, 180 es máxima velocidad en sentido horario y 90 motor parado.

Trucar un servo a rotación continua: http://www.ardumania.es/trucar-servo-a-rotacion-continua/

Servo de rotación continua comerciales:

Tutorial sencillo de BQ: http://diwo.bq.com/muevete-el-servo-de-rotacion-continua/

Tutorial más completo de servos de rotación continua:

Calibrador de servo: http://www.instructables.com/id/Servo-calibrator-GUI/

Servo driver para Raspberry Pi: https://learn.adafruit.com/adafruit-16-channel-servo-driver-with-raspberry-pi/overview

Motor paso a paso

Un motor paso a paso (también llamado stepper) es un dispositivo electromagnético que convierte impulsos eléctricos en movimientos mecánicos de rotación. La principal característica de estos motores es que se mueven un paso por cada impulso que reciben. Normalmente los pasos pueden ser de 1,8º a 90º por paso, dependiendo del motor. Son motores con mucha precisión, que permiten quedar fijos en una posición (como un servomotor) y también son capaces de girar libremente en un sentido u otro (como un motor DC).

Cuando circula corriente por una o más bobinas del estator se crea un campo magnético creando los polos Norte-Sur. Luego el rotor se equilibrará magnéticamente orientando sus polos Norte-Sur hacia los polos Sur-Norte del estator. Cuando el estator vuelva a cambiar la orientación de sus polos a través de un nuevo impulso recibido hacia sus bobinas, el rotor volverá a moverse para equilibrarse magnéticamente. Si se mantiene esta situación, obtendremos un movimiento giratorio permanente del eje. El ángulo de paso depende de la relación entre el nombre de polos magnéticos del estator y el nombre de polos magnéticos del rotor.

Los motores bipolares son más complejos de controlar ya que el flujo de corriente tiene que cambiar de dirección a través de las bobinas con una secuencia determinada. Para esto debemos conectar cada una de las dos bobinas en un puente en H (H-Bridge). Para esto, utilizaremos el integrado L293 que contiene dos H-Bridge (datasheet).

Para controlar motores paso a paso con Arduino, utilizaremos la librería <Stepper.h>:

Fuente, más información y código en:

Un ejemplo de driver de un motor paso a paso https://www.pololu.com/product/2133

Datasheet del driver: https://www.pololu.com/file/download/drv8825.pdf?file_id=0J590

Este tipo de motor es más lento, su rotación es más precisa, es de fácil configuración y control, además mientras que los servos requieren un mecanismo de retroalimentación y circuitos de soporte para accionamiento de posicionamiento, un motor paso a paso tiene control de posición a través de su naturaleza de rotación por incrementos fraccionales.

Los motores paso a paso son adecuados para las impresoras 3D y dispositivos similares en los que la posición es fundamental.

Además de los drivers de motores paso a paso como los puente H y los darlingtong array, es posible usar otros drivers como Easydriver que funciona dando los pasos y la dirección. Más información:

Para los motores paso a paso podemos usar las mismas shields que para los motores DC:

Más Motores

Los de alterna monofásicos podemos controlar su encendido, apagado y sentido de giro con un relé o un contactor y estos a su vez controlados con un Arduino como se ha visto anteriormente.

Los motores trifásicos habrá que usar un arrancador para controlar su encendido y apagado y un variador para controlar la velocidad y podríamos controlarlos estos mediante señales adecuadas desde Arduino como modbus.

Disponemos de shields para controlar múltiples motores, ya sean DC, servos o paso a paso.

A la hora de seleccionar un motor, hay varios factores que deben evaluarse antes de decidir qué tipo utilizar. Estos factores incluyen velocidad, par, bucle abierto o cerrado, resolución, precio y mantenimiento.

La velocidad es uno de los criterios más importantes a tener en cuenta al elegir entre servo y motor paso a paso. Hay una relación inversa entre velocidad y par en los motores por pasos. Cuando la velocidad se incrementa, el par decrece. Los motores servo tienen un par constante hasta la velocidad nominal. Como criterio general, por encima de 1000 rpm, debe seleccionarse servo. Si la velocidad está por debajo de 500 rpm, los motores por pasos son una buena elección porque producen un par más alto que el servomotor de tamaño equivalente. Los servomotores tienen la capacidad de producir un par pico en cortos periodos de tiempo que es hasta 8 veces su par nominal continuo. Esto es particularmente útil cuando la resistencia del movimiento no es constante. Los motores por pasos no tienen esta capacidad.

En algunos casos que requieren la alta velocidad, alta aceleración o aplicaciones críticas, el bucle cerrado es importante. Esto ocurre por ejemplo cuando se trabaja con accesorios caros en los que los fallos no son aceptables.

Guía de selección de motores: https://learn.adafruit.com/adafruit-motor-selection-guide/types-of-motors

Web como muchos motores: https://www.servocity.com/

Por ejemplo de un motor CC con reductora y encoder: https://www.servocity.com/html/26_rpm_planetary_gearmotor_w__.html#.VpfFM_nhDct

Actuadores y periféricos de salida

Un actuador es un dispositivo capaz de transformar energía hidráulica, neumática o eléctrica en la activación de un proceso con la finalidad de generar un efecto sobre elemento externo. Este recibe la orden de un regulador, controlador o en nuestro caso un Arduino y en función a ella genera la orden para activar un elemento final de control como, por ejemplo, una válvula.

 Existen varios tipos de actuadores como son:

  • Electrónicos
  • Hidráulicos
  • Neumáticos
  • Eléctricos
  • Motores
  • Bombas

 Para cada actuador, necesitamos un “driver” o manejador para poder mandar órdenes desde Arduino.

  • Recordad que los pines de Arduino solo pueden manejar un máximo de 40mA y recomendable usar 20mA de forma continua.
  • Recordar que Arduino solo puede manejar un total de 200 mA de salida. Es decir que la corriente máxima que admite Vcc y GND son 200 mA.

 Este enlace explica mucho mejor los las limitaciones de corriente en los pines de Arduino:  http://playground.arduino.cc/Main/ArduinoPinCurrentLimitations

 Otro tipo de actuadores son los relés. Para manejar un relé necesitamos un driver, puesto que con los 40mA posiblemente no sea suficiente para activar la bobina del relé.

 Un relay driver es un circuito electrónico que usa un transistor para activar la bobina del relé de forma que con una pequeña corriente activamos el circuito que alimenta al relé desde una fuente externa.

 Los Relay Shield ya tienen integrados los relés y los drives, lo que nos facilita el trabajo, incluso algunas shields incluyen su librería: http://www.seeedstudio.com/wiki/Relay_Shield

 O también una placa con dos relés y su driver con posibilidad de alimentarlos externamente:  http://www.geeetech.com/wiki/index.php/2-Channel_Relay_module

 

También existen integrados como el ULN2803A que nos permiten controlar reles, se trata de un array o conjunto de 8 pares darlington que soportan 500mA y 50V. Sirve para conectar la carga a masa. Características: http://www.ti.com/lit/ds/symlink/uln2803a.pdf

 Si tuviéramos que controlar elementos con más potencia como Motores o sistemas que tienen muchos arranques y paradas, es recomendable usar contactores a los que atacaremos desde los relés.

 

Motores

  • Motor DC. Un motor de corriente continua convierte la energía eléctrica en mecánica. Se compone de dos partes: el estator y el rotor. El estator es la parte mecánica del motor donde están los polos del imán. El rotor es la parte móvil del motor con devanado y un núcleo, al que llega la corriente a través de las escobillas. Si queremos cambiar el sentido de giro del rotor, tenemos que cambiar el sentido de la corriente que le proporcionamos al rotor, basta con invertir la polaridad de la pila o batería.
    Para controlar un motor DC desde Arduino, tendremos que usar un driver para motores para proporcionarle más corriente al motor ya que las salidas del Arduino sólo dan 40mA. De esta manera, con el driver podemos alimentar el motor con una fuente de alimentación externa.

 El L293D es un integrado para controlar motores DC que usa el sistema puente en H. Es un sistema para controlar el sentido de giro de un motor DC usando cuatro transistores.  En la imagen vemos que los transistores se comportan como interruptores y dependiendo que transistores conducen y cuáles no cambia la polarización del motor, y con esto el sentido de giro.

 El L293D tiene dos puentes H y proporciona 600mA al motor y soporta un voltaje entre 4,5V y 36V tal y cómo pone en el datasheet: http://www.ti.com/lit/ds/symlink/l293d.pdf

 

Nosotros usaremos la parte de la izquierda (los diodos externos hay que ponerlos para evitar las corrientes inducidas del motor). Cómo se aprecia en la imagen, los pins 3 y 6 son las salidas y se conectan a los bornes del motor. Y los pins 2 y 7 son las entradas donde conectaremos las salidas del Arduino. Dependiendo que valor ponemos entre los pins 2 y 7 el motor girará en un sentido o en otro.

Es muy IMPORTANTE que si optais o necesitais utilizar el driver L293, utiliceis diodos para evitar dañar el integrado con las corrientes parásitas generadas por los propios solenoides de las cargas. No obstante el modelo L293D no los necesita, ya que, los lleva incorporados el propio integrado, con lo que se hace “más sencillo” y “económico” su uso. También es cierto que L293 al no llevarlos integrados nos permite escoger los que mejor se adapten a nuestras cargas o necesidades.

Para controlar la velocidad del motor vamos a usar PWM. Sabemos que hay que atacar los pins 2 y 7 del L293D desde dos salidas del Arduino. En estas dos salidas habrá un PWM a cada una. Pero tenemos que invertir un PWM. ¿Qué quiere decir invertir? Pues que cuando en un PWM tengamos un pulso a un valor alto, en el otro PWM el mismo pulso sea valor bajo. En la imagen lo entenderemos de una manera más gráfica.

Esquema de Montaje.

 Fuente, más información y código en: http://diymakers.es/control-velocidad-y-sentido-de-motor-dc/

  •  Servomotor (o también llamado servo) es similar a un motor de corriente continua pero con la capacidad de posicionarse en una posición determinada y permanecer fija en esta. Normalmente el ángulo es de 0 a 180 grados, y se alimentan a 5 voltios mínimo.

 Un servomotor está formado por un motor de corriente continua, una caja reductora, un juego de engranajes, un potenciómetro y un circuito de control. Puede aguantar cierto peso a través del par o torque del servo indicado en sus características. Normalmente se indica con Kg/cm, que quiere decir los kilos que aguanta a 1 cm de distancia.

 

Para controlar un servo, se usa el PWM. La mayoría trabaja en una frecuencia de 50 Hz (20ms). Cuando se manda un pulso, la anchura de este determina la posición angular del servo. La anchura varía según el servomotor pero normalmente es entre 0,5ms a 2,5ms.

 

El Arduino utiliza la librería <Servo.h> para controlar los servos y usa las siguientes funciones:

 Fuente, más información y código en: http://diymakers.es/controlar-servomotor-con-mando-ir/

 Más información: http://en.wikipedia.org/wiki/Servomotor

  • Motor paso a paso. Un motor paso a paso (también llamado stepper) es un dispositivo electromagnético que convierte impulsos eléctricos en movimientos mecánicos de rotación. La principal característica de estos motores es que se mueven un paso por cada impulso que reciben. Normalmente los pasos pueden ser de 1,8º a 90º por paso, dependiendo del motor. Son motores con mucha precisión, que permiten quedar fijos en una posición (como un servomotor) y también son capaces de girar libremente en un sentido u otro (como un motor DC).

 Cuando circula corriente por una o más bobinas del estator se crea un campo magnético creando los polos Norte-Sur. Luego el rotor se equilibrará magnéticamente orientando sus polos Norte-Sur hacia los polos Sur-Norte del estator. Cuando el estator vuelva a cambiar la orientación de sus polos a través de un nuevo impulso recibido hacia sus bobinas, el rotor volverá a moverse para equilibrarse magnéticamente. Si se mantiene esta situación, obtendremos un movimiento giratorio permanente del eje. El ángulo de paso depende de la relación entre el nombre de polos magnéticos del estator y el nombre de polos magnéticos del rotor.

Los motores bipolares son más complejos de controlar ya que el flujo de corriente tiene que cambiar de dirección a través de las bobinas con una secuencia determinada. Para esto debemos conectar cada una de las dos bobinas en un puente en H (H-Bridge). Utilizaremos el integrado L293 que contiene dos H-Bridge (datasheet).

 Para controlar motores paso a paso con Arduino, utilizaremos la librería <Stepper.h>:

 Fuente, más información y código en: http://diymakers.es/mover-motores-paso-paso-con-arduino/

Definición de la Wikipedia: http://es.wikipedia.org/wiki/Motor_paso_a_paso

 Un ejemplo de driver de un motor paso a paso https://www.pololu.com/product/2133

 Datasheet del driver: https://www.pololu.com/file/download/drv8825.pdf?file_id=0J590

Este tipo de motor es más lento, su rotación es precisa, es de fácil configuración y control , además mientras que los servos requieren un mecanismo de retroalimentación y circuitos de soporte para accionamiento de posicionamiento, un motor paso a paso tiene control de posición a través de su naturaleza de rotación por incrementos fraccionales.

Adecuado para las impresoras 3D y dispositivos similares en los que la posición es fundamental. 

  • Otros motores, como los de alterna monofásicos que podemos controlar su encendido, apagado y sentido de giro con un relé o un contactor y los trifásicos que habrá que usar un arrancador para controlar su encendido y apagado y un variador para controlar la velocidad.

 Disponemos de shields para controlar múltiples motores, ya sean DC, servos o paso a paso.

A la hora de seleccionar un motor, hay varios factores que deben evaluarse antes de decidir qué tipo utilizar. Estos factores incluyen velocidad, par, bucle abierto o cerrado, resolución, precio y mantenimiento.

La velocidad es uno de los criterios más importantes a tener en cuenta al elegir entre servo y motor paso a paso. Hay una relación inversa entre velocidad y par en los motores por pasos. Cuando la velocidad se incrementa, el par decrece. Los motores servo tienen un par constante hasta la velocidad nominal. Como criterio general, por encima de 1000 rpm, debe seleccionarse servo. Si la velocidad está por debajo de 500 rpm, los motores por pasos son una buena elección porque producen un par más alto que el servomotor de tamaño equivalente. Los servomotores tienen la capacidad de producir un par pico en cortos periodos de tiempo que es hasta 8 veces su par nominal continuo. Esto es particularmente útil cuando la resistencia del movimiento no es constante. Los motores por pasos no tienen esta capacidad.

En algunos casos que requieren la alta velocidad, alta aceleración o aplicaciones críticas, el bucle cerrado es importante. Esto ocurre por ejemplo cuando se trabaja con accesorios caros en los que los fallos no son aceptables.

Ejemplo de actuadores que se pueden comprar

 Actuadores

 Relés http://www.trossenrobotics.com/c/data-i-o-Relay-switching-boards.aspx

 Por último tenemos otros dispositivos que usan las salidas digitales, que podemos denominarlos periféricos:

  • Pantalla LCD
  • displays numéricos
  • pantallas táctiles
  • impresoras
  • zumbadores
  • pulsadores/interruptores
  • indicadores luminosos
  • etc..

 Displays:

 Como funciona un display LCD: http://ww1.microchip.com/downloads/cn/AppNotes/cn011075.pdf

 Aprender a usar un display LCD:

Y mucho más… https://www.sparkfun.com/categories/20