Arduino: Buzzer con zumbido extraño

Me ha pasado un par de veces que he dejado enchufado el cautín (una vez toda la noche), así que estoy proyectando un enchufe-temporizador de manera que a los 30 minutos corta la corriente (un pulsador permite reiniciar el temporizador otros 30 minutos.
El problema es con el buzzer:

A los 30 minutos suena como lo he programado, pero desde el principio hace un zumbido contínuo muy tenue y no sé como hacer para que esté en silencio (inicialmente lo alimentaba con 5v, ahora lo conecto a los 3.3v pero igualmente hace ese zumbido molesto)

Los componentes del temporizador son:
Arduino Nano, Relé optoacoplado, pulsador, display de 8 segmentos, un led bicolor y el buzzer.
Un esquema simple de conexiones:

El sketch es el siguiente:

#include "TM1637.h"

#define DIO 2
#define CLK 3
#define LedRojo 6
#define Buzzer 9
#define Pulsador 10
#define Relay 11

int segundos = 0;  
int minutos = 0;
int contador = 1800; // 30 minutos (30x60)
int T_Transcurrido=0;  //temporizacion
int T_comienzo=0;

TM1637 Display(CLK,DIO);
int8_t Digits[] = {1,8,0,0}; //Contador descendente desde 30'

void setup() 
{
  //Serial.begin(9600);//Solo para ver monitor serie
  pinMode(Buzzer,OUTPUT);
  pinMode(Relay,OUTPUT);
  pinMode(Pulsador,INPUT);
  pinMode(LedRojo, OUTPUT);
  digitalWrite(Pulsador, 0 );
  digitalWrite(Buzzer, 0 );
  digitalWrite(Relay, 0 );
  digitalWrite(LedRojo, 0 );
  Display.set();  Display.init();   
}

void loop() 
{
  if (minutos <= 31) //Mantiene el Relé encendido 1' más
    {digitalWrite(Relay, 1 );}   //Relé encendido
  else
    {digitalWrite(Relay, 0 );  //Relé apagado
      digitalWrite(LedRojo, 1 );
      CalculaDigitos(0);
      if (digitalRead(Pulsador) == 1)
        { analogWrite(Buzzer, 0 );
          digitalWrite(LedRojo, 0 );
          segundos = 0; minutos = 0;  contador = 1801;
          T_Transcurrido = 0; T_comienzo = 0;}
      return;}
  
  if (segundos<60)
    {segundos++; delay(1000);}    //Contador de segundos
  else
    {segundos=0;minutos++;}
  //En caso de querer controlar por el monitor serie:
  //Serial.print(segundos);Serial.print("-");Serial.println(minutos);

  if (digitalRead(Pulsador) == 0 && minutos >= 30)
    { Alarma();
      digitalWrite(LedRojo, 1 );
      CalculaDigitos(0);return;
     }
  
  if (digitalRead(Pulsador) == 1)
    { analogWrite(Buzzer, 0 );
      digitalWrite(LedRojo, 0 );
      segundos = 0; minutos = 0;  contador = 1801;
      T_Transcurrido = 0; T_comienzo = 0;}
  
  for (contador>=0 ; contador--;)
    {CalculaDigitos(contador);return;}
}

void Alarma()
{ 
  for ( int contador = 0; contador<10 ; contador++)
  {
    analogWrite(Buzzer, 1); delay(50);
    analogWrite(Buzzer, 0); delay(10);
  }
}

void CalculaDigitos( int Num)
{
   int8_t Digit0 = Num %10 ;
   int8_t Digit1 = (Num % 100) / 10 ;
   int8_t Digit2 = (Num % 1000) / 100 ;
   int8_t Digit3 = Num  / 1000  ;
   Digits[3] = Digit0 ;
   Digits[2] = Digit1 ;
   Digits[1] = Digit2 ;
   Digits[0] = Digit3 ;
   Display.display(Digits);
}

porque no usas Tone en lugar de analogWrite?

tone y noTone para apagarlo.

la forma de usarlo es tone(pin, frequency) tone(pin, frequency, duration)

o sea

tone(Buzzer, 1000);  // tono de 1000 hz por pin Buzzer
tone(Buzzer,1000, 500); // tono de 1000 Hz durante 500 mseg
noTone(Buzzer);             // apaga Buzzer.

Ejemplo

Si te hiciera falta (no deberia), podrías agregarle una resistencia a masa muy grande, de unos 100K para asegurar el 0 al comienzo, la cual iria en el pin de input del buzzer.

Hola!

¿Estás seguro que ese buzzer no tiene oscilador incorporado?

Los que he visto con esa forma simplemente los alimentas, y suenan con una frecuencia fija.

Saludos

ArielP tiene razón, en lugar de usar analogWrite usa digitalWrite para accionarlo o apagarlo.

Pues con digitalWrite el sonido que produce este módulo es de Pena, parece el berrido de una cabra afónica, jaja. Funciona con analogWrite Lo de la resistencia de 1000k funcióna.