Crea una base de seguimiento del tráfico aéreo con una Pi
En este proyecto utilizamos una Raspberry Pi con hardware de radio definida por software (SDR) de bajo coste, para recibir la información de seguimiento que emiten los transpondedores Mode-S de las aeronaves a cientos de kilómetros de distancia, así como un atractivo display TFT de 3,5" para proporcionar un práctico resumen de la actividad de espacio aéreo.
Hardware
El diminuto receptor SDR basado en RTL2832U (código RS 124-5461) se diseñó y se comercializó originalmente para la recepción de TDT. Sin embargo, gracias a los esfuerzos de un hacker del kernel de Linux hace cosa de cinco años, es posible obtener muestras sin procesar del dispositivo, en lugar de una señal de TDT desmodulada. Esto significa que los sistemas inalámbricos pueden entonces implementarse en el software, lo que proporciona una flexibilidad inmensa.
El chip RTL2832U se suele emparejar con un IC de sintonizador y, en el caso del receptor USB de Adafruit, se trata de un R820T, lo que permite la recepción entre 24 y 1.850 MHz.
Debe tenerse en cuenta que, con una resolución de ADC de 8 bits y un número de bits efectivo (o ENOB) de aproximadamente 7 bits, el hardware RTL-SDR no va a competir de forma favorable en términos de rango dinámico con plataformas SDR más caras, pero para muchos usos es suficiente y representa una increíble relación calidad-precio.
El software que se utilizará para recibir y decodificar señales Mode-S proporciona una interfaz web basada en Google Maps y un display local que no es estrictamente necesario. No obstante, la adición de un display Adafruit PiTFT de 3,5” (código RS 124-5487) proporciona una práctica vista resumida de la actividad en el espacio aéreo.
Además, la combinación de Raspberry Pi, receptor SDR y display TFT puede configurarse alternativamente como un escáner autónomo con visualización de espectro que, hay que decirlo, resulta bastante espectacular.
El display TFT se conecta sin más en el conector macho P1 de la Pi, mientras que el receptor SDR se introduce en uno de los puertos USB.
Raspbian
En lo que respecta a la instalación de Raspbian, hay dos opciones: descargar una imagen de Adafruit con la compatibilidad con el display TFT ya configurada en el kernel, o emplear una imagen de Raspbian puro y configurarla como corresponde. He optado por la última, ya que normalmente prefiero utilizar una imagen de instalación de sistema operativo y, seguidamente, realizar las personalizaciones necesarias. No obstante, la primera opción requiere menos pasos, y la probabilidad de errores es menor. Adafruit proporciona instrucciones para ambos métodos.
Tras borrar la tarjeta Micro SD con “dd”, procedí a cambiar el nombre de host por defecto “raspberrypi” a “planepi”, para facilitar su localización en la red; para ello, edité los archivos:
etc/hostname
etc/hosts
Fíjate en la omisión de la barra inclinada al principio, para evitar editar accidentalmente los archivos contenidos en la carpeta /etc del ordenador en el que hemos preparado la tarjeta SD. Así pues, deberás añadir la ruta con la que tu ordenador ha montado el sistema de ficheros root en la tarjeta SD.
Si prefieres configurar un sistema mediante teclado, monitor y ratón conectados, no tendrás que activar SSH. Pero si, como yo, prefieres configurar mediante una conexión SSH, introduce:
$ sudo touch boot/ssh
Debes sustituir “boot” con la ruta completa al sistema de archivos de arranque de la tarjeta SD.
Si la Pi va a estar conectada a una red de cable, puedes extraer la tarjeta Micro SD, insertarla en la Pi y arrancar. Si, en cambio, vas a utilizar una conexión de red inalámbrica, además debes editar:
etc/wpa_supplicant/wpa_supplicant.conf
De nuevo, hay que dejar bien claro que no se trata del archivo de configuración en /etc/wpa_supplicant en el ordenador, sino del archivo en el directorio /etc/wpa_supplicant del sistema de archivos root de la tarjeta SD.
Para más información acerca de la configuración manual inalámbrica, consulta la documentación de Raspberry Pi.
Configuración de PiTFT
Puesto que opté por una imagen Raspbian pura y necesitaba configurarla de modo que el kernel tuviera soporte para el display TFT, seguí las instrucciones del script del instalador DIY Easy Install que proporciona Adafruit. Sin embargo, al introducir la línea “sudo apt-get install”, el sistema respondió con el mensaje de error mostrado arriba, debido a que la imagen pura tenía versiones de software más nuevas, por lo que era necesario forzar un downgrade con:
$ sudo apt-get install -y --force-yes raspberrypi-bootloader adafruit-pitft-helper raspberrypi-kernel
Hecho esto, se ejecutó el script de ayuda para instalar el tipo "3.5 inch Resistive" de PiTFT.
$ sudo adafruit-pitft-helper -t 35r
Quizás lo más aconsejable sea, en general, utilizar sin más la imagen preconfigurada de Raspbian que suministra Adafruit. No obstante, la información anterior puede ser útil para quien, por el motivo que sea (por ejemplo, al añadir estas capacidades a un sistema en marcha que ejecute otras aplicaciones), empiece con Raspbian puro como punto de partida.
Finalmente, con la Pi orientada como se muestra en la imagen al principio de este post, en la que el cable de alimentación USB está orientado hacia abajo, la configuración deberá actualizarse para girar el display 180o. Para ello, se edita el archivo /boot/config.txt file cambiando rotate=270 por rotate=90.
dump1090
Hay software diferente para recibir y decodificar transmisiones Mode-S y, hace unos 5 años, escribí acerca de los gr-air-modes de GNU Radio. Sin embargo, esta vez vamos a emplear un software llamado dump1090, cuyo nombre se refiere a la frecuencia empleada por Mode-S, 1090 MHz.
Entre las ventajas de dump1090 se incluye que, a diferencia de GNU Radio, las dependencias externas son mínimas. Además, es muy robusto y decodifica bien las señales débiles. Al utilizarlo en su modo interactivo, imprimirá un resumen de la actividad a la consola y el "fork" compartido en GitHub ha sido muy ligeramente modificado de modo que encaje bien con el display TFT de 3,5”.
Para compilarlo, necesitamos hacer:
$ sudo apt-get install libusb-1.0-0-dev librtlsdr-dev rtl-sdr
$ git clone https://github.com/DesignSparkrs/dump1090
$ cd dump1090
$ make
Y seguidamente, editaremos el archivo /etc/rc.local añadiendo la línea siguiente antes de “exit 0”:
cd ~pi/dump1090; ./dump1090 --net --net-http-port 80 --interactive &
En funcionamiento
En este punto debemos reiniciar, de modo que el kernel se configure para el display TFT y sin la compatibilidad con sintonizador de TV predeterminada cargada para el hardware RTL-SDR (para evitar problemas potenciales). Si todo ha ido bien, dump1090 se reiniciará mediante la línea que acabamos de añadir en /etc/rc.local, y a continuación, las señales recibidas deberían empezar a mostrarse en el display TFT.
Seguidamente, si introducimos la dirección del Raspberry Pi en un navegador, obtendremos una sencilla aplicación web basada en Google Maps, con las posiciones de las aeronaves marcadas y datos de altitud, etc.
Ten en cuenta que la antena proporcionada con el receptor SDR no es óptima para 1090MHz, pero en la mayoría de zonas debería ser posible recibir como mínimo señales de algunas aeronaves con esta antena. Eso sí, asegúrate de que esté situada al lado o por fuera de una ventana. Si la suerte no te acompaña, hay planos en Internet para antenas DIY sencillas sintonizadas a 1090 MHz y con una ganancia mucho mayor.
Software y servicios adicionales
dump1090 también hace que los mensajes sin formato de Mode-S estén disponibles en la red, y se puedan utilizar con software como PlanePlotter para ofrecer una visualización más sofisticada. Además, se pueden enviar datos desde el receptor a servicios online que proporcionan acceso a los datos de fuentes aportadas colectivamente, como The OpenSky Network y FlightAware.
Consulte el artículo original escrito por Andrew Back en DesignSpark (en inglés).