Electrónica y programación para Microcontroladores.

Libros técnicos para electrónica programable.

Email
Contactanos en:

consultas@firtec.com.ar

Arduino

Medición de Temperatura y Humedad con Arduino.

 Uno de mis pasatiempos es el cultivo de plantas tropicales, hortalizas y hongos en ambientes controlados y conocer los valores de temperatura y humedad ambientales resultan indispensables para conocer las condiciones en que los cultivos se están desarrollando. 
Fue entonces que construí este simple medidor basado en un DHT22 conectado a un Arduino Nano. Para mejorar la visualización utilicé una pantalla gráfica JL12864G como se aprecia en la siguiente imagen.

El desarrollo original no pretendía construir un dispositivo elegante si mas bien funcional y práctico que pudiera mover a cualquier parte del vivero o al espacio de cultivo con bancales o cajones de madera.
El código para Arduino es muy simple, el sensor DHT22 conectado al INT0 de la placa Arduino Nano y la pantalla a los pines 8,9,10,18 y 19.

/****************************************************************
* Programa ejemplo para el control de una pantalla JLX12864G.
* Mide temperatura y humedad con sensor DHT22.

* Placa Arduino: ARDUINO NANO
* Arduino IDE con Linux Ubuntu
*
* Por: Daniel Schmidt.
* ***************************************************************/
#include "U8glib.h"
#include <DHT.h>
#include <DHT_U.h>
#include <avr/wdt.h>
 
U8GLIB_NHD_C12864 u8g(19, 18, 8, 10, 9);// Arduino NANO PB0, PB1, PB2, A5 (SCL) A4 (SDA)
 
/*---------------------------------------------------------------------------
 | JLX12864G-086 (Graphic LCD 128x64)                                        |
 |---------------------------------------------------------------------------|
 | Pin Connect :                                                             |
 |          CS : 8         VDD : 3v3                                         |
 |         RST : 9         VSS : GND                                         |
 |          RS : 10       LEDA : 5v                                          |
 | SPI:    SDA : 11                                                          |
 | SPI:    SCK : 13                                                          |
  ---------------------------------------------------------------------------*/
#define DHTTYPE DHT22      // Tipo de sensor
const int DHTPin = 2;       // Pin del sensor (PD2_INT0)
DHT dht(DHTPin, DHTTYPE);   // Instancia del sensor
// Variables del programa
static char Temperatura[5]="";
static char Humedad[5]="";
 
void Mostrar(void) {
  wdt_reset(); // Borra el contador del perro guardián
  u8g.setFont(u8g_font_10x20r);
  u8g.drawStr( 7, 15, "Temperatura");
  u8g.setFont(u8g_font_8x13r);
  u8g.drawStr( 16, 58, "Humedad ");
  u8g.drawHLine(0,0, 128);    // Linea horizontal superior
  u8g.drawHLine(0,63, 128);   // Linea horizontal inferior
  u8g.drawVLine(0, 1, 64);    // Linea vertical izquierda
  u8g.drawVLine(127, 1, 64);  // Linea vertical derecha
  u8g.setFont(u8g_font_osb21);
  u8g.drawStr( 40, 43, Temperatura);
  u8g.setFont(u8g_font_8x13r);
  u8g.drawStr( 75, 58, Humedad);
  u8g.setFont(u8g_font_8x13r);
  u8g.drawStr( 110, 58, "%");
}
 
void setup(void) {
  u8g.setContrast(0); // Configura el contraste
  u8g.setRot180();    // Rota la pantalla (si fuera necesario)
  dht.begin();	      // Inicia la Electrónica del sensor
  wdt_disable();      
  wdt_enable(WDTO_8S);// Ajusta el perro guardián a 8 segundos
}
 
void loop(void) {
  u8g.firstPage();  // Muestra la pagina principal
  do {
    Mostrar();
  } 
 while( u8g.nextPage() );
  Medir();       // Obtiene datos del sensor
  delay(3000);
  wdt_reset(); // Borra el contador del WD
}
void Medir(){
 wdt_reset(); // Borra el contador del WD
 float t = dht.readTemperature(); // Lee sensor temperatura
 float h = dht.readHumidity();  // Lee sensor humedad
 
  if (isnan(h) || isnan(t)) { // Verifica si error de lectura
              Serial.println("ERROR!"); 
              }
            else{ // No hay error, procesa los datos
              
   dtostrf(t, 4, 1, Temperatura); // Procesa la temperatura 
   dtostrf(h, 4, 1, Humedad);     // Procesa la humedad
   }
}