Pages: [1]   Go Down
Author Topic: Estacion meteorologica.  (Read 1804 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-cry
He modificado el codigo añadiendo las funciones para que se me guarde todo en la SD y me queda tal que asi:

Code:
#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:
+ "," + 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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
God Member
*****
Karma: 1
Posts: 524
Arduino inside
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Honduras
Offline Offline
Newbie
*
Karma: 0
Posts: 4
El pequeño de hoy y el Grande del mañana
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Pages: [1]   Go Up
Jump to: