Z racji tego, że potrzebowałem Loger temperatur, który trzeba było zrobić na szybko, a jedyne co miałem pod ręką to Arduino. Z racji gabarytu padło na Arduino Nano, czujnik DTH22 oraz moduł karty mikroSD. Poniższy układ odczytuje dane odnoście temperatury oraz wilgotności, a następnie zapisuje nam te dane do pliku zapis.txt na karcie mikroSD. Dane później przetwarzam do wykresy który będzie można zobaczyć w dalszej części wpisu
Do wykonania będą nam potrzebne następujące elementy:
– Arduino NANO (lub odpowiednik)
– układ DTH22
– MikroSD adapter
– biblioteki SdFat, dth
Opis połączenia:
Czujnik | Arduino |
DAT | D2 |
VCC | 5V |
GND | GND |
Czytnik | Arduino |
CS | D10 |
SCK | D13 |
MOSI | D11 |
MISO | D12 |
VCC | 5V |
GND | GND |
Kod programu:
//
// Copyright 2016 © by swistak
// for www.tranzystor.pl
//
#include<stdlib.h>
#include „DHT.h”
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#include <SPI.h>
#include <SD.h>
const int chipSelect = 10;
void setup()
{
Serial.begin(19200);
while (!Serial) {
;
}
Serial.println(„Pomiar temperatury i wilgotnosci z zapisem na karte SD”);
Serial.println(„Dane zapisywane do zapis.txt na karcie MicroSD”);
Serial.println(„Inicjacja karty MicroSD… „);
pinMode(10, OUTPUT);
if (!SD.begin(chipSelect)) {
Serial.println(„ERROR karty SD”);
return;
}
Serial.println(„Karta SD ok!”);
Serial.println(„Sensor OK!”);
dht.begin();
}
void loop()
{
// co ile ma pobierać temp / wilg
delay(10000);
float h = dht.readHumidity();
// dla Celsiusza
float t = dht.readTemperature();
// dla Fahrenheit
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(„ERROR: Problem z sensorem nie wykryto DTH22 !”);
return;
}
float hi = dht.computeHeatIndex(t, h);
Serial.print(„Wilgotnosc: „);
Serial.print(h);
Serial.print(” %\t”);
Serial.print(„Temperatura: „);
Serial.print(t);
Serial.println(” *C\t”);
// make a string for assembling the data to log:
String dataString = „”;
char buffer[10];
String stringH = dtostrf(h,6,2,buffer);
dataString = stringH;
dataString += „,”;
String stringF = dtostrf(t,6,2,buffer);
dataString += stringF;
File dataFile = SD.open(„zapis.txt”, FILE_WRITE);
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
Serial.println(dataString);
}
else {
Serial.println(„błąd zapis.txt”);
}
}
Wykres temperatur po obróbce: