Cálculo de Tonos

Cálculo de Tonos

Aprovechando lo que ya sabemos de las señales analógicas PWM, vamos a usar el zumbador para emitir notas.

Recordemos como funcionan este tipo de señales:

Y también como se calcula la frecuencia.

Si el "ciclo de trabajo"=50%, es decir, el ancho de los pulsos activos (ON) e inactivos (OFF) son iguales, entonces:

Obteniéndo la siguiente fórmula matemática:

De forma que a una frecuencia o periodo dados, podemos obtener la siguiente tabla:

Con Arduino, tenemos dos formas de generar tonos. Con el primer ejemplo construiremos y enviaremos una señal cuadrada de salida al zumbador (o piezo), mientras que con el segundo haremos uso de la señal de modulación por ancho de pulso o PWM de salida en Arduino.

Ejemplo 1

Con el siguiente código y con sólo realizar modificaciones en los intervalos de tiempo que el pin seleccionado tenga valor HIGH o LOW, a través de la función digitalWrite(), generamos la señal PWM a una determinada frecuencia de salida igual a 261 Hercios (Hz).

int digPin = 10; // Pin digital 10
int PW = 1915; // Valor que determina el tiempo que el pulso va a estar en ON/OFF

void setup()
{
 pinMode(digPin, OUTPUT); // Pin digital en modo salida
}

void loop()
{
 delayMicroseconds(PW); // Espera el valor de PW
 digitalWrite(digPin, LOW); // Asigna el valor LOW al pin
 delayMicroseconds(PW); // Espera el valor de PW
 digitalWrite(digPin, HIGH); // Asigna el valor HIGH al pin
}

Ejemplo 2

En Arduino, la señal de salida PWM (pines 9,10) es una señal de frecuencia constante (30.769 Hz) y que sólo nos permite cambiar el "ciclo de trabajo" o el tiempo que el pulso está activo (ON) o inactivo (OFF), utilizando la función analogWrite().

Usaremos la característica “Ancho de Pulso” (PW) con analogWrite para cambiar el volumen.

analogWrite(pin, valor)


Valor representa al parámetro "ciclo de trabajo" (PWM) y puede tomar valores entre 0 y 255.

- 0 corresponde a una señal de salida de valor constante de 0 v (LOW) o 0% de "ciclo de trabajo".

- 255 es una señal de salida de valor constante de 5 v (HIGH) o 100% de "ciclo de trabajo".

Para valores intermedios, el pin rápidamente alterna entre 0 y 5 voltios - el valor más alto, lo usual es que el pin esté en HIGH (5 voltios).

La frecuencia de la señal PWM es constante y aproximadamente de 30.769 Hz.

int digPin = 9;
int volumen = 300; // Máximo volumen es 1000
int PW = 1915;

void setup()
{
 pinMode(digPin, OUTPUT); // Pin digital en modo salida
}

void loop()
{
 analogWrite(digPin,0);
 analogWrite(digPin,volume);
 delayMicroseconds(PW);
 analogWrite(digPin,0);
 delayMicroseconds(PW);
}



Volver al índice

Fun Tech Academy - Calle Alcobendas, 23 Leganés 28914 Madrid - www.funtech.academy