Archivo de la categoría: Electrónica

EasyDriver – Controladora de motor paso a paso con modos de micropaso

La EasyDriver nos da la capacidad de manejar motores paso a paso bipolares con consumos entre 150 mA a 700 mA por fase. Permite el control motores bipolares con mucha facilidad de programación en modo estándar de paso directo, y en modos de micropaso de 1/2, 1/4 y 1/8 de paso.

Con respecto a cuestiones de hardware, se pueden soldar cables directamente al EasyDriver, o utilizar conectores en la alimentación, motores y señales de control para poder realizar cableados de prueba. La mejor opción para usted dependerá de su aplicación.

Lecturas sugeridas

Si usted no está familiarizado con los siguientes conceptos, se recomienda revisarlos antes de empezar a trabajar con la EasyDriver.

Instalar el entorno de desarrollo integrado de Arduino (IDE)
Motores paso a paso
Video motor paso a paso

Descripción general del hardware

La placa EasyDriver fue diseñada por Brian Schmalz, y su núcleo principal es el circuito integrado A3967. Este integrado permite manejar motores paso a paso bipolares con configuraciones de 4, 6 u 8 cables. La placa puede trabajar controlado desde sistemas de 3,3 V o 5V, por lo que es extremadamente versátil. Dos agujeros de montaje en la placa le dan al usuario la opción de sostener la EasyDriver con tornillos o postes de sujeción.

Descripción de las entradas y salidas de la placa

Vamos a echar un vistazo a todos los pines perforados que conectan hacia el exterior el circuito integrado A3967 en la EasyDriver.

Conexiones de la parte superior de la placa

Si se observa a lo largo de la parte superior de la placa, podrá ver varias perforaciones de conexión.

Funcionan de la siguiente manera:

Coil A+ : Salida del puente-H, polo + de la conexión para la bobina A del motor bipolar.
Coil A- : Salida del puente-H, polo – de la conexión para la bobina A del motor bipolar.
Coil B+ : Salida del puente-H, polo + de la conexión para la bobina B del motor bipolar.
Coil B- : Salida del puente-H, polo – de la conexión para la bobina B del motor bipolar.
PFD : Voltaje de entrada que selecciona el modo de descenso de la corriente de la salida. Si PFD > 0,6 Vcc, activa el modo de descenso de corriente lento. Si PFD < 0,21 Vcc, activa el modo de descenso rápido. Si el valor está en 0,21 Vcc < PFD < 0,6 Vcc se produce un descenso intermedio de la corriente. RST : Entrada lógica. Cuando está en BAJO, todos los comandos son ignorados y todos los transistores de salida se desactivan. Debe ser puesto en ALTO para habilitar el control de los pasos.
ENABLE : Entrada lógica. Permite que funcionen los transistores de salida dentro del puente H que maneja el motor. Si se pone en ALTO, desactiva los transistores, y el chip no manejará el motor. Si se pone en BAJO, los transistores de salida son habilitados, lo que permite el control del motor.
MS2 : Entrada Lógica. Ver tabla de verdad de abajo para los ALTOS y BAJOS que definen la funcionalidad.
GND : Tierra.
M+ : Fuente de alimentación. 6-30V, corriente 2A.

Conexiones de la parte inferior de la placa

También hay conexiones en la parte inferior de la placa. Sus funciones son:

GND : Tierra.
5V : Salida. Este pin puede ser utilizado para alimentar un circuito externo. Se pueden utilizar como máximo 70 mA para asegurar la funcionalidad del controlador.
SLP : Entrada lógica. Cuando pone a BAJO, las salidas están desactivadas y el consumo de energía se reduce al mínimo.
MS1 : Entrada lógica. Ver tabla de verdad de abajo para los ALTOS y BAJOS que definen la funcionalidad.
GND : Tierra.
STEP : Entrada lógica. Cualquier transición en este pin de BAJO a ALTO activa el motor para que avance un paso. La dirección y la extensión de los pasos se controla por la configuración de los pines DIR y MSx. Esta podrá ser de 0 a 5 V, o de 0 a 3 V en base al nivel lógico que se ha seleccionado.
DIR : Entrada lógica. Esta línea determina la dirección de rotación del motor. Los cambios en el estado de ALTO a BAJO, o BAJO a ALTO solo tienen efecto en el siguiente flanco de subida de la línea de comando STEP. Esta podrá ser de 0 a 5 V, o de 0 a 3 V en base al nivel lógico que se ha seleccionado.

Puentes de soldadura

Hay dos conjuntos de puntos de soldadura para soldar puentes de configuración en la placa. Estos proporcionan las siguientes elecciones para el usuario:

3/5 V – Este puente permite que el usuario defina la configuración de VCC entre 3,3 V o 5 V. Con el puente abierto, VCC será de 5 V. Si el puente está cerrado, VCC es de 3,3 V. El valor de VCC define los niveles lógicos que aceptará la placa en sus entradas.

APWR – Este puente habilita que la fuente VCC entregue + y GND en los pines de alimentación de hardware externo.

Potenciómetro de ajuste de corriente

El potenciómetro que se incluye en la placa permite que los usuarios puedan ajustar la corriente máxima que se suministra al motor. El rango de ajuste va de 150 mA a 750 mA. Esto requerirá saber qué valores de corriente puede manejar su motor. Revise la hoja de datos del motor para una calibración correcta.

Si usted no puede encontrar esta información, no se preocupe: todavía puede encontrar el ajuste adecuado de este potenciómetro. En primer lugar, establezca el potenciómetro en su valor mínimo. Tenga en cuenta que el potenciómetro es delicado, así que no fuerce el potenciómetro más allá de los topes mecánicos que lo detienen en ambos extremos de su giro. Aumente lentamente la corriente observando el movimiento del motor. Una vez que el motor se mueva a una velocidad lenta pero constante, gire poco a poco el potenciómetro y preste atención al comportamiento del motor. Usted debe encontrar un punto justo en el que el motor no salte o se observen tirones entre los pasos.

Conectar los cables de las bobinas del motor

Usted tendrá que determinar cuáles son los pares de cables de cada bobina del motor que va a utilizar. El método más fiable para hacerlo es observar la hoja de datos del motor, donde indicará los colores de los cables o la posición de los puntos de conexión.

Diagrama de bobinas de un motor paso a paso NEMA 16 con cables


Sin embargo, si usted va a utilizar cualquier otro motor paso a paso de 4 o 6 cables, es posible determinar los pares correctos de cables de cada bobina a conectar sin tener la hoja de datos.

Determinación de los cables de un motor paso a paso

En un motor de 4 cables, tome uno de los cables y compruebe con un multímetro su resistencia contra cada uno de los tres cables restantes. Aquel cable que muestre el menor valor de resistencia contra el primer cable es el que está apareado con él. Los otros dos cables deben mostrar resistencia similar entre ellos.

Para un motor de 6 cables, usted tendrá que determinar cuáles son los tres cables que están unidos a una bobina. Escoja un cable y pruebe su valor de resistencia contra todos los otros cables. Dos de los cables deben mostrar algún valor de resistencia entre ellos y el primer cable escogido, mientras que los otros tres no mostrarán conexión en absoluto. Una vez que se han determinado cuáles son los tres cables de una bobina, busque a dos entre estos tres que muestren la mayor resistencia entre sí. Estos serán los cables a usar de esta bobina. Repita el procedimiento para el segundo grupo de tres cables.




Una vez que haya determinado los pares de cables de la bobina, debe unirlos a la placa EasyDriver. El par de cables de la primera bobina debe ser conectado a la conexión Coil A+ y el otro a Coil A-. El par de cables de la segunda bobina se conecta a Coil B+ y a Coil B-. Las bobinas no tienen polaridad, así que usted no debe preocuparse de conectar una bobina al revés en la placa. En nuestro ejemplo, estamos usando un motor de 4 cables. Las conexiones entre la EasyDriver y el motor son como sigue.

Conexión EasyDriver al motor (Nema 14, 16 o similar)

Conecte una fuente de alimentación

Una vez que el motor está cableado, puede conectar una fuente de alimentación para la EasyDriver. Se puede utilizar cualquier tipo de fuente de alimentación (de escritorio, adaptador de pared, una batería, etc.), pero compruebe que cualquiera sea la opción que se utilice debe ser capaz de entregar hasta 2 A y estar en el rango de 6 V a 30 V.

Conecte la fuente de alimentación a M+ y GND. Recuerde desconectar la alimentación antes de conectar o desconectar el motor.

Conectar a un microcontrolador

Necesitaremos:

Cables

Arduino UNO R3

Conectores

Motor paso a paso bipolar con corriente de bobina hasta un máximo de 700 mA

Para este ejemplo, vamos a utilizar un Arduino UNO. Sin embargo, cualquier microcontrolador que funcione con una lógica de 3,3 V o 5 V, y que posea entradas / salidas digitales con capacidad de trabajar en modo PWM sirve para utilizar con este ejemplo de circuito.

Aquí están las conexiones para nuestro ejemplo:

Circuito final

Una vez que está todo conectado, el circuito debe tener el siguiente aspecto:

Ejemplo de código básico para el Arduino

Ahora que usted tiene el hardware conectado y listo para funcionar, es el momento de obtener el código y cargarlo. En primer lugar, descargue el programa de ejemplo.

DESCARGAR EL PROGRAMA DE DEMOSTRACIÓN DE LA PLACA EASYDRIVER
DESCARGAR PROGRAMA COMPLETO CON COMENTARIOS Y NOMBRES EN ESPAÑOL

Para obtener el código más actualizado que esté disponible, se puede consultar el repositorio de GitHub. Si usted necesita un recordatorio en cuanto a cómo se instala una biblioteca en el IDE de Arduino, por favor vea este tutorial aquí.

La primera sección del programa define todas las conexiones entre el Arduino y la EasyDriver. También establece estos pines como salidas, y los pone a los niveles lógicos adecuados para comenzar a manejar el motor.

Una cosa que debemos señalar es que el código también inicializa la conexión serie a 9600 bps. Esto permite que el usuario dé las indicaciones para controlar la funcionalidad del motor y depurar las conexiones, si es necesario.

El bucle principal del código es bastante simple. Arduino comprueba el puerto serie para ver si hay una orden ingresada por el usuario. Cuando lo recibe, compara con las cuatro posibles funciones para el motor, que inicia su funcionamiento cuando llega la entrada del usuario. Si se escribe una entrada que no sea una de las opciones posibles, Arduino imprime una indicación de error en el puerto serie.

Después de que la solicitud de una función se ha completado, la EasyDriver se restablece a los valores predeterminados.

La primera de las cuatro funciones que se habilita en este programa de demostración es un ejemplo básico que muestra el motor girando en un sentido. El pin de dirección (DIR) se coloca en BAJO (LOW), que para nuestro programa se define como la dirección «Adelante». A continuación, pone el pin STEP a ALTO (HIGH), hace una pausa y, a continuación, lo coloca en BAJO.

Recuerde: el motor da pasos cuando hay transiciones en el pin STEP de BAJO a ALTO, por lo que hay que cambiar el estado del pin una y otra vez. Esto se repite 1000 veces y, a continuación, Arduino solicita una entrada de usuario para determinar la siguiente actividad del motor.

La función de giro inverso funciona exactamente de la misma forma que la anterior, la única diferencia es que en lugar de poner el pin de dirección a BAJO, lo establecemos en ALTO, por lo tanto cambiará la dirección de giro del motor.

Una cosa que usted puede probar en cualquiera de estas dos funciones es modificar la velocidad del motor al cambiar el valor pasado a delay(). Está establecido en 1 microsegundo, haciendo que el pulso para cada paso sea de 2 microsegundos. El aumento de la demora reduce la velocidad del motor, mientras que al disminuir el retardo aumenta la velocidad del motor.

La tercera función demuestra las diferentes opciones de micropasos (microstepping) que proporciona la EasyDriver. Para habilitar el motor paso a paso a 1/8 de paso, debemos establecer MS1 y MS2 en ALTO. Esto establece la lógica de la placa al modo de 1/8 de paso.

Si usted quiere probar el motor paso a paso con diferentes modos de paso, cambie la configuración de uno de los pines MS#. Compruebe la tabla en la sección de Descripción de Hardware, si usted necesita recordar qué modo se habilita al configurar los diversos estados de las entradas.

La última función de movimiento disponible muestra cómo el motor puede cambiar de dirección en un instante. La función trabaja como en el avance y retroceso de las funciones anteriores, pero cambia entre los estados con rapidez. Este ejemplo de prueba del motor paso a paso le hace dar 1000 pasos hacia adelante y, a continuación, invertir 1000 pasos. Esto permite, precisamente, mover algo con el motor en una dirección, y volver exactamente a la posición inicial.

El control preciso de posición es una gran ventaja de los motores paso a paso.

Una vez que la acción concluye, los pines de entrada se deben volver a establecer en el estado predeterminado para evitar comportamientos inesperados del motor, o no deseados. Hacemos uso de la función resetEDPins() para lograr esto.

Programa completo

Ejemplos adicionales

Además el ejemplo presentado aquí, también se puede instalar la biblioteca AccelStepper. Hay algunos ejemplos adicionales en esta biblioteca que pueden ser beneficiosos para utilizar con su EasyDriver. Descargue e instale la biblioteca en su carpeta de bibliotecas Arduino.

Usted también puede encontrar algunos ejemplos adicionales sobre la EasyDriver en la página aquí.

Recursos Adicionales

Eche un vistazo a estos recursos adicionales para obtener más información y otras ideas para sus proyectos.

Página de Schmalz Haus sobre el Easy Driver
Repositorio de GitHub
Hoja de datos del integrado A3967



Unidad de Medición Inercial Multipropósito – IMU Razor M0 de 9DoF (parte 1)

La IMU Razor M0 de 9DoF (Unidad de Medición Inercial Multipropósito: Multi-purpose Inertial Measurement Unit = IMU) combina un microprocesador SAMD21 con un sensor MPU-9250 de 9DoF (nueve grados de libertad), creando una unidad compacta y reprogramable. Se puede programar para monitorear y registrar movimiento, transmitir ángulos de Euler por un puerto serie, o incluso para funcionar como un podómetro que cuente los pasos.

Una unidad de medición inercial o IMU (del inglés inertial measurement unit), es un dispositivo electrónico que mide e informa acerca de la velocidad, orientación y fuerzas gravitacionales de un aparato, usando una combinación de acelerómetros y giróscopos. En este caso se agrega un nivel más: un magnetómetro, que permite conocer la ubicación respecto al campo magnético terrestre. Las unidades de medición inercial se usan para maniobrar aviones, incluyendo vehículos aéreos no tripulados, entre muchos otros usos, y además naves espaciales, incluyendo transbordadores, satélites y aterrizadores. La IMU es el componente principal de los sistemas de navegación inercial usados en buques y misiles guiados entre otros. En este uso, los datos recolectados por los sensores de una IMU permiten a un computador seguir la posición del aparato, usando un método conocido como navegación por estima.

El chip MPU-9250 de 9DoF de la Razor posee tres sensores cada uno de tres ejes –un acelerómetro, un giroscopio y un magnetómetro– que le dan la capacidad de detectar aceleración lineal, velocidad de rotación angular, y vectores de campo magnético.

El microprocesador que contiene –el SAMD21G18A de Atmel–, es un microcontrolador ARM de 32-bit Cortex-M0+ compatible con Arduino, que se utiliza también en los Arduino Zero y el SAMD21 de la nueva línea MKR de mini plaquetas de Arduino.

Además del par principal de circuitos integrados, la IMU Razor de 9DoF posee un zócalo para trajeta µSD, un cargador para baterías LiPo, llave de encendido y un conector de E/S para proyectos de expansión. Viene pre-programada con un firmware de ejemplo y un bootloader compatible con el IDE de Arduino, de modo que se puede modificar el firmware según las necesidades y grabarle nuevo código a través de una conexión USB.

Este artículo provee una fuente de información para comenzar, y una guía de inicio para trabajar con la IMU de SparkFun de 9DoF Razor M0. Documentaré primero las características de hardware y firmware de la plaqueta, y a continuación, mostraré cómo usar el IDE de Arduino con la biblioteca MPU-9250 de Sparkfun para Arduino para reprogramar la IMU Razor a las necesidades de nuestros proyectos.

Materiales necesarios

La IMU Razor M0 de 9DoF está provista de todo lo que se necesita para aprovechar el sensor MPU-9250 de 9DoF. Solo harán falta unos pocos elementos –la mayoría son de esos que uno ya tiene entre sus componentes– además de la plaqueta.




Se puede utilizar un cable micro-B USB para alimentar y también para reprogramar la Razor. Si usted desea tener una placa independiente para que sea móvil, va a necesitar una batería de polímero de Litio de celda única (Lithium-polymer, o LiPo), que se puede recargar conectando la Razor 9DoF en un cargador USB o en un puerto de su PC. Además, si usted necesita registrar los datos, se debe colocar una tarjetita µSD en el zócalo de la IMU Razor. Acepta µSD de cualquier tipo.

Finalmente, puede ser necesario soldar algunos conectores si se desea aprovechar las capacidades de Entrada/Salida y de alimentación de la IMU.

Lecturas sugeridas

El fabricante ha tratado de hacer que la placa sea fácil de usar independientemente del nivel de experiencia en electrónica del usuario. Sin embargo, si desea realizar una lectura previa antes de utilizar y desarrollar programas para el el 9DoF Razor IMU M0, aquí hay algunos tutoriales que ellos recomiendan (inglés):

Giroscopio
Los giroscopios miden la velocidad de rotación alrededor de un eje y son una parte esencial para determinar la orientación en el espacio.

Acelerómetro (Bases)
Una introducción rápida a los acelerómetros, cómo funcionan y por qué se utilizan.

SAMD21
Una introducción al microprocesador Atmel ATSAMD21G18 y las placas de distribución Mini y Pro R3. Mejore sus habilidades Arduino con el potente procesador ARM Cortex M0 +.

MPU-9250
Iníciese y ponga en marcha el sensor MEMS de 9 ejes MPU-9250.

El hardware

Esta placa IMU tiene montados una cantidad de componentes sobre ambas caras del circuito impreso. La imagen muestra el lado que se define como cara superior.

El reverso de la plaqueta posee diversos conectores, además del zócalo de la microSD, la llave de encendido y LEDs para indicar diversas funciones.

Esta IMU es un diseño de hardware abierto. Se puede descargar el diagrama esquemático (en PDF), los archivos Eagle (con el diseño del circuito impreso), y ver la historia del diseño en el reservorio GitHub de Sparkfun.

Alimentando la IMU Razor M0

Esta plaqueta está diseñada para trabajar tanto alimentada desde el cable USB, o con una batería LiPo en el conector adecuado. Sólo hay que asegurarse de que la batería sea de celda simple, con un voltaje nominal de 3,7V a 4,2V.

Conecte tanto el USB como una LiPo para cargar la batería


Si se conectan ambos, el USB y la batería LiPo en la plaqueta, ésta se cargará con una corriente de hasta 450 mA. El estado de la carga lo indica el led amarillo de carga, que se apaga cuando la batería queda cargada a pleno.

Corriente de carga 450mA: La corriente máxima de carga está fijada por un resistor externo y no es modificable, al menos no con facilidad. La práctica nos dice que no es seguro cargar una batería LiPo con una corriente mayor a sus mA/h, lo que significa que no se recomienta utilizar baterías LiPo con capacidades menores a 450mAh para esta plaqueta.

Sea alimentada desde la fuente de USB, o con la batería LiPo, el voltaje es regulado a 3,3 V y se utiliza para alimentar tanto el SAMD21 como el MPU-9250. El regulador tiene una capacidad de aproximadamente 600 mA, lo que significa que debería tener suficiente resto para entregar corriente. Si lo desea puede alimentar otros dispositivos desde los pines marcados con 3V3.

Los pines VIN, VBAT y GND se pueden usar para alimentar el regulador de 3,3V de la IMU Razor en lugar de utilizar las entradas USB o el conector para la LiPo (JST). El voltaje en el pin VIN no debe exceder los 6V, y el pin VBAT solo debe conectarse a una batería LiPo de una celda.

Finalmente, el interruptor de ENCENDIDO/APAGADO en la parte inferior de la placa controla la alimentación entre ambas fuentes de entrada y el resto de los componentes de la placa. Mientras está en la posición «OFF» (Apagado), la batería LiPo seguirá en carga, pero no se debe aportar energía a ningún otro componente.

Perforaciones de pines para el SAMD21 y la alimentación

La placa tiene perforaciones preparadas para soldar conectores con tantos pines de Entrada/Salida del microcontrolador SAMD21 como se pudieron acomodar en el pequeño tamaño de la IMU Razor. Eso incluye los pines 08-13, las entradas del convertidor analógico a digital A0-A4, RX, TX, y los pines I2C, SDA y SCL.

Los pines SDA y SCL están en el mismo bus I2C que el MPU-9250, pero eso no debería ser un problema siempre que los dispositivos I2C adicionales no compartan las direcciones de 7 bits de la IMU (0x68 y 0x0C).

Usted puede soldar conectores hembra como los que tienen los Arduinos UNO y Mega, o hileras de pines macho, o directamente cablear a esos puntos de soldadura para expandir las funciones de la plaqueta. Por ejemplo, usted puede conectar un sensor BME280 directamente en el puerto I2C, y agregar detección de altitud y temperatura a su IMU.

Algunos módulos de la misma marca basados en I2C utilizan la misma
distribución de 4 pines, así que se pueden conectar directamente


El puerto de depuración single-wire = SWD (de un solo cable) del SAMD21 también está perforado en la parte superior de la placa, en caso de que se quiera programar el chip con un depurador JTAG. El pinout de este puerto coincide con el estándar del conector de depuración Cortex de 10 pines. Una «muesca» blanca indica el pin 1 de este puerto.

MPU-9250 Orientación de Acelerómetro / Giroscopio / Magnetómetro

La orientación del acelerómetro, el giroscopio y los ejes X, Y y Z del magnetómetro es determinada por la posición del MPU-9250. Para facilitar la referencia, estos vectores se han documentado con una impresión en la parte superior de la placa.

Tenga en cuenta que los ejes X e Y del magnetómetro están invertidos respecto a los del acelerómetro y el giroscopio, y que el eje Z también está invertido.

Trabajando con el firmware de ejemplo

Además de un gestor de arranque de Arduino (bootloader), el IMU también tiene cargado un ejemplo de firmware que es suficiente para demostrar, al menos, que funciona el seguimiento de movimiento del sensor, e incluso hacer un pequeño registro en una tarjeta µSD. Para comenzar a usar el firmware de ejemplo, simplemente conecte la IMU a una computadora.

Después de conectar la placa, debe aparecer como un puerto serie. En Windows, aparece como COMx y en Mac, debería verse como /dev/tty.usbserial-ABCD12.

Instalación del controlador

Usuarios de Windows 10: la primera vez que conecte el IMU Razor a su computadora, es posible que deba instalar controladores para habilitar el perfil USB de la clase de dispositivo de comunicación (CDC) de la placa.
Si su placa no aparece como un puerto COM, haga clic en el botón de abajo para descargar los controladores.

DESCARGAR DRIVERS DE WINDOWS PARA SAMD21

Para obtener ayuda para instalar los controladores, consulte las instrucciones del fabricante en la guía de conexión de Breakout SAMD21.

Después de ubicar el puerto de la placa, abra el Terminal Serie y establezca la velocidad en baudios a 115200 bps. El Monitor Serie del Arduino funciona bien para este propósito, o puede descargar alguno diferente desde aquí: programas de terminal.

Al abrir el puerto, el IMU Razor 9DoF debe comenzar inmediatamente a enviar las lecturas del acelerómetro, el giroscopio y el magnetómetro.

El formato estándar de la línea de texto es:

<timeMS>, <accelX>, <accelY>, <accelZ>, <gyroX>, <gyroY>, <gyroZ>, <magX>, <magY>, <magZ>

Esta línea se puede modificar enviando cualquiera de los siguientes comandos:

  • ESPACIADOR – Pausa/reinicio de impresión de puerto serie
  • t – Habilitar/deshabilitar las lecturas de tiempo
  • a – Habilitar/deshabilitar las lecturas del acelerómetro
  • g – Habilitar/deshabilitar las lecturas del giróscopo
  • m – Habilitar/deshabilitar las lecturas del magnetómetro
  • c – Alternar entre valores calculados o sin procesar de las lecturas
  • q – Habilitar/deshabilitar lecturas cuaternianas (qw, qx, qy y qz se muestran luego de las lecturas magnéticas)
  • e – Habilitar/deshabilitar cálculos Euler de ángulo (pitch, roll, yaw) (se muestran luego del procesamiento cuaterniano)
  • h – Habilitar/deshabililar las lecturas de encabezado
  • r – Ajustar el ritmo de registro en incrementos de 10Hz entre 1-100Hz (1, 10, 20, … 100)
  • A – Ajustar el rango de escala máxima del acelerómetro. Cicla entre ± 2, 4, 8, and 16 g.
  • G – Ajustar el rango de escala máxima del giroscopio. Cicla entre ± 250, 500, 1000, 2000 dps.
  • s – Habilitar/deshabililar el registro en tarjeta SD

Todas las configuraciones se almacenan en una memoria no volátil, por lo que al iniciar su IMU Razor 9DoF deberá tener la misma información con que la configuró anteriormente.

Además de iniciar sesión en su puerto serie, el firmware también está diseñado para registrar los datos en una tarjeta µSD, si hay una presente. Coloque una y debería tener los archivos de registro de IMU la próxima vez que conecte la tarjeta SD a su lector.

El firmware del 9DoF Razor IMU está disponible en el repositorio GitHub del producto. Para cargar el firmware, necesitará las definiciones de la placa SparkFun SAMD21 y la biblioteca SparkFun MPU-9250 DMP Arduino instalada en su máquina. Que es exactamente lo que vamos a documentar a continuación…

El IMU Razor 9DoF M0 está diseñado en base al SAMD21, el mismo procesador del Arduino Zero, lo que significa que agregar el soporte de Arduino para la placa está a solo unos clics. Esta sección describe los pasos que deberá seguir para instalar los núcleos SAMD en su biblioteca Arduino (eso suena más atemorizante de lo que realmente es).

¡Actualizar Arduino! Esta configuración requiere al menos la versión 1.6.4 o posterior e Arduino. Lo he probado en 1.8.8 y recomendaría esa versión del IDE o superior. Si está ejecutando una versión anterior de Arduino, visite arduino.cc para obtener la última y mejor versión.

Instale las placas de Arduino SAMD

Primero, deberá instalar una variedad de herramientas, que incluyen bibliotecas ARM Cortex de bajo nivel llenas de código genérico, arm-gcc para compilar su código y bossa para cargar código a través del bootloader. Estas herramientas vienen empaquetadas junto con las definiciones de la placa SAMD de Arduino para el Arduino Zero.

Para instalar las definiciones de la placa Arduino SAMD, vaya a su administrador de la placa ( Herramientas > Placa > Gestor de tarjetas … ), luego busque una entrada “Arduino SAMD Boards (32-bits ARM Cortex-M0+)”. Selecciónela e instale la última versión (actualizada recientemente a 1.6.20).

La descarga e instalación de las herramientas puede demorar un par de minutos; en particular, arm-gcc llevará más tiempo, se trata de 250 MB sin comprimir.

Una vez instalado, el texto azul «INSTALLED» debe aparecer dentro de la entrada de la lista de placas SAMD.

Instalar la definición de la placa SparkFun

Ahora que sus herramientas ARM están instaladas, se requiere un último paso de configuración para agregar soporte para las placas SparkFun SAMD. Primero, abra sus preferencias de Arduino ( Archivo > Preferencias ). A continuación, busque el cuadro de texto Gestor de URLs adicionales de Tarjetas y pegue allí el siguiente enlace:

https://raw.githubusercontent.com/sparkfun/Arduino_Boards/master/IDE_Board_Manager/package_spark fun_index.json

Luego presione «OK«, y regrese al menú del Gestor de tarjetas. Debería encontrar una nueva entrada para las placas SAMD de SparkFun.

Esta instalación debería ser mucho más rápida; el trabajo pesado fue realizado en la sección anterior.

Seleccione la placa y el puerto serie

Una vez que se haya instalado la placa, debería ver algunas entradas nuevas en la lista Herramientas > Placa, incluida la Razor IMU M0 de SparkFun 9Do, en el menú «Placas SparkFun SAMD (ARM Cortex-M0 +) de 32 bits». Y finalmente, seleccione el puerto del IMI 9DoF Razor yendo al menú Herramientas > Puerto.

La plaqueta ya funcionará con el programa de ejemplo. En un próximo artículo cargaremos este programa de ejemplo, para comprobar el funcionamiento del bootloader, y podremos comenzar a realizar pruebas, cambiando el programa a gusto y escribir nuevos programas a medida de nuestro propio proyecto de detección de movimientos.

[ Continúa en la parte 2 ]



Sistema para estacionamiento de un auto y para evitar acercarse demasiado a otro vehículo

Utilizando sensores ultrasónicos, los autos modernos nos dan una útil ayuda en el momento de maniobrar, especialmente al estacionarlos en espacios limitado. Podemos hacer nuestro sistema detector con un Arduino UNO y unos pocos componentes de bajo costo


Cómo funciona el sensor ultrasónico HC-SR04

El sensor ultrasónico HC-SR04 nos permite medir distancias por medio de emisión y rebote de ultrasonidos. Para medir distancias con Arduino podemos hacerlo de diferentes maneras.

Por orden de costo, hay un sensor que mide con el rebote de un láser; luego un sensor de infrarrojos que utiliza el paralaje del regreso de un haz de luz para calcular la distancia; y por último el más barato, el sensor ultrasónico HC-SR04, muy utilizado con Arduino, que utiliza la velocidad de propagación del sonido para medir distancia.

Para que no sea molesto al oído humano, utiliza ultrasonido a una frecuencia de 40 kHz. Estas ondas sonoras tienen una frecuencia muy por encima del espectro audible por los seres humanos.
El sensor funciona como un sonar, por rebote de la onda. El emisor del HC-SR04 envía un tren de ondas ultrasónicas cuando se activa la señal de disparo (trigger). Este sonido se refleja contra el objeto y retorna. El receptor detecta el momento en que retorna la onda y lo indica en la salida eco (echo).

Midiendo el tiempo de viaje podemos calcular la distancia.

La velocidad del sonido en la atmósfera terrestre es de 343,2 m/s a 20° C de temperatura, con 50% de humedad y a nivel del mar. Si necesitamos una gran exactitud, podemos agregar al diseño sensores BMP180 o BMP280, que nos aportan datos de altitud y temperatura, e incluso agregar un medidor de humedad, y por supuesto aplicar una fórmula más compleja. Pero para este diseño no necesitamos tanta precisión.

La fórmula de la velocidad es:

velocidad = espacio/tiempo

De donde despejamos la variable espacio, que necesitamos conocer:

espacio = velocidad x tiempo

La velocidad es conocida: la del sonido. El tiempo lo obtenemos con el sensor ultrasónico. Con ambos datos, podemos calcular la incógnita: a qué distancia se encuentra un objeto.

El zumbador o buzzer

Para simular correctamente un medidor de distancia de un automóvil utilizamos un buzzer (zumbador) pasivo. No hay que confundirlo con el zumbador activo, que tiene un oscilador interno, y por lo tanto una frecuencia fija y polaridad en sus pines de conexión.

Este reproductor no tiene un rango tan amplio de emisión de sonido como el del oído humano, ni mucho menos, pero es suficiente para diferenciar la distancia con frecuencias diferentes dentro de lo que es capaz de emitir. Además de los pequeños (como el de la foto), que vienen incluidos en los kits de Arduino, hay otros con mayor diámetro de diafragma (por ejemplo en el desarme de viejos modems), que ofrecen más volumen y un rango de frecuencias más amplio.

Sistema de alerta con leds y zumbador

Si bien al maniobrar no estaremos mirando hacia un indicador, sino atentos a los tonos de aviso, agregaremos al diseño un sistema de alerta visual. Nos dará una indicación aún más efectiva de si estamos cerca o lejos de un obstáculo. Con tres leds (verde, amarillo y rojo) conseguimos determinar si estamos a distancia sin riesgo, acercándonos, o en zona de peligro. Pero se podría ampliar la indicación con más leds y más comparaciones en el programa.

Componentes:

Arduino UNO, protoboard, cables para conexiones, resistores de 330 Ω, led verde, led amarillo, led rojo, sensor ultrasónico Arduino (HC-SR04), buzzer




Circuito:

Los resistores son de 330 Ω y van en serie con los LEDs. El sensor ultrasónico se conecta a dos pines digitales, uno para el trigger o disparador y otro para el echo, o receptor. El buzzer se conecta a una salida PWM y a GND. La salida PWM entregará distintas frecuencias según la indicación del programa, por medio de la función tone().

Programando el detector de distancia

Diagrama del programa

Los umbrales para la decisión se fijan como constantes, uno para cada situación. Podemos medir la distancia con una regla y determinarlos.

■ UmbralAlejado: está en zona verde desde 50 cm a 30 cm.
■ UmbralMedio: está en zona amarilla, desde 30 cm a 10 cm.
■ UmbralCerca: está en zona roja, menos de 10 cm.

Estos umbrales no son definitivos: se pueden cambiar a gusto del usuario.

El programa debe analizar la medición dividida en 4 zonas: fuera de rango (más de 50 cm, ninguna indicación), entre 50 cm y 30 cm (zona verde), entre 30 cm y 10 cm (zona amarilla), entre 10 cm e impacto (zona roja).

■ Luego de medir la distancia se la compara con el umbral que indica fuera de rango (50 cm).
■ Si la distancia es menor a ese valor está en zona verde: se enciende el led verde y emite el tono de 2000 c/s.
■ Si la distancia es menor a 30 cm y mayor a 10 cm está en zona amarilla: enciende el led amarillo y emite el tono de 2500 c/s.
■ Si la distancia es menor a 10 cm está en zona roja: enciende el led rojo y emite el tono de 3000 c/s.

Programa

Para esta determinación de rangos, es importante buscar en la hoja de especificaciones técnicas el rango de funcionamiento del sensor de ultrasonidos que disponemos. Para este artículo se usó uno que puede medir de 2 cm a 400 cm.

Artículos relacionados:

VL53L0X: Sensor de distancia que mide por la velocidad de la luz (Time-of-Fly)

Dando a los vehículos autónomos una “visión eléctrica” más aguda

Módulo de emisor piezoeléctrico pasivo KY-006 (Kit de sensores Keyes 6)

RCWL-0516: Módulo sensor de movimiento de microondas con radar Doppler



Módulo de teclado sensible al tacto TTP229

Este teclado de 16 teclas se conecta utilizando una conexión I2C (2-Wire), aunque en el chip sensor capacitivo TTP229 tiene implementada la opción de conectar solamente 8 teclas, que tienen salida directa en los pines del módulo. Son los pines marcados como OUT1 a OUT8. Las líneas marcadas SDO y SCL pertenecen a la interfaz I2C.

Características

■ Fácil de usar, calibración automática
■ LED de encendido
■ Funciona en modo 8 o 16 canales.
■ La salida puede ser configurada como activa alta o baja
■ Simple para reemplazar salidas de llaves mecánicas
■ La salida se puede conectar directamente a los pines de entrada del microcontrolador

Especificaciones

■ Voltaje de funcionamiento: 2V-5,5V
■ Tiempo de calibración de inicio: 0,5 seg.
■ Tamaño de la plaqueta: 49,3 x 64,5mm

Este módulo es una buena alternativa para reemplazar teclados mecánicos, ya que es durable, fácil de instalar (es totalmente plano), se puede proteger con una membrana en ambientes de atmósfera corrosiva, y proporciona más durabilidad en condiciones de trabajo continuado.

Puentes que definen las opciones

(Ver las opciones definibles en la tabla abajo)

EJEMPLO:

Diagrama de pines del circuito integrado TTP229

El teclado se puede configurar tanto para usar con 8 teclas como con 16. Para el primer caso, parece poco razonable usar sólo la mitad, ya que en realidad se venden módulos directamente con sólo 8 teclas, y también con 4 y hasta con una sola.

En todo caso, la división de funciones, y la multiplicidad de opciones que se pueden elegir usando una serie de puentes en la plaqueta aportan amplia funcionalidad y una buena adaptación para distintos usos.

Cuando se elige la opción de 16 teclas, se los lee por medio de una interfaz serie de 2 vías, llamada comúnmente 2-Wire en el mundo Arduino, o I2C.

Una vez conectado el hardware y descargando el código al Arduino, al pulsar los teclas se pueden observar los resultados en el Monitor Serie del IDE Arduino.

Diagrama en bloques del circuito integrado TTP229

Diagrama del módulo de teclado TTP229

PROGRAMAS DE PRUEBA

Conexión directa de las salidas de 8 teclas

Si en alguna ocasión se necesita utilizar sólo la serie de teclas del 1 a 8, la configuración y la lectura por programa es más sencilla y simple de entender. La conexión involucra 8 pines del conector del módulo de teclado al Arduino, y dos más de ellas para alimentación +5 y GND.

Esta forma de uso tiene la desventaja de que ocupa muchas entradas digitales (que nunca sobran), aunque la ventaja es que no necesariamente se debe usar un Arduino u otro microcontrolador para recibir datos desde el módulo si se lo usa con esta configuración. Podría servir para introducir órdenes de teclado en un circuito puramente digital, sin procesador ni programa.

Diagrama de conexiones con Arduino

Código simple para 8 teclas

Resultado en Monitor Serie




Conexión para leer las 16 teclas

Para leer los teclas del 1 a 16 se debe hacer a través de la interfaz serie I2C o 2-Wire del Arduino, utilizando SCL y SDO, y con dos pines digitales que uno elija y el programa adecuado, que en general es muy simple.

Conexión entre el Arduino y el teclado para el ejemplo de 16 teclas por I2C

Cablear como se muestra a continuación y además hacer un puente en el módulo del teclado para configurarlo para funcionar con 16 teclas, sobre los puntos marcados “TP2”, que se muestran abajo en naranja.

Esto se hace soldando un alambrecito que una estos 2 terminales.

Diagrama de la conexión con Arduino

Código para la lectura de 16 teclas

Resultado en Monitor Serie

Lectura de 16 teclas con posibilidad de pulsar más de una a la vez

Como en cada caso en que se habilitan 16 teclas, la comunicación con el microcontrolador se realiza por medio del protocolo I2C. Cada tecla está asociada a un bit en un entero sin signo de dos bytes.

Estos son algunos ejemplos:

La tecla 1 aparecerá como 0000 0000 0000 0001
La tecla 2 aparecerá como 0000 0000 0000 0010
La tecla 3 aparecerá como 0000 0000 0000 0100
… …
La tecla 9 aparecerá como 0000 0001 0000 0000
La tecla 12 aparecerá como 0000 1000 0000 0000
La tecla 16 aparecerá como 1000 0000 0000 0000

Cuando se tocan dos o más teclas, el entero asociado contendrá dos bits o más en 1. Por ejemplo, si se pulsan la tecla 1 y la 16 al mismo tiempo, el entero asociado será 1000 0000 0000 0001

Conexiones:

Los pines TP0 a TP4 en el teclado se deben conectar (hacer un puente) como en la figura siguiente:

Diagrama de conexión con el Arduino:

Código para 16 teclas – multitecla – interfaz 2-wire:

En la Terminal Serie del IDE de Arduino se verá lo que sigue al pulsar las teclas desde 1 a 16 (Nota: debido a la manera en que la función Serial.println maneja las variables, el Monitor Serie no muestra los ceros a la izquierda del entero de 16 bits):

Para este ejemplo: PDFs de ayuda (en inglés) desde el siguiente enlace:
http://osoyoo.com/driver/TTP229.rar

Se puede descargar el programa INO (con textos en inglés) desde el siguiente enlace:
http://osoyoo.com/wp-content/uploads/2016/07/TTP229_all.rar


LSM6DSOX: acelerómetro y giroscopio con aprendizaje automático incorporado

STMicroelectronics acaba de lanzar su último circuito integrado sensor, el LSM6DSOX, que proporciona datos del sensor sobre la aceleración y la orientación. Además, también puede procesar estos datos mediante aprendizaje automático sin ninguna entrada externa del microcontrolador.

El LSM6DSOX es un encapsulado SiP (sistema empaquetado en un chip) de 2,5 mm x 3 mm x 0,83 mm.

Un SiP es un sistema o subsistema electrónico funcional que incluye dos o más matrices semiconductoras heterogéneas (a menudo de nodos de tecnología diferentes optimizados para sus funcionalidades individuales), generalmente con componentes pasivos. La forma física del SiP es un módulo y, dependiendo de la aplicación final, el módulo podría incluir un chip lógico, memoria, dispositivos pasivos integrados (IPD), filtros de RF, sensores, disipadores de calor, antenas, conectores y/o chip de potencia.

La creciente complejidad de los dispositivos de gama baja está dando lugar a una nueva forma de procesamiento de datos. En lugar de que un controlador principal realice todo el trabajo pesado, los periféricos conectados pueden tener controladores integrados y DPS que pueden preprocesar sus propios datos antes de pasar al controlador principal, que puede descargar el trabajo del controlador principal, lo que ahorra energía. Un ejemplo de esto es el LSM6DSOX, el último módulo inercial de ST que tiene capacidades de aprendizaje automático.

El LSM6DSOX

El LSM6DSOX es un acelerómetro 3D y un giroscopio 3D siempre encendidos. Se puede acceder al sensor a través de SPI e I2C, así como al último estándar de la industria, I3C. El sensor es compatible con Android para la integración con sistemas Android (como tablets y teléfonos).

También incorpora detección significativa de movimiento y detección de inclinación. El movimiento de inclinación incorporado en el sensor es capaz de desencadenar eventos durante los cambios de inclinación. Por ejemplo, un evento puede activarse cuando un usuario tiene su teléfono en el bolsillo y se levanta después de haberse sentado. Esta detección de inclinación se realiza todo en hardware sin la necesidad de un controlador, lo que puede reducir en gran medida el trabajo de potencia y descarga de un procesador.

Núcleo de aprendizaje automático en el LSM6DSOX

Sin embargo, la verdadera magia detrás del LSM6DSOX es el sistema interno de aprendizaje automático. El núcleo de aprendizaje automático, realizado mediante una serie de condiciones «si-luego-si no», permite la identificación de tareas específicas, como caminar, correr y conducir, que son programables por el usuario.

Con hasta 256 nodos disponibles, el núcleo de aprendizaje automático puede ejecutar hasta ocho flujos simultáneamente y cada flujo puede generar hasta 16 resultados. El sensor también puede tener en cuenta sensores externos con el uso de un núcleo de sensores (Sense Hub), por donde otros sensores pueden enviar sus datos al LSM6DSOX.

Conexión de sensores externos al LSM6DSOX

«El aprendizaje automático ya se usa para el reconocimiento rápido y eficiente de patrones en redes sociales, modelos financieros o manejo autónomo», dijo Andrea Onetti, vicepresidente de analógicos, MEMS y sensores del Grupo STMicro. «El sensor de movimiento LSM6DSOX integra capacidades de aprendizaje automático para mejorar el seguimiento de la actividad en teléfonos inteligentes y dispositivos portátiles».





Especificaciones:

Cápsula de 2,5 mm x 3 mm x 0,83 mm
Consumo de energía de 0,55 mA.
FIFO (First In First Out = acrónimo que significa «primero en entrar, primero en salir») de hasta 9KB
±2 / ±4 / ±8 / ±16 g escala completa
±125 / ±250 / ±500 / ±1000 / ±2000 dps (degrees per second, grados por segundo) escala completa

La integración de controladores pequeños y de baja potencia en los periféricos da paso a un cambio en la forma en que se diseña el hardware. Al descargar la mayor cantidad de trabajo posible de un procesador principal (que puede no ser el hardware con mayor ahorro de energía), los dispositivos podrían ver un mayor rendimiento con datos preprocesados y una mayor duración de la batería.