Jag har byggt en väderstation med Arduino som mäter temperatur / luftfuktighet och tryck med en Adafruit 8266 HUZZAH. Temperatur och luftfuktighet mäts med hjälp av en DHT22-sensor som beställts från AdaFruit. Projektet slutfördes för ungefär 4 månader sedan och har under de första tre månaderna returnerat vad som verkar vara bra data. Så småningom började fuktighetsvärdena returnera sopor, värden runt 1%.
Jag bytte ut DHT22-sensorn mot en annan, den här gången från en slumpmässig eBay-säljare. Detta fungerade också bra i ungefär en vecka (luftfuktighetsvärden verkar se bra ut inom 20-60% -området).
Sedan sjönk de plötsligt till 1% igen.
Om jag kör DHTtester-programmet (istället för mitt program) mot sensorn och mitt Uno-utvecklingskort blir resultatet också 1% luftfuktighet för denna sensor.
DHTxx-test! Luftfuktighet: 1,00% Temperatur: 19,20 * C 66,56 * F Värmeindex: 17,96 * C 64,33 * F Luftfuktighet: 1,00% Temperatur: 19,20 * C 66,56 * F Värmeindex: 17,96 * C 64,33 * F
Så vid denna tidpunkt vet jag att problemet inte är med mitt program (händer med både mitt program och DHTtest-programmet), inte med min Arduino (händer med både 8266 i "fältet" och min Uno på min soffa ). Så något måste hända med sensorerna i fältet, där de arbetar i en vecka till några månader och sedan misslyckas?
Några idéer?
Jag börjar tänka någon bug / critter äter eller gör något åt sensorn (kanske de lockas av det eftersom det är varmare), men finns det ändå ett bra sätt att skydda om detta är fallet utan att påverka värdena? Något annat sätt att se vad som händer?
// Exempel på testskiss för olika DHT-fuktighets- / temperatursensorer // Skrivet av ladyada, public domain #include "DHT.h" #define DHTPIN 2 // vilken stift vi är anslutna till // Avkommentera vilken typ du använder! // # definiera DHTTYPE DHT11 // DHT 11 #definiera DHTTYPE DHT22 // DHT 22 (AM2302) // # definiera DHTTYPE DHT21 // DHT 21 (AM2301) // Anslut stift 1 (till vänster) på sensorn till + 5V // OBS: Om du använder ett kort med 3.3V-logik som en Arduino Due, anslut stift 1 // till 3.3V istället för 5V! // Anslut sensorns stift 2 till vad din DHTPIN är // Anslut stift 4 (till höger) på sensorn till GROUND // Anslut ett 10K-motstånd från stift 2 (data) till stift 1 (ström) på sensorn / / Initiera DHT-sensorn. DHT dht (DHTPIN, DHTTYPE); ogiltig installation () {Serial.begin (9600); Serial.println ("DHTxx test!"); dht.begin (); } void loop () {// Vänta några sekunder mellan mätningarna. fördröjning (2000); // Avläsningstemperatur eller luftfuktighet tar cirka 250 millisekunder! // Sensoravläsningar kan också vara upp till 2 sekunder "gammal" float h = dht.readHumidity (); // Läs temperatur som Celsius (standard) flyta t = dht.readTemperature (); // Läs temperatur när Fahrenheit (isFahrenheit = true) flyter f = dht.readTemperature (true); // Kontrollera om några läsningar misslyckades och avsluta tidigt (för att försöka igen). om (isnan (h) || isnan (t) || isnan (f)) {Serial.println ("Det gick inte att läsa från DHT-sensorn!"); lämna tillbaka; } // Beräkna värmeindex i Fahrenheit (standard) float hif = dht.computeHeatIndex (f, h); // Beräkna värmeindex i Celsius (isFahreheit = falskt) float hic = dht.computeHeatIndex (t, h, false); Serial.print ("Luftfuktighet:"); Serial.print (h); Serial.print ("% \ t"); Serial.print ("Temperatur:"); Serial.print (t); Serial.print ("* C"); Serial.print (f); Serial.print ("* F \ t"); Serial.print ("Värmeindex:"); Serial.print (hic); Serial.print ("* C"); Serial.print (hif); Serial.println ("* F");}