| Per començar | Elements d'entrada | Programació CircuitPython | Recursos CITCEA | |
| Elements no electrònics | Elements de sortida | Programació Arduino | ||
| Projectes | Elements de control | Dades pràctiques | Inici |
Aquesta pàgina fa referència al sensor de so integrat a la placa Circuit Playground Express d'Adafruit.
Es tracta d'un micròfon intel·ligent que es comunica amb el microcontrolador per una comunicació semblant a la del bus i2c
La lectura del sensor l'obtindrem amb la funció audiobusio.PDMIn a la que li hem d'indicar on està connectat el micròfon i el nombre de bits de la mostra de so (paràmetre habitual en so digital). Atès que el so és una ona que evoluciona força ràpid, el que farem serà llegir un conjunt de valors (anomenats mostres) i els guardarem en una estructura array.
Quan tinguem un conjunt de mostres (array) complet, calcularem el seu valor eficaç (RMS) normalitzat per saber el volum del so. Per calcular el valor eficaç normalitzat necessitem calcular primer la mitjana:

I després calcularem el valor eficaç de la resta entre cada valor i la mitjana per tal que els valors estiguin normalitzats (centrats en el zero):

El següent programa fa el càlcul que hem comentat.
import array import math import time import audiobusio import board
# Funcio que calcula la mitjana de les mostres
def mitjana(vals):
return int(sum(vals) / len(vals))
# Funcio que calcula el valor RMS normalitzat dels valors
def normalized_rms(vals):
mtn = mitjana(vals)
sumaMostres = sum(
float(mostra - mtn) * (mostra - mtn)
for mostra in vals
)
return math.sqrt(sumaMostres / len(vals))
mic = audiobusio.PDMIn(
board.MICROPHONE_CLOCK,
board.MICROPHONE_DATA,
bit_depth=16
)
# Creem una estructura array per guardar les mostres
valors = array.array('H', [0] * 100)
# La "H" indica que seran valors enters ocupant dos bytes cada un
# Definint-ho aixi estalviem memoria
# Aquest array s'omplira amb 100 elements [0]
while True:
mic.record(valors, len(valors))
magnitud = normalized_rms(valors)
print(magnitud)
time.sleep(0.1)
Podríem modificar el programa per tal de poder veure els valors resultants a la pantalla de Mu amb el traçador o plotter. El traçador necessita que les dades estiguin en forma de tupla i, per això, ens caldrà substituir la línia
print(magnitud)
per la següent
print(((magnitud),))
En aquest web, les fotografies marcades amb [AF] són del web d'Adafruit, les marcades amb [SF] del web d'Sparkfun i les marcades amb [AU] del web d'Arduino.

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.