Estación climatológica C.R.E.S.E.P.

El día 23 de junio del 2016 en la institución educativa Johann Heinrich Pestalozzi del municipio de Tepic, Nayarit. El Club de Robótica Estudiantil, Sistemas Embebidos y Programación, participó como ponente tras la invitación por parte de su director, esto, con el fin de conocer la metodología de trabajo y los proyectos más recientes, elaborados por C.R.E.S.E.P..

La presentación se realizó con la muestra de una estación meteorológica autónoma basada en la tarjeta de desarrollo de Arduino Genuino/Uno, haciendo notar la sustentabilidad empleada, al recargar su batería a través de un panel solar, misma que como resultado, proporciona la información a través de Twitter.

Una estación meteorológica es un lugar estratégicamente posicionado para colocar los instrumentos de medición que permitan obtener la información de las variables atmosféricas típicas.

El principal objetivo de éste proyecto, es tener un contacto directo, con los usuarios de distintas redes sociales. Al presentar de manera sencilla, y constante, las condiciones climatológicas de la ciudad.

Empecemos con este tutorial sobre el cómo armar tu propia estación meteorológica:

Materiales:

  • Placa Arduino Genuino/Uno
  • ProtoBoard
  • DHT11
  • BMP085
  • Placa Arduino Ethernet

Prototipo_Estación Meteorológica-CRESEPEsquema Electrónico_Estación Meteorológica-CRESEP

Una vez conseguido los materiales los conectaremos como se muestra a continuación:

(La tarjeta Ethernet Shield está montada sobre el Arduino Genuino/Uno)

Cuando terminemos de conectarlo es hora de centrarse en el código.

Librerías necesarias:

  • DHT 11:

http://www.prometec.net/wp-content/uploads/2014/10/DHT11.zip

  • BMP085:

https://learn.adafruit.com/bmp085/using-the-bmp085

  • Twitter:

http://goo.gl/EAdr4I

Para instalar una librería se tiene que copiar la carpeta de la librería y pegarla en Documentos > Arduino > libraries

 

Llego la hora del código, para mejorar su entendimiento lo dividiremos en partes: la lectura y la publicación en twitter.

Lectura de los sensores:

//Declaramos las librerías necesarias para este proyecto
#include <Wire.h>

//Librería responsable del DHT11
#include <DHT11.h>

//Librería responsable del BMP085
#include <Adafruit_BMP085.h>

//Declaramos un PIN digital para el DHT11
int DHT_11 = 2;

//Y lo declaramos como DHT11
DHT11 dht11 (DHT_11);

//Declaramos el BMP085
Adafruit_BMP085 bmp;
void setup() 
{
  Serial.begin(9600);
  //Registramos que el sensor BMP085 se encuentre conectado
  if(!bmp.begin())
  {
   Serial.println("No se pudo encontrar un sensor BMP085");
   while (1) {}  
  }
}

void loop() 
{
  int Error;
  float Humedad, Temperatura;
  //Leemos la Humedad y Temperatura, además de si un error ocurriera este se daría a conocer
  if((Error = dht11.read(Humedad, Temperatura)) == 0)
  {
   //Imprimimos la temperatura en grados centígrados
   Serial.print("La temperatura es de: ");
   Serial.print(Temperatura);
   Serial.print(" °c");
   //Imprimimos la humedad relativa
   Serial.println("La humedad relativa es de: ");
   Serial.print(Humedad);
   //Imprimimos las lecturas del BMP085
   //Imprimimos la presion tomando en cuenta que 1013.25 milibares = 101325 pascales
   Serial.println("Presión atmosférica: ");
   Serial.print(bmp.readPressure());
   Serial.print(" Pa");
   //Imprimimos altitud tomando en cuenta un barómetro estándar
   Serial.println("Altitud: ");
   Serial.print(bmp.readAltitude());
   Serial.print(" metros");
  }
  else
  {
   Serial.println();
   Serial.print("Error No:");
   Serial.print(Error);
   Serial.println();  
  }
  //Insertamos un delay ya establecido en la librería del DHT11
  delay(DHT11_RETRY_DELAY);
}

Publicación en Twitter:

#include <SPI.h>
#include <Ethernet.h>
#include <Twitter.h>

//Configuraciones de la Ethernet Shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

//Si no especificas la dirección IP, entonces usa DHCP
byte ip[] = { 192, 168, 2, 250 };

//El token de tu cuenta de Twitter (consíguela en http://arduino-tweet.appspot.com/)
Twitter twitter ("Aquí tu token");

//Mensaje que vas a publicar
char msg[] = "Hola Mundo desde Arduino";

void setup() 
{
 delay(1000);
 Ethernet.begin(mac, ip);
 //Si estas usando DHCP con una IP automática entonces:
 //Ethernet.begin(mac);
 Serial.begin(9600);

 //Se inicia la conexión
 Serial.println("Conectando...");
 if (twitter.post(msg))
 {
  int status = twitter.wait(&Serial);
  if (status == 200)
  {
   Serial.println("Publicado.");  
  }
  else
  {
   Serial.print("Fallido: Código ");
   Serial.println(status);  
  } 
 }
 else
 {
  Serial.println("Conexión fallida"); 
 }
}

void loop()
{

} 

Juntando estos códigos nosotros podemos crear nuestra estación meteorológica conectada a twitter, al final aquí está el código completo:

// Codigo creado por: Israel Arturo Ozuna Fregoso
#include <Twitter.h>
#include <Ethernet.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <DHT11.h>
int pin=2;
DHT11 dht11(pin); 
Adafruit_BMP085 bmp;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//byte ip[] = { 192, 168, 0, 250 };
//El token de tu cuenta de Twitter (consíguela en http://arduino-tweet.appspot.com/)
Twitter twitter ("Aquí tu token");
void setup() 
{
 
}
void loop() 
{
   delay(60000);
  float Humedad, Temperaturax2;
  int i;
    switch(i)
    {
      case 0:
      {
       if (!bmp.begin()) 
       {
        Serial.println("No se registra el BMP085");
        while (1) {}
       }
      int Temperatura = (bmp.readTemperature());
      int Presion = (bmp.readPressure());
  String stringOne = "La Temperatura ambiente es de:  ";
  stringOne += Temperatura;
  stringOne += " °C  ";
  stringOne += "La Presión atmosférica es de: ";
  stringOne += Presión;
  stringOne += " pa  ";
  char charBuf[500];
  stringOne.toCharArray(charBuf, 500);
  delay(1000);
  Ethernet.begin(mac);
  Serial.println("Estableciendo conexión con Twitter ...");
  if (twitter.post(charBuf)) {
    int status = twitter.wait(&Serial);
    if (status == 200) { // Conexión exitosa
      Serial.println("OK.");
    } else { // Error en la conexión
      Serial.print("Error : code ");
      Serial.println(status);
    }
  } else {
    Serial.println("conexión fallida.");
  }
  }
        case 1:
      {
       if (!bmp.begin()) 
       {
        Serial.println("No se registra el BMP085");
        while (1) {}
       }

      int Altitud = (bmp.readAltitude());
      dht11.read(Humedad, Temperaturax2);
  String stringOne = "Altitud: ";
  stringOne += Altitud;
  stringOne += " msnm                         ";
  stringOne += "Humedad Relativa: ";
  stringOne += Humedad;
  char charBuf[500];
  stringOne.toCharArray(charBuf, 500);
  delay(1000);
  Ethernet.begin(mac);
  Serial.println("Estableciendo conexión con Twitter ...");
  if (twitter.post(charBuf)) {
    int status = twitter.wait(&Serial);
    if (status == 200) { // conexión exitosa
      Serial.println("OK.");
    } else { // Error en la conexión
      Serial.print("Error : code ");
      Serial.println(status);
    }
  } else {
    Serial.println("Conexion fallida.");
  }
  i = 20;
  }
    }
}

Listo, ahora solo resta subirlo a tu placa Arduino Genuino/Uno y disfrutar de tu propia Estación Climatológica autónoma alimentada por energía solar en Arduino con información publicada cada minuto.

 

Estación Climatológica
Estación Climatológica
Bitnami