Dos DHT11 en un mismo Arduino

Hola, se pueden colocar 2 o mas DHT11 o mas utilizando la libreria DHT.h ?

Quiero colocar dos sensores, uno en el pin 13 y el otro en el 12, pero solo acierto a colocar uno. No se si es por mi falta de esperiencia o por que la libreria solo esta preparadada para utilizar un solo sensor.

Muchas gracias y un saludo.

Lo he logrado con este codigo:

#include "DHT.h"  //Añadimos la libreria con la cual trabaja nuestro sensor
#include 
#include 
LiquidCrystal_I2C lcd(0x27,16,2); // 0x27 es la direccion del LCD 16x2

//#define DHTPIN 13     // Indicamos el pin donde conectaremos la patilla data de nuestro sensor

#define HT1 12
#define HT2 13

// El sensor que vas a emplear. En este caso usamos el DHT11
#define DHTTYPE DHT11   // DHT 11 

DHT dht1 (HT1, DHTTYPE);  //Indica el pin con el que trabajamos y el tipo de sensor
DHT dht2 (HT2, DHTTYPE);

void setup() 
  {
  dht1.begin();  //Iniciamos el sensor
  dht2.begin();
  lcd.init();
  lcd.backlight(); //enciende la iluminacion
  }

void loop() 
{
  float h1, h2, t1, t2 = 0;
  // La lectura de la temperatura o de la humedad lleva sobre 250 milisegundos  
  // La lectura del sensor tambien puede estar sobre los 2 segundos (es un sensor muy lento)
  h1 = dht1.readHumidity();  //Guarda la lectura de la humedad en la variable float h
  t1 = dht1.readTemperature();  //Guarda la lectura de la temperatura en la variable float t

  h2 = dht2.readHumidity();  //Guarda la lectura de la humedad en la variable float h
  t2 = dht2.readTemperature();  //Guarda la lectura de la temperatura en la variable float t

  //Mostramos mensaje con valores actuales de humedad y temperatura, asi como maximos y minimos de cada uno de ellos
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Humedad 1: ");
  lcd.print(h1);
  lcd.print(" %");
  
  lcd.setCursor(0, 1);
  lcd.print("Temp 1: ");
  lcd.print(t1);
  lcd.print(" *C");
  delay(3000);
  
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Humedad 2: ");
  lcd.print(h2);
  lcd.print(" %");
  
  lcd.setCursor(0, 1);
  lcd.print("Temp 2: ");
  lcd.print(t2);
  lcd.print(" *C");
  delay(3000);
  }

Por otra parte no tengo muy claro que es lo que estoy haciendo en esta parte del codigo:

DHT dht1 (HT1, DHTTYPE); //Indica el pin con el que trabajamos y el tipo de sensor DHT dht2 (HT2, DHTTYPE);

Muchas gracias y un saludo.

Buenas

Como muy bien has descubierto la solución es esa, el DHT11 tiene que ser conectado a un pin digital del arduino, es decir, que no puedes enlazar varios seguidos en serie en una misma entrada como si que puesdes hacer con el DS18B20 (http://forum.arduino.cc/index.php?topic=143382.0).

Si en vez de dos fueran unos cuantos mas te saldría a cuenta conectarlos a un multiplexor y leer de ahí las entradas.

Por otra parte no tengo muy claro que es lo que estoy haciendo en esta parte del codigo: DHT dht1 (HT1, DHTTYPE); //Indica el pin con el que trabajamos y el tipo de sensor DHT dht2 (HT2, DHTTYPE);

[/quote]

Ahí lo que estas haciendo es muy simple, la librería está pensada para trabajar con un sensor por objeto DHT, así tu ahí estás definiéndote dos variables de tipo sensor DHT una de ellas la inicializas para que lea en el puerto HT1 (12) y la otra en el HT2 (13) y son completamente independientes. Así que si quisieras un tercero, simplemente necesitas otro puerto, el 14 por decir algo, y la inicializas con DHT dht3 (14, DHT11); y apañado, o incluso podría ser este tercero un DHT22 e inicializarlo como DHT dht3 (14, DHT22); y no deberías tener problema. A partir de ahí tratas los sensores de forma completamente separada, cada uno con su lectura etc... Quizás, como el DTH11 es tan lento (tengo uno y me consta) igual podrías leer en cada iteración del loop uno de ellos y refrescar la pantalla, y en la siguiente el otro y volver a refrescar. Con eso podrías reducir el tiempo de delay del loop y tendrías refresco de las lecturas cada menos tiempo. Un saludo

Ok muchas gracias ahora ya me entero un poco mas. Con los DS18B20 tenia el mismo problema, ya que no me interesaba ponerlos en paralelo por que no se interactuar con sus datos cuando estan en paraleleo. Me refiero a si tengo 3 DS18B20 el poder acceder a T1, T2, T3 puesto que cuando los conectas al bus su dirección se asigna automaticamente, o eso creo, pero eso seria tema de otro post.

En este caso la velocidad no me importa mucho ya que si me importase la fiabilidad de los datos y la velocidad huviera obtado por cualquiera de los sensores que fabrica la empresa sensirion, que me inspiran mucha mas confianza.

Muchas gracias.

Excelente, a mi me funciono perfectamente, probé con 3 DTH11 y funciona, aunque las medidas de humedad y temperatura son diferentes en cada sensor, pese a que están montados en el mismo protoboard.

les dejo el que me funciono al 100%

/*Sensor de Temperatura y Humedad DHT11
Instrucciones:
Recuerda descargar la libreria DHT para poder utilizar este sensor
Conectaremos el Sensor DHT11 a 5v y el pin de señal a la entrada digital 7
*/


#include "DHT.h"
//#define DHTPIN 7
#define HT1 7     // pin 7 arduino  entrada de sensor 1
#define HT2 8  // pin 8 arduino  entrada de sensor 2
#define DHTTYPE DHT11
DHT dht1 (HT1, DHTTYPE);
DHT dht2 (HT2, DHTTYPE);

///////////////   I2C/////////////////////////////////////
#include    // libreria 
#include       // libreria de lcd i2c
LiquidCrystal_I2C lcd(0x3F,16,2);   //// CONFIGURACION DE LCD 2X16
////////////////////////////////////////////////////

void setup()
         {
         dht1.begin();  //Iniciamos los sensores 1 y 2
         dht2.begin();
 
 
         lcd.init();  // iniciamos lcd

         lcd.begin(16, 2);
 
         lcd.backlight(); //enciende la iluminacion

////////////////////////////////////////////////////////

////////////////////////  LOGO FINAL ///////////////
 
           lcd.setCursor(0,0); // posicion 1, arriba
 
           //lcd.print("Sunix-Energy SAC");

           lcd.print("MAZDA LANTIS 323F");

           

             delay(1000);

/*

         //////////////  MARQUISINA//////////////////////////////////////////////
         // scroll 13 positions (string length) to the left 
         // to move it offscreen left:
         for (int positionCounter = 0; positionCounter < 15; positionCounter++)
               {
               // scroll one position left:
               lcd.scrollDisplayLeft(); 
               // wait a bit:
               delay(200);
               }

            // scroll 29 positions (string length + display length) to the right
             // to move it offscreen right:
 
             for (int positionCounter = 0; positionCounter < 31; positionCounter++)
               {
               // scroll one position right:
               lcd.scrollDisplayRight(); 
               // wait a bit:
               delay(200);
               }


               /////////////////////  FIN MARQUEISNA  //////////////


               */

 
          // delay at the end of the full loop:
         delay(100);


          lcd.clear();   /// LIMPIA LA PANTALLA 

          lcd.setCursor(3,0);
          lcd.print("MAZDA 323F");

          lcd.setCursor(2,1);
          lcd.print("TEMPERATURAS");
          delay(2000);

           lcd.clear();   /// LIMPIA LA PANTALLA 


///////////////////////////////////////////////////////




         
         }

void loop()

      {
      //float h1, h2, t1, t2 = 0;  // se borro para eliminar decinales

       int h1, h2, t1, t2 = 0;   // solo agarra los enteros 

       
       // La lectura de la temperatura o de la humedad lleva sobre 250 milisegundos 
       // La lectura del sensor tambien puede estar sobre los 2 segundos (es un sensor muy lento)
 
 
         h1 = dht1.readHumidity();  //Guarda la lectura de la humedad en la variable float h
         t1 = dht1.readTemperature();  //Guarda la lectura de la temperatura en la variable float t

         h2 = dht2.readHumidity();  //Guarda la lectura de la humedad en la variable float h
         t2 = dht2.readTemperature();  //Guarda la lectura de la temperatura en la variable float t

       //Mostramos mensaje con valores actuales de humedad y temperatura, asi como maximos y minimos de cada uno de ellos
       //lcd.clear();

       ///////// temperatura sensor DHT 1 RADIADOR ////////////////
       
       lcd.setCursor(0, 0);  // arriba 
       lcd.print("RADIADOR = ");
       lcd.setCursor(11,0);  // ARRIBA 
       lcd.print(t1);
       lcd.print("C");

       ///////// temperatura sensor DHT 2 MOTOR////////////////
       
       lcd.setCursor(0, 1);  // ABAJO
       lcd.print("  MOTOR  = ");
       lcd.setCursor(11,1);  // ABAJO 
       lcd.print(t2);
       lcd.print("C");

/////////////////////////////////////////
       delay(5000);
       lcd.clear();   // LIMPIAR PANTALLA 
       

        ///////// humendad sensor DHT 1 radiador  ////////////////
 
       lcd.setCursor(0, 0);  // arriba 
       lcd.print("RADIADOR = ");
       lcd.setCursor(11,0);  // ARRIBA 
       lcd.print(h1);
       lcd.print("%");


 ///////// humendad sensor DHT 2 motor  ////////////////
 
       lcd.setCursor(0, 1);  // ABAJO
       lcd.print("  MOTOR  = ");
       lcd.setCursor(11,1);  // ABAJO 
       lcd.print(h2);
       lcd.print("%");

       ///////////////////////
       
            delay(5000);


           lcd.clear();
           
           lcd.setCursor(5,0);
          lcd.print("MAZDA");

          lcd.setCursor(2,1);
          lcd.print("LANTIS 323 F");
          
          delay(1000);


       lcd.clear();
 }

Hola carblack, has revivido un hilo viejo que no tiene sentido hacerlo, motivo por el cual el hilo va a permanecer cerrado de aquí en mas.

Tu debes leer las Normas del foro por un lado, y aprender a postear los códigos debidamente, los códigos van con etiquetas, no se postea como texto plano sino asi

  lcd.setCursor(0, 0);  // arriba
        lcd.print("RADIADOR = ");
        lcd.setCursor(11,0);  // ARRIBA
        lcd.print(t1);
        lcd.print("C");