در مقالات قبلی دیدیم که دما و شدت نور و همچنین تاریخ و ساعت را میتوان بر روی یک SD کارت ذخیره کرد. علاوه بر این، میزان رطوبت نیز ثبت خواهد شد.
برای ثبت اطلاعات آب و هوا باید ۴ مرحله را طی کنیم :
(۱) بارگزاری کتابخانهها بر روی SD کارت، تنظیم ساعت، تعریف سنسور DHT11 برای آردوینو و برقراری اتصالات و تعریف متغیرها.
(۲) وجود SD کارت باید چک شود، یک فایل جدید با پسوند csv. ساخته شود و یک هدر برای فایل نوشته شود.
(۳) شدت نور، دماو میزان رطوبت از سنسورها دریافت شود، زمان دقیق از ماژول ساعت دریافت شود، یک رشته داده از تاریخ و زمان ساخته شود و اندازهگیری های سنسور بر روی فایل ذخیره شود.
(۴) اطلاعات روی sd ذخیره شود.
کتابخانههای زیادی برای سنسور DHT11 وجود دارد. اما کتابخانه نوشته شده توسط Rob Tilllaart توصیه می گردد. کتابخانه ی dht در داخل یک فایل زیپ قرار داده شده و در سایت https://github.com/RObTillaart/Arduino در دسترس می باشد. از متد ۱ یا ۲ که در مقالات قبلی دانشنامه آردوینو ذکر شد، برای نصب کتابخانهی dht استفاده کنید.
نحوه اتصال ماژول DHT11 به آردوینو
جدول اتصال SD کارت به RTC و سنسورها
کد ثبت اطلاعات آب و هوا با ماژول DS3231 در آردوینو
#include // include SD library
File file; // #associate file with SD library
String filename = "data.csv"; // filename
#include // include DS3231 library
DS3231 rtc(SDA, SCL); // #associate rtc with DS3231 library
#include // include dht library
dht DHT; // #associate DHT with dht library
int CSpin = 10; // chip select pin for SD card
int lightPin = A3; // light dependent resistor pin
int PCBpin = 6; // PCB mounted DHT11 pin
int i = 0; // data record counter
int check, light, temp, humid;
String data, date, time;
void setup()
{
Serial.begin(9600); // define Serial output baud rate
rtc.begin(); // start rtc
Serial.println("checking SD card"); // check for presence of SD card
if(SD.begin(CSpin) == 0)
{
Serial.println("Card fail"); // #return to void setup() if SD card not found
return;
}
Serial.println("Card OK");
if(SD.exists(filename)>0) SD.remove(filename); // delete old file
file = SD.open(filename, FILE_WRITE); // create new file
if(file == 1)
{ // column headers
String header = "record, time, light, temp, humid, on ";
header = header + String(rtc.getDateStr()); // date
file.println(header); // #write column headers to file
file.close(); // #close file after writing to SD card
}
else Serial.println("Couldn't access file"); // #file not opened
}
void loop()
{
i++; // #increase data record counter
Serial.print("record ");Serial.println(i); // #print record number
light= analogRead(lightPin); // #light intensity reading
check = DHT.read11(PCBpin);
temp = DHT.temperature; // #temperature reading
humid = DHT.humidity; // #humidity reading
time = rtc.getTimeStr(); // time stamp
// combine measurements into a string
data = String(i) + "," + String(time) + "," + String(light);
data = data + "," + String(temp)+ "," + String(humid);
file = SD.open(filename, FILE_WRITE); // #open data file before writing
file.println(data); // #write data string to file
file.close(); // #close file after writing to SD card
delay(1000); // #delay 1s before next reading
}