Arduino – Rejestr temperatury i wilgotności z zapisam na kartę SD wraz z RTC

Zapis danych temperatury i wilgotności, nie raz był potrzebny. Wcześniej już opisywałem zapis takich danych jak temperatura oraz wilgotność z wykorzystaniem Arduino, jednak tym razem potrzebne są mi te dane ponownie jednak z datą kiedy dana wartość się pojawiła. W tym momencie przychodzi nam modułu RTC DS3231. Oprzemy się wiadomo o Arduino wiem części z was to nie pasuje, jednak jeżeli mam je pod ręką i jest to wygodniejsze, niż klepanie wszystkiego od zera dla pojedynczego  małego projektu.

Komponenty:
Arduino Nano lub odpowiednik
– Czujnik temperatury DHT11 lub DHT22
– Moduł RTC DS3231 lub odpowiednik
– Moduł karty SD
– karta SD
– Przewody do połączenia wstępnie całości

Połączenia jest bardzo proste, ponieważ wykorzystaliśmy moduły, które można bezpośrednio wpiąć na płytkę prototypową. Sposób połączenia obrazuje poniższa tabela.

Arduino Pin Piny w modułach
DHT11 / DHT22
Vcc 5V
GND GND
NC NC
Out Pin 5
Moduł RTC
Vcc 5V
GND GND
SCL Pin A5
SDA Pin A4
Moduł karty mSD
Vcc 5V
GND GND
MISO Pin 12
MOSI Pin 11
SCK Pin 13
CS Pin 4

Przydał by się nam oczywiście program, który będzie wykonać następujące czynności:
1. Odczyt danych z czujnika DTH11/DHT22
2. Zainicjować magistralę I2C, w celu odczytania danych z modułu RTC.
3. Zainicjować magistralę SPI, aby połączyć moduł kart SD z Arduino.
4. Zapisać: godzinę, datę oraz temperaturę i wilgotność na karcie SD.

Potrzebne nam będzie oczywiście kilka bibliotek:

– DTH11/DHT22 dostępna tu
– RTC DS3231
SdFat

Rejestr temperatury i wilgotności z zapisam na kartę SD

Kod programu:

#include <DS3231.h> //Biblioteka Modułu RTC
#include <SPI.h> //Biblioteka SPI
#include <SD.h> //Biblioteka SD card
#include <dht.h> //Biblioteka dhtxx

#define DHT11_PIN 5
dht DHT;
const int chipSelect = 4;

DS3231  rtc(SDA, SCL);

void setup()
{

Serial.begin(9600);
Initialize_SDcard();
Initialize_RTC();
Initialize_PlxDaq();
}

void loop()
{
Read_DHT11();
Write_SDcard();
Write_PlxDaq();
delay(5000); //odczytywanie danych co 5 s
}

void Write_PlxDaq()
{
Serial.print(„DATA”);
Serial.print(„,”);

Serial.print(„DATE”);
Serial.print(„,”);

Serial.print(„TIME”);
Serial.print(„,”);

Serial.print(DHT.temperature);
Serial.print(„,”);

Serial.print(DHT.humidity);
Serial.print(„,”);

Serial.println();
}

void Initialize_PlxDaq()
{
Serial.println(„Start”);
Serial.println(„www.tranzystor.pl”);
Serial.println(„LABEL,Date,Time,Temperature,Humidity”);
}

void Write_SDcard()
{
File dataFile = SD.open(„temprtc.txt”, FILE_WRITE);

if (dataFile) {
dataFile.print(rtc.getDateStr());
dataFile.print(„,”);

dataFile.print(rtc.getTimeStr());
dataFile.print(„,”);

dataFile.print(DHT.temperature);
dataFile.print(„,”);

dataFile.print(DHT.humidity);
dataFile.print(„,”);

dataFile.println();
dataFile.close();
}
else
Serial.println(„Oho!! Blad karty SD”);
}

void Initialize_SDcard()
{

if (!SD.begin(chipSelect)) {
Serial.println(„www.tranzystor.pl”);
Serial.println(„Karta nie dziala lub nie ma jej wcale ;)”);

return;
}

File dataFile = SD.open(„temprtc.txt”, FILE_WRITE);
// if the file is available, write to it:
if (dataFile) {
dataFile.println(„www.tranzystor.pl”);
dataFile.println(„Date,Time,Temperature,Humidity”);
dataFile.close();
}
}

void Initialize_RTC()
{
rtc.begin();

}

void Read_DHT11()
{
int chk = DHT.read11(DHT11_PIN);
}

 

Post Author: swistak

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Potwierdz, że nie jesteś botem. *