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 está 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 y 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 de conexiones:
El sketch es este:
El problema es con el buzzer:
A los 30 minutos suena como está 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 y 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 de conexiones:
El sketch es este:
Código:
#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);
}
Última edición: