Archivo de la categoría: Motores

Uso de Motores con Arduino

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.

Señales mandadas desde Arduino:

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio25-MotorDC_Basico

Ver las señales reales con un osciloscopio en los pines 9 y 10 y en la alimentación del motor.

Motor DC Avanzado

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 se usa el pin enable del L293D en lugar de los dos pines de control y envía una señal PWM proporcional al valor leído del potenciómetro.

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

Montaje:

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio26-MotorDC_Avanzado

Mover Servo

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

Esquema de conexión:

Esquemático:

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

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio27-Servo

Barrido con Servo

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. Hacer tres velocidades de barrido, cada pulsación sube de velocidad y la cuarta lo para.

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

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio28-Barrido_Servo

Servo Serial

Controlar la posición del servo como en el ejercicio “Mover servo” pero en lugar de hacerlo con un potenciómetro, hacerlo desde el puerto serie mandando el ángulo al que debe ir. Desde el monitor serie pregunta la posición y se manda un valor entre 0 y 180.

De la misma forma que controlamos desde el puerto serie, se puede extender a controlar el servo desde una aplicación en un ordenador o desde una página web.

Esquema de conexión:

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio29-Servo_Serial

Mover un Servo con un Acelerómetro

Una IMU (Inertial Measurement Unit) es un dispositivo capaz de medir la fuerza (aceleración) y la velocidad. Generalmente consta de un Acelerómetro y un Giroscopio. Por lo tanto una IMU no mide ángulos, por lo menos no directamente, requiere algunos cálculos.

Un dispositivo I2C muy interesante es el MPU-6050 que nos sirve para probar e introducirnos en el mundo de los giroscopios y acelerómetros.

Para esta práctica vamos a utilizar una Breakout board bastante típica llamada GY-521, que incluye la IMU MPU-6050 y un regulador de tensión, con lo que podemos alimentar a tanto 3.3V como a 5V.

El siguiente diagrama muestra la orientación de los ejes de sensibilidad y la polaridad de rotación.

El acelerómetro mide la aceleración. La aceleración puede expresarse en 3 ejes: X, Y y Z, las tres dimensiones del espacio. Por ejemplo, si mueves la IMU hacia arriba, el eje Z marcará un cierto valor. Si es hacia delante, marcará el eje X, etc. La gravedad de la Tierra tiene una aceleración de aprox. 9.8 m/s², perpendicular al suelo como es lógico. Así pues, la IMU también detecta la aceleración de la gravedad terrestre. Gracias a la gravedad terrestre se pueden usar las lecturas del acelerómetro para saber cuál es el ángulo de inclinación respecto al eje X o eje Y.

Supongamos que la IMU esté perfectamente alineada con el suelo. Entonces, como puedes ver en la imagen, el eje Z marcará 9.8, y los otros dos ejes marcarán 0. Ahora supongamos que giramos la IMU 90 grados. Ahora es el eje X el que está perpendicular al suelo, por lo tanto marcará la aceleración de la gravedad.

Si sabemos que la gravedad es 9.8 m/s², y sabemos qué medida dan los tres ejes del acelerómetro, por trigonometría es posible calcular el ángulo de inclinación de la IMU. Una buena fórmula para calcular el ángulo es:

Dado que el ángulo se calcula a partir de la gravedad, no es posible calcular el ángulo Z (giro sobre si mismo) con esta fórmula ni con ninguna otra. Para hacerlo se necesita otro componente: el magnetómetro, que es un tipo de brújula digital. El MPU-6050 no lleva, y por tanto nunca podrá calcular con precisión el ángulo Z. Sin embargo, para la gran mayoría de aplicaciones sólo se necesitan los ejes X e Y.

Esquema de conexión IMU:

Esquema conexión servo:

Mover el servo en función del ángulo en el eje x obtenido de la IMU.

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio30-Servo_IMU

Motor Paso a Paso

Mover un motor paso a paso modelo 28BYJ-48 con su adaptador basado en el chip ULN2003A.

El 28BYJ-48 tiene un paso de 5.625 grados (64 pasos por vuelta). El reductor interno tiene una relación de 1/64. Combinados, la precisión total es de 4096 pasos por vuelta, equivalente a un paso de 0.088º, que es una precisión muy elevada.

Es un motor paso a paso unipolar con las siguientes características:

  • Tensión nominal de entre 5V y 12 V.
  • 4 Fases.
  • Resistencia 50 Ω.
  • Par motor de 34 Newton / metro más o menos 0,34 Kg por cm.
  • Consumo de unos 55 mA.
  • 64 pasos por vuelta (con medios pasos).
  • Reductora de 1 / 64.

Datasheet: http://robocraft.ru/files/datasheet/28BYJ-48.pdf

Vamos a usar la secuencia de medios pasos. Con esta secuencia conseguimos una precisión de la mitad del paso. El par desarrollado varía ya que en algunos pasos activamos dos bobinas y en otras solo una, pero a la vez el giro se encuentra más “guiado”, por lo que en general ambos efectos se compensan y el funcionamiento es bueno, salvo en aplicaciones donde estemos muy al límite del par máximo.

Expresando la secuencia en forma de tabla resulta:

Medio-paso A B A’ B’
1 ON OFF OFF OFF
2 ON ON OFF OFF
3 OFF ON OFF OFF
4 OFF ON ON OFF
5 OFF OFF ON OFF
6 OFF OFF ON ON
7 OFF OFF OFF ON
8 ON OFF OFF ON

Modo de medio paso: secuencia de señal de control 8 pasos (recomendada) 5.625 grados por paso / 64 pasos por una revolución del eje del motor interno. Relación de transmisión 64. Total 64 x 64 = 4096 pasos.

Modo de paso completo: secuencia de señal de control de 4 pasos 11.25 grados por paso / 32 pasos por una revolución de la interna eje de motor. Relación de transmisión 64. Total 64 x 32 = 2048 pasos.

Esquema de conexión:

Conexiones de la placa de driver:

Ejercicio basado en http://www.prometec.net/motor-28byj-48/

Otros tutoriales:

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio31-Stepper

La otra manera de programar un motor 28BYJ-48 es utilizar la librería Steper que viene incluida con el entorno de desarrollo oficial de Arduino. Esta librería nos facilita el uso de este tipo de motores y viene adaptada para motores bipolares. En este caso la librería stepper usa el modo de paso completo en lugar del medio paso. En este caso el nº de pasos por vuelta es 2048.

Llevando esta secuencia de encendido a una tabla, que posteriormente usaremos para el código, la secuencia quedaría de la siguiente forma:

Paso A B A’ B’
1 ON OFF OFF OFF
2 OFF ON OFF OFF
3 OFF OFF ON OFF
4 OFF OFF OFF ON

Código para mover el motor:

 
 
#include <Stepper.h>
#define STEPS 2048
 
Stepper stepper(STEPS, 8, 9, 10, 11);

void setup() {
  stepper.setSpeed(10);
}
 
void loop() {
  stepper.step(2048);
}
Anuncios

Motores Arduino

Como ya se ha visto anteriormente, un pin de Arduino solo puede tener valores de 0 y 5 voltios y dar hasta 40 mA de corriente. Esto es insuficiente para mover casi cualquier 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, es decir, basta con invertir la polaridad de la pila o batería.

Para controlar un motor DC desde Arduino, tendremos que usar un driver de motores para proporcionar más corriente al motor ya que las salidas del Arduino sólo dan hasta 40mA y más voltaje porque este tipo de motores suelen ser de 6V o más. El driver debemos alimentarlo con una fuente de alimentación externa con el voltaje y corriente eléctrica suficiente para mover el motor..

Más información:

Driver L293D

El L293D es un integrado para controlar motores DC que usa doble puente en H. Es un sistema para controlar el sentido de giro de un motor DC usando cuatro transistores y también para variar 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. Estas especificaciones nos indican el tipo de motores que podremos usar con este driver.

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 pines 2 y 7 son las entradas donde conectaremos las salidas del Arduino. Dependiendo del valor aplicado entre los pines 2 y 7 el motor girará en un sentido o en otro.

IMPORTANTE: si 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 llevar los diodos 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 pines 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/

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

Driver L298

Otro driver de motor muy utilizado es el L298 (datasheet) que es el utilizado por el Arduino motor shield. Este driver es similar en funcionamiento al anterior pero posee un sensor de corriente muy útil y puede manejar corrientes más grandes que el L293D.

Arduino motor shield: https://www.arduino.cc/en/Main/ArduinoMotorShieldR3

Montaje:

Diagrama:

Esquema de conexión:

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:

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 líneas 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

Video brushed DC motors https://www.baldengineer.com/videos/brushed-dc-motor-video-tutorial

Buen tutorial de uso de Arduino con L298: http://www.electrontools.com/Home/WP/2016/05/06/puente-h-con-driver-l298/

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

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.

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:

Motor DC Brushless

Un motor DC sin escobillas o motor brushless es un motor eléctrico que no emplea escobillas para realizar el cambio de polaridad en el rotor. Los motores eléctricos solían tener un colector de delgas o un par de anillos rozantes. Estos sistemas, que producen rozamiento, disminuyen el rendimiento, desprenden calor y ruido, requieren mucho mantenimiento y pueden producir partículas de carbón que manchan el motor de un polvo que, además, puede ser conductor.

Los primeros motores sin escobillas fueron los motores de corriente alterna asíncronos. Hoy en día, gracias a la electrónica, se muestran muy ventajosos, ya que son más baratos de fabricar, pesan menos y requieren menos mantenimiento, pero su control era mucho más complejo. Esta complejidad prácticamente se ha eliminado con los controles electrónicos.

Más información:

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

El inversor debe convertir la corriente continua de la batería o fuente de alimentación en alterna de una frecuencia determinada. Algunas aplicaciones serían los coches y aviones con radiocontrol, que funciona con pilas.

Los motores brushless se usan habitualmente en los drones y 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  

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 caso de usar varios servos con un mismo Arduino, este no podrá alimentarlos y habrá que usar una fuente de alimentación externa.

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 de los servos 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.

En Arduino la frecuencia por defecto de PWM es de 500 Hz, pero con la librería servo conseguimos una señal PWM con la frecuencia y duty cycle adecuada.

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

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

Más información de servos: http://platea.pntic.mec.es/vgonzale/cyr_0204/ctrl_rob/robotica/sistema/motores_servo.htm

IMPORTANTE: La librería servo soporta hasta 12 servos en la mayoría de los Arduinos, pero deshabilita el uso de PWM en los pines 9 y 10 puesto que hace uso del timer que controla esas señales. En el caso del mega hay otras restricciones.

Más información:

Todos los servos tienen 3 cables de conexión uno para alimentación DC (normalmente 5-6V), otro para masa y el tercero para la señal.

Los tamaños de los servos son:

Características de los servos:

  • Torque: determina la máxima fuerza rotacional que puede aplicar el servo, se mide en kg.cm. Cambia a mínimo y máximo voltaje
  • Voltaje: mínimo y máximo
  • Corriente: con carga y sin carga.
  • Velocidad: la medida del tiempo que tarda en rotar un cierto número de grados, se mide en sec/60º. Es diferente a mínimo y máximo voltaje.

Tipos de servos, en función de cómo es procesada la señal:

  • Analógico: aplica señales de voltaje on off  para controlar la velocidad. El voltaje es constante. La frecuencia está estandarizada a 50 ciclos por segundo.
  • Digital: tiene un microprocesador dentro que analiza la señal y la procesa en pulsos de voltaje de alta frecuencia hasta 300 pulsos por segundo. Los pulsos serán más cortos en tiempo. Con esto se consigue una mayor velocidad y un torque constante. Estos servos tienen un tiempo de respuesta mayor y una mejor capacidad de retención. Estos servos tiene la desventaja de un mayor consumo eléctrico.

Más información sobre servos analógicos y digitales: http://www.futabarc.com/servos/digitalservos.pdf

La mayoría de los servos estándar y low cost, usan un motor DC estándar de 3 polos. Hay servos con motores de 5 polos que hace que el servo sea más rápido en aceleración y mayor torque en el arranque. Pero también hay servos:

  • Coreless: el núcleo de acero es sustituido por un bobinado ligero.
  • Brushless. Son más eficiente y dan más fuerza, además de una vida útil mayor.

El consumo eléctrico de un servo depende de la carga y el modelo del servo. Un servo analógico estándar consume entre 250-700mA. Por lo tanto si alimentamos varios servos desde el pin de 5V de Arduino es posible que nos sea posible moverlos por la limitación en amperios de Arduino, esa limitación viene del regulador de tensión que alimenta el bus de 5V de Arduino. Por ejemplo en el caso de Arduino UNO el regulador es el NCP1117ST50T3G que como puede verse en su datasheet http://www.onsemi.com/pub_link/Collateral/NCP1117-D.PDF puede dar hasta 1 amperio, aunque soporta picos mayores.

Algunos servos comerciales y características:

Ranuras de los servos: https://www.servocity.com/servo-spline-info

Tabla de selección de servos: https://www.ia.omron.com/data_pdf/guide/14/servo_selection_tg_e_1_1_3-13(further_info).pdf

Controladores para servos

Un servo puede controlarse directamente con un Arduino para generar la señal de control que hemos visto anteriormente.

También es posible adquirir controladores de servo y especialmente con capacidad de radiocontrol o para manejar muchos canales.

Controladores servo de pololu: https://www.pololu.com/category/12/rc-servo-controllers

Torobot controlador de 32 canales para servos:

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/

Servos de rotación continua comerciales:

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

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.

Elementos de un motor paso a paso:

En la construcción de un motor paso a paso el estator puede tener 4, 8, etc… polos y los imanes permanentes del rotor pueden tener múltiples polos. En función del número de ellos serán los pasos que conforman una vuelta del motor paso a paso.

Funcionamiento:

Los motores paso a paso se dividen en dos grandes grupos: bipolar y unipolar. Muy buena comparativa de motores paso a paso unipolares o bipolares: https://www.330ohms.com/blogs/blog/85507012-motores-a-pasos-unipolares-o-bipolares

La mayoría de los motores que encontraremos son bipolares puesto que son más baratos, con mayor torque y más pequeños. La desventaja es que el control es más complicado.

Motores paso a paso de Pololu: https://www.pololu.com/category/87/stepper-motors

Más información sobre los motores paso a paso:

Motor Paso a Paso vs Servo

Los motores paso a paso son más lentos, 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.

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 para aplicaciones con velocidades bajas los motores paso a paso 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 alta velocidad, alta aceleración o aplicaciones críticas, el bucle cerrado de los servos es importante. Esto ocurre por ejemplo cuando se trabaja con accesorios caros en los que los fallos no son aceptables.

Guía para comprar motores paso a paso: https://www.staticboards.es/blog/motores-paso-paso/

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

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

NOTA: En caso de que tengamos un motor DC y queramos hacer un control de posición, podemos añadirle un encoder y si queremos más par es posible añadir una reductora. Ejemplo de un motor CC con reductora y encoder como alternativa a steppers y servos: https://www.servocity.com/html/26_rpm_planetary_gearmotor_w__.html#.VpfFM_nhDct

Drivers Motores Paso a Paso

Los motores bipolares son más baratos pero 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).

También es posible usar el L298 para controlar un motor paso a paso.

Motor bipolar:

Señal que mandamos para controlar un paso a paso (4 pasos):

En pasos de 90 grados, como se magnetiza cada núcleo:

Más información: http://www.hteck.ca/electronics/stepper-motor-drv/sm-driver.html

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

Con esta librería mandamos los pasos mediante programación en lugar de hacerlo con una señal del microcontrolador.

Step wire 1 wire 2 wire 3 wire 4
1 High low high low
2 low high high low
3 low high low high
4 high low low high

Más información y código en:

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

Para el caso de un motor unipolar es más sencillo el control y no es necesario un L293D sino que es suficiente con unos transistores o unos pares darlington.

Motor unipolar 28BYJ-48 controlado con un chip ULN2003A que es un array de transistores Darlington, que soporta hasta 500 mA.

Esquema de conexión usando 4 pines del microcontrolador:

Drivers Pololu

Los drivers de motores paso a paso más famosos son los Pololu, en concreto los A4988 y DRV8825.

Drivers de Pololu: https://www.pololu.com/category/120/stepper-motor-drivers, estos drivers son los más usado en impresoras 3D y máquinas CNC.

Drivers de un motor paso a paso:

En el caso del A4998 cuenta con dos filas de 8 pines a cada lado. Por un lado tiene los pines para controlar la parte digital, y por el otro tiene la parte dedicada a la corriente de los motores. Incluye un potenciómetro para regular la corriente máxima que circula por las bobinas del motor.

En la parte digital tenemos los siguientes pines:

ENABLE Permite que el driver pueda enviar corriente al motor
MS1 Configuración de los micropasos
MS2 Configuración de los micropasos
MS3 Configuración de los micropasos
RESET Normalmente conectado a Sleep para que el driver funcione
SLEEP Normalmente conectado a Reset para que el driver funcione
STEP El arduino manda un pulso para que el motor avance un paso
DIR Indicamos la dirección de giro del motor que queremos

En la parte de potencia tenemos estos pines:

VMOT Alimentación de los motores (entre 8V y 35V)
GND Ground de la parte de motores
2B Bobina 2
2A Bobina 2
1A Bobina 1
1B Bobina 1
VDD Alimentación de la parte digital (5V)
GND Ground de la parte digital

Esquema de conexión A4998:

Los drivers basados en el Texas Instruments DRV8825 se usa en aplicaciones para más fuerza en los motores. Este es el chip más popular entre los usuarios más avanzados de CNC y de Impresoras 3D.

Fantastica guía de drivers https://www.staticboards.es/blog/drv8825-vs-a4988/

Tiene dos ventajas fundamentales sobre el chip de Allegro A4988.

  • Es más potente. Permite una corriente de pico de 2.5A.
  • Con la misma configuración de jumpers, permite 32 micropasos, que da un movimiento más fluido.

Esquema de conexión DRV8825:

Cuando configuramos una impresora 3D o una máquina CNC, tenemos que recordar los DRV8825 tiene 32 micropasos, y el a4988 tiene 16 micropasos. El DRV8825 funciona con 45V y el A4988 sólo 35V. El DRV8825 puede manejar 1.5A sin necesidad de un disipador adicional. El A4988 sólo llega a los 1.2A

Los tiempos de las señales son ligeramente distintos. Los DRV8825 necesitan un tiempo mínimo de pulso de 1.9µs y el A4988 de 1µs. Esto puede afectar a la velocidad máxima a la que puedes mover el driver, ya que tienes que esperar a que el driver detecte el pulso el doble de tiempo.

Estos drivers permiten pasar más o menos corriente a tu motor. No todos los motores están preparados para soportar la misma cantidad de corriente circulando por las bobinas. Si circula demasiada corriente los motores se van a sobrecalentar.

Unos drivers calibrados mantienen los motores a una temperatura adecuada. Para calibrarlos hay que comprobar que motor estamos usando y la corriente que admite, luego y con un polímetro ajustar el potenciómetro a la corriente adecuada.

Con estos drivers el Arduino manada los pulsos al driver pero con el L293D o el L298N el pulso lo genero en la programación de Arduino con la librería Stepper.h.

Disponemos de la librería https://github.com/laurb9/StepperDriver de Arduino para manejar motores paso a paso con estos drivers de Pololu. Tiene un código más depurado y puedes configurar la velocidad de motor en RPM y los microsteps.

Más información de estos drivers: https://www.luisllamas.es/motores-paso-paso-arduino-driver-a4988-drv8825/

Ejemplo de uso de DRV8825 con Arduino sin librería: http://www.geeetech.com/wiki/index.php/DRV8825_Motor_Driver_Board

Tutoriales:

Microstepping

La técnica de microstep permite multiplicar hasta por 32 el número de pasos de un motor paso a paso, haciendo que tenga un movimiento más suave. Consiste en no usar la corriente completa en cada bobina cada pulso, sino aplicar un porcentaje de la corriente simulando una onda senoidal que se aplica a las bobinas del motor.

Los  motores paso a paso más habituales tienen 200 pasos por vuelta, por lo tanto cada paso es de 1,8º.

Cuando usamos los full steps la salida del driver al motor es una onda cuadrada y produce movimientos bruscos. Cuando mayor es el microstepping, la salida del driver más se parece a una onda senoidal y el motor se mueve de una forma más suave. Al aumentar los micro steps, el torque disminuye, de forma que si aumentamos mucho los pasos intermedios llega un punto que el motor no puede mover la carga. Normalmente microstepping de 1/4, 1/8 o 1/16 son adecuados para obtener un movimiento suave.

El microstepping nos dice cuantos micro steps necesitamos para hacer un paso completo, por ejemplo un microstepping de 1/4 significa que se dan 4 micropasos para hacer un paso completo de 1,8º y una vuelta son 800 micropasos.

Ver video https://www.youtube.com/watch?v=bkqoKWP4Oy4 que explica como funciona un motor paso a paso y como controlarlo. A partir del minuto 5 habla de microstepping.

En el caso de los drivers de pololu los microsteps se configuran mediante 3 pines. En el caso del A4988 la tabla de configuración es:

Más información sobre microstepping:

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

Proyectos Sencillos con Arduino

Hagamos unos proyectos sencillos con Arduino usando sensores, actuadores y comunicaciones.

Menú interactivo con Arduino

Con todo lo visto  anteriormente de comunicación serie, operadores, estructuras de control y funciones, hacer un ejemplo de un menú interactivo donde se dan varias opciones y pulsando cada una de ellas se ejecuta una acción concreta. Si el valor pulsado no es ninguna de las opciones avisar y volver a mostrar el menú hasta que se pulse una opción correcta.

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio46-Estructuras_de_Control

Mover un Servo

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

Mover un Servo con un Acelerómetro

Una IMU (Inertial Measurement Unit) es un dispositivo capaz de medir la fuerza (aceleración) y la velocidad. Generalmente consta de un Acelerómetro y un Giroscopio. Por lo tanto una IMU no mide ángulos, por lo menos no directamente, requiere algunos cálculos.

Un dispositivo I2C muy interesante es el MPU-6050 que nos sirve para probar e introducirnos en el mundo de los giroscopios y acelerómetros.

Para esta práctica vamos a utilizar una Breakout board bastante típica llamada GY-521, que incluye la IMU MPU-6050 y un regulador de tensión, con lo que podemos alimentar a tanto 3.3V como a 5V.

El siguiente diagrama muestra la orientación de los ejes de sensibilidad y la polaridad de rotación.

El acelerómetro mide la aceleración. La aceleración puede expresarse en 3 ejes: X, Y y Z, las tres dimensiones del espacio. Por ejemplo, si mueves la IMU hacia arriba, el eje Z marcará un cierto valor. Si es hacia delante, marcará el eje X, etc. La gravedad de la Tierra tiene una aceleración de aprox. 9.8 m/s², perpendicular al suelo como es lógico. Así pues, la IMU también detecta la aceleración de la gravedad terrestre. Gracias a la gravedad terrestre se pueden usar las lecturas del acelerómetro para saber cuál es el ángulo de inclinación respecto al eje X o eje Y.

Supongamos que la IMU esté perfectamente alineada con el suelo. Entonces, como puedes ver en la imagen, el eje Z marcará 9.8, y los otros dos ejes marcarán 0. Ahora supongamos que giramos la IMU 90 grados. Ahora es el eje X el que está perpendicular al suelo, por lo tanto marcará la aceleración de la gravedad.

Si sabemos que la gravedad es 9.8 m/s², y sabemos qué medida dan los tres ejes del acelerómetro, por trigonometría es posible calcular el ángulo de inclinación de la IMU. Una buena fórmula para calcular el ángulo es:

Dado que el ángulo se calcula a partir de la gravedad, no es posible calcular el ángulo Z (giro sobre si mismo) con esta fórmula ni con ninguna otra. Para hacerlo se necesita otro componente: el magnetómetro, que es un tipo de brújula digital. El MPU-6050 no lleva, y por tanto nunca podrá calcular con precisión el ángulo Z. Sin embargo, para la gran mayoría de aplicaciones sólo se necesitan los ejes X e Y.

Esquema de conexión IMU:

Esquema conexión servo:

Mover el servo en función del ángulo en el eje x obtenido de la IMU.

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio66-Servo_IMU/IMU_1servo

Hacer el mismo ejemplo pero con un sistema de dos grados de libertad con dos servos y moviéndose en función de los grados obtenidos del IMU en los ejes x e y.

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio66-Servo_IMU/IMU_2servos

Proyectos con Piezas Impresas 3D

Ahora disponemos de las herramientas para hacer un proyecto completo, imprimiendo las piezas en 3D, montando un arduino y los sensores y actuadores en las piezas.

Robot impreso en 3D: http://otto.strikingly.com/

Tutoriales de construcción:

Código: https://github.com/OttoDIY

Brazo robot para montar con unos servos y tornillos:

Más proyectos impresos 3D con Arduino:

Electrónica, Sensores, Actuadores y Periféricos

Conceptos Elementales

Corriente Continua

La corriente continua (CC en español, en inglés DC, de Direct Current) se refiere al flujo continuo de carga eléctrica a través de un conductor entre dos puntos de distinto potencial, que no cambia de sentido con el tiempo. A diferencia de la corriente alterna (CA en español, AC en inglés, de Alternating Current), en la corriente continua las cargas eléctricas circulan siempre en la misma dirección. Aunque comúnmente se identifica la corriente continua con una corriente constante, es continua toda corriente que mantenga siempre la misma polaridad, así disminuya su intensidad conforme se va consumiendo la carga (por ejemplo cuando se descarga una batería eléctrica). También se dice corriente continua cuando los electrones se mueven siempre en el mismo sentido, el flujo se denomina corriente continua y va (por convenio) del polo positivo al negativo.

Ley de Ohm

La ley de Ohm, postulada por el físico y matemático alemán Georg Simon Ohm, es una ley de la electricidad. Establece que la intensidad de la corriente I que circula por un conductor es proporcional a la diferencia de potencial V que aparece entre los extremos del citado conductor. Ohm completó la ley introduciendo la noción de resistencia eléctrica  R; esta es el coeficiente de proporcionalidad que aparece en la relación entre I y V.

Pulsador

Un botón o pulsador es un dispositivo utilizado para realizar cierta función. Los botones son de diversas formas y tamaños y se encuentran en todo tipo de dispositivos, aunque principalmente en aparatos eléctricos y electrónicos. Los botones son por lo general activados, al ser pulsados con un dedo. Permiten el flujo de corriente mientras son accionados. Cuando ya no se presiona sobre él vuelve a su posición de reposo.

Puede ser un contacto normalmente abierto en reposo NA o NO (Normally Open en Inglés), o con un contacto normalmente cerrado en reposo NC.

Cuando nos de desenvolvemos en el entorno de los microcontroladores, nos encontramos con un término poco común, me refiero a la polarización de una E/S, debemos saber que hay dos tipos de polarización, polarización alta la resistencia (término inglés Pullup) va conectada a + (5V) o polarización baja la resistencia (término inglés Pulldown) va conectada a masa – (0V). Siguen dos esquemas de estos términos:

Al trabajar con botones nos vamos a encontrar el problema de los rebotes o bouncing. La solución pasa por leer el estado del botón cuando se produce el borde ascendente de la tensión a extremos de los contactos del pulsador e introducir inmediatamente la salida con ese estado, el resto de entradas (se llama ruido) se inhiben o anulan mediante un lapsus de tiempo. Véase la imagen de debajo para entender mejor lo dicho.

Para solucionar el problema de los rebotes podemos hacerlo vía hardware o software:

  • Hardware: aquí se pueden utilizar diferentes técnicas, pero la más común es utilizar un condensador conectado en paralelo al pulsador. El condensador tardará cierto tiempo en cargarse y una vez que esté cargado, la señal de salida será igual a la señal de entrada.
  • Software: puede utilizarse solamente cuando tratemos la señal con un procesador, es decir, hay algún programa que lea la señal emitida por el pulsador. La técnica más utilizada consiste en ignorar las conmutaciones del valor del sensor si desde la última conmutación válida no ha pasado suficiente tiempo.

Sensores

Un sensor es un dispositivo capaz de detectar magnitudes físicas o químicas, llamadas variables de instrumentación, y transformarlas en variables eléctricas. Las variables de instrumentación pueden ser por ejemplo: temperatura, intensidad lumínica, distancia, aceleración, inclinación, desplazamiento, presión, fuerza, torsión, humedad, movimiento, pH, etc. Una magnitud eléctrica puede ser una resistencia eléctrica (como en una RTD), una capacidad eléctrica (como en un sensor de humedad o un sensor capacitivo), una tensión eléctrica (como en un termopar), una corriente eléctrica (como en un fototransistor), etc.

Los sensores se pueden clasificar en función de los datos de salida en:

  • Digitales
  • Analógicos

Y dentro de los sensores digitales, estos nos pueden dar una señal digital simple con dos estados como una salida de contacto libre de tensión o una salida en bus digital.

A la hora de elegir un sensor para Arduino debemos tener en cuenta los valores que puede leer las entradas analógicas o digitales de la placa para poder conectarlo o sino adaptar la señal del sensor a los valores que acepta Arduino.

Una vez comprobado que el sensor es compatible con las entradas de Arduino, hay que verificar cómo leer el sensor mediante la programación, comprobar si existe una librería o es posible leerlo con los métodos disponibles de lectura de entrada analógica o digital.

Por último verificar cómo alimentar el sensor y comprobar si podemos hacerlo desde el propio Arduino o necesitamos una fuente exterior. Además, en función del número de sensores que queramos conectar es posible que Arduino no pueda alimentar todos. Para saber si podremos alimentar los sensores, debemos conocer las limitaciones de alimentación de Arduino que veremos en el capítulo 2 del curso http://www.aprendiendoarduino.com/arduino-avanzado-2016/

Características de  los sensores

  • Rango de medida: dominio en la magnitud medida en el que puede aplicarse el sensor.
  • Precisión: es el error de medida máximo esperado.
  • Offset o desviación de cero: valor de la variable de salida cuando la variable de entrada es nula. Si el rango de medida no llega a valores nulos de la variable de entrada, habitualmente se establece otro punto de referencia para definir el offset.
  • Linealidad o correlación lineal.
  • Sensibilidad de un sensor: suponiendo que es de entrada a salida y la variación de la magnitud de entrada.
  • Resolución: mínima variación de la magnitud de entrada que puede detectarse a la salida.
  • Rapidez de respuesta: puede ser un tiempo fijo o depender de cuánto varíe la magnitud a medir. Depende de la capacidad del sistema para seguir las variaciones de la magnitud de entrada.
  • Derivas: son otras magnitudes, aparte de la medida como magnitud de entrada, que influyen en la variable de salida. Por ejemplo, pueden ser condiciones ambientales, como la humedad, la temperatura u otras como el envejecimiento (oxidación, desgaste, etc.) del sensor.
  • Repetitividad: error esperado al repetir varias veces la misma medida.

Más información: http://es.wikipedia.org/wiki/Sensor#Caracter.C3.ADsticas_de_un_sensor

Tipos de sensores: http://es.wikipedia.org/wiki/Sensor#Tipos_de_sensores

Ejemplos Sensores para Arduino

Actuadores y Periféricos

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

Periférico es la denominación genérica para designar al aparato o dispositivo auxiliar e independiente conectado a la unidad central de procesamiento o en este caso a Arduino. Se consideran periféricos a las unidades o dispositivos de hardware a través de los cuales Arduino se comunica con el exterior, y también a los sistemas que almacenan o archivan la información, sirviendo de memoria auxiliar de la memoria principal.

Ejemplos de periféricos:

  • Pantallas LCD
  • Teclados
  • Memorias externas
  • Cámaras
  • Micrófonos
  • Impresoras
  • Pantalla táctil
  • Displays numéricos
  • Zumbadores
  • Indicadores luminosos, etc…

Para cada actuador o periférico, 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.
  • Recordar que los pines Arduino solo pueden tener los valores de 5V (3.3V en algunos modelos) y 0V. No es posible cualquier otro valor de tensión.
  • La alimentación máxima del pin de 5V y del pin de 3.3V dependerá del regulador de tensión que tenga la placa, en el caso de Arduino UNO la limitación es 1 A para 5V y 150 mA para 3.3V

A la hora de seleccionar un actuador o periférico para usar con arduino habrá que ver sus características y cómo hacer el interface con arduino. En el playground de Arduino existe una gran base de datos de conocimiento para conectar Arduino con casi cualquier HW: http://playground.arduino.cc/Main/InterfacingWithHardware

Tutoriales para conectar Arduino con diversos dispositivos: http://playground.arduino.cc/Learning/Tutorials

Ejemplos de Actuadores y Periféricos para Arduino

Práctica: Sensores y Actuadores

Smoothing: https://aprendiendoarduino.wordpress.com/2016/07/02/smoothing/

Sensor de Temperatura: https://aprendiendoarduino.wordpress.com/2016/07/02/sensor-de-temperatura/

Display LCD: https://aprendiendoarduino.wordpress.com/2016/07/03/display-lcd/

Motores: https://aprendiendoarduino.wordpress.com/2016/09/16/uso-de-motores-2/