CC1101: transceptor RF para usar con Arduino

cc1101

Seguramente que en algunos proyectos necesites trabajar con radiofrecuencia con tu Arduino, o con cualquier otra placa de desarrollo o circuito DIY. Pues bien, si ese es tu caso, deberías conocer qué es el transceptor de radiofrecuencia (RF) CC1101. Y eso es lo que trataremos de explicarte en este artículo.

Y es que con este otro componente electrónico que se une a nuestra lista, podrás trabajar con diferentes frecuencias de señal…

¿Qué es la RF?

espectro electromagnético

Con radiofrecuencia (RF) nos estamos refiriendo a una parte del espectro electromagnético que se utiliza para transmitir información a través del aire. Las ondas de RF son un tipo de radiación electromagnética, y se producen siempre que la energía eléctrica se transmite a través de un conductor, como un cable. El término RF se aplica a la porción menos energética del espectro electromagnético que te muestro en la imagen anterior, y que se situada entre los 3 hercios (Hz) y 300 gigahercios (GHz).

Velocidad de la luz = Longitud de onda · frecuencia

La velocidad de la luz (aproximadamente 3.000.000 m/s) nunca cambia, por lo que como la longitud de onda de la señal de RF aumenta, la frecuencia disminuye de manera proporcional y viceversa. Una señal de RF de frecuencia relativamente alta tiene una longitud de onda corta y una señal de RF de frecuencia más baja tiene una longitud de onda mayor. Por este mismo motivo, las señales de frecuencias más bajas son más penetrantes o pueden cubrir mayor cobertura. Por ejemplo, si tienes WiFi a 2.4 Ghz, puede llegar más lejos y atravesar mejor las barreras en comparación con WiFi a 5 Ghz, aunque éste último permite mayores velocidades de transmisión…

El hercio es la unidad de medida de la frecuencia de las ondas, y corresponde a un ciclo por segundo. Mientras mayor es la frecuencia de la onda, menor será su longitud de onda. Por eso la radiación gamma es muy penetrante, ya que la longitud de onda es muy pequeña, y su frecuencia muy elevada, por lo que es altamente energética.

Las ondas electromagnéticas de esta región del espectro, se pueden transmitir aplicando la corriente alterna originada en un generador a una antena. Las ondas de radiofrecuencia, al ser ondas electromagnéticas, se desplazan a la velocidad de la luz. En su aspecto más básico, una señal eléctrica variante en una antena puede producir oscilaciones electromagnéticas (es decir, ondas de RF). Estas pueden ser no intencionales (lo que potencialmente causa interferencia con otros dispositivos) o intencionales: señales moduladas cuidadosamente que otras antenas pueden recibir y se pueden interpretar como información útil.

Dentro de este rango RF, podemos transmitir datos a alta velocidad, por ejemplo, como se hace en comunicaciones Wi-Fi y celulares, así como en la radio AM y FM tradicional.

¿Qué es un transceptor?

RF transductor

Un transceptor es un dispositivo que combina las capacidades de un transmisor y un receptor en circuitos compartidos. Esto significa que puede enviar y recibir señales, sin necesidad de tener por un lado un transmisor y por otro un receptor. Algo bastante práctico para muchos proyectos DIY.

Los transceptores pueden ser de dos tipos generales: dúplex completo y semidúplex. En un transceptor dúplex completo, el dispositivo puede transmitir y recibir al mismo tiempo. Un ejemplo común de un transceptor dúplex completo es un teléfono móvil. Por otro lado, un transceptor semidúplex silencia a una parte mientras la otra transmite.

Los transceptores son la piedra angular de la comunicación inalámbrica y se utilizan en una variedad de aplicaciones, desde teléfonos móviles hasta satélites de comunicaciones, pasando por otras muchas redes y maneras de transmitir información, como para la radio, TV, etc.

Aplicaciones de un transceptor

Un transceptor de radiofrecuencia (RF) es un dispositivo multifuncional que puede tener gran cantidad de usos. Por ejemplo, como dije anteriormente, su presencia es fundamental en diversas aplicaciones que requieren comunicación inalámbrica. En el ámbito de las telecomunicaciones móviles, los transceptores se utilizan en teléfonos móviles para la transmisión y recepción de señales. Además, son esenciales en tecnologías como WiFi y Bluetooth, desplegadas en dispositivos como routers, computadoras y dispositivos de Internet de las cosas (IoT), que dependen de la comunicación inalámbrica para su funcionamiento.

En el ámbito profesional, los transceptores RF son fundamentales en sistemas de radio bidireccionales, como radios de dos vías empleadas en aplicaciones profesionales, seguridad y servicios de emergencia. Estos dispositivos también encuentran aplicación en sistemas de detección, como radares utilizados para la detección de objetos, navegación y control de tráfico aéreo, así como en sistemas de sonar para aplicaciones submarinas.

La radiodifusión, tanto de radio como televisión, depende de transceptores RF para la transmisión de señales a través de distintos medios, ya sea terrestre o satelital. Además, en el ámbito espacial, los transceptores son cruciales para la comunicación entre satélites y estaciones terrestres en sistemas de comunicaciones por satélite.

En aplicaciones de control remoto y telemetría, los transceptores RF se utilizan para la transmisión de datos desde dispositivos electrónicos, drones o vehículos aéreos no tripulados (UAV). También son esenciales en sistemas de navegación, como en receptores GPS, donde contribuyen a la determinación de ubicación y navegación. En resumen, la versatilidad de los transceptores de RF los convierte en componentes esenciales en una variedad de tecnologías modernas que dependen de la comunicación inalámbrica y la transmisión de datos.

Evidentemente, existen algunas de estas aplicaciones que no están al alcance del CC1101, ya que tiene sus limitaciones y opera en unos rangos de frecuencias determinados. Sin embargo, debes saber que existen más dispositivos en el mercado como este transceptor para trabajar con otras frecuencias, distancias, etc.

¿Qué es el CC1101?

cc1101

El CC1101 es un transceptor de radiofrecuencia (RF) diseñado para operar en frecuencias inferiores a 1 GHz. Este dispositivo se puede utilizar junto con un procesador como Arduino para enviar o recibir datos por radiofrecuencia. El CC1101 puede trabajar en cualquier frecuencia dentro de las siguientes bandas:

  • 300 a 348 MHz
  • 387 a 464 MHz
  • 779 a 928 MHz

Estas características hacen que el CC1101 sea una opción versátil para una variedad de proyectos que requieren comunicación inalámbrica, incluyendo proyectos de Arduino y ESP8266/ESP321, y otros proyectos de electrónica dentro del ámbito de las comunicaciones a distancia.

Además, el CC1101 permite ajustar la velocidad de los bits para diferentes usos, lo que permite una mayor velocidad de transmisión, desde 0.6 Kbps a 600 Kbps. Y también soporta modulaciones 2-FSK, GFSK y MSK3.

Si te interesa, puedes encontrarlo en tiendas especializadas de electrónica, o también en plataformas de venta online como Amazon, Aliexpress y eBay. Aquí tienes una recomendación de compra:

La potencia de salida es también programable, para todas las frecuencias de soporte de hasta + 10 dBm. El alcance es de hasta 100-150 metros, en función de la frecuencia. Y para su funcionamiento necesita un voltaje de 1.8 a 3.6V. La comunicación de datos se realiza a través del bus SPI, por lo que es sencillo emplearlo junto a una MCU o placas como Arduino…

Usar el CC1101 con Arduino

Arduino IDE, tipos de datos, programación

Ahora bien, una vez has comprendido qué es el CC1101, si quieres usarlo con Arduino, es fácil de hacer. Para ello, lo primero es conectar de forma correcta el dispositivo o módulo de RF a tu placa de desarrollo. Ten cuidado, ya que el CC1101 no tolera voltajes de 5v y puedes dañarlo, así que no se conectará a la toma de 5v de Arduino como hemos hecho con otros muchos dispositivos. La conexión para que funcione adecuadamente es la siguiente:

  • Vcc: irá conectado a 3v3 de Arduino en vaso de tener esta toma, si no la tiene y solo dispones de 5v, entonces tendrás que conectarlo a una pila o fuente externa que pueda suministrar ese voltaje o se dañará el CC1101.
  • SI: irá conectado a SCK de Arduino, que puede cambiar de pin según el modelo, pero que generalmente es D13.
  • SO: en este caso se conectará con GO2, que suele ser el pin D12 de Arduino.
  • CSN: tienes que llevarlo hasta el pin GO0, que es el D9 de Arduino.
  • GND: y para finalizar, GND irá conectado a GND de Arduino o de tu fuente de alimentación.

Una vez hecho esto, toca escribir el código para probarlo en Arduino IDE. Para ello, aquí te muestro un ejemplo muy básico, pero que podrás modificar a tu gusto. En este caso el CC1101 estará operando como receptor de señal RF:

Fíjate que tendrás instalar una biblioteca en tu Arduino IDE para poder funcionar, esa biblioteca es la de ELECHOUSE para el CC1101 que puedes descargar desde aquí.

#include <ELECHOUSE_CC1101_SRC_DRV.h>

void setup(){

    Serial.begin(9600);

    if (ELECHOUSE_cc1101.getCC1101()){         // Comprobar la conexión SPI del CC1101.
    Serial.println("Connection OK");
    }else{
    Serial.println("Connection Error");
    }

    ELECHOUSE_cc1101.Init();              // Inicializa el CC1101
    ELECHOUSE_cc1101.setCCMode(1);       // Configuración del modo de transferencia interna.
    ELECHOUSE_cc1101.setModulation(0);  // Modulación: 0 = 2-FSK, 1 = GFSK, 2 = ASK/OOK, 3 = 4-FSK, 4 = MSK.
    ELECHOUSE_cc1101.setMHZ(300,15);   // Pon la frecuencia que quieras usar para la transmisión (por defecto es 433,92 Mhz)
    ELECHOUSE_cc1101.setSyncMode(2);  // Modo de sync: 0 = No preamble/sync. 1 = 16 sync word bits detected. 2 = 16/16 sync word bits detected. 3 = 30/32 sync word bits detected. 4 = No preamble/sync, carrier-sense above threshold. 5 = 15/16 + carrier-sense above threshold. 6 = 16/16 + carrier-sense above threshold. 7 = 30/32 + carrier-sense above threshold.
    ELECHOUSE_cc1101.setCrc(1);      // 1 = CRC calculado en TX y comprobación CRC en RX habilitada. 0 = CRC deshabilitado en TX y RX.
    
    Serial.println("Rx Mode");
}
byte buffer[61] = {0};

void loop(){

    //Comprueba si se ha recibido algo en un tiempo marcado por (time in millis)
    if (ELECHOUSE_cc1101.CheckRxFifo(100)){
    
    if (ELECHOUSE_cc1101.CheckCRC()){    //Prueba CRC. Si "setCrc(false)" CRC devuelve un OK siempre.
    Serial.print("Rssi: ");
    Serial.println(ELECHOUSE_cc1101.getRssi());
    Serial.print("LQI: ");
    Serial.println(ELECHOUSE_cc1101.getLqi());
    
    int len = ELECHOUSE_cc1101.ReceiveData(buffer);
    buffer[len] = '\0';
    Serial.println((char *) buffer);
    for (int i = 0; i < len; i++){
    Serial.print(buffer[i]);
    Serial.print(",");
    }
    Serial.println();
    }
    }
}

El CC1101 operando como transmisor de señal RF tiene un código similar al anterior.


Sé el primero en comentar

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.