|
I have designed and wrote a program to monitor temperature and humidity 2 months ago. It took me another a month to publish it. Why? Because I can not find any suitable circuit sketch for Arduino. And lazy. Hehhe.
So, what I can give to the other people about my latest project is only in short description. Any problem/questions, just ask me in comment down below using Facebook.
Objective: Build a system using Arduino to monitor temperature and humidity and save it in memory card.
Part:
1.Arduino (whatever you have. Mine, not the latest one).
2.Arduino RTC (real time clock) v1.1. To read date/time.
3.Humidity & temperature sensor DHT11
4.SD card reader/write from LC studio, www.lcsoft.net
5.SD card
6.Some wire jumpers, if needed. I need a lot of them.
Design:
Just view it from here.

Program?
#include <SD.h> #include "RTClib.h" #include <Wire.h> #include <string.h> #include <dht11.h> #include <stdlib.h> RTC_DS1307 RTC; int delaytime= 3000; dht11 DHT11; #define DHT11PIN 2 File myFile; void setup() { Serial.begin(9600); Wire.begin(); //Important for RTClib.h RTC.begin(); if (! RTC.isrunning()) { Serial.println("RTC is NOT running!"); // following line sets the RTC to the date & time this sketch was compiled // RTC.adjust(DateTime(__DATE__, __TIME__)); return; } Serial.print("Initializing SD card..."); // On the Ethernet Shield, CS is pin 4. It's set as an output by default. // Note that even if it's not used as the CS pin, the hardware SS pin // (10 on most Arduino boards, 53 on the Mega) must be left as an output // or the SD library functions will not work. pinMode(10, OUTPUT); if (!SD.begin(4)) { Serial.println("initialization failed!"); return; } Serial.println("initialization done."); } void loop() { openFile(); writeFile(); closeFile(); delay(delaytime); } void openFile(){ char filename[] = "00000000.CSV"; DateTime now = RTC.now(); filename[0] = (now.year()/1000)%10 + '0'; //To get 1st digit from year() filename[1] = (now.year()/100)%10 + '0'; //To get 2nd digit from year() filename[2] = (now.year()/10)%10 + '0'; //To get 3rd digit from year() filename[3] = now.year()%10 + '0'; //To get 4th digit from year() filename[4] = now.month()/10 + '0'; //To get 1st digit from month() filename[5] = now.month()%10 + '0'; //To get 2nd digit from month() filename[6] = now.day()/10 + '0'; //To get 1st digit from day() filename[7] = now.day()%10 + '0'; //To get 2nd digit from day() //Check file name exist? if (SD.exists(filename)) { Serial.println("exists."); myFile = SD.open(filename, FILE_WRITE); } else { Serial.println("doesn't exist."); Serial.println("Creating new file"); myFile = SD.open(filename, FILE_WRITE); } } void writeFile(){ DateTime now = RTC.now(); myFile.print(now.year(),DEC); myFile.print("/"); myFile.print(now.month(),DEC); myFile.print("/"); myFile.print(now.day(),DEC); myFile.print(" "); myFile.print(now.hour(),DEC); myFile.print(":"); myFile.print(now.minute(),DEC); myFile.print(":"); myFile.print(now.second(),DEC); myFile.print(","); DHT11.read(DHT11PIN); myFile.print((float)DHT11.temperature, 2); Serial.println((float)DHT11.temperature, 2); myFile.println((float)DHT11.humidity, 2); Serial.println((float)DHT11.humidity, 2); } void closeFile(){ myFile.close(); }
The output in SD card must Date/Time; Temperature ; Humidity. |