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
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);
}
Jak zrobić rejestrator na dwa czujniki?
Musisz dopisać sekcje:
– zdefiniować 2 czujnik
– odczytu 2 czujnika
– zapisu 2 czujnika
Witam, osobiście zupełnie zgadzam się z powyższym
!
Zajrzyj do tego i połącz oba ze sobą. https://www.tranzystor.pl/artykuly-i-schematy/arduino/arduino-dht11-dth22-termometr-lcd.html
Witam, A w jaki sposób dołożyć do tego wyświetlacz LCD 2×16 aby odczyty które są robione się na nim pokazywały ?