¿Conflictos al usar 2 sensores?

Hola llevo unas semanas trabajando con Arduino, ósea que soy principiante.

Lo que quiero conseguir con mi trabajo es registrar las condiciones del ambiente con algunos sensores para arduino. El problema es que cuando intento usar mas de un sensor o modulo al tiempo algo sale mal!

*Arduino Leonardo original
*Sensor DHT22 // Sensor temperatura y humedad
*Modulo bateria DS1307 // Relog en tiempo real
*Sensor BH1750 // Luxometro

Los sensores y módulos por separado funcionan bien, el relog es capaz de dar fechas precisas y persistentes, el sensor de luz mide correctamente las cantidad de luz y el DHT mide correctamente la humedad y la temperatura. El principal problema es cuando uso 2 sensores o modulos en el mismo codigo "uno parece cancelar el otro"

Por ejemplo este código corre correcto el DHT22 :


// Relog de tiempo real
#include "RTClib.h"
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};


// Sensor DHT22
#include "DHT.h"
#define DHTPIN 2     // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

// Constantes
const float tempMin = 19.0;
const float tempMax = 25.0;
const float humMin = 50.0;
const float humMax = 70.0;

const int releCH1 = 4;
const int releCH2 = 5;
const int releCH3 = 6;
const int releCH4 = 7;


void setup() {
  Serial.begin(9600);
  while (!Serial) {
    ;
  }

  Serial.println("---- INIT ----");
  dht.begin();
  // rtc.begin();  Esta es la linea que genera el problema

  
  pinMode(releCH1, OUTPUT); // Calefactor
  pinMode(releCH2, OUTPUT); // Humificador
  pinMode(releCH3, OUTPUT); // Luz
  pinMode(releCH4, OUTPUT); // Ventiladores
  // digitalWrite(releCH3, HIGH);
  // digitalWrite(releCH4, HIGH);

}

void loop() {
  delay(2000);
  float humedad = dht.readHumidity();
  float temperatura = dht.readTemperature();
  
  // Modulo actuador temperatura
  if(temperatura <= tempMin){
    Serial.print("!!ALERTA: Temperatura Baja ");
    Serial.print(temperatura);
    Serial.println(" °C - Calefactor encendido");
    // Enciende calefactor
    digitalWrite(releCH1, HIGH);

  }else if(temperatura >= tempMax){
    Serial.print("!!ALERTA: Temperatura Alta ");
    Serial.print(temperatura);
    Serial.println(" °C - Calefactor apagador");
    // Apaga calefactor
    digitalWrite(releCH1, LOW);

  }
  Serial.print("\n");

  // Modulo actuador humedad
  if(humedad <= humMin){
    Serial.print("!!ALERTA: Humedad Baja ");
    Serial.print(humedad);
    Serial.println(" °C - Humificador encendido");
    // Enciende humificador
   digitalWrite(releCH2, HIGH);

  }else if(humedad >= humMax){
    Serial.print("!!ALERTA: Humedad Alta ");
    Serial.print(humedad);
    Serial.println(" % - Humificador apagado");
    // Apaga humificador
    digitalWrite(releCH2, LOW);

  }


  Serial.print("Temperatura: ");
  Serial.print(temperatura);
  Serial.print(" - Humedad: ");
  Serial.print(humedad);
  Serial.print(" - Tiempo: ");
  Serial.println(millis());
}

Salida puerto Serial:
Captura de pantalla 2023-09-15 003544
Basta con tan solo descomentar la linea "rtc.begin();" para que deje de leer el sensor DHT22

Salida con la linea descomentada
Captura de pantalla 2023-09-15 003544
Lo mismo me sucede cuando intento usar el DHT22 junto con el BH1750
Mi proyecto esta basado en el DHT22

He intentado

  • Alimentar los sensores con fuentes externas a arduino: Sin resultado
  • Verificar conexiones: Sin resultados

Dudas

  • Estoy pasando algo por alto, soy nuevo en programación arduino, vengo de programar en python
    *¿ Tengo un conflicto de compatibilidad en mi código o sensores?


GRACIAS :grinning:


Debes revisar que pines utilizas, no es lo mismo el Leonardo que UNO, por ej.

El pin 2 que usas con el DHT resulta que es el pin SDA que usa la comunicación I2C, por eso cuando inicializas el RTC se "cuelga" el DHT.

En resumen, no uses el pin 2 (ni el 3) cuando usas I2C.

Te dejo el pinout del Leonardo

me sirvio, cambie el dht al pin 8 alli se soluciono muchas gracias...