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

Arduino zapis danych z czujnika DTH11 na kartę SD z RTC

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);
}

Napisane przez swistak dnia sierpień 15 2017
0 komentarzy · 168 czytań · Drukuj

Ten artykuł został otagowany

Komentarze

Brak komentarzy. Może czas dodać swój?

Dodaj komentarz

Zaloguj się, aby móc dodać komentarz.

Oceny

Tylko zarejestrowani użytkownicy mogą oceniać zawartość strony
Zaloguj się lub zarejestruj, żeby móc zagłosować.

Brak ocen. Może czas dodać swoją?