| 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 |
SmartRun és una samarreta que indica, en una tira de leds, el ritme cardíac i la velocitat a la qual es desplaça la persona usuària.
La llista de materials principals és la següent:
1 placa Circuit Playground Express
1 sensor GPS (potes A6 i A7)
1 sensor de ritme cardíac (pota A2)
1 tira de NeoPixel (pota A1)
A continuació tenim el llistat del programa:
import board import digitalio import time import neopixel import analogio import adafruit_gps import busio
#CONFIGURACIÓN DE TODO #LEDs cadena = neopixel.NeoPixel(board.A1, 12, brightness=0.2, auto_write=True) #RITMO CARDÍACO sensor = analogio.AnalogIn(board.A2) #GPS uart = busio.UART(board.TX, board.RX, baudrate=9600, timeout=100)
gps = adafruit_gps.GPS(uart)
gps.send_command(b'PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0')
gps.send_command(b'PMTK220,1000')
darrer_valor = time.monotonic()
while True:
# VELOCIDAD
gps.update()
actual = time.monotonic()
if actual - darrer_valor >= 1.0:
darrer_valor = actual
if not gps.has_fix:
# Encara no tenim un senyal estable
print('Esperant un valor estable del gps...')
for i in range(5):
cadena[i+7]=(255,255,0)
else:
for i in range(5):
cadena[i+7]=(0,0,0)
# Tenim un senyal estable
print('') # Linia de separacio
print('Qualitat del senyal bona: ', gps.fix_quality)
if gps.speed_knots is not None:
print('Velocitat: ', 1.852*gps.speed_knots, ' km/h')
numledvel=int((gps.speed_knots*1.852)*(5/30))
print('Número de LEDs', numledvel)
for i in range(numledvel):
cadena[i+7]=(0,0,255) # AZUL
# PULSO
cadena[6]=(255,255,255)
tant = time.monotonic()
valmax = 0
valmin = 65535
while time.monotonic() - tant < 3:
gps.update()
valact = sensor.value
if valact > valmax:
valmax = valact
if valact < valmin:
valmin = valact
time.sleep(0.01)
valmig = (valmax + valmin) / 2
tant = time.monotonic()
sobre = False
numpols = 0
while time.monotonic() - tant < 15:
gps.update()
valact = sensor.value
if not sobre:
if valact > valmig:
numpols += 1
sobre = True
else:
if valact < valmig:
sobre = False
time.sleep(0.02)
bpm = numpols * 4
print('bpm: ',bpm)
time.sleep(0.5)
cadena.fill((0,0,0))
numled=int((bpm-50)*5/100)
if numled < 0:
numled = 0
if numled > 5:
numled = 5
for i in range(numled):
color = (255, 0, 0) # ROJO
cadena[i+1] = color
time.sleep(0.05)
time.sleep(0.1)

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