Por ser nuestro primer proyecto con un Arduino, vamos a ser lo mas detallado que podamos, así que empezamos por descargar el IDE de https://www.arduino.cc/en/Main/Software para continuar con los pasos de instalación que no son mas que descomprimir y correr el script ./install.sh . Como último paso debemos agregar nuestro usuario al grupo dialout con “sudo usermod -a -G dialout ” y reiniciar la sesión para que tome los cambios. Este procedimiento agrega la aplicación Arduino IDE en nuestra barra de inicio.

Los principales comandos se ejecutan desde la barra de menú principal, Verificar el código (con el ícono de Tilde) y enviar el programa al Arduino (con el ícono de la flecha). Ambos se pueden observar en la siguiente imagen:

En el menú superior, dentro de Herramientas -> Placa definimos el modelo de Arduino que utilizamos, en nuestro caso el Arduino GenuinoUno

También en el menú superior, dentro de Herramientas -> Puerto se define en donde está conectada la placa, en nuestro caso al /dev/ttyACM0

y por último, otro menú a destacar está en el menú superior, Programa -> Incluir Libreria -> Añadir Libreria .ZIP, desde donde importaremos las librerías que se llaman desde los #include desgargados en formato .zip en su mayoría desde github.

La Placa Arduino Uno

Arduino es una plataforma de electrónica open source facil de usar compuesta por un microcontrolador y una serie de puertos de entrada y salida, y es por ser de código abierto que encontraremos varios formatos, precios y colores basados en este proyecto.

Para dar nuestros primeros pasos el Arduino Uno tiene suficiente cantidad de entradas/salidas y muchas referencias en internet como para descargar código de pruebas.

El sensor

Los DHT11 y DHT22 son sensores digitales de temperatura y humedad que utilizan un termistor para medir la temperatura del aire circundante y un sensor capacitivo para obtener la humedad. Estos datos se transmiten sobre un único pin, el segundo de izquierda a derecha visto de frente. Una desventaja que tiene este componente es la velocidad de lectura, donde se recomienda obtener un dato pasado los 2 segundos sobre la lectura anterior. Para solucionar esta restricción tenemos el siguiente fragmento de nuestro código dentro del loop() del Arduino.

  if(millis()-prevMillis>2000){
    humidity = dht.readHumidity();
    temperature = dht.readTemperature();
    prevMillis = millis();
  }

El sensor DHT11 trabaja con un rango de medición de temperatura de 0 a 50 grados centígrados con una precisión de +/-2.0 y un rango de humedad de 20% a 90%RH con precisión de 4%. El sensor DHT22 tiene un rango de medición de temperatura de -40 a 80 grados centígrados y un rango de humedad de 0 a 100%RH con precisión de 2%RH.

El conexionado

El valor de la resistencia puede estar entre 4k7 y 10k ohms

Comparativa entre sensores DHT11 y DHT22
http://www.kandrsmith.org/RJS/Misc/Hygrometers/calib_dht22_dht11_sht71.html

Este proyecto involucra manejo del protocolos de red y obviamente procesos de lecturas sobre el sensor de humedad y temperatura. Para ello vamos a necesitar incluir algunas librerías.

Ethernet

La librería Ethernet es la usada para manejar el Ethernet Shield que implementa la pila de protocolos TCP/IP y dentro de Arduino se implementan los protocolos en la capa de aplicación.

Para manejar el Ethernet Shield deberemos conocer todos los métodos que nos ofrece la librería Ethernet y así poder usarla.

Referencias de librería Ethernet:
http://arduino.cc/en/Reference/Ethernet
https://aprendiendoarduino.wordpress.com/2016/07/05/libreria-ethernet/

Ethernet.begin(mac, ip, ip_dns, ip_gateway, subnet) // Inicializa la librería Ethernet (Constructor)

DHT
Esta librería nos permite realizar de manera sencilla la lectura de los sensores de temepratura y humedad DHT11 y DHT22 sin tener que preocuparnos por el protocolo de comunicación entre el Arduino y los sensores. Las siguientes lineas definen los pasos mas importantes para obtener una lectura del sensor:

    #define DHTPIN 2				// Nro. de pin donde se encuentra conectado el sensor
    #define DHTTYPE DHT22			// Modelo de sensor, puede ser DHT11, DHT21 o DHT22
    DHT dht(DHTPIN, DHTTYPE);			// Definicion del sensor
 
    dht.begin();				// Inicializacion del sensor
 
    float humidity = dht.readHumidity();	// Lectura de humedad
    float temperature = dht.readTemperature();	// Lectura de Temperatura en grados Celsius, con "true" como parametro del metodo readTemperature se obtiene el valor en grados Fahrenheit

Referencias de la librería DHT
http://www.naylampmechatronics.com/blog/40_Tutorial-sensor-de-temperatura-y-humedad-DHT1.html
https://github.com/adafruit/DHT-sensor-library

El código completo

/*************************************************
  Como sensar temperatura y humedad con un 
  Arduino Uno y el sensor DHT22 para visualizar
  los datos por la web.
  Version: 0.1
  Fecha: 08/02/2018
  Mas informacion: https://pablo.sarubbi.com.ar
**************************************************/
 
#include <Ethernet.h>                                          // Libreria para manejo de pila de TCP/IP
#include <DHT.h>                                               // Libreria que implementa de manera sencilla la lectura del sensor de temperatura/humedad
 
static byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };    //Mac Address for Arduino Ethernet Shield
static byte ip[] = { 192, 168, 1, 100 };
static byte ip_dns[] = { 192, 168, 1, 1 };
static byte ip_gateway[] = { 192, 168, 1, 1};
static byte subnet[] = { 255, 255, 0, 0 };
 
//Constants
#define DHTPIN 2                                              // Nro. de pin donde se encuentra conectado el sensor
#define DHTTYPE DHT22                                         // Modelo de sensor, puede ser DHT11, DHT21 o DHT22
DHT dht(DHTPIN, DHTTYPE);                                     // Inicializacion del sensor 
 
//Variables
float humidity=0;
float temperature=0;
uint32_t prevMillis = millis();
 
EthernetServer server(80);
 
void setup()
{
  dht.begin();
  Ethernet.begin(mac, ip, ip_dns, ip_gateway, subnet);    // Se inicializa Ethernet Shield
  server.begin();                                         // Se inicializa el WebServer
}
 
void loop()
{ 
 
  if(millis()-prevMillis>2000){
    humidity = dht.readHumidity();
    temperature = dht.readTemperature();
    prevMillis = millis();
  }
 
  // Servicio Web para lectura online de Temperatura y Humedad
  EthernetClient client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println("Refresh: 5"); // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("<head>");
          client.println("\t<title>Arduino Uno + DHT22</title>");
          client.println("</head>");
          client.println("<body>");
          client.print("\t<b>Temperatura:</b> "); client.println(temperature);
          client.print("\t<br /><b>Humedad:</b> "); client.println(humidity);
          client.println("</body>");
          client.print("</html>");
          break;
      }
    }
  }
  delay(1);
  client.stop(); 
}

Accediendo desde un browser a http://192.168.1.100 podemos ver las lecturas como se muestra en la siguiente captura