Analizador acústico con ARDUINO

Construcción de un analizador acústico con Arduino. La información se presenta de forma gráfica, en un display LCD de 16×2 caracteres. Como ecualizador gráfico se puede utilizar el circuito integrado MSGEQ7 o el MSGEQ5, dependiendo del número de bandas de audio que queramos mostrar. Este circuito se puede montar de forma independiente, previamente programando el ATMEGA328P con la placa de desarrollo de Arduino. Una vez programado, mediante la posición de un jumper se puede configurar para que muestre 5 o 7 bandas… montando previamente el circuito integrado ecualizador correspondiente.

Utilidad de un analizador acústico

Este analizador acústico no puede competir con un equipo profesional, pero podría ser muy útil para acondicionar la acústica de un salón de actos o sala de conciertos improvisada. Comprobando la respuesta en frecuencias y volumen de escucha en diferentes puntos, se podrían corregir los defectos reorientando los altavoces/bocinas, ecualizando la respuesta de los amplificadores, etc.   Por otra parte, como este analizador de audio es de bajo costo y no requiere de conocimientos especiales para montarlo, podría ser muy instructivo realizarlo como práctica en escuelas relacionadas con la formación en las ramas de electrónica y tecnología.

Ecualizador gráfico de 5/7 bandas

Este montaje está basado en el circuito integrado MSGEQ5 / MSEGQ7,  ecualizador gráfico de audio  de 5 y 7 bandas respectivamente.  Dentro de un pequeño encapsulado DIL de 8 pines, se encuentra todo lo necesario para obtener a su salida los valores de energía a diferentes frecuencias,  a partir de la señal de audio en su entrada (descomposición espectral).

MSGEQ5 - Analizador de 5 bandas

Como se puede ver en la imagen anterior,  el MSGEQ5  analiza los valores comprendidos entre 100 y 10.000 Hz. Este rango es más que suficiente para conocer la respuesta en frecuencias de cualquier entorno. Pero si queremos analizar con más detalle los extremos de la zona audible, graves más bajos y agudos más altos, sería mejor utilizar el MSGEQ7.

MSGEQ7 - Analizador de 7 bandas

Como se puede comprobar comparando los datos entre ambos componentes,  son compatibles tanto en conexiones como características técnicas. Lo único que cambia es la gestión de los datos,  pero el protocolo es el mismo.  Con el MSGEQ5 tendremos que tomar y asignar los valores leídos de 5 en 5, y con el  MSGEQ7 lo haremos en grupos de 7 (número de bandas). Aprovechando estas características, es muy fácil construir un circuito que permita trabajar con ambos componentes.

Analizador acústico de 5/7 bandas

 

Este montaje lo puedes hacer siguiendo el esquema anterior, o utilizando la placa de desarrollo de Arduino junto con el Shield LCD, desarrollado para Arduino UNO.

Escala gráfica

La escala de las barras gráficas que muestra el display no es logarítmica, como lo harían la mayoría de los analizadores de audio. Con el fin de obtener un efecto visual más pronunciado, la gráfica que muestra el display  traduce los valores de tensión en cada banda de forma lineal.

Escalado lineal de las medidas

Si prefieres cambiar la escala, sólo tienes que modificar los valores de la tabla (resaltadas en color  amarillo), editando el código antes de programar el microprocesador ATMEGA328P con Arduino.

Firmware

El código de programación de este analizador acústico,  se puede descargar desde el siguiente enlace: Analizador acústico

Medir la sensación térmica

Construcción de un medidor de humedad, temperatura real y la sensación térmica. Para este montaje voy a utilizar el sensor de temperatura y humedad DHT11, y como controlador utilizaré Arduino. La sensación térmica describe el grado de incomodidad que el ser humano percibe, como resultado de la combinación de la temperatura, humedad y el viento. La humedad, junto con la velocidad del aire hacen que la sensación de frío sea mayor en invierno, y la sensación de calor más intensa en verano.

Sensor DHT11

La temperatura y la sensación térmica

Es habitual que nos fijemos en la temperatura que muestra un termómetro, y rápidamente asociemos el valor que hemos leído con la sensación de frío o calor que vamos a sentir. Sin embargo, la sensación térmica varía en función de otros factores, como son la humedad relativa del aire y su velocidad.

Regulación térmica

El cuerpo humano intenta mantener su temperatura corporal a un valor constante, alrededor de los 37ºC y la piel es el principal órgano encargado de regular la temperatura:

  • Cuando aumenta la temperatura del cuerpo, se dilatan los vasos sanguíneos y aumenta el flujo de sangre por la piel, y la piel en contacto con el exterior hace de radiador y se reduce la temperatura. Si el calor es excesivo, se abren los poros y se comienza a sudar. El sudor es un método de enfriamiento muy efectivo, porque su evaporación provoca un enfriamiento mucho más rápido.

Sudor y humedad

  • Cuando el cuerpo se enfrí­a, los vasos sanguí­neos se contraen y el flujo sanguíneo se reduce. Los músculos son estimulados para generar más calor, pudiendo llegar a provocar temblores involuntarios. Así  el cuerpo puede aumentar su temperatura rápidamente en caso de necesidad.

En definitiva, la piel humana es el sensor que detecta las diferencias de temperatura entre el cuerpo y el ambiente, para reaccionar en consecuencia. Si tenemos en cuenta que la temperatura de la piel se mantiene alrededor de los 32ºC, la sensación térmica variará de forma más brusca, cuando más nos alejemos de dicho valor y dependerá de la humedad y velocidad del aire exterior.

Sensación térmica: Humedad/Temperatura

La sensación térmica describe el grado de incomodidad que el ser humano percibe, como resultado de la combinación de la temperatura, humedad  y el viento. La humedad, junto con la velocidad del aire hacen que la sensación de frío sea mayor en invierno, y la sensación de calor más intensa en verano.

Gráfica: sensación térmica

 

La humedad en verano y en invierno

  • En verano, con temperaturas altas, un exceso de humedad en el ambiente impide que el sudor se evapore de forma eficiente, provocando una sensación de calor más alta.
  • En invierno, con temperaturas bajas, un exceso de humedad en el ambiente provoca una hidratación mayor de la piel, condensando partículas de agua en la superficie como si fuera sudor, y su evaporación provoca una sensación de frío mayor que la que muestra el termómetro

Si queremos saber el grado de frío o calor, sobre todo en las regiones de climas húmedos, es mucho más útil conocer la sensación térmica que la temperatura. La humedad relativa del aire, representada con las siglas HR o la letra griega Φ (fi), es la concentración de vapor de agua en el aire.

Una vez corregido el valor de temperatura con la sensación térmica debido a la humedad, si además hay viento con una velocidad superior a 12,5 km/h, habría que aplicar al valor obtenido una nueva corrección.

Sensación térmica con viento

La corrección con el viento es mucho menor que la provocada por la humedad. Como se puede ver en la gráfica anterior,  la sensación de calor aumenta a partir de 34ºC  y también disminuye a partir de ese mismo valor.

Medir la sensación térmica

La construcción de un medidor que muestre el valor de la sensación térmica, es sencilla y de bajo costo. Con Arduino el código de programación es muy corto, y además las fórmulas de corrección ya están incluidas dentro de las librerías del sensor DHTxx. Para este montaje utilicé el sensor DHT11, pero si se requiere una mayor precisión, es mejor utilizar el DHT22. El controlador de este medidor está hecho con Arduino, y la presentación de los valores se muestra en un display LCD de 2×16 caracteres. Todo el conjunto se podría fabricar sin tener que soldar ningún componente, utilizando un Arduino UNO junto con su ‘Shield LCD‘. El sensor de temperatura/humedad se puede conectar con terminales de conexión en la tarjeta Arduino, porque el sensor DHT11 se puede comprar montado en una pequeña placa PCB, en la que lleva montada una resistencia Pull-Up y el condensador de desacoplo para la alimentación. La alimentación de todo el conjunto es de 5 VDC, por lo que se podría utilizar cualquier cargador USB que tengamos en casa.

También puedes optar por hacer un montaje independiente, sin la placa de desarrollo de Arduino.  Así  te saldrá todo más barato y su tamaño será menor:

Esquema del medidor de temperatura, humedad y sensación térmica

Firmware (v1)

El código de programación de este medidor, junto con la librería de control necesaria para el sensor DHTxx, se puede descargar desde el siguiente enlace: Temperatura y humedad

Descargar fichero .stl

Thermometer showing the thermal sensation

El medidor de temperatura y humedad lo puedes montar dentro de en una pequeña caja de plástico  (100 x 60 x 25 mm), incluyendo dentro su propia fuente conmutada de 5VDC. Los detalles de este montaje, los puedes ver en el siguiente video:

Sensación y conductividad térmica

¿Por qué tiene tan mala respuesta a la temperatura el sensor DHT11?. El problema es que el sensor de temperatura DHT11 está encerrado dentro de una jaula de plástico, por lo que su conductividad térmica entre el exterior y el sensor es mala, y esto provoca que su tiempo de respuesta sea lento. Para corregir este fallo, he montado un segundo sensor de temperatura en el termómetro. He utilizado el sensor DS18B20 con encapsulado metálico para medir la temperatura, dejando el sensor DHT11 para medir la humedad y calcular la sensación térmica.

Tiempo de respuesta de un sensor

La respuesta en el tiempo de un sensor de temperatura depende de la conductividad térmica del material utilizado entre el elemento a medir (aire, líquido) y el sensor de temperatura. Como norma general, los materiales mas conductivos eléctricamente, también lo son térmicamente.

Conductividad térmica de algunos materiales

Utilizar un sensor de temperatura con encapsulado metálico, es una buena elección cuando se necesita obtener una respuesta rápida en la medida.

Tabla: Conductividad eléctrica y térmica

Aunque esto no siempre es imprescindible y hay veces que es mejor utilizar un sensor de respuesta más lenta, con el fin de mostrar la temperatura ambiente y evitar que se muestren cambios bruscos debido a una corriente de aire frío o caliente  ocasional.

Conductividad térmica

El sensor de temperatura y humedad DHT11 es de respuesta lenta y muy válido para mostrar la temperatura en zonas abiertas, pero no es el más adecuado para medir valores en recintos pequeños (sauna, cámara frigorífica, caldera).

¿Es útil el montaje anterior?

Dependiendo del uso que le quieres dar al medidor de temperatura ambiente, tendrás que elegir el sensor de temperatura que mejor se adapte al entorno. Si quieres mostrar la temperatura en un espacio abierto, el montaje anterior te podría servir. Pero si lo quieres para hacer medidas rápidas, o para mostrar los valores dentro de en un recinto pequeño, es aconsejable añadir al esquema anterior un segundo sensor de temperatura con encapsulado metálico.

Temperatura, humedad y sensación térmica con dos sensores.

Firmware (v2)

El código de programación del medidor con doble sensor, se puede descargar desde el siguiente enlace: Temperatura y humedad (v2)

 

 

ARDUINO: Nivel de dos ejes

ARDUINO: Nivel de dos ejes – Construcción de un nivel electrónico de dos ejes, con ARDUINO y MPU-6050. Leyendo los valores que entregan los giróscopos de ambos ejes del MPU-6050, cuya resolución es de 14 bit para los 180º de cada eje. Posteriormente se calibran los valores con un inclinómetro de burbuja, obteniendo una precisión media mejor de 5º. Al mostrar la inclinación de ambos ejes de forma simultánea, este medidor puede ser muy útil para orientar paneles solares, antenas parabólicas, cubiertas de tejados, etc.

Inclinómetro
Inclinómetro

Giróscopo y acelerómetro: MPU-6050

Chip: MPU-60X0
Chip: MPU-60X0
MPU-6050
Módulo: MPU-6050

La construcción de este medidor de ángulos de 2 ejes, puede realizarse sin la necesidad de utilizar el módulo ARDUINO Uno. Aparte del módulo MPU-6050, sólo sería necesario extraer el micro-controlador ATMEGA328P (una vez programado) y montarlo en un circuito impreso aparte. Para realizar este montaje, además del micro-controlador se necesitan algunos componentes más para que el dispositivo funcione. A continuación se muestra un esquema de montaje, en el que se incluye también un circuito de alimentación, compuesto por una batería de Li-ion, junto con su módulo de carga TP4056 y un módulo Step-Up de 5v.

El código de programación para este montaje puede descargarse desde el siguiente enlace (es el denominado): Angulos.ino 

Esquema: Nivel de 2 ejes

Si se quisiera utilizar un medidor con más prestaciones, se podría añadir a este circuito el módulo BMP280, el cual incluye un sensor barométrico y un sensor de temperatura. De esta manera, el medidor podría disponer de dos funciones:

  1. Medidor de nivel de 2 ejes
  2. Altímetro barométrico + temperatura

El código de programación para este montaje puede descargarse desde el siguiente enlace (es el denominado): Alti_Nivel.ino 

Esquema: Altímetro y Nivel

Puede ver más detalles de este montaje en el siguiente video:

ARDUINO: ENTRADAS-SALIDAS

Probaremos las entradas/salidas digitales, las salidas PWM y las entradas analógicas. Como práctica, regularemos el encendido de un diodo LED (salida PWM), dependiendo de la tensión de entrada que obtengamos en una entrada analógica. También construiremos un generador de 4 melodías, utilizando una salida digital de Arduino.

Los archivos de ejemplo que aparecen en el video, puedes descargarlos desde el siguiente enlace: ARDU_IN.rar

Arduino UNO dispone de 20 puntos de conexión: 14 Entradas/Salidas digitales, 6 de ellas podrían utilizarse como salidas PWM, y 6 entradas analógicas.

Las salidas PWM son de 8 bits, y están localizadas en los pines: 3, 5, 6, 9, 10 y 11.

Las funciones PWM hacen uso de los Timer para generar la señal de salida. Cada Timer puede controlar entre 2 y 3 de las salidas PWM. Para ello dispone de un registro de comparación por cada salida. Cuando se alcanza el tiempo correspondiente al valor del registro de comparación, la salida invierte su valor.

Cada salida conectada a un mismo temporizador comparte la misma frecuencia, aunque pueden tener distintos anchos de impulso (Duty cycle), dependiendo del valor de cada registro de comparación.

La frecuencia estándar para las salidas PWM en Arduino Uno, Mini y Nano es de 490 Hz para todos los pines, excepto para el 5 y 6 cuya frecuencia es de 980 Hz.

Al existir una asociación directa entre las salidas PWM y los Timer, es importante saber que no es posible utilizar un Timer en el programa si ya se está utilizando para controlar una salida PWM. Esta es la relación que existe entre los Timer y los controles PWM de Arduino Uno, Mini y Nano:

El Timer0 controla las salidas PWM 5 y 6
El Timer1 controla las salidas PWM 9 y 10
El Timer2 controla las salidas PWM 3 y 11

Por otra parte, la librería servo utiliza el Timer 1, de manera que tampoco podremos utilizar los pines 9 y 10 si estamos utilizando un servo.

Arduino: Entradas-Salidas

Cuando se utiliza una entrada analógica, es importante conocer el nivel de tensión máximo que vamos a muestrear. Nunca se deberían superar los  5V en las entradas, pero si podríamos utilizar umbrales máximos de menor tensión y mejorar la resolución de las medidas. Arduino dispone de la entrada AREF (pin 21 del ATmega328P) destinada para definir el nivel de tensión máximo de su conversor Analógico-Digital (ADC).

Reparación ARDUINO UNO

Sustitución del interface USB (ATMEGA 16U2) y del regulador de 5V (AMS1117), en el Arduino UNO. Localización de los componentes de Arduino UNO v3, siguiendo su esquema eléctrico. Descarga del software FLIP de ATMEL, y proceso de instalación en el PC. Recarga del fichero ‘flash’ correspondiente al Arduino UNO, en el nuevo chip (ATMEGA 16U2) que se ha sustituído. Comprobación de funcionamiento del módulo Arduino UNO, después de la reparación.

Esquema: Arduino UNO (v3)
Esquema: Arduino UNO (v3)

Para sustituir el chip ATMEGA 16U2 es necesario disponer de un soldador de aire caliente. Sin embargo, el regulador de 5V (AMS1117), a pesar de que es un componente SMD, podría sustituirse con un soldador para electrónica de tipo convencional.  Como podemos ver en el esquema anterior, el chip ATMEGA 16U2 es un micro controlador programable, y es necesario cargar un fichero  en su memoria ‘flash’ cuando se sustituye. Para programar la memoria ‘flash’ utilizaremos el software del fabricante ATMEL, el cual podemos descargar desde la página Web de MICROCHIP:

https://www.microchip.com/Developmenttools/ProductDetails/FLIP

Una vez que hayamos conectado el módulo Arduino con el PC, mediante su conexión USB. Podremos comprobar con el administrador de dispositivos de Windows si nuestro PC necesita el driver o ya lo tiene instalado. En caso de que tengamos que instalar el driver, lo haremos apuntando a la carpeta en la cuál hayamos instalado el software FLIP…

C:\Program Files (x86)\Atmel\Flip 3.4.7

Una vez que haya detectado el dispositivo nuestro PC, podremos cargar el archivo ‘flash’ que se corresponda con nuestro dispositivo Arduino (UNO, Mega, etc). El archivo que tenemos que cargar está en formato hexadecimal, y lo podemos encontrar en nuestro PC, dentro de la carpeta de Arduino

C:\Program Files (x86)\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2\arduino-usbserial

Software: FLIP
Software: FLIP

Dentro de esta carpeta encontraremos varios ficheros, elegiremos el que se corresponda con nuestro dispositivo Arduino. Por ejemplo para el Arduino UNO, podemos cargar el fichero:

Arduino-usbserial-atmega16u2-Uno-Rev3.hex 

Puedes ver la reparación y todo el proceso de programación en el siguiente video: