2017-09-22 1 views
-1

J'ai besoin d'aide, je suis nouveau sur Arduino et je suis en train d'utiliser un capteur DHT11 sur une carte NodeMCU 1.0, je trouve sur beaucoup de tendances que cette Le capteur est inexact principalement sur les lectures d'humidité, ce qui m'amène à ma question, je veux ajouter/soustraire un pourcentage de la lecture qui vient du capteur qui s'affiche sur la page HTML. Quelqu'un pourrait-il aider, s'il vous plaît?Capteur DHT11 avec des valeurs erronées, voulant ajouter des valeurs à la lecture qui provient du capteur

PS J'ai joint le code im using.

include <ESP8266WiFi.h> 
#include <WiFiClient.h> 
#include <ESP8266WebServer.h> 
#include <ESP8266mDNS.h> 
#include "DHT.h" 

// Uncomment one of the lines below for whatever DHT sensor type you're using! 
#define DHTTYPE DHT11 // DHT 11 
//#define DHTTYPE DHT21 // DHT 21 (AM2301) 
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 

MDNSResponder mdns; 

// Replace with your network details 
const char* ssid = "Temperature_Server"; 
const char* password = "vishaworld.com"; 

ESP8266WebServer server(80); 

String webPage = ""; 

// DHT Sensor 
const int DHTPin = 4; 
DHT dht(DHTPin, DHTTYPE); 
static char celsiusTemp[7]; 
static char fahrenheitTemp[7]; 
static char humidityTemp[7]; 
float h, t, f; 

void setup(void) { 
    IPAddress Ip(10, 10, 10, 10); 
    IPAddress NMask(255, 255, 255, 0); 
    WiFi.mode(WIFI_AP); 
    WiFi.softAPConfig(Ip, Ip, NMask); 
    WiFi.softAP(ssid, password); 

    delay(1000); 
    Serial.begin(9600); 
    Serial.println(""); 

    // Wait for connection 
    delay(5000); 
    Serial.println(""); 
    Serial.print("SoftAP IP address: "); 
    Serial.println(WiFi.localIP()); 

    dht.begin(); 

    if (mdns.begin("esp8266", WiFi.localIP())) { 
    Serial.println("MDNS responder started"); 
    } 

    server.on("/", []() { 
    webPage = ""; 
    webPage += "<!DOCTYPE HTML>"; 
    webPage += "<html>"; 
    webPage += "<head></head><body><h1>Temperature and Humidity</h1><h3>Temperature in Celsius: "; 
    webPage += "<meta http-equiv=\"refresh\" content=\"6\">" ; 
    webPage += celsiusTemp; 
    webPage += "*C</h3><h3>Temperature in Fahrenheit: "; 
    webPage += fahrenheitTemp; 
    webPage += "*F</h3><h3>Humidity: "; 
    webPage += humidityTemp; 
    webPage += "%</h3><h3>"; 
    webPage += "</body></html>"; 
    server.send(200, "text/html", webPage); 
    }); 

    server.begin(); 
    Serial.println("HTTP server started"); 

} 

void loop(void) { 
    server.handleClient(); 
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) 
    float h = dht.readHumidity(); 
    // Read temperature as Celsius (the default) 
    float t = dht.readTemperature(); 
    // Read temperature as Fahrenheit (isFahrenheit = true) 
    float f = dht.readTemperature(true); 
    // Check if any reads failed and exit early (to try again). 
    if (isnan(h) || isnan(t) || isnan(f)) { 
    Serial.println("Failed to read from DHT sensor!"); 
    strcpy(celsiusTemp, "Failed"); 
    strcpy(fahrenheitTemp, "Failed"); 
    strcpy(humidityTemp, "Failed"); 
    } 
    else { 
    // Computes temperature values in Celsius + Fahrenheit and Humidity 
    float hic = dht.computeHeatIndex(t, h, false); 
    dtostrf(hic, 6, 2, celsiusTemp); 
    float hif = dht.computeHeatIndex(f, h); 
    dtostrf(hif, 6, 2, fahrenheitTemp); 
    dtostrf(h, 6, 2, humidityTemp); 
    } 
    delay(2000); 
} 
+0

Si je comprends bien lectures sur le Raspberry Pi est que les capteurs d'humidité sont notoires pour être inexactes. À mesure que les capteurs vieillissent, ils doivent être recalibrés de temps en temps. Pour ajouter 10% à la valeur la chose la plus simple est d'ajouter à la valeur .10 fois la valeur. Pour soustraire 10% à la valeur, soustrayez .10 fois la valeur à la valeur. Il devrait donc s'agir de quelque chose comme 'temp = temp + percent * temp;' où ajouter un pourcentage, puis 'percent' est positif et pour soustraire un pourcentage, alors' percent' est négatif. 'pourcentage' est un' float' avec le pourcentage divisé par 100 comme dans 10/100 qui est ..10. –

+0

dans lequel le code j'ajouterais ceci? Est-ce que ce serait l'endroit? // Calcule les valeurs de température en degrés Celsius + Fahrenheit et Humidité float hic = dht.computeHeatIndex (t, h, false); Dtostrf (hic, 6, 2, celsiusTemp); Float hif = dht.computeHeatIndex (f, h); dtostrf (hif, 6, 2, fahrenheitTemp); dtostrf (h, 6, 2, humidityTemp); } –

Répondre

0

Je mettrais probablement le code pour modifier la lecture de l'humidité après sa lecture par le capteur. De cette façon, la lecture de l'humidité du capteur ainsi que la correction sont au même endroit, donc facile à trouver.

Un extrait de votre code:

// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) 
float h = dht.readHumidity(); 
// modify the humidity reading to provide a correction to the value 
h = h + h * humidityCorrectionPercentage; 

ensuite près du sommet du fichier dans lequel le capteur d'humidité define est situé Je voudrais faire quelque chose de changement comme ce qui suit:

// Uncomment one of the lines below for whatever DHT sensor type you're using! 
#define DHTTYPE DHT11 // DHT 11 
//#define DHTTYPE DHT21 // DHT 21 (AM2301) 
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 

// humidity sensor reading modification to modify the reading to more accurate value 
// percentage in decimal form so 10% is 0.10 or 25% is 0.25 
// use positive vale to increase the reading and a negative value to decrease the reading. 
// specify a value of zero if no modification of the reading is needed. 
const float humidityCorrectionPercentage = .10;