Garita CRIF Las Acacias

Introducción

En el CRIF Las Acacias hay instalada una garita simple que registra y envía la temperatura, humedad y presión cada 5 minutos. Para este primer montaje hemos elegido un nivel de abstracción elevado tanto en la electrónica como en la programación. Por este motivo los sensores utilizados ya vienen montados y preparados para ser conectados directamente a la placa y además también vamos a utilizar librerías que nos ayudan a realizar un código más simple. Para albergar el montaje electrónico hemos utilizado una caja eléctrica de exterior. Las últimas observaciones medidas se representan sobre un mapa de google y también se puede ver un registro gráfico de las últimas 72 horas a partir del momento actual.

Material utilizado:
  • Módulo sensor barométrico conectar y listo (en el circuito se representa exclusivamente  el sensor)
  • Módulo sensor de temperatura y humedad conectar y listo (en el circuito se representa exclusivamente el sensor)
  • Arduino Uno con una shield WiFi.
  • Placa de prototipado
  • Cables de diferentes colores.
  • Caja de plástico
  • Adaptador de red 1A y 5V.
Circuito del montaje:

presion-temperatura-humedad_bb

Foto del montaje:
montaje
Código utilizado es el que se muestra a continuación
//Incluimos las librerías necesarias de sensores y shield
#include <DHT.h>
#include <SPI.h>
#include <WiFi.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11

// Definimos variables y creamos las instancias de los objetos necesarios
DHT dht(DHTPIN, DHTTYPE);
Adafruit_BMP085 bmp;
char ssid[] = "SSID-WIFI";
char pass[] = "CONTRASEÑA-WIFI";
int status = WL_IDLE_STATUS;
char server[] = "www.smartcitything.es";
WiFiClient client;

void setup() {
  Serial.begin(9600); 
  // Testeamos si tenemos presente el sensor barométrico
  if (!bmp.begin()) {
    Serial.println("Sensor barométrico no encontrado");
    while (1) {}
  }

  // Testeamos si la shield WiFi está presente
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield no encontrada"); 
    while(true);
  } 
  // Tratamos de conectarnos a la WiFi configurada
  while (status != WL_CONNECTED) { 
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    status = WiFi.begin(ssid, pass);
    // wait 10 seconds for connection:
    delay(10000);
  } 
  Serial.println("Connected to wifi");
  Serial.println("STATUS: ");
  Serial.println(status);
  printWifiStatus();
  dht.begin();
}

void loop() {  
    //Definimos las variables a utilizar
    float h = dht.readHumidity();
    float t = dht.readTemperature();
    String TempValor = String(t);
    String temperatura = "temperatura";
    String HumValor = String(h);
    String humedad = "humedad";
    // Lanzamos la petición de escritura en de temperatura
    escribir(TempValor,temperatura);
    delay (90000);
    // Lanzamos la petición de escritura de humedad
    escribir(HumValor, humedad);
    delay (90000);
    
    // Definimos la variable de presión y lanzamos su escritura
    String PreValor = String(bmp.readPressure()/100.0);
    String presion = "presion";
    Serial.print(PreValor);
    escribir(PreValor, presion);
    delay (90000);
}
void printWifiStatus() {
  // Podemos utilizar el puerto serie para comprobar la conexión wifi
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // Imprimimos la ip obtenida del DHCP de la red
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // Imprimimos algúnos parámetros de calidad de la WiFi
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}
// Esta función envía los datos al servidor
void escribir(String valor, String parametro){
  if(client.connect(server, 8081)) {
    Serial.println("PUT /data/OE_CRIF_ACACIAS/"+parametro+"/"+valor+" HTTP/1.1");
    client.println("PUT /data/OE_CRIF_ACACIAS/"+parametro+"/"+valor+" HTTP/1.1");  
    client.println("IDENTITY_KEY: CLAVE-DEL-PROVEEDOR");
    client.println("Content-Length: 0");
    client.println("Content-Type: text/plain; charset=ISO-8859-1");
    client.println("Host: www.smartcitything.es:8081");
    client.println("Connection: Keep-Alive");
    client.println("User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)");
    client.println(); //este espacio es imprescindible
  }
  delay(5000);
  client.stop();
  delay(5000);
}