My Cart

Cooking Hacks Trip: Midiendo la aceleración con Waspmote en Port AventuraSeptember 25, 2012

El pasado mes de Junio, preparamos un viaje de equipo para pasar un buen día todo el equipo de Cooking Hacks. Nuestro destino: Port Aventura, uno de los parques de atracciones más grandes de Europa, donde se inauguraba una de las montañas rusas más espectaculares del mundo: Shambhala.

Como no podría ser de otra forma, alguien sugirió que se podría utilizar Waspmote para medir la aceleración de las atracciones de Port Aventura, así que dijimos: ¿Por qué no? Colocamos Waspmote dentro de una carcasa protectora y lo programamos con un código muy simple para medir los datos del acelerómetro de 3 ejes que incluye en la placa, guardándolos en la tarjeta SD. Le conectamos un módulo Wifi y el código enviaba cada 2 minutos los datos a nuestro Smartphone. Las pruebas durante la semana fueron satisfactorias pero... tocaba probarlo en el entorno real!!

/*
 * PORT AVENTURA CODE
 */



// global variables
char data[100];
char* filename="log.txt";
int value=0;
long time=0;

void setup()
{
  // accelerometer setup
  ACC.ON();

  // USB port setup
  USB.begin(); 
  USB.println("start");

  // EEPROM register setup 
  //Utils.writeEEPROM(300,0);
  value=Utils.readEEPROM(300);
  USB.println(value);

  // Writing in the EEPROM  
  Utils.writeEEPROM(300,value+1);

  // RTC on
  RTC.ON();

  // SD ON
  SD.ON();

  // create file
  if(SD.create(filename)) USB.println("file created");
  else USB.println("file NOT created");

  // new rollercoaster log:
  if(SD.appendln(filename,"\n\n\n--------------------------")) USB.println("append ok");
  else USB.println("append failed");
  sprintf(data, "%d - This is a new rollercoaster. Time:%s",value,RTC.getTime());
  // append data to files
  if(SD.appendln(filename,data)) USB.println("append ok");
  else USB.println("append failed");
  if(SD.appendln(filename,"--------------------------\n")) USB.println("append ok");
  else USB.println("append failed");


  // set green led on when measurement starts
  Utils.setLED(LED1,LED_ON);

  // get actual time
  time=millis();

}

void loop()
{
  // create new frame to be written
  sprintf(data, "millis:%lu#x:%d#y:%d#z:%d#",millis(),ACC.getX(),ACC.getY(),ACC.getZ());

  // append data to file
  if(SD.appendln(filename,data)) 
  {
    Utils.setLED(LED1,LED_ON);
  }
  else
  {
    Utils.setLED(LED1,LED_OFF);
  }

  // After 2 minutes of measurement, send WIFI data
  if(millis()-time > 120000)
  {
    sendWIFI();
    time=0;
  }

}





void sendWIFI()
{ 
  // First, initialize the WIFI API and the connections with the waspmote
  WIFI.begin();
  // Then switch on the WIFI module on the desired socket.
  WIFI.ON(socket0);
  // If we don't know what configuration had the module, reset it.
  WIFI.resetValues();

  // 1. Configure the transport protocol (UDP, TCP, FTP, HTTP...)
  WIFI.setConnectionOptions(UDP);
  // 2. Configure the way the modules will resolve the IP address.
  WIFI.setDHCPoptions(AUTO_IP);
  // 3. Configure how to connect the AP.
  WIFI.setAutojoinAuth(ADHOC);
  // 3.1 Sets the name of the ADhoc network.
  WIFI.setESSID("libelium_ADHOC");
  // 3.2 Sets the channel of the ADhoc network
  WIFI.setChannel(6);

  // 3. call function to create/join the Adhoc network.
  if(WIFI.setJoinMode(CREATE_ADHOC))
  {
    if (WIFI.setUDPclient("169.254.194.235",2000,2000))
    {
      // read and send all file lines
      for(int i=0; i < SD.numln(filename); i++)
      {       
        // Send messages to another device in same adhoc.
        WIFI.send(SD.catln( filename, i, 1));
        // Receive messages from the other in same adhoc.
        WIFI.read(NOBLO);  
      }
      Utils.blinkLEDs(5000);

    }
  }

}


Llegó el día y el autobús nos recogió en las instalaciones de empresa. Durante el viaje tuvimos tiempo para juegos, bromas... incluso un Karaoke!! Cuando estábamos llegando al parque vimos con asombro que, el hasta ahora icono de Port Aventura, Dragon Khan, con sus loopings y sus caídas electrizantes, se había empequeñecido a la sombra de la estructura de la nueva atracción, Shambhala, la cual se elevaba por encima del looping más alto.

Shambala-dragon

Lo primero de todo fue hacernos una foto con Woody Woodpecker, la mascota de Port Aventura. Como podéis ver, teníamos unas ganas inmensas de pasar un buen día de equipo. ;)

A lo largo del día nos montamos en las atracciones, descargando adrenalina y divirtiéndonos. Las pruebas las realizamos en varias de ellas, pero las más impresionantes fueron, como no, las del Dragon Khan y Shambhala. El resultado lo podéis ver a continuación en el vídeo de la prueba en ambas montañas rusas.

Después del buen día que pasamos en Junio, ahora sólo nos queda esperar a que llegue el día de disfraces que, anualmente, hacemos en Cooking. Podéis visitar en Facebook el álbum del año pasado. ¿Qué disfraces habrá este año? ¿Quién será el ganador?

Espero que hayáis disfrutado tanto como nosotros con el artículo de hoy.

Toda la información sobre Waspmote Starter Kit la puedes encontrar aquí.
Puedes ver el artículo técnico de la prueba en Libelium.com

David Bordonada from Cooking Hack's Team

Leave a Reply