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); 
}

2 comentarios:

  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
  2. Buen post, me ayudó bastante mucmuchísi gracias, de igual manera buscaba algún sonido que no fuera tan molesto al momento de ser edcuescuc por el oido, más sin embargo que podrían ayudar haora mi problema es que ese sonido lo quiero ampliar para ser escuchado a distancia, ya que la bosina que conecte para transmitir el sonido el Arduino no tiene el viltavo suficiente para hacerlo

    ResponderEliminar