Añadir tono a mi Alarma

Buenas,

El caso es que estoy haciendo una estación meteorológica en que uso un sensor de temperatura y humedad, otro de presión, uno de luz, y un RTC los cuales estan comunicados con la estación interior

(es decir, hay dos estaciones, la exterior con los sensores i la interior) que tiene otro arduino y una lcd con un menu controlado por un encoder..

Tengo una función en que puedo establecer la hora que quiera para que suene la alarma, y aqui esta el problema.

Tengo puesto un buzzer y un pulsador, al pulsar el pulsador separa la alarma, pero el caso es que el tono del buzzer es muy molesto y vi que se podían hacer tonos pero que si uso Delays influiría con mis sensores y menú(sobre todo el RTC) y por eso acudo a vosotros.

Lo que me gustaría es poner un tono de star wars que encontré en un sitio pero lo veo chungo

queréis que ponga mi código (es larguisimo)?

Ehhhh... olvidaste que ya habías abierto un hilo sobre el tema?
http://forum.arduino.cc/index.php?topic=399534.0

Ahí tu habías dicho algo como:

no quiero que la alarma suene ese audio tan feo del buzzer

Y yo te pregunté:

Entonces... quieres que suene como si en verdad fuera la canción?

Ostias me he olvidad :frowning:

Sí quisiera que suene esa canción o si un tono que de alarma típico pero que no sueñe el sonido del buzzer tan molesto

¿Me ayudarías?

De acuerdo. Se me ocurre lo siguiente:

Esta librería: GitHub - TMRh20/TMRpcm: Arduino library for asynchronous playback of PCM/WAV files direct from SD card. Arduino Uno,Nano,Mega etc supported (se descarga con "Download ZIP")
Un altavoz (no un buzzer).
Una tarjeta SD.
Y unos componentes electrónicos pasivos que luego te cuento.

El resto supongo que ya lo tienes... cierto?

Lucario448:
De acuerdo. Se me ocurre lo siguiente:

Esta librería: GitHub - TMRh20/TMRpcm: Arduino library for asynchronous playback of PCM/WAV files direct from SD card. Arduino Uno,Nano,Mega etc supported (se descarga con "Download ZIP")
Un altavoz (no un buzzer).
Una tarjeta SD.
Y unos componentes electrónicos pasivos que luego te cuento.

El resto supongo que ya lo tienes... cierto?

Tarjeta SD sí, altavoz no...

Mira, para no complicarlo mucho la idea es simplemente hacer un tono típico de una alarma convencional no el sonido molesto del buzzer xD

Pero para eso no necesitas SD. Solo necesitas el altavoz y armar o comprar un módulo que lo maneje.
Un filtro hecho con resistencias y capacitores, un LM386 y el altavoz
Claro que armar eso si no tienes experiencia no es tarea fácil.
Aca lo tienes
Modulo con amplificador para arduino

Tengo un programa que he tomado de por ahi en la web, que reproduce sonidos de hasta los SIMPSON. Imagina

surbyte:
Pero para eso no necesitas SD. Solo necesitas el altavoz y armar o comprar un módulo que lo maneje.
Un filtro hecho con resistencias y capacitores, un LM386 y el altavoz
Claro que armar eso si no tienes experiencia no es tarea fácil.
Aca lo tienes
Modulo con amplificador para arduino

Tengo un programa que he tomado de por ahi en la web, que reproduce sonidos de hasta los SIMPSON. Imagina

No, no.

Mi idea no era esta, simplemente quería poner un tono que no sea el que vino con el buzzer i nada más.

quiero utilizar el buzzer y nada más

lee el primer post

bobjut:
No, no.

Mi idea no era esta, simplemente quería poner un tono que no sea el que vino con el buzzer i nada más.

quiero utilizar el buzzer y nada más

lee el primer post

Pero entonces a qué te referías cuando dijiste que no querías oír el feo sonido del buzzer? Que no suene siempre a la misma frecuencia (tono)?

Lucario448:
Pero entonces a qué te referías cuando dijiste que no querías oír el feo sonido del buzzer? Que no suene siempre a la misma frecuencia (tono)?

exacto

Hay que ser mas claro entonces.. mira la manera de divagar en la que nos hemos metido Lucario y yo.. jajaja
juega con tone(pin, frecuencia, duración);
supongamos pin 10

tone(10, 500, 100);  // tono de 500 hz por 100 mseg
tone(10,200, 200);   // tono de 200 Hz por 200 mseg

repitelo cambialo, ponlo en un for() y ahi tienes los cambios.
agrega otro tono, todas las opciones.

surbyte:
Hay que ser mas claro entonces.. mira la manera de divagar en la que nos hemos metido Lucario y yo.. jajaja
juega con tone(pin, frecuencia, duración);
supongamos pin 10

tone(10, 500, 100);  // tono de 500 hz por 100 mseg

tone(10,200, 200);  // tono de 200 Hz por 200 mseg



repitelo cambialo, ponlo en un for() y ahi tienes los cambios.
agrega otro tono, todas las opciones.

Y no influirá con el RTC, el menú del reloj y todo eso?

Leí que sí, que se liaba con los sensores i se atrasaba la hora o no sé

si queréis os paso el programa

no influye. Usa el timer0

bobjut:
si queréis os paso el programa

Házlo por favor. Así sabremos que está bien y qué está mal... :smiley:

Recuerda: pégalo pero entre "etiquetas code" (el botón </>)

Lucario448:
Házlo por favor. Así sabremos que está bien y qué está mal... :smiley:

Recuerda: pégalo pero entre "etiquetas code" (el botón </>)

¿Seguro?

Són 1300 líneas :smiley:

Y si te la rebuscas con los tonos y las duraciones, hasta puedes interpretar la presentación Star Trek o de Star War. Eso va en gustos, yo le hice la de Star Trek a mi Nokia 1100.

:smiley: :smiley: :smiley:

bobjut:
¿Seguro?

Són 1300 líneas :smiley:

Bueno entonces... cual es tu duda?
Me imagino que cuando la alarma se activa, se ejecuta una función.
Por qué no simplemente ejecutar la función que hace sonar la melodía cuando la alarma está activa?

Bueno, una cosa tengo en claro, este hilo ya dejó de pertenecer a proyectos, por eso lo voy a mover a Software.
Abrazos!

:wink:

Lucario448:
Bueno entonces... cual es tu duda?
Me imagino que cuando la alarma se activa, se ejecuta una función.
Por qué no simplemente ejecutar la función que hace sonar la melodía cuando la alarma está activa?

Mira esta es la función de la alarma

Void fun_alarma(){

 DateTime now = RTC.now();

 //Si coinciden horas minutos y segundos, a su vez que alarma_on esta TRUE, activamos la alarma

 if (hora_alarma == now.hour() && min_alarma == now.minute() && seg_alarma == now.second() && alarma_on == 1){
   ok_alarma = true;   //Alarma encendida
   temp_out = millis();
   lcd.backlight();                    //Encendemos la luz
   back = true;
   digitalWrite(pin_alarma, HIGH);     //Activamos pin de alarma
   off_alarma = millis();          

 }

 if (off_alarma+120000 < millis() && ok_alarma == true){
   ok_alarma = false;       //Si lleva sonando la alarma mas de 2 minutos paramos automaticamente
   digitalWrite(pin_alarma, LOW);
 }

 pulsador_bounce.update();             //Comprobamos si hemos pulsado el boton
 if (pulsador_bounce.risingEdge()){    //Si hemos pulsado paramos la alarma
   temp_out = millis();
   lcd.backlight();
   back = true;
   ok_alarma = false;
   digitalWrite(pin_alarma, LOW);  






Entonces como decís vosotros, sería tal que así por ejemplo?


Void fun_alarma(){

 DateTime now = RTC.now();

 //Si coinciden horas minutos y segundos, a su vez que alarma_on esta TRUE, activamos la alarma

 if (hora_alarma == now.hour() && min_alarma == now.minute() && seg_alarma == now.second() && alarma_on == 1){
   ok_alarma = true;   //Alarma encendida
   temp_out = millis();
   lcd.backlight();                    //Encendemos la luz
   back = true;
   tone (speaker, 1000, 500);  //Activamos pin de alarma
   delay(1000);
   off_alarma = millis();          

 }

 if (off_alarma+120000 < millis() && ok_alarma == true){
   ok_alarma = false;       //Si lleva sonando la alarma mas de 2 minutos paramos automaticamente
   digitalWrite(pin_alarma, LOW);
 }

 pulsador_bounce.update();             //Comprobamos si hemos pulsado el boton
 if (pulsador_bounce.risingEdge()){    //Si hemos pulsado paramos la alarma
   temp_out = millis();
   lcd.backlight();
   back = true;
   ok_alarma = false;
   digitalWrite(pin_alarma, LOW);

Entonces el pitido repetiría como un bucle, o le tengo que hacer un while o un for?

En vez de digitalWrite(pin_alarma, HIGH), llama (ejecuta) la función que hace sonar la melodía.
Qué problema hay con eso?

Lucario448:
En vez de digitalWrite(pin_alarma, HIGH), llama (ejecuta) la función que hace sonar la melodía.
Qué problema hay con eso?

poner fun_alarm()

quieres decir eso?

Y para apagarla?