Hygrometer (5 / 6 steg)
Steg 5: kod
Läsa in följande kod till din arduino.
Förhoppningsvis fungerar det korrekt!
När temperaturerna inte är stabil nog att du kan ändra "en = 0,5" i till exempel "en = 0.8'
/*
Psykrometerskillnad
Läser en analog ingång på stift 0 och på stift 1. Omvandlar den till temperatur. Konverterar temperatur till en relativ fuktighet.
Och skriver ut resultatet till LCD-skärmen.
*/
inkludera bibliotek-koden:
#include
initiera bibliotek med numrerar av gränssnittet stiften
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
ge initialt värderar för torra och våta temperaturen
flyta averagedry = 20;
flyta averagewet = 16.
ge en konstant som anger vikten av de gamla värdena i detemining det nya värdet
flyta en = 0,5;
Rutinen installationsprogrammet körs en gång när du trycker på reset:
void setup() {
här används den spänning som kommer in i Aref som referens
NÄR DU LÄMNAR UT MOTSTÅNDEN OCKSÅ LÄMNA
analogReference(EXTERNAL);
Ange den LCD antal kolumner och rader:
LCD.BEGIN (16, 2);
Skriv ut ett meddelande till LCD-skärmen.
LCD.Print("RelativeHumidity");
initiera seriell kommunikation med datorn:
Serial.BEGIN(9600);
}
loop rutinen körs för evigt om och om igen:
void loop() {
läsa indata på analoga stift 0 och pin 1, är detta torr/våt temperatur:
delay(1000) förseningarna med en andra, detta är att stabilisera arduino
analogRead(A0);
Delay(1000);
int sensorValuedry = analogRead(A0);
analogRead(A1);
Delay(1000);
flyta sensorValuewet = (float) analogRead(A1);
Konvertera sensorvalue till en temperatur
Sensorvalue mätt utan en lägre referensspänningen kalibreras med en termometer
Sensorvalue mätt med en lägre referensspänningen korrigeras med 149.7/828.3.
149.7 är sensorvalue utan lägre referensspänningen
828.3 är sensorvalue med lägre referensspänningen.
Dessa två värden kommer förmodligen vara annorlunda med andra resistants
NÄR DU LÄMNAR UT MOTSTÅNDEN OCKSÅ LÄMNA UT KONVERTERA DEL (149.7/828.3)
flyta temperaturedry = sensorValuedry * (149.7/828.3) * 0.5304-53.926;
Ta en löpande genomsnittlig med koefficient faktor en
averagedry = en * averagedry + (1-a) * temperaturedry;
Konvertera sensorvalue till en temperatur
flyta temperaturewet = sensorValuewet * (149.7/828.3) * 0.5181-50.889;
Ta en löpande genomsnittlig
averagewet = en * averagewet + (1-a) * temperaturewet;
använda formler för att avgöra den relativa luftfuktigheten
flyta Es = 0,61 * exp ((19.9 * averagewet) /(273 + averagewet));
flyta Ea = Es-0.067 * (averagedry-averagewet);
float H = Ea / Es;
{
ställa markören till kolumn 0, linje 1
(Obs: linje 1 är den andra raden, sedan räknar börjar med 0):
lcd.setCursor (0, 1);
skriva ut den relativa luftfuktigheten:
LCD.Print(H);
}
}