Tecnologia vestible

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

Funcions matemàtiques i trigonomètriques

Disposem d'una sèrie de funcions matemàtiques i trigonomètriques (a les biblioteques math i simpleio) que es descriuen a la taula següent.

Nom Utilitat Format Comentaris
e Nombre e math.e
pi Nombre π math.pi
sqrt Arrel quadrada math.sqrt(r)
pow Potència math.pow(b, e)
exp Exponencial math.exp(e) Exponencial (potència d'e)
log Logarítme natural math.log(v)
cos Cosinus math.cos(a) Angle en radians
sin Sinus math.sin(a) Angle en radians
tan Tangent math.tan(a) Angle en radians
acos Arc cosinus math.acos(v) Resultat en radians
asin Arc sinus math.asin(v) Resultat en radians
atan Arc tangent math.atan(v) Resultat en radians
atan2 Arc tangent de dos arguments math.atan2(s,c) Dóna l'arc tangent a partir d'un valor proporcional
al sinus i un altre proporcional al cosinus
ceil Valor enter immediatament superior math.ceil(v)
copysign Copia el signe math.copysign(v,s) Torna v però amb el signe d's
fabs Valor absolut math.fabs(v)
floor Valor enter immediatament inferior math.floor(v)
fmod Residu de dividir el primer valor pel segon math.fmod(n,d)
frexp math.frexp
int Converteix a enter int(v)
modf Parts entera i fraccional math.modf(v) Retorna una tupla on el primer element és la part fraccional
del paràmetre i el segon la part entera
math.modf(4.32)[0] donarà 0.32
math.modf(4.32)[1] donarà 4
isfinite Mira si és finit math.isfinite(p) Retorna True si el paràmetre és un nombre finit
isinf Mira si és infinit math.isinf(p)
isnan No és un nombre math.isnan(p) Retorna True si el paràmetre no és un nombre
trunc Part entera math.trunc(v)
radians Passa a radians math.radians(a) El paràmetre ha d'estar en graus sexagesimals
degrees Passa a graus sexagesimals math.degrees(a) El paràmetre ha d'estar en radians
map_range Canvi d'escala r = simpleio.map_range(v,vn,vx,rn,rx) Canvia vn per rn i vx per rx
Els valors intermedis els canvia seguint una recta
Si rx < rn també funciona i inverteix el sentit de la variable
El resultat és de tipus float
Aquesta funció està a la biblioteca simpleio
Vegeu descripció més avall

Descripció de la funció map_range

Aquesta funció agafa els valors d'una variable v que pot tenir valors entre vn i vx i dóna un valor de sortida que està entre rn i rx. Una aplicació molt típica seria convertir el valor d'una entrada analògica (entre 0 i 1023) en un altre valor que es pugui enviar a un NeoPixel (entre 0 i 255).

import simpleio
led = neopixel.NeoPixel(board.NEOPIXEL, 1, auto_write=0, brightness=0.01)
entrada = AnalogIn(board.LIGHT)
...
    valor = simpleio.map_range(entrada.value, 0, 65535, 0, 255)
    valor = int(valor)
    led.fill((valor, valor, valor))
    led.show()
...

El següent gràfic ens mostra com la funció map converteix el valor d'entrada en el valor de sortida.

funció map

L'equació per al càlcul seria la següent:

equació de la funció map

Si posem un valor de rx més petit que el de rn podem tenir un canvi de signe en la inclinació.

funció map

Per exemple si volem que la sortida faci més llum com menys lluminositat veu el sensor de l'entrada:

import simpleio
led = neopixel.NeoPixel(board.NEOPIXEL, 1, auto_write=0, brightness=0.01)
entrada = AnalogIn(board.LIGHT)
...
    valor = map_range(entrada.value, 0, 65535, 255, 0)
    valor = int(valor)
    led.fill((valor, valor, valor))
    led.show()
...

No hi ha cap problema en que, en cas necessari, algun dels valors sigui negatiu.

funció map

 

 

 

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.

 

 

 

 

 

 

 

 

 

 

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