Archivo de la categoría: Plaquetas

¿Un FPGA en un Arduino?

Arduino anunció recientemente una nueva línea de productos, y uno de ellos, el MKR Vidor 4000, incluye un FPGA. ¿Qué harán los diseñadores con el poder de un FPGA en sus manos?

Un FPGA en un Arduino

Arduino es una popular herramienta de creación de prototipos por varias razones. En primer lugar, no requiere un programador voluminoso y caro (como los chips PIC) y se puede programar a través de USB. En segundo lugar, las placas Arduino son de código abierto y, debido a esto, hay muchos fabricantes de placas Arduino que ofrecen precios competitivos. En tercer lugar, los Arduinos son famosos por su robusto entorno de shields y soporte de bibliotecas, lo que hace que el uso de dispositivos complejos como los chips de Ethernet sea cosa fácil.

A medida que progresó la tecnología, también lo hizo el Arduino. En el lanzamiento de las nuevas placas Arduino se reflejan muchas tendencias de la industria. Por ejemplo, la introducción del Arduino Yun agregó capacidades de Wi-Fi, y el Arduino Duo marcó el comienzo con procesadores más potentes. La miniaturización se concretó con el Arduino Nano, y con el LilyPad se introdujo la electrónica portátil. Pero todas estas mejoras involucran hardware especializado que realiza tareas únicas, como comunicaciones por RF o bajo consumo de energía.

Ahora que los FPGA se están volviendo más baratos y más accesibles, Arduino está a punto de lanzar un Arduino con un FPGA incorporado, el MKR Vidor 4000. La parte “MKR” de su nombre se pronuncia como “Maker” (“Creador”), y Massimo Banzi, cofundador de Arduino, se refiere a él como una placa de “factor de forma de creador”. Esto no es sorprendente, ya que generalmente se acepta que Arduino está diseñado para creadores, y no es de especial interés para los profesionales de ingeniería electrónica.

El FPGA

El FPGA incluido es un Intel Cyclone 10CL016, y el sitio web de Arduino afirma que el FPGA contiene 16.000 elementos lógicos, 504 Kb de RAM, 56 multiplicadores 18×18 de hardware para aplicaciones DSP de alta velocidad, etc. El sitio web también establece que los pines FPGA pueden dar salidas de hasta 150MHz, y que también pueden configurarse como puertos de comunicaciones comunes como UART, I2C y SPI. Si es cierto, este complemento FPGA podría ser extremadamente útil para los diseñadores que desean crear sistemas digitales de alta velocidad que necesitan capturar datos y procesarlos rápidamente (como los procesadores de señales digitales).

Sin embargo, ¿cuántos aficionados realmente necesitan usar un FPGA?

¿Cómo ayudará esto a los diseñadores?

El acceso a un FPGA permite que los diseñadores creen circuitos personalizados para conectarse al Arduino, lo que puede eliminar la necesidad de circuitos externos. También permite cargarle las funciones de E/S del Arduino al FPGA, pero conlleva el costo de requerir una línea de comunicación entre el FPGA y el Arduino (a menos que el FPGA y la CPU estén integrados en el mismo paquete, en cuyo caso los dos pueden tener líneas de E/S especiales para su comunicación).

Los FPGA, sin embargo, son dispositivos complejos y, a menudo, se programan en lenguajes como HDL y Verilog, que no son aptos para personas no muy arriesgadas. Si bien Arduino anunció que están diseñando un sistema de compilación basado en la nube que facilitará el uso del FPGA, esto aún está por verse. La mayoría de las veces que un sistema se hace más fácil de usar, sacrifica su poder, capacidad y control. Dicho esto, el Vidor 4000 podría ser una herramienta educativa invaluable para aquellos que desean comenzar con FPGA.

¿Más al estilo pi?

El Vidor 4000 no solo cuenta con la inclusión de un FPGA; también tiene varios dispositivos de E/S que lo hacen parecer más a un Pi que a un Arduino.

El Vidor 4000 incluye también un módulo Wi-Fi Nina W102, un chip criptográfico ECC508, un conector micro HDMI, un conector MIPI para cámara y un conector rápido MiniPCI con hasta 25 pines programables por el usuario. Estas características, especialmente el Wi-Fi incorporado, crean una plataforma de IoT potencialmente popular que puede realizar tareas increíblemente complejas. Con el chip criptográfico incorporado, la verificación SSL y HTTPS se convertirán en una tarea trivial y ayudarán a descargar las tareas de seguridad del microcontrolador principal.

Si bien este dispositivo no será tan poderoso como un Raspberry Pi, definitivamente es más pequeño y está más enfocado en el hardware, algo en lo que la Pi se queda atrás.

Placas competidoras para creadores con FPGA

El Vidor 4000, obviamente, no es la primera placa en salir con capacidades FPGA, pero tampoco es la primera construida teniendo en cuenta la compatibilidad con Arduino. Otro producto ya en el mercado, XLR8, es una tarjeta de desarrollo compatible con Arduino que está basada en FPGA, incluye un microcontrolador integrado de instrucción AVR de 8 bits y es programable a través del IDE de Arduino.

El XLR8 está preconfigurado con “bloques xcelerator”, que son bloques que están especialmente diseñados para manejar tareas específicas. Los bloques con los que viene preinstalada la unidad incluyen un bloque matemático de punto flotante, un servocontrol, un controlador NeoPixel y un ADC mejorado.

La integración de los FPGA en un proyecto Arduino sin duda creará una nueva ola de proyectos e ideas que podrán construir los aficionados, pero los FPGA son dispositivos complejos. Sin embargo, los usuarios de Arduino pueden comenzar a diseñar su propio hardware desde cero y los FPGA incluidos en los microcontroladores pueden cambiar la forma en que se construyen los circuitos.

La nueva placa MKR Vidor 4000 lleva la complejidad de los FPGA a los que no son ingenieros electrónicos.




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)


Módulo de llave pulsadora – KY-004 (Kit de sensores Keyes 4)

Bien, yo hubiese obviado hacer un artículo sobre este módulo: es un pulsador, lo mismo que tomar dos cables y unirlos para enviar una señal. Pero bueno, es parte del kit de “sensores” para Arduino, es el que sigue en orden en la secuencia númerica de Keyes, así que aquí está.

El módulo Keyes KY-004 es una plaqueta con un pulsador y una resistencia que, cuando no se pulsa el interruptor, mantiene la línea en 0V, y cuando se lo pulsa envía un nivel alto. Si no estuviese el resistor, la línea de entrada de un microcontrolador quedaría flotante, y por una entrada flotante ingresa ruido. Es decir, no se puede saber qué puede leer el microcontrolador si uno quiere ingresar ese dato.

Módulo KY-004:

El módulo consta de un interruptor táctil o botón pulsador FZ1713 y una resistencia.

Capacidad del contacto: 50mA 12V CC
Temperatura: -25° C a 105° C
Vida de los contactos: 100.000 ciclos.
Fuerza de operación: 180/230 ± 20gf
Dimensiones: 18,5 mm x 15 mm

Conexión:

La línea central se conecta a +5V, la línea marcada con un signo a GND, y la salida está marcada con la letra S. Para conectarlo al Arduino se une a la línea digital 2 de la plaqueta.

Módulo de llave pulsadora – KY-004: 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)