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 |
En realitat es tracta d'un micròfon i un petit amplificador muntat en una placa. En aquest cas, no hem trobat cap model dissenyat per a tecnologia vestible però sí que hem trobat unes plaques prou petites als webs d'Sparkfun i Adafruit. Aquest darrer permet ajustar l'amplificació del senyal.
El sensor es connecta amb tres fils: els d'alimentació (positiu i negatiu) i el de senyal que connectarem a una entrada analògica, com a la imatge següent.
El sensor ens dóna una lectura proporcional al senyal de so, que és una ona. Atès que les entrades analògiques només admeten tensions positives, el sensor suma la meitat de la tensió d'alimentació al senyal de sortida. Això vol dir que en silenci llegirem un valor de 511 i quan hi ha so tindrem valors que oscil·laran al voltant d'aquest nombre. Si volem conèixer el nivell de so actual caldrà tractar els valors llegits per trobar l'amplitud del so. Una forma senzilla és llegir el senyal durant un cert temps (per exemple 0,1 s) i guardar-se el valor més gran i el més petit. Acabat aquest temps, l'amplitud serà la resta dels dos; llavors podrem tornar a mirar l'evolució del senyal.
En molts casos, però, en tindrem prou amb un programa més senzill. Per exemple, quan volem que una acció es faci quan el nivell de so supera un determinat llindar el programa serà tan senzill com una comparació. El programa següent (per a l'entron Arduino) activa el LED de la placa quan sent un so prou fort (un xiulet o picar de mans) i el desactiva quan torna a sentir un altre so fort.
int lectura = 0; int estatLED = LOW;
void setup() { Serial.begin(9600); pinMode(7, OUTPUT); // LED de la placa }
void loop() { lectura = analogRead(A9); // Correspon a la pota D9 if (lectura >= 700) { // El 700 es pot variar per ajustar la sensibilitat estatLED = !estatLED; // Invertim l'estat del LED digitalWrite(7, estatLED); } Serial.println(lectura); delay(200); // Espera 0,2 s }
Aquest altre programa fa una cosa similar en CircuitPython comptant que el sensor està a A0.
import board import digitalio import analogio import time
sensor = analogio.AnalogIn(board.A0) led = digitalio.DigitalInOut(board.D13) led.direction = digitalio.Direction.OUTPUT
while True: lect = sensor.value if lect > 45000: # El valor es pot variar per ajustar la sensibilitat led.value = not led.value # Invertim l'estat del LED time.sleep(0.5)
Atenció: Tingueu present que en molts casos les entrades binàries i analògiques corresponents a la mateixa pota no tenen el mateix número.
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.