Hoy queremos mostraros curioso proyecto, que hemos realizado en uno de los talleres, con el sensor de sonido del Mindstorms NXT (que ya utilizamos en el telégrafo NXT), se trata de un medidor de sonido o sonómetro NXT. El sonómetro es un instrumento que sirve para realizar medidas de presión sonora, comúnmente llamada intensidad acústica. Con un sonómetro podemos medir la intensidad del ruido existente en un lugar concreto y en un momento dado, expresando los valores en dB (decibelos).
Un decibelio se corresponde con la décima parte de un Belio (denominado así en honor de Alexander Graham Bell) y es una unidad relativa, que expresa la relación entre dos magnitudes, la que se estudia y la magnitud de referencia. Aunque el decibelio también se utiliza con frecuencia para definir señales eléctricas, en el caso del sonido los decibelios expresan la diferencia entre el umbral de audición ( 0dB ) y el sonido que medimos.
A continuación podemos ver una escala de referencia de diferentes sonidos y los dB que emiten:
– Un micrófono capaz de recibir la señal acústica.
– Una electrónica interna que procesa dicha señal.
– Un elemento que muestra la intensidad de la señal, como puede ser una aguja, una barra o conjunto de LEDs, una pantalla, etc.
Existen sonómetros más complejos que permiten conectarlos a un osciloscopio, o incluso lo tienen incorporado. Con esto no sólo se no muestra la intensidad del sonido, sino que también podemos ver la evolución en el tiempo de la intensidad del sonido que estamos captando, su valor máximo, valor promedio, etc. Procesados más potentes como los derivados de transformadas de Fourier pueden extraer información adicional como componentes espectrales. Mientras que el objetivo fundamental del sonómetro es la medida de la intensidad del sonido, independientemente de cuál es la frecuencia del mismo, en un afinador estamos más interesados en conocer la frecuencia de la nota cuya intensidad es más elevada, y de esta manera poder corregir la deriva del instrumento hasta que la nota emitida es la adecuada. Con la ayuda de un pequeño software y un micrófono podemos convertir nuestro PC en un afinador musical o en un sonómetro.
Hemos creado varios programas para hacer funcionar nuestro sonómetro, cada uno de ellos intenta explorar distintas opciones que medición y representación.
Versión 1
El primer programa, bastante sencillo, simplemente toma el dato del micrófono, lo multiplica por 1’8, y mueve el motor tantos grados como dé el resultado, primero hacia delante y luego hacia atrás. La multiplicación permite que con un valor de cien en el sensor el motor gire 180 grados, el máximo de nuestra escala. Todo el código anterior está metido dentro de un bucle para que el proceso se repita continuamente.
En la imagen superior podemos ver el programa completo.
Versión 2
En el segundo programa, más complejo, se incluyen varias mejoras. Como añadido al programa anterior, en este nuevo programa se realiza una medición de luz ambiente para conseguir unos valores más ajustados, discriminando sonido ambiente o inicial de los nuevos valores puntuales que puedan tomarse.
Como se puede apreciar, en este programa se utilizan 2 bloques personalizados o “Mi bloque”, uno de inicialización del sistema y otro que gestiona los nuevos valores.
- Bloque InicioEste bloque se encarga de calibrar el sistema, presentado una sencilla secuencia de inicialización y tomando una medida de sonido inicial, con la cual filtrar los valores posteriores (discriminar sonido ambiente de nuevas mediciones).
- Bloque Sound ProcEste bloque personalizado se encarga de gestionar el sonido recibido y su representación en pantalla.
Tomamos una nueva medida de sonido, multiplicada por 1,8 para escalar el movimiento de la aguja física (la viga).
Por otro lado, teniendo en cuenta las limitaciones de espacio de la pantalla, que son 100 px de largo x 64 px de alto, y teniendo en cuenta que la salida del sensor de sonido en dB está dentro del intervalo 0 – 100, podemos ajustar el punto de destino de la línea que representa nuestra aguja virtual directamente desde la salida del sensor. La aguja virtual es una línea recta con un punto de origen predefinido cuyo punto de destino en el eje X depende de la entrada del sensor y su punto de destino en Y (altura de la línea) está fijada por nosotros en el propio bloque. De esta manera nos aseguramos un correcto control de los movimientos para que esta línea no quede encima del contenido de otra sección de la pantalla.
Versión 3
El tercer programa plantea el movimiento de la aguja de una forma diferente. En este caso la aguja se sitúa en el punto que corresponde con el nivel del sonido, sin hacer el constante retroceso para hallar el punto inicial. Aparte, en la pantalla del procesador se presenta una gráfica que expresa la intensidad del sonido registrada cada centésima de segundo. De este modo generamos una especie de “forma de onda” del sonido que recibimos.
Como podemos ver, el programa está compuesto por dos líneas en paralelo. La superior es la que se encarga del movimiento de la aguja, y la inferior de mostrar la forma de onda. Comenzaremos por la superior. Primero reinicia el valor del tacómetro del motor y escribe un valor de 0 en dos variables (“duración” y “posición 2”).
Luego comenzamos el bucle que incluye todo lo demás y que permite que el proceso sea constante. Tomamos el valor del micrófono, y lo multiplicamos por 1’8. A este valor le restamos el valor de “posición 2” y lo almacenamos en la variable “duración”, para usarlo luego para mover el motor. De este modo lo que hacemos es calcular la diferencia entre una posición anterior y la nueva posición que se deriva del valor del sensor.
A continuación el valor de duración se compara con un intervalo de 5 valores. En caso de que la diferencia sea menor de 5, pasamos al valor verdadero de la bifurcación, en donde detenemos el motor. En caso de que sea falso, pasamos al movimiento del motor.
Para mover el motor tomamos el valor de “duración”. Comprobamos si el valor es mayor o menor de 0, y en la siguiente bifurcación movemos el motor en un sentido o en otro, según corresponda con el signo del valor de duración. Dentro de las ramas de la bifurcación, conectamos el valor absoluto de “duración” a la duración en grados del motor.
Por último, tomamos el valor de la posición en grados del sensor de rotación del motor, y lo guardamos en la variable “posicion 2”, para poder restarlo a la vuelta del bucle.
- Bloque Forma de Onda
Para generar la forma de onda, primero escribimos un texto vacío para poner la pantalla en blanco y escribimos 0 en la variable “tiempo”. Comezamos el bucle que dibuja la forma de onda. Primero le ponemos una pequeña espera, para poder visualizar los valores que se van generando. Si la espera es mayor, la gráfica se genera más despacio pero recoge menos valores. Si la espera es menor, se recogen más valores pero casi no da tiempo a verla. Para mostrar la gráfica, tenemos que poner un bloque de visualizar en el que dibujamos líneas. El valor X de inicio y final de línea ( _X), será el de la variable tiempo. El valor de inicio de Y será siempre 0, para que la línea comience en la parte inferior de la pantalla, y el valor de final de línea en Y (_Y) será el valor que recibimos del sensor de sonido. Como el valor del sensor está comprendido entre 0 y 100, tenemos que dividirlo por 1’6, ya que la pantalla sólo tiene 64 píxeles de alto. Tras dibujar la línea, sumamos 1 al valor de tiempo y repetimos el bucle para dibujar una nueva línea. En caso de que el valor de “tiempo” sea 100, salimos del bucle y volvemos a reiniciar la pantalla y a escribir 0 en el valor “tiempo”.
A continuación os dejamos un vídeo del funcionamiento de las tres versiones:
Esperamos que os haya gustado, si tenéis cualquier duda, podéis acudir al foro.