domingo, 16 de agosto de 2015

Componentes (2): Transceptor inalámbrico nRF24L01+

En el artículo de hoy vamos a conocer otro componente muy útil para nuestros montajes: el transceptor inalámbrico nRF24L01+.

Se trata de un transceptor inalámbrico, esto es, un dispositivo capaz de funcionar como transmisor y como receptor por medio de radiofrecuencia. La banda de radiofrecuencia utilizada es la ISM (Industrial, Scientifical and Medical), una banda reservada para su uso no comercial por parte de particulares, y concretamente el rango de frecuencias desde 2,400 a 2,500 Ghz que todos conocemos por ser el utilizado por microondas, WIFI, Bluetooth, teclados y ratones inalámbricos, y multitud de otros aparatos.

Este dispositivo, fabricado por Nordic Semiconductor,  nos permitirá comunicar un dispositivo (arduino o de cualquier otro tipo) con otro, pudiendo funcionar como emisor o receptor en cada momento. Hay multitud de artículos en los que se puede encontrar información sobre él, de manera que paso a destacar sus características principales.

Primero lo que no es:

  • El nRF24L01+ no es un dispositivo WIFI, aunque utilice la misma frecuencia.
  • Tampoco se trata de un dispositivo Bluetooth, aunque hay personas, como Dmitry Grinberg, que han conseguido empaquetar parte del protocolo Bluetooth LE mediante el dispositivo y comunicarse de una manera algo rudimentaria con otros dispositivos Bluetooth.

 Lo que sí es:

  • Se trata de un dispositivo inalámbrico de ultra-baja potencia. Su pico de consumo cuando está recibiendo o emitiendo es de 14 mA, cuando está en modo de reposo 26 μA, y cuando está en modo "apagado" es de 900 nA. El tiempo de activación cuando está en uno de estos modos es rapidísimo, lo que facilita su utilización en entornos con necesidades de muy bajo consumo.
  • Utiliza la banda de 2,4 Ghz a 2,525 Ghz para la comunicación, y puede hacerlo a una velocidad de 250kbps, 1 Mbps o 2 Mbps. Su alcance máximo (en abierto y sin obstáculos) puede llegar a los 200 metros, lo cual no está nada mal.
  • Puede utilizar cualquiera de los 126 canales disponibles en su rango de frecuencias.
  • Puede mandar secuencias de datos hasta 32 bytes seguidos en modo "ShockBurst" (ráfagas).
  • 6 canales de datos simultáneos para comunicación en estrella con otros dispositivos iguales. Cada uno de estos canales debe tener una dirección, que debe ser igual en el receptor que en el emisor. Estas direcciones son un número de entre 3 y 5 bytes. Se recomienda para evitar errores que los bits de la dirección cambien de nivel (de 0 a 1 o de 1 a 0) varias veces.
  • En las especificaciones del fabricante indica que puede funcionar con una alimentación de entre 1,9V a 3,6V, aunque según lo que yo he leído parece ser muy quisquilloso y deberíamos alimentarlo siempre a 3,3V. Ya veremos cómo se comporta con un par de pilas AA, que es como quiero probarlo...
  • Su coste es muy bajo, tirando a ridículo. En la foto de arriba podéis ver el que yo he comprado en Aliexpress por un precio de 0,60€, con los gastos de envío incluídos desde China y puesto en casa. Es verdad que yo he pedido 10 y así salen más baratos, pero aún así el precio es ridículo. Os pongo el enlace del mío por si le interesa a alguien:

    http://www.aliexpress.com/item/Free-Shipping-10PCS-NRF24L01-wireless-data-transmission-module-2-4G-the-NRF24L01-upgrade-version-We-are/1680738017.html
  • En cuanto a la comunicación inalámbrica, utiliza un protocolo propio que asegura la integridad de los paquetes, reenviando paquetes que se pierdan de forma transparente y devolviendo un "ACK" que asegura al emisor que el mensaje ha llegado al receptor.
  • En cuanto a la comunicación con controladores como el arduino, utiliza el protocolo SPI (Serial Peripheral Interface), un estándar utilizado en los equipos electrónicos para transmitir información de un integrado a otro. Las señales estandar de dicho protocolo están disponibles en sus patillas según el siguiente esquema:

    Conexionado nRF24L01+
    Y este es el significado de cada una de ellas:
    1. GND: Tierra o masa común.
    2. VCC: Conector de alimentación. En las especificaciones se indica que debe estar comprendida entre 1,9V y 3,6V. OJO: nunca alimentar a 5V o adiós transceptor.
      Por internet hay multitud de comentarios acerca de que la alimentación debe ser exclusivamente de 3,3V y muchos incorporan un pequeño condensador entre las patillas 1 y 2 para estabilizar la alimentación. En mis pruebas voy a intentar alimentarlo a 3V a partir de pilas, a ver qué tal va.
    3. CE (Chip Enable): Hay que ponerlo a 1 cuando queramos recibir o enviar datos.
    4. CSN (Chip Select Not): Hay que ponerlo a 0 cuando queramos mandar un comando SPI al dispositivo desde el controlador.
    5. SCK (SPI Clock): Señal de reloj para el protocolo SPI.
    6. MOSI (Master Output Slave Input): Esta línea sirve para enviar datos desde el controlador (denominado maestro) al dispositivo inalámbrico (denominado esclavo).
    7. MISO (Master Input Slave Output): Esta línea hace lo contrario, enviar datos desde el dispositivo inalámbrico (slave out) al controlador (master in).
    8. IRQ: Esta línea de interrupción se activa en determinadas circunstancias alertando al controlador. Se puede programar para que se ponga a 1 cuando se reciba un paquete de datos, o cuando se termine la transmisión, etc.
  • El funcionamiento del protocolo SPI en este dispositivo se sale del ámbito que quiero darle a este artículo; se trata de una serie de comandos a bajo nivel que se asemejan mucho a la programación en código máquina, escribiendo valores en registros concretos del dispositivo. No obstante, si alguien quiere hacerse su propia librería para programarlo, puede encontrar todo muy bien documentado en el este artículo de gizmosnack.

Y eso es todo por ahora. Sólo decir que para utilizar el dispositivo desde Arduino hay numerosas librerías, como ésta, ésta, ésta, ésta, ésta, ésta, ésta, ésta o muchas otras. Cuando haga más pruebas os diré la que yo voy a usar.
Related Posts Plugin for WordPress, Blogger...

No hay comentarios:

Publicar un comentario