Archivo de la categoría: Motores

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/

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