Go Down

Topic: Estacion meteorologica. (Read 2001 times) previous topic - next topic

Hola.
Estoi trabajando en un nuevo proyecto para hacerme una estacion meteorologica.
Va a ser hecha por fases por cuestion de presupuesto y tiempo de espera de piezas.
Hasta el momento tengo:

-Arduino Uno R3
-LCD serial 1602
-RTC
-DHT22
-Modulo SD

Y he escrito este sketch:

Code: [Select]

#include <RelojDS1307.h>
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal.h>

#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht (DHTPIN, DHTTYPE);
LiquidCrystal lcd(0);
RelojDS1307Class Reloj;

long Millisprevios = 0;

void setup() {
 
 lcd.begin(16, 2);
 dht.begin();
 lcd.setBacklight(HIGH);
 //Reloj.SetDateTime( 19, 12, 12, 22, 21, 00 );
 
}

void loop()
{
 lcd.setCursor(4,0);
 lcd.print( Reloj.Time());
 
 float h = dht.readHumidity();
 float t = dht.readTemperature();
 if (isnan (t)  ||  isnan (h))
 {
   lcd.setCursor(0,1);
   lcd.print("   Fallo DHT    ");
 }
 
 else
 {
 lcd.setCursor(0,1);
 lcd.print("Temperatura  ");
 lcd.print(t,0);
 lcd.print("C");
 unsigned long Millisactuales = millis();
 if (Millisactuales - Millisprevios > 3000)
   {
   Millisprevios = Millisactuales;
   lcd.setCursor(0,1);
   lcd.print("Humedad      ");
   lcd.print(h,0);
   lcd.print("%");
   }
 }
}


El caso es que el siguiente paso seria guardar los datos en la SD pero no he trabajado nunca con data logger y los ejemplos que he visto no llegan a dejarmelo claro. Me podeis hechar un cable?
Ya tengo pedido un BMP085 y para mas adelante seria incluir un anemometro y colocarlo en el techo y añadir "algo" para sincronizar remotamente con el pc o un lcd conectado a otro Arduino dentro de casa.

Hola. He encontrado un tutorial para tontos y me ha quedado todo lo claro que le puede quedar a una mente limitada como la mia  =(
He modificado el codigo añadiendo las funciones para que se me guarde todo en la SD y me queda tal que asi:

Code: [Select]
#include <SD.h>
#include <RelojDS1307.h>
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal.h>

#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht (DHTPIN, DHTTYPE);
LiquidCrystal lcd(0);
RelojDS1307Class Reloj;



long Millisprevios = 0;
float h = dht.readHumidity();
float t = dht.readTemperature();


int CS=10;
String dataString;
File dataFile;



void setup() {
 Serial.begin(9600);  
 lcd.begin(16, 2);
 dht.begin();
 lcd.setBacklight(HIGH);
 //Reloj.SetDateTime( 19, 12, 12, 22, 21, 00 );
 Serial.println("Iniciando SD");
 pinMode(CS, OUTPUT);
 
 Serial.println("Tarjeta lista");                  
 dataFile=SD.open("log.txt", FILE_WRITE);        
 if(dataFile){
   dataFile.println(dataString);                  
   dataFile.close();                              
   Serial.println(dataString);                    
 }
 
}

void loop()
{
 
 lcd.setCursor(4,0);
 lcd.print( Reloj.Time());
 
 
 
 Serial.print(Reloj.Date());
 Serial.println(Reloj.Time());
 Serial.println(dht.readTemperature());
 Serial.print("ªC");
 Serial.println(dht.readHumidity());
 Serial.print("%");
 
 dataString=String(Reloj.Date()) +  "_" + String(Reloj.Time()) + "," + String(dht.readTemperature()) + "," + String(dht.readHumidity());
 dataFile=SD.open("log.txt", FILE_WRITE);
 if(dataFile)
 {
   dataFile.println(dataString);
   dataFile.close();
   Serial.println(dataString);
 }
 
 
 
 if (isnan (t)  ||  isnan (h))
 {
   lcd.setCursor(0,1);
   lcd.print("   Fallo DHT    ");
 }
 
 else
 {
 lcd.setCursor(0,1);
 lcd.print("Temperatura  ");
 lcd.print(t,0);
 lcd.print("C");
 unsigned long Millisactuales = millis();
 if (Millisactuales - Millisprevios > 3000)
   {
   Millisprevios = Millisactuales;
   lcd.setCursor(0,1);
   lcd.print("Humedad      ");
   lcd.print(h,0);
   lcd.print("%");
   }
 }
}


Este codigo no se me compila a causa de  
Code: [Select]
+ "," + String(dht.readTemperature()) + "," + String(dht.readHumidity())
Si elimino este fragmento se me compila perfectamente pero al cargarlo en el Arduino Uno R3 no me funciona el LCD, no veo nada por el serial....
Alguien me puede hechar una "manita" dandome alguna pista?
Gracias.

No hay nadie que controle en con el almacenamiento de datos para iluminarme un poquito?

nayma

no se si esto es lo que buscas
http://tallerarduino.wordpress.com/2012/11/29/arduino-tutorials-cap7-uso-de-las-memorias-sd/

el titulo de tu post me ha despistado un poco.
de todas maneras si te interesa hace tiempo documentamos el ardumeteo, si lo buscas, creo que lo encontrarás...


no se si esto es lo que buscas
http://tallerarduino.wordpress.com/2012/11/29/arduino-tutorials-cap7-uso-de-las-memorias-sd/

el titulo de tu post me ha despistado un poco.
de todas maneras si te interesa hace tiempo documentamos el ardumeteo, si lo buscas, creo que lo encontrarás...


Hola. Muchas gracias por contestar.
Ese enlace lo encontre y la ultima edicion del sketch la realice siguiendo ese tutorial pero algo hice mal y deja de funcionarme todo.

johnelectric

El problema es que estas usando float en tus variables al comienzo, y por ejemplo

float sensor = ( 4.833984375 * analogRead(A0)-400.0) / 19.5;
    dataString += String(sensor);
    dataFile.println(dataString);

Debe ser :
int sensor = ( 4.833984375 * analogRead(A0)-400.0) / 19.5;
    dataString += String(sensor);
    dataFile.println(dataString);

yo también tengo ese problema porque quiero mas precisión.

Go Up