Project in progress
Mission S-09 Mk1 - High Altitude Environmental Ballooning

Mission S-09 Mk1 - High Altitude Environmental Ballooning © CC BY

A tech high-school student-teacher team from Uruguay developing High Altitude Balloons for science! IN ACTIVE DEVELOPMENT!

  • 1,633 views
  • 1 comment
  • 8 respects

Components and supplies

Necessary tools and machines

3drag
3D Printer (generic)
09507 01
Soldering iron (generic)

Apps and online services

About this project

Before you start reading: THIS IS AN ACTIVE PROJECT. That means that changes and additions are being made to it as you read. We'll try to keep this description and the Things list updated and add any new stuff.

About two years ago, a group of teachers at Escuela Técnica de Melo (a technical oriented high-school in the town of Melo, Uruguay, South America) became worried about the fact that most projects at our high-shool were based in outdated technology and had very little to do with I+D. And so, in 2016, the Club AeroEspacial de la Escuela Técnica de Melo (Air and Space Club) was born, being this it's first project, called Misión S-09 (Mission S-09).

The objective of this project is to develop, build, launch, track, and recover a device made with a lot of sensors, some cameras, an Arduino, a IOIO OTG board, two smartphones and some batteries, which will be carried by a high altitude balloon.

The main scientific cargo consists of several electronic sensors:

  • Barometer (for pressure and altitude measurement)
  • Anemometer (for wind speed measurement)
  • Thermistors (for temperature measurement)
  • Gas detectors (for an estimate on some gas pollutants concentration)
  • GPS module (for position and altitude sensing)
  • GSM module (for cellular signal strength sensing and secondary data relay)

...all of them connected to an Arduino Nano v3, hooked to a IOIO OTG board, which works as an interface between the Nano and an Android smartphone running a specially designed app. The Nano gathers the sensor data, compiles it into a data stream, sends it to the IOIO, allowing the app to pick it up to:

  • Store all the data gathered by the sensors in a local database.
  • Send it to a Google Drive Spreadsheet (if there's enough signal strength to have Internet connection in the smartphone)

The app will also take pictures and upload them (again, if there's enough signal strength to have Internet connection in the smartphone).

A second smartphone will do a live video broadcast of the lift-off for as long as possible, while external independent cameras will record the flight.

The GPS module will allow us to keep track of it's position, while the GSM module will allow us to get cellphone signal strength data and send us regular updates on the position as a failback in case the smartphone can't connect to Internet.

(If you're wondering about the regulations that forbid the use of cellphones in flying devices, those laws are effective in USA, here in Uruguay there's no such laws yet so we can try and do this kind of experiment).

As of the 21st of october, 2016, the work stil continues and we hope to be able to launch it in december. So far we have a working prototype of the hardware, a working data-logging app, and a tested parachute model.

EDIT: As of 25 of october, 2016 we got also wind speed sensor made by ourselves. Code and schemas coming up soon!!

Code

Sensor Reading code for ArduinoArduino
- - This code is in EARLY BETA stage, MAY CONTAIN BUGS - -
This code reads, compiles and relays sensor data out via serial comm to the IOIO OTG board (and the app)
/*
  Lector de Sensores de la Mision S-09
  Versin: 0.8 (22 oct 2016)

  Sketch para obtener la lectura de los sensores de la sonda
  y enviarlos a la aplicacin mediante la placa IOIO OTG por
  puerto serial

  Sensores utilizados:
  - Termistor NTC 10k
  - Barmetro BMP180/GY-68
  - Mdulo GPS GY-NEO6MV2
  - Mdulo GSM SIM800L
  (A ser agregado)
  - Sensor de gases MQ-135

  Octubre, 2016
  Por Club AeroEspacial de la Escuela Tcnica de Melo

  http://globosondamelo.blogspot.com.uy

*/
#include <TinyGPS.h>
#include <SPI.h>
#include <SoftwareSerial.h>
#include <SFE_BMP180.h>
#include <Wire.h>
#include <Thermistor.h>
 
//Inicializacin de libreras
Thermistor temp(0);
TinyGPS gps;
SFE_BMP180 pressure;
//Pines seriales
//                TX RX
// Mdulo GPS
SoftwareSerial gps(8,9);
// Mdulo GSM
SoftwareSerial gsm(7,6);
// Variables Generales
int turno = 0; //             Variable para contabilizar turnos
String mensaje = ""; //       Variable para guardar el mensaje final
bool newData = false;//       Variable para manejo de datos del GPS
bool SMSerror;//              Variable para manejo de datos para GSM

//  Variables para medicin de intervalos
unsigned long tiempoPas=0;
unsigned long tiempoHum=0;
unsigned long lapsoHum=3000;
unsigned long lapso=15000;

// Variables para el barmetro
char status;
double PresionBase;
double BPresion = 0;
double BAltitud; //BAltura = 0;
double BTemperatura = 0;
//VAriables para el sensor de humedad
float Htemperatura, humedad;
//Variables para el mensaje
String LA, LO, AL; //Datos del GPS
//String HU, TH; //Datos del sensor de humedad
String PA, TB, AB; //Datos del barmetro
String T1; //Datos del termistor

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  //GPS
  gps.begin(9600);
  //GSM
  gsm.begin(9600);
  //Barmetro
  Serial.println("Iniciando");
  IniciarBaro();
  
  turno=1;
  
}

void loop() {
  unsigned long tiempo=millis();
  //TURNOS: 
  //1- GPS
  //2- Termistor
  //3- Barmetro         
  //4- Humedad
  //5- GSM 
  //6- Componer Mensaje
  if(turno==1){
    //TURNO LIBRE
    turno=2;
  }
  else if(turno==2){
    
    int temperatura = temp.getTemp();
    T1="T1"+String(temperatura)+"|";
    turno=3;
  }
  else if(turno==3){
    
    LeerBaro();
    turno=4;
  }
  else if(turno==4){

    gps.listen();
    bool newData = false;
    unsigned long chars;
    unsigned short sentences, failed;
    //Read GPS
    for (unsigned long start = millis(); millis() - start < 1000;){
       while (gps.available())
        {
        char c = gps.read();
        if (gps.encode(c)) // Did a new valid sentence come in?
          newData = true;
        }
      } 
    if (newData){
        
        float flat, flon, falt;
        unsigned long age;
        gps.f_get_position(&flat, &flon, &age);
        falt=gps.f_altitude();
        LA="LA"+String(flat,6)+"|";
        LO="LO"+String(flon,6)+"|";
        AL="AL"+String(falt,6)+"|";
        //mensaje="LA"+String(flat,6)+"|LO"+String(flon,6);
        //Serial.println(mensaje);
    }
    else{
        LA="LA???|";
        LO="LO???|";
        AL="AL???|";
        //mensaje="Obteniendo Seal de GPS";
        //Serial.println(mensaje);
    }
    gps.stats(&chars, &sentences, &failed);
    if (chars == 0){
        LA="LA!!!|";
        LO="LO!!!|";
        AL="AL!!!|";
      //Serial.println("** No se reciben datos del GPS. Chequear cables **");
    }
    
    turno=5;
  }
  else if(turno==5){
    mensaje=LA+LO+AL+PA+TB+AB+T1;
    Serial.println(mensaje);
    turno=6;
  }
  else if(turno == 6){
    gsm.listen();
    if(tiempo - tiempoPas > lapso){
      tiempoPas=tiempo;
      EnviarSMS(mensaje);
    }
    turno=1;
  }
}


//Funciones del Mdulo GSM

void EnviarSMS(String messg){
    //Serial.println("Sending Text...");
    gsm.print("AT+CMGF=1\r"); // Cambiar el mdulo a modo SMS
    delay(100);
    gsm.print("AT+CMGS=\"+59895954482\"\r");  
    delay(200);
    gsm.print(messg);//Contenido del mensaje
    gsm.print("\r"); 
    delay(500);
    gsm.print((char)26);//La comunicacin serial requiere un Ctrl+Z para enviar la orden, que en ASCII es el caracter 26
    delay(100);
    gsm.println();
    //Serial.println("Text Sent.");
    delay(500);
  }

//Funciones del Barmetro --> Revisar para adaptar

void IniciarBaro(){//SensorStart() {
  //Secuencia de inicio del sensor
  if (pressure.begin())
   PA="PAIniOK|";
   //Serial.println("BMP180 init success");
  else
  {
    PA="PA!!!|";
    //Serial.println("BMP180 init fail (disconnected?)\n\n");
    while (1);
  }
  //Se inicia la lectura de temperatura
  status = pressure.startTemperature();
  if (status != 0)  {
    delay(status);
    //Se lee una temperatura inicial
    status = pressure.getTemperature(BTemperatura);
    TB="TB"+String(BTemperatura,6)+"|";
    if (status != 0)    {
      //Se inicia la lectura de presiones
      status = pressure.startPressure(3);
      if (status != 0)      {
        delay(status);
        //Se lee la presin inicial incidente sobre el sensor en la primera ejecucin
        status = pressure.getPressure(PresionBase, BTemperatura);
      }
    }
  }
}

void LeerBaro(){//ReadSensor() {
  //En este mtodo se hacen las lecturas de presin y temperatura y se calcula la altura
  //Se inicia la lectura de temperatura
  status = pressure.startTemperature();
  if (status != 0)
  {
    delay(status);
    //Se realiza la lectura de temperatura
    status = pressure.getTemperature(BTemperatura);
    TB="TB"+String(BTemperatura,6)+"|";
    if (status != 0)
    {
      //Se inicia la lectura de presin
      status = pressure.startPressure(3);
      if (status != 0)
      {
        delay(status);
        //Se lleva a cabo la lectura de presin,
        //considerando la temperatura que afecta el desempeo del sensor
        status = pressure.getPressure(BPresion, BTemperatura);
        PA="PA"+String(BPresion,6)+"|";
        if (status != 0)
        {
          //Se hace el clculo de la altura en base a la presin leda en el Setup
          BAltitud = pressure.altitude(BPresion, PresionBase);
          AB="AB"+String(BAltitud,6)+"|";
        }
        else PA="PA???|";//Serial.println("error en la lectura de presion\n");
      }
      else PA="PA?!?|";//Serial.println("error iniciando la lectura de presion\n");
    }
    else TB="TB???|";//Serial.println("error en la lectura de temperatura\n");
  }
  else TB="TB?!?|";//Serial.println("error iniciando la lectura de temperatura\n");

}

Schematics

Main hardware
Main board PIC and sensor wiring. WARNING!!: NOT FINAL!!
31IQuAjr48ABvwne90XF.fzz

Comments

Team Club AeroEspacial de la Escuela Tecnica de Melo

Default
Sebastián de los Angeles
  • 1 project
  • 2 followers

Additional contributors

  • Structural design by Luis Ruiz
  • Pr and management by Victor Da Costa
  • Scientific specialist by Ronny Antúnez
  • Technology specialist by Carlos Marco
  • Student by Wanderley Morales
  • Student by Pablo Idiarte
  • Student by Carina Melo
  • Student by Lucía Rapetti
  • Student by Roberto Jaimes

Published on

October 28, 2016

Members who respect this project

164797 174367972586571 4207440 nNigfisDefaultPowerbotEunate sigfoxeducation

and 3 others

See similar projects
you might like

Similar projects you might like

DIY 3-Axis CNC VMC

Project tutorial by Amit Nandi (BigWiz)

  • 12,164 views
  • 9 comments
  • 46 respects

Internet of Toiletries

Project in progress by Team AROS (Automatic ReOrder System)

  • 1,238 views
  • 1 comment
  • 5 respects

Raspberry Pi - Powered Candy Dispenser

Project tutorial by Arduino “having11” Guy

  • 5,650 views
  • 1 comment
  • 12 respects

Logifox: The End of E-Waste Has Arrived

Project tutorial by Luis Roda Sánchez and Celia Garrido Hidalgo

  • 5,047 views
  • 0 comments
  • 11 respects

Joy Robot (Robô Da Alegria)

Project tutorial by Igor Fonseca Albuquerque

  • 2,720 views
  • 3 comments
  • 25 respects
Add projectSign up / Login