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

LearningGlove

Es tracta d'un guant en el que la punta de cada dit té un polsador de roba. Quan es pica amb el dit sobre una superfície toca la nota corresponent a aquell dit. Una segona funció del guant és aprendre a tocar el piano. En aquest cas es carrega un fitxer amb les dades de la melodia que es vol tocar i s'aniran encenent els LED situats a cada dit per indicar a l'usuari les notes que ha de tocar i durant quan temps.

L'interruptor de la placa és el que permet seleccionar entre els dos modes de funcionament. Els polsadors de la placa serveixen per variar el volum del so i els LED de la placa ens indiquen el nivell actual del volum.

La llista de materials principals és la següent:

1   Placa Circuit Playground Express

5   NeoPixel

1   Tros de teixit conductor

1   Connector jack femella de 3 mm

Les figures següents mostren el resultat final.

LearningGlove           LearningGlove

El fitxer d'aprenentatge s'ha de gravar, al disc virtual que correspon a la placa, amb el nom song.txt i tindrà un contingut similar a aquest:

DO,1
RE,2
SOL,1
S,1
FA,1
RE,1
SOL,1
S,1
DO,2
RE,1

Els valors corresponen a la durada de cada nota i la lletra S indica un silenci.

A continuació tenim el llistat del programa:

import board
import digitalio
import time
import neopixel
import audioio
import audio_lib
altaveu = neopixel.NeoPixel(board.D8, 11, brightness=0.8)
button_a = digitalio.DigitalInOut(board.BUTTON_A)
button_a.direction = digitalio.Direction.INPUT
button_a.pull = digitalio.Pull.DOWN
button_b = digitalio.DigitalInOut(board.BUTTON_B)
button_b.direction = digitalio.Direction.INPUT
button_b.pull = digitalio.Pull.DOWN
switch = digitalio.DigitalInOut(board.SLIDE_SWITCH)
switch.direction = digitalio.Direction.INPUT
switch.pull = digitalio.Pull.UP
cadena = neopixel.NeoPixel(board.A6, 5, brightness=0.8) # neopixels
t1 = digitalio.DigitalInOut(board.A3) #dit polze
t1.direction = digitalio.Direction.INPUT
t1.pull = digitalio.Pull.DOWN #Pull.DOWN pq està connectat a 3.3V
t2 = digitalio.DigitalInOut(board.A2) #dit index
t2.direction = digitalio.Direction.INPUT
t2.pull = digitalio.Pull.DOWN
t3 = digitalio.DigitalInOut(board.A1) #dit del mig
t3.direction = digitalio.Direction.INPUT
t3.pull = digitalio.Pull.DOWN
t4 = digitalio.DigitalInOut(board.A4) #dit anular
t4.direction = digitalio.Direction.INPUT
t4.pull = digitalio.Pull.DOWN
t5 = digitalio.DigitalInOut(board.A5) #dit petit
t5.direction = digitalio.Direction.INPUT
t5.pull = digitalio.Pull.DOWN
speaker = digitalio.DigitalInOut(board.SPEAKER_ENABLE)
speaker.direction = digitalio.Direction.OUTPUT
speaker.value = True
sons = audioio.AudioOut(board.SPEAKER)
do=262
re=294
mi=330
fa=349
sol=392
temps=[0.25,0.5,1]
with open("song.txt", "r") as file:
    l=[]
    for linia in file:
        linia=linia.strip()
        l.append(linia.split(','))
vol=0.1
i=0
para=0
while para<1:
    #MODE LLIURE
    if not switch.value:

        if t1.value:
            for n in range(5):
                cadena[n]=(0, 0, 0)
            cadena[4]=(0, 0, 255)
            so = audio_lib.nota(do,vol)
            sons.play(so, loop=True)
            time.sleep(0.5)
        if t2.value:
            for n in range(5):
                cadena[n]=(0, 0, 0)
            cadena[3]=(0, 0, 255)
            so = audio_lib.nota(re,vol)
            sons.play(so, loop=True)
            time.sleep(0.5)
        if t3.value:
            for n in range(5):
                cadena[n]=(0, 0, 0)
            cadena[2]=(0, 0, 255)
            so = audio_lib.nota(mi,vol)
            sons.play(so, loop=True)
            time.sleep(0.5)
        if t4.value:
            for n in range(5):
                cadena[n]=(0, 0, 0)
            cadena[1]=(0, 0, 255)
            so = audio_lib.nota(fa,vol)
            sons.play(so, loop=True)
            time.sleep(0.5)
        if t5.value:
            for n in range(5):
                cadena[n]=(0, 0, 0)
            cadena[0]=(0, 0, 255)
            so = audio_lib.nota(sol,vol)
            sons.play(so, loop=True)
            time.sleep(0.5)
        else:
            sons.stop()
            for n in range(5):
                cadena[n]=(0, 0, 0)
    if switch.value:
        for notes,temps in l:
            if notes=='DO':
                while not t1.value:
                    cadena[4]=(255,255,255)
                if t1.value:
                    so = audio_lib.nota(do,vol)
                    sons.play(so, loop=True)
                    time.sleep(float(temps))
                    sons.stop()
                    cadena[4]=(0,0,0)
            if notes=='RE':
                while not t2.value:
                    cadena[3]=(255,255,255)
                if t2.value:
                    so = audio_lib.nota(re,vol)
                    sons.play(so, loop=True)
                    time.sleep(float(temps))
                    sons.stop()
                    cadena[3]=(0,0,0)
            if notes=='MI':
                while not t3.value:
                    cadena[2]=(255,255,255)
                if t3.value:
                    so = audio_lib.nota(mi,vol)
                    sons.play(so, loop=True)
                    time.sleep(float(temps))
                    sons.stop()
                    cadena[2]=(0,0,0)
            if notes=='FA':
                while not t4.value:
                    cadena[1]=(255,255,255)
                if t4.value:
                    so = audio_lib.nota(fa,vol)
                    sons.play(so, loop=True)
                    time.sleep(float(temps))
                    sons.stop()
                    cadena[1]=(0,0,0)
            if notes=='SOL':
                while not t5.value:
                    cadena[0]=(255,255,255)
                if t5.value:
                    so = audio_lib.nota(sol,vol)
                    sons.play(so, loop=True)
                    time.sleep(float(temps))
                    sons.stop()
                    cadena[0]=(0,0,0)
            if notes=='S':
                time.sleep(float(temps))

            else:
                pass
            para=para+1
    #VOLUM
    if button_b.value:
        if i==9:
            pass
        else:
            k=i
            i=i+1
    if button_a.value:
        if i==0:
            pass
        else:
            i=i-1
    vol=i*0.1+0.1
    altaveu[i+1]=(0,0,0)
    altaveu[i]=(87,35,100)
    altaveu.show()
    time.sleep(0.2)

 

 

 

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.