Estación Meteorológica

En este interesante proyecto , se combinan varios componentes para montar una estación meteorológica con reloj incorporado que es ideal para aquellos que quieren dejar lo básico y atacar proyectos más complejos.

Este proyecto es  de dificultad media pero al alcance de cualquiera que se sienta ya cómodo con la programación de Arduino y sus sensores.

Es justamente la mezcla de diferentes componentes y sensores lo que le hace tan interesante , porque sirve magníficamente como proyecto de fin de curso.

Al final si conseguimos una caja en la que embeber todo el proyecto , tendremos un bonito despertador y hecho por vosotros , así que a darle!

Proyecto Arduino


Lista de Materiales : 

Arduino UNO

Imagen de Arduino UNO

Protoboard y cables

conexiones

Protoboard

Un LCD de 20x4  aunque también se puede adaptar un display de 16x2 o de 16x4

Display

Un sensor de temperatura DHT11

Sensor temperatura y humedad

Un reloj Tiny RTC

Reloj con bateria RTC clock

Un potenciometro de 10K
Pot



Esquema del Circuito
rtcds1307_dht11_LCD4x20_bb


El montaje no es complicado pero requiere muchas conexiones, así que es importante que se preste atención , para evitar dolores de cabeza con los componentes.

Les recomiendo que vayan montando y probando los componentes poco a poco y asegurando que todo está bien , porque si lo haces de golpe, pueden existir fallas.

Programa de Control
El programa no es complicado pero tiene una moderada dificultad por lo que supone de mezcla de componentes y librerías , pero por lo demás es similar los ejemplos que hemos ido viendo previamente.

Les dejo el programa aquí : programa
/* Programa para crear un reloj con hora y fecha,tempertura y humedad
*  union de los programas RTC, DHT11 y LCD de PROMETEC
*/
#include <DHT11.h>
#include <LiquidCrystal.h>
#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>  // a basic DS1307 library that returns time as a time_t

LiquidCrystal lcd(7, 8, 9, 10, 11, 12); //( RS, EN, d4, d5, d6, d7) Asignacion pines del LCD
int pin=2;
DHT11 dht11(pin);    // Asignacion pin DHT11, el RTC tiene SDA en el A4 
                     //(SDA del arduino) y el SCL en el A5 (SCL del arduino)

void setup()
   { Serial.begin(115200);
     lcd.begin(20, 4);               // Fijar numero aracteres y filas
     setSyncProvider(RTC.get);       // Vamos a usar el RTC

     setTime(00,31,22,28,9,2015);    // hh,mm,ss,dd,mm,yy, si en la fecha alguna cifra es de
                                     // un solo digito no añadir 0, da error 
     // El setTime hay que comentarlo una vez que el RTC tiene ya la hora y fecha correcta

     if (timeStatus() != timeSet) 
         Serial.println("Unable to sync with the RTC"); 
     else
         Serial.println("RTC has set the system time"); 
   }

void loop()
   {   digitalClockDisplay();
       int err;
       float temp, hum;
       if((err = dht11.read(hum, temp)) == 0)    // Si devuelve 0 es que ha leido bien
          {  Serial.print("Temperatura: ");
             Serial.print(temp);
             lcd.setCursor(0, 2);                // Tercera columna LCD
             lcd.print("Temperatura: ");
             lcd.print(temp);
             Serial.print(" Humedad: ");
             Serial.print(hum);
             lcd.setCursor(0, 3);                // Cuarta columna LCD
             lcd.print("Humedad:     ");
             lcd.print(hum);
             Serial.println();
          }
       else
          {  Serial.println();
             Serial.print("Error Num :");
             Serial.print(err);
             Serial.println();
          }
       delay(1000);             //Recordad que solo lee una vez por segundo
   }

   void digitalClockDisplay()
      {      lcd.setCursor(0, 0);          // Primera columna LCD
             printDigits(hour());          // Hacer que la hora tenga siempre dos digitos
             lcd.print(":");        
             printDigits(minute());
             lcd.print(":");
             printDigits(second());
             Serial.print(" ");
             Serial.print(day());
             lcd.setCursor(0, 1);                // Segunda columna LCD        
             lcd.print(day());
             lcd.print("/");      
             Serial.print("/");
             Serial.print(month());
             lcd.print(month());
             lcd.print("/");
             Serial.print("/");
             Serial.print(year());
             lcd.print(year());
             Serial.println();
      }

void printDigits(int digits)    // Modifico esta funcion para que a la vez que imprime 
   {     Serial.print(":");     // via serie tambien lo haga via LCD
         //lcd.print(":");         
         if(digits < 10)
           {  Serial.print('0');
              lcd.print('0');
           }
         Serial.print(digits);
         lcd.print(digits);
   }
Arduino Display



Comentarios