This a domestic weather station that measures temperature, humidity and light and stores the data in a .csv file in SD card.

Dependencies:   DS1302 SDFileSystem mbed

Fork of temp_humid_light_time_DS1302_LM35_DHT11_LDR by FRDM-K64F Code Share

main.cpp

Committer:
nivmukka
Date:
2016-03-27
Revision:
2:02668481aebc
Parent:
1:4b3e952a1406

File content as of revision 2:02668481aebc:

#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);
AnalogIn SolarPanel(PTB10);
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(1406017928);
    #endif
    
    char storedByte = clk.recallByte(0);   
    clk.storeByte(0, storedByte + 1);
 
    int err;
    wait(1); // wait 1 second for DHT11 to stabilyze
    
 
    mkdir("/sd/dados", 0777);
    
    FILE *fp = fopen("/sd/dados/data004.csv", "a");
    if(fp == NULL) 
    {
        error("Could not open file for write\n");
        RedLed= 0;   
    }
    
    fprintf(fp, "%s,", "--------------\n"); 
    fclose(fp);  
    
    while (1) 
    {
    
        Blueled= 1;
        RedLed= 1;
        GreenLed= 1;
    
        if (count < 5000000)    //around 10 seconds before it reaches the count of 12000000
        { 
            count++;
        } 
        else
        {  
            err = sensor.readData();
            if (err == 0)
            {
                GreenLed= 0;
                printf("\r\nTemperature in celsius is %4.2f C \r\n",sensor.ReadTemperature(CELCIUS));
                printf("Temperature in farenheit is %4.2f F \r\n",sensor.ReadTemperature(FARENHEIT));
                printf("Temperature in kelvin 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("\nErr %i \r\n",err);
            }
        
            FILE *fp = fopen("/sd/dados/data004.csv", "a");
            
            if(fp == NULL) 
            {
                error("Could not open file for write\n");
            }
    
            ldrcalc= LDR.read();
            ldrcalc= (1/ldrcalc)-1; //Transforms the LDR value into a 0-5 signal (integer)
            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,%f", ctime(&seconds), 333.333*LM35.read(), SolarPanel.read(), sensor.ReadTemperature(CELCIUS), sensor.ReadHumidity(), ldrcalc); 
            fclose(fp);  
            printf("\n--------------------------------------------------\n");
    
            count=0;
            Blueled= 0;
        }
    }
 }