SD kort Datalogging med DHT22 Temp luftfuktighet Sensor
Detta är en tutorial som förklarar hur man gör loggning med DHT22 temperatur luftfuktighet Sensor från vår kund Steve Spence.
Detta är ett lite knepigt, som sensorn utgångar flöten, och vi skicka strängar till SD-kortet, jag har satt ihop en flottör till sträng funktion att hjälpa till med detta.
Här är skissen av loggningsfunktionen. Det läser DHT22, konverterar flötena till strängar och skriver kommaavgränsad data till SD card. Är nedan!
#include
#include "DHT.h"
#define DHTPIN 7 / / vilken pin vi är ansluten till #define DHTTYPE DHT22 / / DHT 22 (AM2302) DHT dht (DHTPIN, DHTTYPE);
#include #include
CONST int chipSelect = 10;
void setup() {/ / öppna seriell kommunikation och vänta på port öppna: Serial.begin(9600), tag (! Följetong) {; / / wait för seriell port att ansluta. Behövs för Leonardo endast}
Serial.Print ("initiera SD-kortet..."); se till att den standard chip välja stiftet är inställd / / -utgång, även om du inte använder det: pinMode (10, OUTPUT);
se om kortet är närvarande och kan initieras: if (! SD.begin(chipSelect)) {Serial.println ("kort misslyckades, eller inte finns"); / / inte gör något mer: återvända;} Serial.println ("kort initierats."); Serial.println ("DHTxx test!"); DHT.BEGIN(); }
void loop() {/ / vänta några sekunder mellan mätningar. delay(2000);
Läst temperatur eller fuktighet tar cirka 250 millisekunder! Sensormätningar kan också vara upp till 2 sekunder "gamla" (det är en mycket långsam sensor) flyta h = dht.readHumidity(); Läs temperatur som Celsius flyta t = dht.readTemperature(); Läs temperatur som Fahrenheit flyta f = dht.readTemperature(true); Kontrollera om någon läser misslyckades och avsluta tidigt (för att försöka igen). om (isnan(h) || isnan(t) || isnan(f)) {Serial.println ("kunde inte läsa från DHT sensorn!"); return;}
Beräkna Värmeindex / / måste skicka i temp i Fahrenheit! flyta Hej = dht.computeHeatIndex (f, h);
Serial.Print ("luftfuktighet:"); Serial.Print(h); Serial.Print ("% \t"); Serial.Print ("temperatur:"); Serial.Print(f); Serial.println ("* F\t");
gör en sträng för att samla data logga: String dataString = "";
char buffer [10]. String stringH = dtostrf(h,6,2,buffer); dataString = stringH; dataString += ","; String stringF = dtostrf(f,6,2,buffer); dataString += stringF;
Öppna filen. Observera att endast en fil kan vara öppna samtidigt, / / så måste du stänga detta en innan du öppnar en annan. Fil dataFile = SD.open ("datalog.txt", FILE_WRITE);
om filen är tillgänglig, skriva till det: om (dataFile) {dataFile.println(dataString); dataFile.close(); / / Skriv ut till den seriella porten alltför: Serial.println(dataString);} / / om filen inte är öppen, pop upp ett felmeddelande: annat {Serial.println ("fel öppna datalog.txt");}}