Stap 4: Luchtdruk
De BMP Adafruit-180 is hieronder weergegeven, maar ook met de ICStation BMP-085hebben getest. Geen wijzigingen in de code of circuit. Zie http://arduinotronics.blogspot.com/2014/02/icstation-5v-bmp-085-pressure.html
Hier is de code met alle toevoegingen:
#include < Wire.h >
#include < Adafruit_BMP085.h >
zweven Tc = 0;
zweven Tf = 0;
zweven Pa = 0;
zweven InHg = 0;
float ben = 0;
zweven Af = 0;
#include "DHT.h"
#define DHTPIN 2 / / welke pin wij verbonden bent met
Uncomment welke type u!
#define DHTTYPE DHT11 / / DHT 11
#define DHTTYPE DHT22 / / DHT 22 (AM2302)
#define DHTTYPE DHT21 / / DHT 21 (AM2301)
Aansluiten aan vastmaken 1 (aan de linkerkant) van de sensor + 5V
Verbinden met pin 2 van de sensor wat uw DHTPIN is
Pin 4 (aan de rechterkant) van de sensor verbinden met grond
Verbinding maken met een 10K Ohm weerstand van pin 2 (gegevens) aan pin 1 (kracht) van de sensor
DHT dht (DHTPIN, DHTTYPE);
float tF;
zweven dP;
float dPF;
#include < SPI.h >
#include < Ethernet.h >
Voer een MAC-adres en het IP-adres voor uw controller hieronder.
Het IP-adres zal afhankelijk van uw lokale netwerk zijn:
byte mac [] {} =
0x90, 0xA2, 0xDA, 0x00, 0x23, 0x36};
IP-adres ip(192,168,254,177);
Initialiseren van de Ethernet server bibliotheek
met het IP-adres en de poort die u wilt gebruiken
(poort 80 is de standaardwaarde voor HTTP):
EthernetServer server(80);
Adafruit_BMP085 bmp;
VOID Setup {}
Seriële communicatie te openen en te wachten voor de poort te openen:
Serial.begin(9600);
Als (! bmp.begin()) {}
Serial.println kan ("niet vinden van een geldige BMP085-sensor, raadpleegt u bedrading!");
terwijl (1) {}
}
terwijl (!. Seriële) {}
; wachten op de seriële poort te verbinden. Alleen nodig voor Leonardo
}
DHT.begin();
de Ethernet-verbinding en de server starten:
Ethernet.begin (mac, ip);
server.begin();
Serial.Print ("server is op");
Serial.println(Ethernet.localIP());
}
void loop {}
Serial.Print ("temperatuur =");
Serial.Print(BMP.readTemperature());
TC=bmp.readTemperature();
TF = ((Tc*9)/5) + 32;
Serial.Print(TF);
Serial.println ("* F");
Serial.Print ("druk =");
Serial.Print(BMP.readPressure());
PA=bmp.readPressure();
InHg Pa = * 0.000295333727;
Serial.Print(InHg);
Serial.println ("In Hg");
Berekenen uitgaande van 'standaard' barometrische hoogte
druk van 1013.25 mbar = 101325 Pascal
Serial.Print ("hoogte =");
Serial.Print(BMP.readAltitude());
Am=bmp.readAltitude(101550); aangepast voor lokale hoogte
Af = Am * 3.28084;
Serial.Print(af);
Serial.println ("feet");
kunt u een nauwkeuriger meting van hoogte
Als u weet dat de huidige zeespiegel die druk
afhankelijk van het weer en dergelijke. Als het 1015 voeren
dat is gelijk aan 101500 luchtdruk.
Serial.Print ("echte hoogte =");
Serial.Print(BMP.readAltitude(101500));
Serial.println ("meter");
Serial.println();
Lezing temperatuur of vochtigheid neemt ongeveer 250 milliseconden!
Sensor lezingen kan maximaal 2 seconden 'oude' (het is een zeer langzame sensor)
zweven h = dht.readHumidity();
zweven t = dht.readTemperature();
Controleer als opbrengsten geldig zijn, indien zij NaN (geen getal zijn) dan iets mis gegaan!
Als (isnan(t) || isnan(h)) {}
Serial.println ("kon aflezen uit DHT");
} else {}
Serial.Print ("vochtigheid:");
Serial.Print(h);
Serial.Print ("% \t");
Serial.Print ("temperatuur:");
Serial.Print(t);
tF = ((t*9)/5) + 32;
Serial.println ("* C");
}
luisteren voor clients voor inkomende
EthernetClient client = server.available();
Als (client) {}
Serial.println ("nieuwe klant");
een http-verzoek eindigt met een lege regel
Boole currentLineIsBlank = waar;
terwijl (client.connected()) {}
Als (client.available()) {}
char c = client.read();
Serial.write(c);
Als u toegang hebt verkregen tot het einde van de regel (ontvangen een newline
teken) en de regel is leeg, de http-aanvraag is beëindigd,
zodat u kunt een antwoord sturen
Als (c == '\n' & & currentLineIsBlank) {}
verzenden van een standaard http-antwoordheader
client.println ("HTTP/1.1 200 OK");
client.println ("Content-Type: text/html");
client.println ("verbinding: sluiten"); de verbinding zal worden gesloten na voltooiing van de reactie
client.println ("vernieuwen: 5"); Vernieuw de pagina automatisch elke 5 sec
client.println();
client.println ("<! HTML DOCTYPE > ");
client.println ("< html >");
client.println ("< tabel >");
client.println ("< TR >");
client.println ("< TD >");
uitgang de waarde van de DHT-11
client.Print ("vochtigheid:");
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 ("temperatuur:");
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 ("barometerdruk:");
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 ("dauwpunt:");
client.println ("< /TD >");
client.println ("< TD >");
dP = (dewPointFast (t, h));
dPF = ((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 ("warmte-Index:");
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 >");
breken;
}
Als (c == '\n') {}
je begint een nieuwe regel
currentLineIsBlank = true;
}
anders als (c! = '\r') {}
je hebt gekregen een teken op de huidige regel
currentLineIsBlank = false;
}
}
}
de web browser tijd geven om te ontvangen van de gegevens
delay(1);
de verbinding sluiten:
client.stop();
Serial.println ("client disonnected");
}
}
Delta max = 0.6544 wrt dewPoint()
6,9 x sneller dan dewPoint()
Referentie: http://en.wikipedia.org/wiki/Dew_point
dubbele dewPointFast (dubbele celsius, dubbele vochtigheid)
{
dubbele een = 17.271;
dubbel b = 237.7;
dubbele temp = (een * celsius) / (b + celsius) + log(humidity*0.01);
dubbele Td = (b * temp) / (a - temp);
terug Td;
}
Double heatIndex (double tempF, het dubbele van vochtigheid)
{
dubbele 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;
dubbele T = tempF;
dubbele R = vochtigheid;
dubbele A = ((c5 * T) + c2) * T + c1;
dubbel B = ((c7 * T) + c4) * T + c3;
dubbele C = ((c9 * T) + c8) * T + c6;
dubbele rv = (C * R + B) * R + A;
retourneren van rv;
}