Tecnologia vestible

Per començar Elements d'entrada Elements de control Programació   Recursos CITCEA
Projectes Elements de sortida Elements no electrònics Dades pràctiques   Inici

Pantambor

Els Pantambor són uns pantalons interactius que permeten fer sons quan es toquen determinats punts i també permeten jugar al conegut Simon. El programa incorpora els dos modes de funcionament que es poden triar segons quin polsador tàctil es toca al començament del programa.

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

1   Placa Flora

1   Brunzidor piezoelèctric

1   Resistència de 100 Ω

5   Neo Pixels

1   Teixit conductor

5   Resistències de 10 MΩ

5   Resistències de 1000 Ω

1   Portapiles amb piles

La peça de teixit conductor es va tallar en sis trossos. Cinc dels trossos es van posar a la part del davant dels pantalons cobrint l'espai dels cinc estrips que aquests tenien, tal com mostra la fotografia següent. El sisè tros es va situar a la part interior dels pantalons on un lloc on sempre pugui fer contacte amb la pell. Aquest sisè tros actuarà com a referència de les tensions.

vista de la situació dels polsadors tàctils

La figura següent mostra l'esquema del circuit. Les cinc resistències que apareixen a la part central del costat dret són de 10 MΩ, la del brunzidor és de 100 Ω i les altres cinc són de 1000 Ω. El tros de teixit marcat amb una franja vermella és el de referència i els altres cinc són els polsadors tàctils.

esquema

A continuació tenim el llistat del programa:

	//Llibreries
#include <Adafruit_NeoPixel.h>
#include <CapacitiveSensor.h>
bool joc =false; //Variables booleanes de control
bool decisio = false;
bool joc_simon = false;
int bru = 6;
int to[]={523,659,783,987,1046};
int x = 0;
int si =0;
int simon[] = {random(0,5), random(0,5),random(0,5),random(0,5),random(0,5)};
	//Generem una seqüància aleatòria de 5 nombres
Adafruit_NeoPixel cadena = Adafruit_NeoPixel(5, 1, NEO_GRB + NEO_KHZ800);
CapacitiveSensor c1 = CapacitiveSensor(9,10); // La pota D9 és l'emissor i la D10 el receptor
CapacitiveSensor c2 = CapacitiveSensor(9,12);
CapacitiveSensor c3 = CapacitiveSensor(9,12);
CapacitiveSensor c4 = CapacitiveSensor(9,12);
CapacitiveSensor c5 = CapacitiveSensor(9,12);
void seleccionador() { //Modifiquem les variables de control per accedir als diferents jocs
	bool l1 = c1.capacitiveSensor(30) > 4000;
	bool l2 = c2.capacitiveSensor(30) > 4000;
	if(l1){
		tone(bru, 523,150);
		decisio=true;
	}
	if(l2){
		decisio=true;
		joc_simon=true;
	}
}
void piano() { //Donem una resposta sonora i lluminosa a les lectures dels polsadors
	bool l1 = c1.capacitiveSensor(30) > 4000;
	bool l2 = c2.capacitiveSensor(30) > 4000;
	bool l3 = c3.capacitiveSensor(30) > 4000;
	bool l4 = c4.capacitiveSensor(30) > 4000;
	bool l5 = c5.capacitiveSensor(30) > 4000;
	if(l1){
		tone(bru, 523,150);
		cadena.setPixelColor(0, 255, 0, 0);
		cadena.setPixelColor(1, 0, 0, 0);
		cadena.setPixelColor(2, 0, 0, 0);
		cadena.setPixelColor(3, 0, 0, 0);
		cadena.setPixelColor(4, 0, 0, 0);
	}
	if(l2){
		tone(bru, 659, 150);
		cadena.setPixelColor(0, 0, 0, 0);
		cadena.setPixelColor(1, 255, 255, 0);
		cadena.setPixelColor(2, 0, 0, 0);
		cadena.setPixelColor(3, 0, 0, 0);
		cadena.setPixelColor(4, 0, 0, 0);
	}
	if(l3){
		tone(bru, 783, 150);
		cadena.setPixelColor(0, 0, 0, 0);
		cadena.setPixelColor(1, 0, 0, 0);
		cadena.setPixelColor(2, 0, 255, 0);
		cadena.setPixelColor(3, 0, 0, 0);
		cadena.setPixelColor(4, 0, 0, 0);
	}
	if(l4){
		tone(bru, 987, 150);
		cadena.setPixelColor(0, 0, 0, 0);
		cadena.setPixelColor(1, 0, 0, 0);
		cadena.setPixelColor(2, 0, 0, 0);
		cadena.setPixelColor(3, 0, 255, 255);
		cadena.setPixelColor(4, 0, 0, 0);
	}
	if(l5){
		tone(bru, 1046, 150);
		cadena.setPixelColor(0, 0, 0, 0);
		cadena.setPixelColor(1, 0, 0, 0);
		cadena.setPixelColor(2, 0, 0, 0);
		cadena.setPixelColor(3, 0, 0, 0);
		cadena.setPixelColor(4, 0, 0, 255);
	}
}
void partida(){ //Llegim les lectures dels polsadors i mirem que es compleixi la seqüència del Simon
	bool l1 = c1.capacitiveSensor(30) > 4000;
	bool l2 = c2.capacitiveSensor(30) > 4000;
	bool l3 = c3.capacitiveSensor(30) > 4000;
	bool l4 = c4.capacitiveSensor(30) > 4000;
	bool l5 = c5.capacitiveSensor(30) > 4000;
	bool lectures[] = {l1,l2,l3,l4,l5};
	si=simon[x];
	if (lectures[si]){
		tone(bru, to[si],150);
		x++;
	}
	bool trobat =false; //Busquem si s'apreta algun polsador que no toca
	int a=0;
	while(!trobat && a < sizeof(lectures)){
		if (!a==si){
			trobat = lectures[a];
		}
	}
	if (trobat){
		tone(bru, 120,1500);
		joc=true;
	}
}
void mostra(){ //Es mostra la seqüència del Simon
	si=simon[x];
	if (si==0){
		tone(bru, 523,1500);
		cadena.setPixelColor(0, 255, 0, 0);
		cadena.setPixelColor(1, 0, 0, 0);
		cadena.setPixelColor(2, 0, 0, 0);
		cadena.setPixelColor(3, 0, 0, 0);
		cadena.setPixelColor(4, 0, 0, 0);
	}
	if (si==1){
		tone(bru, 659, 1500);
		cadena.setPixelColor(0, 0, 0, 0);
		cadena.setPixelColor(1, 255, 255, 0);
		cadena.setPixelColor(2, 0, 0, 0);
		cadena.setPixelColor(3, 0, 0, 0);
		cadena.setPixelColor(4, 0, 0, 0);
	}
	if (si==2){
		tone(bru, 783, 1500);
		cadena.setPixelColor(0, 0, 0, 0);
		cadena.setPixelColor(1, 0, 0, 0);
		cadena.setPixelColor(2, 0, 255, 0);
		cadena.setPixelColor(3, 0, 0, 0);
		cadena.setPixelColor(4, 0, 0, 0);
	}
	if (si==3){
		tone(bru, 987, 1500);
		cadena.setPixelColor(0, 0, 0, 0);
		cadena.setPixelColor(1, 0, 0, 0);
		cadena.setPixelColor(2, 0, 0, 0);
		cadena.setPixelColor(3, 0, 255, 255);
		cadena.setPixelColor(4, 0, 0, 0);
	}
	if (si==4){
		tone(bru, 1046, 1500);
		cadena.setPixelColor(0, 0, 0, 0);
		cadena.setPixelColor(1, 0, 0, 0);
		cadena.setPixelColor(2, 0, 0, 0);
		cadena.setPixelColor(3, 0, 0, 0);
		cadena.setPixelColor(4, 0, 0, 255);
	}
	cadena.show();
	if(x==4){
		x=0;
		joc =true;
	} else {
		x++;
	}
	delay(1000);
}
void setup() {
	cadena.begin();
	cadena.show();
	c1.set_CS_AutocaL_Millis(0xFFFFFFFF); //Assignem un temps de calibració alt
	c2.set_CS_AutocaL_Millis(0xFFFFFFFF);
	c3.set_CS_AutocaL_Millis(0xFFFFFFFF);
	c4.set_CS_AutocaL_Millis(0xFFFFFFFF);
	c5.set_CS_AutocaL_Millis(0xFFFFFFFF);
	pinMode(bru, OUTPUT);
}
void loop() { //Triem una funció a partir de les variables de control
	if (decisio){
		if(joc_simon){ //Si es tria el Simon hi ha l'estat mostra i l'estat partida
			if (joc){
				partida();
			} else {
				mostra();
			}
		} else {
			piano();
		}
	} else {
		seleccionador();
	}
}

 

 

 

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.

 

 

 

 

 

 

 

 

 

 

Licencia de Creative Commons
This obra by Oriol Boix is licensed under a Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported License.