jueves, 16 de abril de 2015

Sonido de Alarma Buzzer TMB12A05




En este tutorial vamos a ver como funciona el Buzzer TMB12A05.
Para obtener el sonido que necesitamos utilizaremos la función seno (senoidal).
Como puede ver en la imagen (Figura 1: seno) la función desde 0 (cero) a π (pi) tiene valores positivos
Figura 1: Seno

En la Figura 2, es una mera explicación de como funciona y los resultados que larga.
1) Para mostrar dichos carteles es importante declarar "Serial.begun(9600)" en la función void setup(){}
2) Serial.print(" cartel que quiero mostrar") 
3) Serial.println(" cartel o no CON SALTO DE LINEA")
4) El valor que toma la variable "sinVal" es el resultado de convertir los grados en radianes, a través de una regla de tres simple. 
Por ejemplo: Si queremos pasar 45° a π radianes, sería de la siguiente manera
180° ___ π radianes
45°  ___ x π =  (45° * π / 180 ) 

Como vemos en COM5, los valores parte desde 0 hasta 1 y después vuelve de 1 a 0, termina el loop y se repite.
Los valores de "conVal" no nos interesa porque tiene valores negativos y más distanciados
Los valores de "toneVal" es la 2000 + (int (sinVal * 1000)). Le anteponemos el "int" para poder castearlo, es decir convertirlo a entero. 
Por ejemplo. Si trae un 123,455578 pasaría a ser un 123
Figura 2

Nota: Usar los Serial.print hace que el sonido se alargue
Prueben comentando los Serial.print y sin comentarlos para que vean la diferencia.

Código con comentarios
#define ALARM 3
 
float sinVal, conVal;
int toneVal;

void setup() {
  Serial.begin(9600);
  pinMode(ALARM, OUTPUT);
}
 
void loop() {
  Serial.println("entro");
  for (int x=0; x<180; x++) {
    // convertimos grados en radianes
    sinVal = (sin(x*(3.1412/180)));
    conVal = sin(x);
    Serial.print("sinval:  "); Serial.print(sinVal); Serial.print("  ");
    Serial.print("conval:  "); Serial.print(conVal); Serial.print("  ");
    // generamos la frecuencia del sinVal
    toneVal = 2000+(int(sinVal*1000));
    Serial.print("toneVal: "); Serial.print(toneVal); Serial.println(" ");
    tone(ALARM, toneVal);
  }
  Serial.println("salio");       
delay(100); 
}

Código sin Comentarios
#define ALARM 3
 
float sinVal, conVal;
int toneVal;

void setup() {
  Serial.begin(9600);
  pinMode(ALARM, OUTPUT);
}
 
void loop() {
  for (int x=0; x<180; x++) {
    // convertimos grados en radianes
    sinVal = (sin(x*(3.1412/180)));
    // generamos la frecuencia del sinVal
    toneVal = 2000+(int(sinVal*1000));
    tone(ALARM, toneVal);
  }
delay(100); 
}

1 comentario:

  1. Muchas gracias por el post, estaba buscando un sonido "insufrible" para hacer una alarma en un proyecto de la universidad y esto me ha ayudado mucho.
    Un Saludo y gracias de nuevo!

    ResponderEliminar