Datalogger that reads temperature, humidity and light level every 10 seconds, and store the data in a microSD card (.CSV file).

Dependencies:   DS1302 SDFileSystem mbed

This is a weather station/datalogger using a Freescale FRDM-K64F dev board, a LM35 (temperature sensor), a DHT11 (temperature and humidity sensor), a DS1302 (timekeeper module) and a LDR (light level sensor). All the data is periodically stored on a microSDHC card; The acquisition period is adjustable via software (by setting the value of a counter).

There is also (commented) code for sending all these information via serial to a terminal on PC.

Full explanation, details and schematics can be found here: http://embedded-clovis.blogspot.ca/2014/07/temperature-datalogger-with-arm-cortex.html

Revision:
0:8f0934e41a57
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Jul 04 08:08:38 2014 +0000
@@ -0,0 +1,88 @@
+#include "mbed.h"
+#include "SDFileSystem.h"
+#include "DHT.h"
+#include "DS1302.h"
+
+// Defines for the DS1302 timer module
+#define SCLK    PTC1
+#define IO      PTB19
+#define CE      PTB18
+
+SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); //MOSI, MISO, SCLK, SSEL. (SD Card) Tested on K64F, correct pins.
+AnalogIn LM35(PTB2);
+AnalogIn LDR(PTB3);
+int count=0;
+float ldrcalc= 0.00;
+DigitalOut RedLed(LED1); // Error indication
+DigitalOut GreenLed(LED2); // LM35 read indication
+DigitalOut Blueled(LED3); // DHT11 read indication
+DHT sensor(PTB20,DHT11); // Use the DHT11 sensor, on pin 
+DS1302 clk(SCLK, IO, PTB18); // ports for the DS1302 time keeper
+ 
+int main() {
+    // the 6 lines below are for the time keeper chip
+    #ifdef INITIAL_RUN
+    clk.set_time(1403949720);
+    #endif
+    
+    char storedByte = clk.recallByte(0);
+    //printf("\r\nStored byte was %d, now increasing by one\r\n", storedByte);
+    clk.storeByte(0, storedByte + 1);
+    //
+    
+    int err;
+    wait(1); // wait 1 second for DHT11 to stabilyze
+    
+    //printf("Hello World!\n");   
+ 
+    mkdir("/sd/dados", 0777);
+    
+    FILE *fp = fopen("/sd/dados/data001.csv", "w");
+    if(fp == NULL) {
+        error("Could not open file for write\n");
+        RedLed= 0;
+        
+        }
+    while (1) {
+    
+    Blueled= 1;
+    RedLed= 1;
+    GreenLed= 1;
+    
+   if (count < 12000000){
+        count++;
+        } else{  
+        // --------------------------
+       
+        err = sensor.readData();
+        if (err == 0) {
+            GreenLed= 0;
+            printf("Temperature is %4.2f \r\n",sensor.ReadTemperature(CELCIUS));
+            //printf("Temperature is %4.2f F \r\n",sensor.ReadTemperature(FARENHEIT));
+            //printf("Temperature is %4.2f K \r\n",sensor.ReadTemperature(KELVIN));
+            printf("Humidity is %4.2f \r\n",sensor.ReadHumidity());
+            //printf("Dew point is %4.2f  \r\n",sensor.CalcdewPoint(sensor.ReadTemperature(CELCIUS), sensor.ReadHumidity()));
+            //printf("Dew point (fast) is %4.2f  \r\n",sensor.CalcdewPointFast(sensor.ReadTemperature(CELCIUS), sensor.ReadHumidity()));
+            
+        } else
+            printf("\r\nErr %i \n",err);
+            
+        // ----------------------------  
+    FILE *fp = fopen("/sd/dados/data001.csv", "a");
+    if(fp == NULL) {
+        error("Could not open file for write\n");
+        
+       }
+    
+    ldrcalc= LDR.read();
+    ldrcalc= (1/ldrcalc)-1;
+    time_t seconds = clk.time(NULL);
+    //fprintf(fp, "%s\r,%f,%f,%f\n", "LM35", "DHT11", "Humid", "Month", "Day", "Hour", "Year");
+    fprintf(fp, "%s\r,%f,%f,%f,%f", ctime(&seconds), 333.333*LM35.read(), sensor.ReadTemperature(CELCIUS), sensor.ReadHumidity(), ldrcalc); 
+    fclose(fp);  
+    //printf("Goodbye World!\n");
+    count=0;
+    Blueled= 0;
+    }
+    }
+    }
\ No newline at end of file