🛠 Mesurer le niveau sonore avec le micro MEMS
Objetivos
Utilizar el micrófono MEMS Knowles de la V2 (pines internos MIC_IN P0.05 y RUN_MIC P0.20, con LED de actividad) para leer el nivel de sonido y desencadenar reacciones al superar un umbral. Escala en MicroPython: de 0 a 255.
Material
- 1 placa micro:bit V2 (el micrófono no está presente en la V1)
- 1 cable micro-USB para la programación
- Fuente de sonido de prueba: aplausos, silbato, aplicación generadora de ruido
Código completo
from microbit import *
# Seuil LOUD sur l'échelle 0-255
microphone.set_threshold(SoundEvent.LOUD, 150)
barre = [Image("00000:00000:00000:00000:11111"),
Image("00000:00000:00000:11111:11111"),
Image("00000:00000:11111:11111:11111"),
Image("00000:11111:11111:11111:11111"),
Image("11111:11111:11111:11111:11111")]
while True:
niveau = microphone.current_volume # 0..255
idx = min(4, niveau // 52)
display.show(barre[idx])
if microphone.was_event(SoundEvent.LOUD):
display.show(Image.SURPRISED)
sleep(400)
if button_a.was_pressed: # calibrer le seuil
seuil = microphone.current_volume + 30
microphone.set_threshold(SoundEvent.LOUD, seuil)
display.scroll(str(seuil))
sleep(50)
current_volume devuelve el nivel instantáneo; set_threshold + was_event evitan el sondeo continuo para los eventos de «aplauso». El LED de actividad cercano al micrófono se enciende en cuanto el micrófono está activo.
Verificación esperada
La barra LED sube progresivamente con el ruido, la placa muestra la cara de «sorpresa» con cada aplauso, y A sube el umbral por encima del nivel ambiental medido en ese instante.
Errores frecuentes
- Umbral ajustado demasiado bajo: todo desencadena LOUD permanentemente; demasiado alto: ya no pasa nada.
- Esperar el mismo comportamiento en la V1:
microphoneno existe, AttributeError. - Confundir
current_volume(instantáneo) con el evento de umbral (puntual, se borra tras la lectura). - Tapar el micrófono con los dedos durante la medición: el orificio de la carcasa es pequeño, el nivel cae.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
coeur.pyMicroPythonboutons.pyMicroPythonpodometre.pyMicroPythonlumiere.pyMicroPythonmusique.pyMicroPythonradio_ping.pyMicroPython