Étape 4: Pression barométrique
Le Adafruit BMP-180 est indiqué ci-dessous, mais ont également testé avec le ICStation BMP-085. Aucune modification de code ou circuit. Voir http://arduinotronics.blogspot.com/2014/02/icstation-5v-bmp-085-pressure.html
Voici le code avec tous les ajouts :
#include < Wire.h >
#include < Adafruit_BMP085.h >
flotteur de Tc = 0 ;
flotteur Tf = 0 ;
flotteur Pa = 0 ;
flotteur InHg = 0 ;
flotteur Am = 0 ;
flotteur Af = 0 ;
#include « DHT.h »
#define DHTPIN 2 / / quelle broche nous sommes connectés à
Décommentez peu importe le type que vous utilisez !
#define DHTTYPE DHT11 / / DHT 11
#define DHTTYPE DHT22 / / DHT 22 (AM2302)
#define DHTTYPE DHT21 / / DHT 21 (AM2301)
Connecter la broche 1 (à gauche) du capteur à + 5V
Relier la broche 2 du capteur à tout ce qui est votre DHTPIN
Relier la broche 4 (à droite) du capteur au sol
Connecter une résistance de 10K de la broche 2 (données) à la broche 1 (puissance) du capteur
DHT dht (DHTPIN, DHTTYPE) ;
flotteur tF ;
flotteur dP ;
flotteur dPF ;
#include < SPI.h >
#include < Ethernet.h >
Entrez une adresse MAC et l’adresse IP de votre contrôleur ci-dessous.
L’adresse IP sera tributaire de votre réseau local :
la mac de Byte [] = {}
0X90, 0xA2, 0xDA, 0 x 00, 0 x 23, 0 x 36} ;
IPAddress ip(192,168,254,177) ;
Initialiser la bibliothèque de serveur Ethernet
avec l’adresse IP et le port que vous souhaitez utiliser
(le port 80 est par défaut pour HTTP) :
EthernetServer server(80) ;
Adafruit_BMP085 bmp ;
void setup() {}
Ouvrez la communication série et attendez de port à ouvrir :
Serial.Begin(9600) ;
Si (! bmp.begin()) {}
Serial.println ("ne pourrait pas trouver un capteur BMP085 valide, vérifiez le câblage!") ;
tandis que (1) {}
}
while (!. {Série)
; attendre pour port série pour se connecter. Nécessaire uniquement pour Leonardo
}
DHT.Begin() ;
Démarrez la connexion Ethernet et le serveur :
Ethernet.Begin (mac, ip) ;
Server.Begin() ;
Serial.Print ("serveur est à") ;
Serial.println(Ethernet.localIP()) ;
}
void loop() {}
Serial.Print ("température =") ;
Serial.Print(BMP.readTemperature()) ;
TC=BMP.readTemperature() ;
TF = ((Tc*9)/5) + 32 ;
Serial.Print(TF) ;
Serial.println ("* F") ;
Serial.Print ("pression =") ;
Serial.Print(BMP.readPressure()) ;
PA=BMP.readPressure() ;
InHg = Pa * 0.000295333727 ;
Serial.Print(inHg) ;
Serial.println ("en Hg ») ;
Calculer en supposant « standard » barométrique d’altitude
pression de 1013,25 millibars = 101325 Pascal
Serial.Print (« Altitude = ") ;
Serial.Print(BMP.readAltitude()) ;
AM=BMP.readAltitude(101550) ; ajusté pour altitude locale
AF = h * 3.28084 ;
Serial.Print(AF) ;
Serial.println ("pieds") ;
vous pouvez obtenir une mesure plus précise de l’altitude
Si vous connaissez le niveau actuel de la mer qui aura la pression
varient avec les conditions météorologiques et autres. Si c’est 1015 millibars
qui est égal à 101500 Pascals.
Serial.Print (« altitude réelle = ") ;
Serial.Print(BMP.readAltitude(101500)) ;
Serial.println ("m") ;
Serial.println() ;
Lecture de température ou humidité prend environ 250 millisecondes !
Lectures du capteur peuvent également être jusqu'à 2 secondes « ancienne » (c’est un capteur très lent)
flotter h = dht.readHumidity() ;
flotteur t = dht.readTemperature() ;
vérifier si les retours sont valables, s’ils sont NaN (pas un nombre), puis quelque chose s’est mal passé !
Si (isnan(t) || isnan(h)) {}
Serial.println ("Impossible de lire de DHT") ;
} else {}
Serial.Print ("humidité:") ;
Serial.Print(h) ;
Serial.Print ("\t %") ;
Serial.Print ("température:") ;
Serial.Print(t) ;
tF = ((t*9)/5) + 32 ;
Serial.println ("* C") ;
}
écoute des clients entrants
EthernetClient client = server.available() ;
Si {(client)
Serial.println ("nouveau client") ;
une requête http se termine par une ligne vide
Boolean currentLineIsBlank = true ;
tandis que (client.connected()) {}
Si (client.available()) {}
char c = client.read() ;
Serial.Write(c) ;
Si vous avez obtenu à la fin de la ligne (a reçu un saut de ligne
caractère) et la ligne est vide, la requête http est terminée,
ainsi vous pouvez envoyer une réponse
Si (c == « \n » & & currentLineIsBlank) {}
Envoyer un en-tête de réponse http standard
client.println ("HTTP/1.1 200 OK") ;
client.println ("Content-Type : text/html") ;
client.println ("Connection : close") ; la connexion sera fermée après l’achèvement de la réponse
client.println ("Refresh: 5") ; Actualisez la page automatiquement toutes les 5 sec
client.println() ;
client.println ("< ! DOCTYPE HTML > ") ;
client.println ("< html >") ;
client.println ("< TABLE >") ;
client.println ("< TR >") ;
client.println ("< TD >") ;
la valeur de la DHT-11
client.Print ("humidité:") ;
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 ("température:") ;
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 ("pression barométrique:") ;
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 ("Point de rosée:") ;
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 ("indice de chaleur:") ;
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 >") ;
rupture ;
}
Si (c == « \n ») {}
vous commencez une nouvelle ligne
currentLineIsBlank = true ;
}
ElseIf (c! = « \r ») {}
vous avez obtenu un personnage sur la ligne courante
currentLineIsBlank = false ;
}
}
}
donner le temps de navigateur web pour recevoir les données
Delay(1) ;
fermer la connexion :
client.Stop() ;
Serial.println ("client disonnected") ;
}
}
Delta max = 0.6544 wrt dewPoint()
6.9 x plus rapide que dewPoint()
Référence : http://en.wikipedia.org/wiki/Dew_point
double dewPointFast (double celsius, humidité du double)
{
double a = 17.271 ;
double b = 237.7 ;
double temp = (a * celsius) / (b + c) + log(humidity*0.01) ;
Td double = (b * temp) / (a - temp) ;
retour de Td ;
}
double heatIndex (double tempF, double humidité)
{
double 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 ;
double T = tempF ;
double R = humidité ;
double A = ((c5 * T) + c2) * T + c1 ;
Double B = ((c7 * T) + c4) * T + c3 ;
double C = ((c9 * T) + c8) * T + c6 ;
double rv = (C * R + B) * R + A ;
Retour à rv ;
}