Try   HackMD

Globo meteorológico - SSTV y APRS

Por Fran Acién y David Arias.

Introducción

El proyecto que se propone realizar es la creación de un dispositivo portable que tome imagenes y las transmita por radio con la codificación SSTV. En la imagen tendrá que tener el indicativo con el que se transmite, y diferentes variables como la posición GPS y la altura.

El dispositivo tendría diferentes usos, el más interesante sería el de globo meteorológico. La posibilidad de tomar imágenes en tiempo real se podía utilizar para tomar imágenes de la atmósfera y recibirlas al instante vía radio.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Se trata de un proyecto transversal que une todas las ramas estudiadas en nuestro grado universitario de Ingeniería de Telecomunicaciones. Las áreas de desarrollo del proyecto son la programación en C, el estudio de los protocolos en los distintos niveles, la creación de sistemas de transmisión, modulaciones analógicas, codificaciones digitales, electrónica en sistemas radio y las comunicaciones por radio.

Adicionamente se hará un segundo transmisor, como mejora, que emitirá radiopaquetes, con el protocolo APRS, con la posición GPS para poder hacer un seguimiento utilizando APRS.fi. De este modo, desde la ground station podremos ver el recorrido del prototipo en el cielo.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Origen y fundamento del proyecto

Este proyecto se trata de una modificación del trabajo desarrollado por el Laboratorio de Investigación GranaSAT de la Universidad de Granada[1]. En su trabajo[2] desarrollaron un emisor APRS para el envío de información de temperatura, sensores magnéticos, etc.

El enfoque en los dos proyectos es similar, porque utilizan tecnología muy parecida, aunque la información enviada en los dos sistemas es totalmente distinta.

La transmisión de imagenes mediante SSTV y la emisión de radiopaquetes APRS es ampliamente usada en la radioafición. Hacer un prototipo de este estilo sería interesante para la comunidad española. Se podría plantear en el futuro un concurso de recepción de imagenes del cielo tomadas por este prototipo.

Actividades a realizar: denominación, descripción y metodología

Las tareas a desarrollar serán:

  1. Estudio del protocolo SSTV
  2. Estudio del protocolo APRS
  3. Creación de middleware para la tomar imágenes con arduino.
  4. Creación de middleware para guardar los valores de los sensores.
  5. Crear una librería en C, que dada una imagen emita en banda base con la codificación SSTV.
  6. Crear una librería en C, que dados unos valores de posición la emita según el protocolo APRS utilizando PWM.
  7. Creación de la librería para la comunicación con el transmisor radio.
  8. Programación del dispositivo utilizando las librerias desarrolladas anteriormente.

De la parte hardware se hará:

  1. Estudio de los módulos que componen el proyecto con sus datasheets.
  2. Familiarizarse con todos los módulos.
  3. Creación del circuito electrónico que interconecten todos los módulos.
  4. Creación de la antena.
  5. Creación de una caja para el dispositivo desarrollado.

Especifiación del protocolo SSTV

Slow-scan television (SSTV) es un método de transmision utilizado por los operadores de radiafición para transmitir y recibir imagenes. Permite transmitir imágenes en blanco y negro o en color a través de radio.

No se necesita de un gran ancho de banda, normalemente solo se utiliza un máximo de 3 kHz. La transmisión de imágenes depende del modo usado, pero oscila entre 8 segundos y 2 minutos.

Propiedades de transmisión

En las bandas del espectro radioeléctrico asignadas para el servicio de radioafición podemos encontrar frecuencias asignadas para la transmisión de SSTV.En las diferentes bandas podremos encontrar SSTV en las siguientes frecuencias:

  • Banda de 80 m- 3.735 MHz
  • Banda de 40 m- 7.165 MHz
  • Banda de 20 m- 14.230 MHz
  • Banda de 15 m- 21.340 MHz
  • Banda de 10 m- 28.680 MHz
  • Banda de 6 m- 50.510 MHz
  • Banda de 2 m- 144.500 MHz
  • Banda de 70 cm- 433.400 MHz

Se puede utilizar cualquier modulación, pero lo más común es que para LF y HF se utilice BLU, y para VHF/UHF se utilice FM.

Transmisión de SSTV

Hay diferentes modos para emitir imágenes usando SSTV. Entre ellos comparten muchas propiedades de codificación, y se diferencian mayormente en los tiempos de sincronización, frecuencias usadas y calidad de imagen. Esto hace que algunos modos sean más rápidos transmitiendo imagenes que otros.

Por lo general la emisión tendrá el siguiente espectro:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Espectrograma del inicio de una transmisión SSTV. Mysid 2007 http://wikipedia.com

Al incio de la transmision se envía un tono de 1900 Hz durante 300 ms que se utiliza para la calibrar. Se llama Calibration Header o Leader tone.

Después se transmite el VIS Code. Un código digital, único para cada modo, que identifica el modo de recepción del sistema.

Acto seguido se incia la transmisón que consiste en la emisión de las lineas horizontales de derecha a izquierda. La codificación de los colores puede cambiar entre los modos, pero normalemente se emite la intensidad del color verde de la linea pixel a pixel horizontalmente, luego con el color azul y finalmente con el rojo. Al cambiar de color se emite un tono de de sincronización, Sync Pulse, y otro entre salto de lineas Sync Porch.

También hay que destacar que se suele emitir una melodía antes de emitir SSTV, que es comúnmente llamado VOX tone, pero este no pertenece al protocolo.

Elección del modo, banda y modulación

Para la realización de este proyecto hemos elegido el modo Scottie 1. Es un modo que transmite en color y es ampliamente usado en el mundo de la radioafición. Su desventaja es el tiempo de emisión que es de 109.6 segundos.

La banda de radioafición que vamos a utilizar será VHF por las dimensiones que tendrán las antenas. Y la modulación que usaremos será FM.

Especificación del modo Scottie 1

La especificación del protocolo lo podremos encontrar en barberdsp.com (Dayton SSTV forum, 20 May 2000). Pero explicaré en este documento de una forma más liviana cómo se transmite.

Con el protocolo Scottie 1 tenemos algunas limitaciones, como puede ser la dimesión de la imagen (320x256 px). A diferencia que otros modos la secuencia de escaneo por colores es verde, azul y rojo, emitiendose el Sync Porch al finalizar la transmisión del color azul.

Propiedad Valor
VIS CODE 60d (0111100)
Modo de color RGB(1500-2300Hz)
Secuencia de escaneo Gren, Blue, Red
Número de lineas 256
Dimensiones de la imagen 320x256 px
Tiempo de transmisión 109.6 s
Tiempo de escaneo por linea 138.2440 ms
Tiempo de escaneo por pixel 0.4320 ms

Secuencia de emisión

En el caso de Scottie 1 tendremos los siguientes valores de temporización:

Variable Valor
Tiempo de emisión de un pixel 0.4320 ms/pixel
Tiempo de emisión de una linea 138.240 ms (0.4320 ms/pixel @ 320 pixels/line)
Separator pulse 1.5 ms / 1500 Hz
Sync pulse 9.0 ms / 1200 Hz
Sync porch 1.5 ms / 1500 Hz

La secuencia de emisión será de la siguiente forma.

(1) "Starting" Sync pulse                   9.0 ms        1200 Hz
(2) Separator pulse                         1.5 ms        1500 Hz
(3) Green scan                              138.240 ms (0.4320ms/pixel @ 320 pixels/line)
(4) Separator pulse                         1.5 ms        1500 Hz
(5) Blue scan                               138.240 ms (0.4320ms/pixel @ 320 pixels/line)
(6) Sync pulse                              9.0 ms        1200 Hz
(7) Sync porch                              1.5 ms        1500 Hz
(8) Red scan                                138.240 ms (0.4320ms/pixel @ 320 pixels/line)

Después de la primera linea, se repiten los pasos 2-8 para la emisión de las siguientes lineas.

Codificación del color

La emisión del color de cada pixel se hará transmitiendo una frecuencia indicando el brillo de la imagen. Esto es, los colores se codificarán en 24-bit RGB.

El color blanco (el máximo valor) codificado en 24-bit RGB será #FFFFFF o RGB(255, 255, 255). El rojo se codificaría como #FF0000 o RGB(255, 0, 0). Para extraer los componentes de brillo de cada color ser haría:

RedByte = colorval & 0x0000FF;
GreenByte = colorval & 0x00FF00 >> 8;
BlueByte = colorval & 0xFF0000 >> 16;

Los modos de SSTV transmiten los colores en las frecuencias 1500-2300 Hz, representando el brillo de cada componente de color. Para transmitir los colores los tonos tomarán las frecuencias del siguiente modo:

Frecuencia = 1500 + (3.1372549 * ColorByte)

Codificador SSTV Scottie 1

Con todo lo expuesto anteriormente somos capaces de crear un codificador SSTV. Se adjunta el código de lo que sería un codificador SSTV Scottie 1 utilizando un psuedo-C para que sea más explicativo. En este ejemplo se supone que myFile es un stream en los que los pixeles están guardados en binario de la forma RedByteGreenByteBlueByte sucesivamente.

//Methods prototypes
void transmit(int freq, int duration);  // Generate a sinus signal with the given freq and time
void myFile.read(); // Return the next byte of a stream (myFile)

/** VOX TONE (OPTIONAL) **/
transmit(1900, 100);
transmit(1500, 100);
transmit(1900, 100);
transmit(1500, 100);
transmit(2300, 100);
transmit(1500, 100);
transmit(2300, 100);
transmit(1500, 100);

/** CALIBRATION HEADER **/

transmit(1900, 300);
transmit(1200, 10);
transmit(1900, 300);
transmit(1200, 30);
transmit(1300, 30);    // 0
transmit(1300, 30);    // 0
transmit(1100, 30);    // 1
transmit(1100, 30);    // 1
transmit(1100, 30);    // 1
transmit(1100, 30);    // 1
transmit(1300, 30);    // 0
transmit(1300, 30);    // Even parity
transmit(1200, 30);    // VIS stop bit

/** STARTING SYNC PULSE (FIRST LINE ONLY)  **/

transmit(1200, 9);

/** TRANSMIT EACH LINE **/
while(myFile.available()){

  // Read line and store color values in the buffer
  for(uint16_t i = 0; i < 320; i++){
    buffR[i] = myFile.read(); // Read Next Byte
    buffG[i] = myFile.read();
    buffB[i] = myFile.read();
  }

  // Separator pulse
  transmit(1500, 1.5);

  // Green Scan
  for(uint16_t i = 0; i < 320; i++){
    transmit(1500 + 3.1372549 * buffG[i], 0.4320);    // .4320ms/pixel
  }

  // Separator Pulse
  transmit(1500, 1.5);

  // Blue Scan
  for(uint16_t i = 0; i < 320; i++){
    transmit(1500 + 3.1372549 * buffB[i], 0.4320);    // .4320ms/pixel
  }

  // Sync Pulse
  transmit(1200, 9);

  // Sync porch
  transmit(1500, 1.5);

  // Red Scan
  for(uint16_t i = 0; i < 320; i++){
    transmit(1500 + 3.1372549 * buffR[i], 0.4320);    // .4320ms/pixel
  }
}

Algunas aclaraciones previas a su integración

Con todas estas pecularidades del protocolo SSTV tenemos que aclarar algunas cosas antes de integrarlo en nuestro microcontrolador.

  • La imagen tendrá que estar codificada en 24-bit RGB pixel a pixel. Es decir, se necesitará pasar la imagen entera a binario para codificarla posteriormente con SSTV.
  • Se necesitará de un sistema robusto que sea muy preciso con la temporización para que la imagen se envie correctamente.
  • Los accesos a memoria para guardar los pixeles de las lineas de los 3 colores se tendrá que hacer en el Sync Pulse porque es el de más duración (9 ms). De otra forma, el acceso a memoria relentizará la emisión y se perderá la sincronización.

Especificación del protocolo APRS

El Sistema Automático de Reporte de Paquetes, o por sus siglas en inglés, APRS es un protocolo para la comunicación en tiempo real vía radio. Su uso más frecuente es el de la transmisión de datos GPS, pero su utilidad se extiende a cualquier otro tipo de información como puede ser mensajes de texto, así como distintos parámetros sensoriales como la temperatura, o la humedad. En resumen, APRS es un protocolo muy útil para la transmisión amateur de pequeñas cantidades de datos.

APRS es un protocolo no orientado a la conexión, es decir, permite la comunicación sin ser precisa la conexión previa entre dos estaciones, de esta manera los paquetes no reciben su correspondiente ACK y no son retransmitidos en caso de pérdida. Es importante aclarar que APRS funciona en formato broadcast, haciendo su uso incompatible con la información más sensible, ya que cualquier usuario puede leer los paquetes.

Los paquetes APRS son posteriormente modulados y convertidos en tonos de audio y viceversa a través del Terminal Node Controler (TNC). Para ello utiliza el protocolo de nivel de enlace AX.25 en la modulación AFSK, con una velocidad de transmisión muy modesta, de 1200 baudios. Esto puede provocar la congestión de tráfico APRS en el canal de radio en el caso de haber muchas estaciones transmitiendo, es por ello que es altamente aconsejable que dichas estaciones transmitan la señal de identificación (BEACON) el menor número de veces necesarias. Para operar en Europa es necesario un receptor con una frecuencia de 144.800 MHz.

Dado que el alcance es limitado, entre la comunidad de usuarios de APRS acabó popularizándose la plataforma aprs.fi, de esta manera todas las estaciones bases pueden compartir en internet todos los paquetes que reciben.
Más información se puede encontrar en la descripción del propio protocolo de APRS: http://www.aprs.org/doc/APRS101.PDF

Elección del Hardware

Explicado el objetivo del proyecto los componentes que usaremos serán los siguientes:

  • Transceptor DRA818V[3]: Transceptor compacto de VHF de hasta 1 W de potencia, con interfaz UART. Se usará para la emisión del mensaje de SSTV en 144.500 MHz.
  • Cámara JPEG TTL de Adafruit[4]: La cámara con la que se tomarán las imagenes del cielo, y que posteriormente se transmitan por SSTV. Toma imagenes de 320x256 pixeles que es lo que necesitaremos para transmitirlas con Scottie 1. Se comunica medianto UART con el microcontrolador.
  • Sintetizador digital AD9850[5]: Un sintetizador digital para generar el mensaje SSTV en banda base. Nos dará la precisión suficiente para transmitir los tonos de los diferentes colores.
  • GPS Adafruit GPS MTK3339[6]: El módulo que tome la información de posición. Se comunicará mediante UART con el microcontrolador.
  • Sensor inercial AltIMU-10 v5[7]: Sensor de giroscopio/acelerómetro, magnetómetro y barómetro. Se comunicará mediante I2C con el microcontrolador.
  • Arduino Due[8]: El microcontrolador encargado del proyecto. Será la unidad de computación del experimento. Hemos elegido el Arduino Due, porque la memoria que nos ofrece y las conexiones se adaptan a nuestro dispositivo. Hemos elegido esta placa porque necesitaremos 3 conexiones UART para los diferentes módulos, necesitamos memoria suficiente para decodificar una imagen entera, y que sea solido. Por estos motivos hemos optado por el Arduino Due.
  • Batería Lipo 4000mAh / 3.7V[9]: La batería utilizada para el proyecto. La tecnología de polímero de liteo es la indonea para nuestro prototipo porque ofrece grandes prestaciones en poco espacio.
  • SparkFun LiPo Charger/Booster - 5V/1A[10]: Adaptador de tensión de la bateria para poder alimentar los equipos.

Elección de Software

Programación del microcontrolador

Para la programación del microcontrolador usaremos Platform io con Atom. Hemos optado por este software y no el del fabricante, Arduino IDE, por ser más profesional y más organizado. Con Platform io podremos desarrollar el proyecto especificando las versiones que estamos usando de las librerías. Esto luego será importante de cara a publicar el proyecto para que esté bien documentado y organizado.

El lenguaje de programación será C++, usando el framework de Arduino.

Diseño de la PCB

Para la creación de la PCB usaremos KiCAD. Otros software's de competencia pueden ser más profesionales, pero KiCAD es bastante potente y es software libre. La principal razón por lo que lo hemos elegido es porque es libre.

Parte Hardware [HITO INTERMEDIO]

El trabajo desarrollado hasta el hito intermedio de la parte hardware ha sido el siguiente:

  • Creación de todos los componetes y footprints que se van a usar en Kicad.
  • Creación del esquemático. Aunque todavía hace falta implementar algunas cosas.
  • Montaje del prototipo en protoboard de la camara, el módulo SD, el sintetizador de audio y la placa Arduino Due.

El trabajo desarrollado en Kicad se puede encontrar en el siguiente repositorio.

El prototipo montado es el siguiente:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Parte Software [HITO INTERMEDIO]

El trabajo desarrollado hasta el hito intermedio de la parte software es el siguiente:

  • Se han hecho scripts para comprobar el funcionamiento de los módulos que se han interconectado en el prototipo montado.
  • Se ha hecho un programa que toma una imagen, la guarda en la SD y la decodifica en binario
  • Se ha hecho un codificador de SSTV para explicar el protocolo en el apartado anterior de "Especificación del protocolo SSTV" pero no es funcional.
  • Se han hecho funciones para acceder a la camara, al sintetizador, y algunas funciones más.
  • Generación de la información APRS con los parámetros que hayamos introducido (GPS en este caso), no se ha comprobado su funcionamiento.
  • Construcción del paquete AX.25 que contiene la información APRS previamente creada, no se ha comprobado su funcionamiento.
  • La generación de una señal AFSK vía PWM a 1200 baudios que se transmite al tranceptor, no se ha comprobado su funcionamiento.

Todo el código de la parte de SSTV se puede encontrar en este repositorio.

El código desarrollado de la parte de APRS se puede encontrar en este repositorio


  1. Laboratorio de investigación en el área aroespacial de la universidad de Granada. https://granasat.ugr.es ↩︎

  2. Sánchez Velasco, L. (2017). Design of an embedded camera with an AX. 25 transmitter. Source: http://digibug.ugr.es/bitstream/10481/48017/1/SanchezVelasco_TFG_AX.25.pdf ↩︎

  3. Transceptor Radio de VHF/UHF de hasta 1 W de potencia. Fuente ↩︎

  4. Cámara con módulo CMOS VGA de OmniVision de alta calidad con soporte de compresión JPEG. Fuente ↩︎

  5. Sintetizador AD9850 de Analog Devices que utiliza una avanzada tecnología DDS unida con un convertidor D/A interno, de alta velocidad y alto rendimiento, y un comparador para formar un sintetizador de frecuencia completa, programable digitalmente y función de generador de reloj. Fuente ↩︎

  6. Pequeño GPS con chip MTK3339 de 10Hz y 66 canales. Fuente ↩︎

  7. Sensor que cuenta con giroscopio/acelerómetro LSM6DS33, un magnetómetro LIS3MDL y un barómetro LPS25H. Fuente ↩︎

  8. Placa Arduino basada en ARM de 32-bit. Cuenta con 54 pines digitales de entrada y salida, y 12 pines de entrada analógica. Fuente ↩︎

  9. Batería Lipo 4000mAh / 3.7V con protector de voltaje. Fuente ↩︎

  10. Cargador LiPo con convertidor de voltaje de 5V y 1 AmperioFuente ↩︎