Launching a weather balloon design

Kumar B

April 30, 2018

Kumar BApril 30, 2018

Extracting and monitoring the data from the sensors is critical for meteorological organizations. A standalone Weather Data logger is used for logging the temperature, humidity, rainfall, leaf wetness, pressure, sun radiation etc, but, standalone data loggers are restricted to collect data on the ground stations only. To supervise the environmental parameters like temperature, humidity, pressure, wind speed and wind direction in the sky, this logging technique is not feasible. To overcome this problem, it is necessary to change the design strategy.

Presented here is a case study of environmental weather balloon that monitors the atmospheric parameters over the air using the RF module AX5042. Weather balloons are often called Radiosonde or GPSsonde. The aim of this design is to capture the data from a sensor and send it to the receiver located on the ground.

The weather balloon is divided into three blocks. They are UHF transmitter (for RF transmission), sensor unit, and Time synchronization modules (GPS and RTC).

Flying Weather Balloon (Source: WNEP)

First of all, I will go through the block diagram of Radiosonde. Later, we will explore the inner details of hardware and their interfacing.

Block Diagram of RadioSonde (Weather Balloon) (Source: Kumar B)


Working of Weather Balloon

The AX5042 RF chip generates the required transmission frequency. You can also set the transmission time interval for sending the data.

Any microcontroller can be used to interface various external peripherals like GPS, RTC (Real Time Clock) and Sensors.

The data is captured from the sensors and sent to the remote location using RF communication.

To have correct transmission, a Real time clock (RTC) DS3231 with an accuracy of ±1ppm is preferred.

But, how to get the time and date?

A GPS receiver Ublox is put upon to get the date and time from the INSAT satellite installed at space.

Not only the date and time, you can also get the latitude, longitude etc. from the MAX7C GPS module.

The obtained date and time from the GPS unit is loaded into the microcontroller.

Generally, the radiosondes use frequencies in the range of 400 MHz to 600 MHz.



This algorithm describes the basic idea of implementing weather balloon.

  1. Sync the GPS with the satellite.

  2. Get the time from the GPS.

  3. Load this time into RTC (Real time clock).

  4. Lock the frequency using AX5042.

  5. Send and receive the sensor data periodically.

Software Environment (Source: Kumar B)

Getting Started with AX5042

By now, you’re probably wondering, How to know the underlying hardware? Don’t worry.

On semiconductor provides Evaluation kit DVK-BASE-2-GEVK with necessary add on modules.

The AXsem integrated circuits use AX−RadioLAB GUI and AX-MicroLab code generators, AXSDB Debugger, and AXCode: Blocks IDE.

Here I have used AT89C2051 microcontroller for working out the prototype. The microcontroller is communicated with AX5042 using SPI interface.

First of all, the AX5042 has to be loaded with certain frequency. To do that PLL bits has to be programmed.

Hardware and Software Design

I have written the application code in embedded C using keil µVision IDE. The below interface shows the connection between microcontroller, AX5042 and HYT 271 humidity sensor.

The humidity sensor runs on 3.3V pull-up resistors. It is advisable to use 2.2K resistors for better response.

AX5042 and Microcontroller Connection (Source: Kumar B)

AX5042 has to be programmed for producing the required frequency. The microcontroller writes and read the data using SPI interface.

/*This code will generate the RF frequency using AX5042. */
#include <REG52.H>
#include <at892051.h
#include <stdio.h>
#define SyDataO              P1_4
#define SyDataI              P1_5
#define SyClock              P1_6
#define SythLE               P1_7
LoadPLL (void);
DataFrame (void);
spi_write (unsigned long spi_addr);
init_ax5042 (void);
unsigned char spi_read (unsigned int spi_addr);

This function will generate external interrupt has occurred from AX5042. AX5042 acts as slave and the microcontroller as master.

/*********interrupt Function for Ext.Interrupt-0 *********/
unsigned char ex0_isr_counter = 0;
void ex0_isr (void) interrupt 0
     ex0_isr_counter++;          // Increment the count
     LoadPLL ( );
     P3_2 = 1;

The application code starts from here. The serial port is configured at 9600 baud rate for sending the characters to the serial terminal.   

/*******main function *******/
void main (void)
           unsigned char W;
/*Set serial port for 9600 baud at 11.0592 MHz.  Note that we use Timer 1 for the baud rate generator.*/
     SCON = 0x50;
     TMOD |= 0x20;
     TH1   = 0xFA;
     TR1   = 1;
     RI      = 1;
     TI    = 1;
     PCON |= 0x80;
     IT0 = 1;      // Configure interrupt 0 for falling edge on /INT0 (P3.2)
     EX0 = 1;       // Enable EX0 Interrupt
     EA = 1;         // Enable Global Interrupt Flag
// Frequency Loading Program
      SythLE = 1;
      SyClock= 0;
      SyDataO= 0;
     while (1)     //Infinite loop

   The getchar function waits to receive the character from the serial terminal. If the received character matches, function will get executed.

            /*Wait for the pulse to start. */
            W = getchar ( );
            if (W== 'r')
                    printf ("RF");
                    init_ax5042 ( );
                    LoadPLL ( );
               if (W== 'w')
                    printf ("Wd");
                    LoadPLL ( );
               if (W==‘t’)
                      init_ax5042 ();

Continue reading on page two >>


< Previous
Page 1 of 2
Next >

Loading comments...