Dit is een tutorial waarin wordt uitgelegd hoe te registreren met de DHT22 temperatuur vochtigheid Sensor gemaakt door onze klant Steve Spence doen.
Dit is een beetje lastig, omdat de sensor output drijvers, en wij sturen tekenreeksen op de SD-kaart, ik heb samen een float tekenreeks functie om te helpen met dit.
Hier is de schets voor de functie voor logboekregistratie. Het leest de DHT22 de praalwagens worden omgezet in tekenreeksen en schrijft de door komma's gescheiden gegevens naar de SD card. Video is hieronder!
#include
#include "DHT.h"
#define DHTPIN 7 / / welke pin wij met #define DHTTYPE DHT22 verbonden bent / / DHT 22 (AM2302) DHT dht (DHTPIN, DHTTYPE);
#include #include
Const int chipSelect = 10;
void setup {/ / seriële communicatie te openen en te wachten voor de poort te openen: Serial.begin(9600); tijdje (! Serieel) {; / / wait voor seriële poort aansluiten. Alleen nodig voor Leonardo}
Serial.Print ("initialiseren SD card..."); Zorg ervoor dat de standaard chip select pin is ingesteld op / / output, zelfs als u het niet gebruikt: pinMode (10, OUTPUT);
zien of de kaart aanwezig en kan worden geïnitialiseerd: if (! SD.begin(chipSelect)) {Serial.println ("kaart mislukte of niet aanwezig"); / / doe niets meer: keren;} Serial.println ("kaart geïnitialiseerd."); Serial.println ("DHTxx test!"); DHT.begin(); }
void loop {/ / wacht een paar seconden tussen de metingen. delay(2000);
Lezing temperatuur of vochtigheid neemt ongeveer 250 milliseconden! Sensor lezingen kunnen ook worden maximaal 2 seconden 'oude' (het is een zeer langzame sensor) zweven h = dht.readHumidity(); Lees de temperatuur als Celsius zweven t = dht.readTemperature(); Lees de temperatuur als Fahrenheit vlotter f = dht.readTemperature(true); Controleer als elke leest mislukt en exit vroeg (om te probeer het opnieuw). Als (isnan(h) || isnan(t) || isnan(f)) {Serial.println ("Failed to lezen van DHT sensor!"); terugkeer;}
Berekenen van de warmte-index / / moet sturen in temp in Fahrenheit! zweven hi = dht.computeHeatIndex (f, h);
Serial.Print ("vochtigheid:"); Serial.Print(h); Serial.Print ("% \t"); Serial.Print ("temperatuur:"); Serial.Print(f); Serial.println ("* F\t");
maken van een tekenreeks voor het samenstellen van de gegevens te melden: String dataString = "";
char buffer [10]; StringH koord = dtostrf(h,6,2,buffer); dataString = stringH; dataString += ","; StringF koord = dtostrf(f,6,2,buffer); dataString += stringF;
Open het bestand. Merk op dat slechts één bestand tegelijk kan zijn geopend / / dus je sluiten van deze een moet voor het openen van een ander. Bestand dataFile = SD.open ("datalog.txt", FILE_WRITE);
Als het bestand beschikbaar is, schrijven: als (dataFile) {dataFile.println(dataString); dataFile.close(); / / print op de seriële poort te: Serial.println(dataString);} / / als het bestand niet geopend is, knal opwaarts een fout: anders {Serial.println ("fout bij openen datalog.txt");}}