Archivo de la categoría: Plaquetas

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 ]



Módulo codificador rotativo KY-040 [ó KY-007] – (Kit de sensores Keyes 040/007)

A veces lo que se toma con despreocupación, o quizás con falta de conocimientos, al publicarse en un medio tan multitudinario como Internet afecta a otros. Se encuentran afirmaciones totalmente opuestas entre sí “a vuelta de página” (en el caso de Internet, un enlace que sigue a otro en la búsqueda de Google). En este caso, por lo que he visto, la duda surge de publicaciones en los sitios de venta, incluso en los más grandes. Y se trata de la numeración del módulo de encoder rotativo de la serie de Keyes.

Encontrarán fotos rotuladas KY-007, y también KS-007. Al mismo tiempo, me encuentro artículos que muestran listas “oficiales” de Keyes en las cuales NO EXISTE el módulo KY-007. El que venden con esta numeración se trataría en realidad del KY-040, y este sí existe en su catálogo.

Esto para aclarar confusiones si usted compró un módulo que numeraron como KY-007, aclarando a continuación en el título de la venta con un número 040, sin prefijo. Si hace una búsqueda en algún sitio de venta, encontrará un título escrito así.

Hechas las aclaraciones, y para seguir con la publicación ordenada de la serie de módulos, paso a explicar de qué se trata un encoder (o codificador) rotativo (o si prefiere, giratorio).

En principio, los invito a ver el artículo Codificadores de posición angular que aporta muchos conceptos que pueden ser de utilidad. En este caso se trata de un codificador incremental. Este diseño tiene dos salidas levemente defasadas, gracias a lo cual se puede saber en qué dirección gira el eje. Además, han agregado un pulsador que se activa al presionar el eje verticalmente.




Las salidas del módulo están nombradas con las denominaciones CLK (salida A del codificador), DT (salida B del codificador), y SW (correspondiente a “Switch”, o llave/pulsador en castellano). Los otros dos pines que completan son la alimentación + y la tierra o común GND.

Los contactos de la plaqueta están identificados con una leyenda impresa. Es fácil conectar el encoder.

Si se utilizara el decodificador en forma independiente, sus contactos son:

Diagrama de conexiones en la plaqueta KY-040:


Internamente, dos contactos levemente desplazados se deslizan sobre una placa cuyos sectores están conectados a tierra (GND). Como siempre uno de los dos cerrará circuito primero, se puede saber en qué sentido se está girando el codificador monitoreando cuál de las dos líneas se conecta primero a GND (yendo de ALTO a BAJO). Dependiendo del sentido de giro, será primero A o B. Los dos resistores que tiene la placa mantienen las señales en un valor ALTO cuando no hay contacto.

Diagrama mecánico simplificado

Un codificador rotatorio tiene un número fijo de posiciones por revolución. Estas posiciones se sienten fácilmente como pequeños «clics» cuando se acciona el codificador. El diagrama muestra menos contactos para simplicidad visual, pero el concepto de funcionamiento es idéntico si la cantidad es mayor. Por ejemplo, el módulo de Keyes que uso en esta prueba tiene treinta de estas posiciones, aunque entiendo que la cantidad puede variar según el modelo o partida. Esto no modificará los resultados para nuestro uso.


Como en toda llave con contactos mecánicos, la señal no será totalmente limpia. Habrá una serie de rebotes muy rápidos cuando se juntan las partes metálicas, y también algunos al desconectarse. Esto se debe prever en el programa, introduciendo un breve retardo cuando se detecta que una de las señales cambia de valor, y luego se la lee de nuevo para comprobar que efectivamente se ha estabilizado. A este método se le llama debounce en inglés, lo cual significa (no tenemos una palabra para esto) “eliminación de rebote”. Esta denominación se debe a que por elasticidad de los contactos metálicos, por lo general se produce una serie de rebotes de aquel contacto que es móvil hasta que la conexión se establece definitivamente.




El efecto es menor si los contactos se deslizan un sobre otro, como en el caso de este codificador, pero sí existen ruidos y se deben tanto a efectos de rebote como a que los bordes metálicos, a nivel microscópico, no son absolutamente lisos.

Si no se toma esta precaución, los ruidos causarán que la lectura de una vuelta completa del codificador arroje diferentes números.

Programa Básico, Conexión con el Arduino

Para investigar sobre implementaciones más avanzadas recomiendo ver la biblioteca KY-040-Encoder-Library—Arduino de Bill Williams.

Artículos relacionados:

Módulo sensor de temperatura KY-001 (Kit de sensores Keyes 1)
Módulo detector de vibración KY-002 (Kit de sensores Keyes 2)
Módulo de Sensor Magnético por efecto Hall KY-003 (Kit de sensores Keyes 3)
Módulo de llave pulsadora – KY-004 (Kit de sensores Keyes 4)
Módulo sensor de temperatura KY-005 (Kit de sensores Keyes 5)
Módulo de emisor piezoeléctrico pasivo KY-006 (Kit de sensores Keyes 6)
Módulo codificador rotativo KY-040 [ó KY-007] – (Kit de sensores Keyes 040/007)



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

Este módulo zumbador piezoeléctrico Keyes KY-006 puede producir una gama de tonos de sonido dependiendo de la frecuencia de entrada.

Especificaciones:

El módulo KY-006 consiste en un emisor piezoeléctrico de sonido pasivo, que puede reproducir tonos entre 1,5 a 2,5 kHz al encenderlo y apagarlo en diferentes frecuencias usando retardos o PWM.

Voltaje de funcionamiento: 1,5 ~ 15V DC
Rango de generación de tonos: 1,5 ~ 2.5kHz
Dimensiones: 18,5 mm x 15 mm

Diagrama de conexión:

La entrada de señal (S) se conecta al pin digital 9 en el Arduino y masa (indicado por ) a GND. El pin medio no se utiliza.

Uso del piezoeléctrico con la función tone()

Descripción:

La función tone() genera una onda cuadrada de la frecuencia especificada (y un ciclo de trabajo del 50%) en un pin digital del Arduino. Se puede especificar una duración; de lo contrario, la señal continúa hasta que se realiza una llamada a la función noTone(). El pin se puede conectar a un zumbador piezoeléctrico u otro altavoz para reproducir tonos.

Solo se puede generar un tono a la vez. Si ya se está reproduciendo un tono en un pin diferente, la llamada a tone() no tendrá ningún efecto. Si el tono se reproduce en el mismo pin, la llamada establecerá una nueva frecuencia.

El uso de la función tone() interferirá con la salida PWM en los pines 3 y 11 (en placas que no sean Mega).

No es posible generar tonos inferiores a 31 Hz. Para detalles técnicos, vea las notas de Brett Hagman.

NOTA: si desea reproducir diferentes tonos en múltiples pines, debe llamar a la función noTone() en un pin antes de llamar a tone() en el siguiente pin.

Sintaxis:

tone(pin, frecuencia)
■ tone(pin, frecuencia, duración)

Parámetros:

pin: el pin sobre el que generar el tono
frecuencia: la frecuencia del tono en hercios – unsigned int
duración: la duración del tono en milisegundos (opcional) – unsigned long

Feliz cumpleaños

Para Elisa

Canción de Star Wars

Brilla, brilla, pequeña estrella

Módulo de emisor piezoeléctrico pasivo – KY-006: Dibujo de la pieza para el editor Fritzing

Artículos relacionados:

Módulo sensor de temperatura KY-001 (Kit de sensores Keyes 1)
Módulo detector de vibración KY-002 (Kit de sensores Keyes 2)
Módulo de Sensor Magnético por efecto Hall KY-003 (Kit de sensores Keyes 3)
Módulo de llave pulsadora – KY-004 (Kit de sensores Keyes 4)
Módulo sensor de temperatura KY-005 (Kit de sensores Keyes 5)
Módulo de emisor piezoeléctrico pasivo KY-006 (Kit de sensores Keyes 6)
Módulo codificador rotativo KY-040 [ó KY-007] – (Kit de sensores Keyes 040/007)




Módulo transmisor de infrarrojo KY-005 (Kit de sensores Keyes 5)

Este módulo de Keyes contiene un led emisor de luz infrarroja y una resistencia limitadora de corriente.

El módulo transmisor de infrarrojo consiste de un led infrarrojo de 5mm y un resistor asociado. Funciona en conjunto con el receptor de infrarrojo KY-022.

Voltaje de Operación: 5V
Corriente Directa: 30 ~ 60 mA
Consumo de energía: 90mW
Temperatura de Operación: -25°C to 80°C
Dimensiones: 18,5mm x 15mm

La línea central del módulo es la alimentación, y se conecta a los +5V del Arduino. La línea marcada con el signo va conectada a GND del Arduino. La línea marcada con la letra S va conectada a la línea digital 2 del Arduino.

Código de ejemplo:

El siguiente programa de Arduino utiliza la biblioteca IRremote para enviar señales de infrarrojos en serie con el KY-005.

La conexión del pin de salida la determina la biblioteca: la entrada digital 3 en Arduino Uno. Depende de la placa que se esté utilizando, de modo que si utiliza otra se debe verificar la documentación de la biblioteca de IRremote. Será necesario un receptor de infrarrojos como el KY-022 para procesar la señal.

Los enlaces a las bibliotecas requeridas para el programa de ejemplo de Arduino con KY-005 se pueden encontrar en los enlaces más abajo.

Este programa envía un código de encendido/apagado de Sony TV cada vez que se envía un caracter al puerto serie, lo que permite que Arduino encienda o apague el televisor. (Tenga en cuenta que los códigos de Sony deben enviarse 3 veces de acuerdo con el diseño del protocolo).

Biblioteca IRremote: una biblioteca remota de infrarrojos multiprotocolo para Arduino

El código más reciente está en github.com/shirriff/Arduino-IRremote

La biblioteca remota IRremote permite enviar y recibir códigos remotos de IR en múltiples protocolos. Es compatible con NEC, Sony SIRC, Philips RC5, Philips RC6 y protocolos sin formato. Si se necesitan protocolos adicionales, son fáciles de agregar. Incluso la biblioteca puede utilizarse para grabar códigos desde su control remoto y retransmitirlos, como un control remoto universal mínimo.

Para usar la biblioteca, descargue desde github y siga las instrucciones de instalación en el archivo readme.

Cómo enviar:

Esta biblioteca remota de infrarrojos consta de dos partes: IRsend transmite paquetes remotos IR, mientras que IRrecv recibe y decodifica un mensaje IR. IRsend utiliza un LED infrarrojo conectado al pin digital 3. Para enviar un mensaje, llame al método de envío para el protocolo deseado con los datos a enviar y la cantidad de bits a enviar. Los ejemplos de la biblioteca proporcionan programas simples que muestran cómo enviar códigos. Uno de ellos es el que está listado más arriba.

Cómo recibir:

IRrecv utiliza un detector de infrarrojos conectado a cualquier pin de entrada digital.

El ejemplo IRrecvDemo en la biblioteca aporta un ejemplo simple de cómo recibir códigos:

La clase IRrecv realiza la decodificación y se inicializa con enableIRIn(). Se llama al método decode() para ver si se ha recibido un código; si es así, devuelve un valor distinto de cero y coloca los resultados en la estructura decode_results. Una vez que se ha descodificado un código, se debe llamar al método resume() para reanudar la recepción de códigos. Tenga en cuenta que decode() no bloquea; el croquis puede realizar otras operaciones mientras espera un código porque los códigos son recibidos por una rutina de interrupción.




Algunos antecedentes sobre los códigos IR

Un control remoto IR funciona encendiendo y apagando el LED en un patrón particular. Sin embargo, para evitar la interferencia de fuentes IR, como la luz solar o las luces, el LED no se enciende de manera constante, sino que se enciende y apaga a una frecuencia de modulación (generalmente 36, 38 o 40 KHz). El tiempo en que se envía una señal modulada se llama “marca”, y cuando el LED está apagado se llama “espacio”.

Cada tecla del control remoto tiene un código particular asociado (generalmente de 12 a 32 bits), y emite este código cuando se presiona la tecla. Si se mantiene presionada la tecla, el control remoto generalmente emite repetidamente el código de la tecla. Para un control remoto NEC, se envía un código especial de repetición cuando se mantiene presionada la tecla, en lugar de enviar el código repetidamente. Para los controles remotos Philips RC5 o RC6, se alterna un poco el código cada vez que se presiona una tecla; el receptor utiliza este bit de conmutación para determinar cuándo se presiona una tecla por segunda vez.

En el extremo receptor, el detector de IR demodula esta señal y emite una señal de nivel lógico que indica si está recibiendo una señal o no. El detector de IR funcionará mejor cuando su frecuencia coincida con la frecuencia del remitente, pero en la práctica no importa mucho.

Enlaces:

Biblioteca IRremote
Módulo de led emisor infrarrojo – KY-005: Dibujo de la pieza para el editor Fritzing

Artículos relacionados:

Módulo sensor de temperatura KY-001 (Kit de sensores Keyes 1)
Módulo detector de vibración KY-002 (Kit de sensores Keyes 2)
Módulo de Sensor Magnético por efecto Hall KY-003 (Kit de sensores Keyes 3)
Módulo de llave pulsadora – KY-004 (Kit de sensores Keyes 4)
Módulo sensor de temperatura KY-005 (Kit de sensores Keyes 5)
Módulo de emisor piezoeléctrico pasivo KY-006 (Kit de sensores Keyes 6)
Módulo codificador rotativo KY-040 [ó KY-007] – (Kit de sensores Keyes 040/007)