Problemas con un Módulo Buzzer, nunca está en estado LOW siempre en HIGH

Hola Amigos, estoy trabajando en un pequeño proyecto que tiene que ver con domótica, la idea principal es que el sensor MQ-2 me indique el valor de gas detectado, y al superarse cierto umbral que yo he definido en 1200 se encienda un led y un buzzer. mi problema es que el buzzer al conectarlo a la placa ESP32 WROOM 32 siempre está sonando y nunca esta apagado. un amigo me dijo que es porque estos módulos tienen la polaridad al revés, en base a esto, yo en el código he probado cambiando los estados de HIGH a LOW y viceversa, pero aun así no logro resolverlo.
agradecería su revisión y si alguien tuvo el mismo problema, pues que me pueda ayudar. voy a dejar el código abajo para su revisión.

/* 
  Sketch generated by the Arduino IoT Cloud Thing "Untitled"
  https://create.arduino.cc/cloud/things/b36791e7-9dc5-4dc2-8f53-09a42e90a4fe 

  Arduino IoT Cloud Variables description

  The following variables are automatically generated and updated when changes are made to the Thing

  float hUMEDAD;
  float tEMPERATURA;
  int gAS;

  Variables which are marked as READ/WRITE in the Cloud Thing will also have functions
  which are called when their values are changed from the Dashboard.
  These functions are generated with the Thing and added at the end of this sketch.
*/
#include <Adafruit_SSD1306.h>
#include <splash.h>
#include "thingProperties.h"
#include <DHT.h>
#include <U8g2lib.h> // Incluir la biblioteca U8g2

#define DHTPIN 26     // Pin al que está conectado el sensor DHT
#define DHTTYPE DHT11   // Tipo de sensor DHT que estás utilizando (DHT11 en este caso)
#define MQ_PIN 32     // Pin analógico al que está conectado el sensor MQ-2
#define LED_PIN 13    // Pin al que está conectado el LED
#define BUZZER_PIN 23 // Pin al que está conectado el zumbador

DHT dht(DHTPIN, DHTTYPE);
U8G2_SSD1306_128X64_NONAME_F_SW_I2C display(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // Inicializar la pantalla OLED

float lastHumidity = 0;
float lastTemperature = 0;
int lastGasValue = 0;

void setup() {
  Serial.begin(9600);
  delay(1500); 
  initProperties();
  pinMode(LED_PIN, OUTPUT); // Establece el pin del LED como salida
  pinMode(BUZZER_PIN, OUTPUT); // Establece el pin del zumbador como salida
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();

  dht.begin();

  // Inicializar la pantalla OLED
  display.begin();
  display.clearDisplay();
  display.setFont(u8g2_font_ncenB08_tr); // Establecer la fuente para el texto
}

void loop() {
  ArduinoCloud.update();

  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("Error al leer el sensor DHT!");
    return;
  }

  hUMEDAD = humidity; // Actualiza la variable de humedad en Arduino IoT Cloud
  tEMPERATURA = temperature; // Actualiza la variable de temperatura en Arduino IoT Cloud
  
  // Lectura del sensor MQ-2
  int gasValue = analogRead(MQ_PIN);
  gAS = gasValue; // Actualiza la variable de gas en Arduino IoT Cloud

  // Enciende el LED y el buzzer si el nivel de gas es mayor que 1200
  if (gasValue > 1200) {
    digitalWrite(LED_PIN, HIGH); // Enciende el LED
    digitalWrite(BUZZER_PIN, HIGH); // Enciende el zumbador
  } else {
    digitalWrite(LED_PIN, LOW); // Apaga el LED
    digitalWrite(BUZZER_PIN, LOW); // Apaga el zumbador
  }

  // Mostrar los valores de temperatura, humedad y gas solo si han cambiado
  if (humidity != lastHumidity || temperature != lastTemperature || gasValue != lastGasValue) {
    display.clearDisplay();
    display.setFont(u8g2_font_ncenB08_tr); // Establecer la fuente para el texto
    
    // Posicionamiento del texto
    display.setCursor(0, 10);
    display.print("Temperatura: ");
    display.print(temperature);
    display.println(" C");
    
    display.setCursor(0, 25);
    display.print("Humedad: ");
    display.print(humidity);
    display.println(" %");
  
    display.setCursor(0, 40);
    display.print("Gas: ");
    display.println(gasValue);

    display.sendBuffer(); // Mostrar los cambios en la pantalla

    // Actualizar los valores
    lastHumidity = humidity;
    lastTemperature = temperature;
    lastGasValue = gasValue;
  }

  delay(2000); // Puedes ajustar el intervalo de lectura según sea necesario
}

Puedes agregar una foto de un diagrama de conexiones dibujado a mano. Eso nos ayudará a identificar la fuente del problema.

Y verifica que el cableado esté en buenas condiciones

Hola mancera1979, tengo este diagrama de conexión, solo que no es el mismo buzzer, ya que yo estoy usando un modulo con los tres pines como en la foto anterior.

en cuanto al cableado, lo he cambiado muchas veces, he probado con dos módulos buzzer que tengo y siempre es lo mismo, una vez conectado a la esp32 no deja de sonar :frowning:

¿El LED funciona según lo esperado?

El buzzer que estás usando es activo, el de la foto es "pasivo" (solo dar alimentación suena).

¿Cómo lo has conectado?

Hola, si el led si funciona como debe ser.
en cuanto a la conexión del modulo Buzzer, tengo el pin VCC en los 5V de la ESP32, el GND al GND de la ESP32 y el pin I/O al pin D5 de la ESP32.
en cuanto a activo y pasivo, no sabía que existían dos tipos, para mi caso consideras que deba cambiarlo por uno activo ?

Primero corrijo un error de expresión de mi parte que lleva a confusión.

El tuyo y el del esquema son ambos buzzers activos porque incluyen electrónica que genera el clásico beep.
El tuyo tiene un pin de disparo o habilitación, el otro apenas lo alimentas, suena.

Los pasivos no tienen electrónica y no suenan al recibir alimentación, son parecidos a un parlante, necesitan una señal por ejemplo la que genera la función tone().

Volviendo al problema, el buzzer se activa con LOW, deberías corregir el código.
Prueba alimentarlo con 3.3V en lugar de 5V

1 Like

Efectivamente, mi error era la alimentación pues yo pensaba que funcionaba con 5v (según lo había leído en la hoja de datos en alguna página web). lo conecte en 3.3v y cambie los estados en el código siendo LOW para encender y HIGH para que se apague. funciona correctamente! ¡muchísimas Gracias por el apoyo! :+1: :clap: :raised_hands:

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.