Paso 4: Presión barométrica
Adafruit BMP-180 se muestra a continuación, pero también han probado con el ICStation BMP-085. Sin cambios en el código o circuito. Ver http://arduinotronics.blogspot.com/2014/02/icstation-5v-bmp-085-pressure.html
Aquí está el código con todas las adiciones:
#include < Wire.h >
#include < Adafruit_BMP085.h >
flotador de Tc = 0;
flotador de Tf = 0;
Pa del flotador = 0;
flotador InHg = 0;
flotador de Am = 0;
flotador de Af = 0;
#include "DHT.h"
#define DHTPIN 2 / / Qué pin estamos conectados a
Quite el comentario de cualquier tipo que utilizas!
#define DHTTYPE DHT11 / / DHT 11
#define DHTTYPE DHT22 / / DHT 22 (AM2302)
#define DHTTYPE DHT21 / / DHT 21 (AM2301)
Conecte la clavija 1 (a la izquierda) de la sonda a + 5V
Conectar el pin 2 del sensor a lo que tu DHTPIN
Conectar el pin 4 (a la derecha) del sensor de suelo
Conecte un resistor de 10K del pin 2 (datos) al pin 1 (potencia) del sensor de
DHT dht (DHTPIN, DHTTYPE);
tF de flotador;
flotador de dP;
PD de flotador;
#include < SPI.h >
#include < Ethernet.h >
Introduzca una dirección de MAC y dirección IP para el controlador a continuación.
La dirección IP dependerá de tu red local:
mac de bytes [] = {}
0x90, 0xA2, 0xDA, 0 x 00, 0x23, 0x36};
Ip(192,168,254,177) dirección IP;
Inicializar la biblioteca de servidor Ethernet
con la dirección IP y el puerto que desea utilizar
(el puerto 80 es por defecto para HTTP):
Server(80) de EthernetServer;
Adafruit_BMP085 bmp;
void setup() {}
Abrir comunicaciones en serie y esperar para que el puerto a abrir:
Serial.Begin(9600);
Si (! {bmp.begin())}
Serial.println ("podría no encontrar un sensor BMP085 válido, verifique el alambrado!");
mientras que {} (1)
}
mientras (!. Serie) {}
; Espere a que el puerto serial para conectar. Necesario sólo para Leonardo
}
DHT.Begin();
Inicie la conexión Ethernet y servidor:
Ethernet.Begin (mac, ip);
Server.Begin();
Serial.Print ("server es a");
Serial.println(Ethernet.localIP());
}
void loop() {}
Serial.Print ("temperatura =");
Serial.Print(BMP.readTemperature());
TC=BMP.readTemperature();
TF = ((Tc*9)/5) + 32;
Serial.Print(TF);
Serial.println ("* F");
Serial.Print ("presión =");
Serial.Print(BMP.readPressure());
PA=BMP.readPressure();
InHg = Pa * 0.000295333727;
Serial.Print(inHg);
Serial.println ("en Hg");
Calcular suponiendo que 'estándar' barométrico de altitud
presión de 1013,25 milibares = 101325 Pascal
Serial.Print ("altitud =");
Serial.Print(BMP.readAltitude());
AM=BMP.readAltitude(101550); ajustar altura local
AF = Am * 3.28084;
Serial.Print(AF);
Serial.println ("pies");
Usted puede obtener una medición más precisa de altitud
Si usted sabe el nivel del mar actual presión que voluntad
varían con el tiempo y tal. Si es de 1015 milibares
es igual a 101500 pascales.
Serial.Print ("altitud Real =");
Serial.Print(BMP.readAltitude(101500));
Serial.println ("metros");
Serial.println();
Lectura de temperatura o la humedad toma alrededor de 250 milisegundos.
Lecturas del sensor también pueden ser hasta 2 segundos 'old' (es un sensor muy lento)
Float h = dht.readHumidity();
Float t = dht.readTemperature();
Compruebe si devuelve es válidas, si son NaN (no un número) entonces algo salió mal!
Si (isnan(t) || isnan(h)) {}
Serial.println ("error al leer desde DHT");
} else {}
Serial.Print ("humedad:");
Serial.Print(h);
Serial.Print ("% \t");
Serial.Print ("temperatura:");
Serial.Print(t);
tF = ((t*9)/5) + 32;
Serial.println ("* C");
}
Escuchar para clientes entrantes
Cliente EthernetClient = server.available();
Si {} (cliente)
Serial.println ("nuevo cliente");
una solicitud http termina con una línea en blanco
Boolean currentLineIsBlank = true;
mientras (client.connected()) {}
Si (client.available()) {}
char c = client.read();
Serial.Write(c);
Si has llegado hasta el final de la línea (recibió una nueva línea
carácter) y la línea está en blanco, ha terminado la solicitud http,
para que puedan enviar una respuesta
Si (c == '\n' & & currentLineIsBlank) {}
Enviar un encabezado de respuesta http estándar
Client.println ("HTTP/1.1 200 OK");
Client.println ("tipo de contenido: texto/html");
Client.println ("conexión: cerrar"); la conexión se cerrará después de la terminación de la respuesta
Client.println ("Refresh: 5"); actualizar la página automáticamente cada 5 segundos
Client.println();
Client.println ("<! HTML de DOCTYPE > ");
Client.println ("< html >");
Client.println ("< TABLE >");
Client.println ("< TR >");
Client.println ("< TD >");
el valor de la DHT-11
Client.Print ("humedad:");
Client.println ("< /TD >");
Client.println ("< TD >");
Client.Print(h);
Client.Print ("% \t");
Client.println ("< /TD >");
Client.println ("< /TR >");
Client.println ("< TR >");
Client.println ("< TD >");
Client.Print ("temperatura:");
Client.println ("< /TD >");
Client.println ("< TD >");
Client.Print(t*1.8+32);
Client.println ('°');
Client.println("F");
Client.println ("< /TD >");
Client.println ("< /TR >");
Client.println ("< TR >");
Client.println ("< TD >");
Client.Print ("presión barométrica:");
Client.println ("< /TD >");
Client.println ("< TD >");
Client.Print(inHg);
Client.println ('°');
Client.println ("In.");
Client.println ("< /TD >");
Client.println ("< /TR >");
Client.println ("< TR >");
Client.println ("< TD >");
Client.println ("punto de Rocío:");
Client.println ("< /TD >");
Client.println ("< TD >");
dP = (dewPointFast (t, h));
PD = ((dP*9)/5) + 32;
Client.println(dPF);
Client.println ('°');
Client.println("F");
Client.println ("< /TD >");
Client.println ("< /TR >");
Client.println ("< TR >");
Client.println ("< TD >");
Client.println ("índice de calor:");
Client.println ("< /TD >");
Client.println ("< TD >");
Client.println(heatIndex(TF,h));
Client.println ('°');
Client.println("F");
Client.println ("< /TD >");
Client.println ("< /TR >");
Client.println ("</TABLE >");
Client.println ("</html >");
rotura;
}
Si (c == '\n') {}
vas a empezar una nueva línea
currentLineIsBlank = true;
}
else if (c! = '\r') {}
Has conseguido un carácter en la línea actual
currentLineIsBlank = false;
}
}
}
darle tiempo al navegador de web para recibir los datos
Delay(1);
cerrar la conexión:
Client.STOP();
Serial.println ("cliente disonnected");
}
}
Delta max = 0.6544 wrt dewPoint()
6.9 x más rápido que dewPoint()
Referencia: http://en.wikipedia.org/wiki/Dew_point
dewPointFast doble (doble celsius, doble humedad)
{
doble a = 17.271;
doble b = 237.7;
doble temp = (a * celsius) / (b + c) + log(humidity*0.01);
doble Td = (b * temp) / (a - temp);
volver Td;
}
heatIndex doble (doble tempF, doble humedad)
{
doble c1 =-42.38, c2 = 2.049, c3 = 10.14, c4 =-0.2248, c5 = - 6.838e-3, c6 = - 5.482e - 2, c7 = 1.228e-3, c8 = 8.528e-4, c9 = - 1.99e - 6;
doble T = tempF;
doble R = humedad;
doble A = ((c5 * T) + c2) * T + c1;
Double B = ((c7 * T) + c4) * T + c3;
doble C = ((c9 * T) + c8) * T + c6;
doble rv = (C * R + B) * R + A;
volver rv;
}