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

Bufanda meteorològica

Es tracta d'una bufanda que, mitjançant uns LED NeoPixel indica a l'usuari la temperatura ambient i l'índex de radiació ultraviolada. Per reduir el consum d'energia, hi ha un polsador per encendre els LED corresponents a la temperatura i un altre per als de l'UVI. Els LED s'apaguen automàticament quan ha passat un temps des que han estat encesos.

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

1   Placa Circuit Playground Express

1   Sensor d'índex de radiació ultraviolada

1   NeoPixel strip de 144 LED per metre (tros de 58 LED)

La fotografia següent mostra el resultat final.

bufanda

A continuació tenim el llistat del programa:

#include <Adafruit_CircuitPlayground.h>
#include "Adafruit_SI1145.h"  // Sensor UV
#include <Adafruit_NeoPixel.h>    // NeoPixels
int var=0;
int cont=0;
int contuv=0; 
int contp=0;
int contv=0;
int varub=0;
int ajust=4;
Adafruit_NeoPixel cadena = Adafruit_NeoPixel(60, A1, NEO_GRB + NEO_KHZ800);
Adafruit_SI1145 uv = Adafruit_SI1145();
void setup() {
	CircuitPlayground.begin();
	Serial.begin(9600);
	if (! uv.begin()) {
		Serial.println("Comprova que el sensor està connectat");
		while (1);
	}
	Serial.println("Sensor connectat");
	cadena.begin();  // Inicialitza els NeoPixels        
}
void loop(){
	float L;
	L=analogRead(A9);
	float U0;
	U0=3.3;
	float T0;
	T0=298.15;
	float R0;
	R0=10000;
	float B;
	B=3950;
	Serial.print("Average analog reading "); 
	Serial.println(L);
	float U,R,invT,T;
	U=L*U0/1023; 
	Serial.println(U);
	R=((R0*U0)/U)-R0;
	Serial.println(R);
	invT=((1/T0)+(1/B)*log(R/R0));
	Serial.println(invT*10000000);
	T=1/(invT)-273.15-ajust;
	Serial.print("Temperature "); 
	Serial.println(T);
	Serial.println(" *C");
	Serial.println();
	Serial.print("Llum visible: "); 
	Serial.println(uv.readVisible());
	Serial.print("Radiacio IR: "); 
	Serial.println(uv.readIR());
	Serial.print("Index UV: ");  
	Serial.println(uv.readUV()/100); 
	int UV;
	UV=uv.readUV()/100;
	int r;
	r=CircuitPlayground.rightButton();
	Serial.print(r);
	if (r==1) {
		contuv=contuv+1;
		Serial.print(contuv);
	}
	if (contuv%2==0){
		contv=0;
		for (int i=0;i<=29;i++){
			cadena.setPixelColor(i, 0, 0, 0);
		}
		cadena.show(); 
	} else if (contuv%2!=0){
		if (UV==0){
			cadena.setPixelColor(0, 0, 100, 0);
			cadena.setPixelColor(1, 0, 100, 0);
			cadena.setPixelColor(26,0,100,0);
			cadena.show();
		} else if (UV==1){
			cadena.setPixelColor(2, 0, 100, 0);
			cadena.setPixelColor(3, 0, 100, 0);
			cadena.setPixelColor(26,0,100,0);
			cadena.show();
		} else if (UV==2){
			cadena.setPixelColor(4, 0, 100, 0);
			cadena.setPixelColor(5, 0, 100, 0);
			cadena.setPixelColor(26,0,100,0);
			cadena.show();
		} else if (UV==3){
			cadena.setPixelColor(6, 100, 100, 0);
			cadena.setPixelColor(7, 100, 100, 0);
			cadena.setPixelColor(27,100,25,0);
			cadena.show();
		} else if (UV==4){
			cadena.setPixelColor(8, 100, 100, 0);
			cadena.setPixelColor(9, 100, 100, 0);
			cadena.setPixelColor(27,100,25,0);
			cadena.show();
		} else if (UV==5){
			cadena.setPixelColor(10, 100, 100, 0);
			cadena.setPixelColor(11, 100, 100, 0);
			cadena.setPixelColor(27,100,25,0);
			cadena.show();
		} else if (UV==6){
			cadena.setPixelColor(12, 100, 25, 0);
			cadena.setPixelColor(13, 100, 25, 0);
			cadena.setPixelColor(27,100,25,0);
			cadena.show();
		} else if (UV==7){
			cadena.setPixelColor(14, 100, 25, 0);
			cadena.setPixelColor(15, 100, 25, 0);
			cadena.setPixelColor(27,100,25,0);
			cadena.show();
		} else if (UV==8){
			cadena.setPixelColor(16, 100, 0, 0);
			cadena.setPixelColor(17, 100, 0, 0);
			cadena.setPixelColor(28,100,0,0);
			cadena.show();
		} else if (UV==9){
			cadena.setPixelColor(18, 100, 0, 0);
			cadena.setPixelColor(19, 100, 0, 0);
			cadena.setPixelColor(28,100,0,0);
			cadena.show();
		} else if (UV==10){
			cadena.setPixelColor(20, 100, 0, 0);
			cadena.setPixelColor(21, 100, 0, 0);
			cadena.setPixelColor(28,100,0,0);
			cadena.show();
		} else{
			cadena.setPixelColor(22, 100, 1, 25);  // Pixel 0 vermell
			cadena.setPixelColor(23, 100, 1, 25);  // Pixel 1 verd
			cadena.setPixelColor(28,100,0,0);
			cadena.show();
		}
		if (UV!=varub){
			for (int i=0;i<=29;i++){
				cadena.setPixelColor(i, 0, 0, 0);
			}
			cadena.show(); 
		}
		varub=UV;
	}
	float Led;
	Led=(-1.00/2.00)*T+53.00;
	int leds = (float)Led;
	Serial.println(leds);
	int p;
	p=CircuitPlayground.leftButton();
	if (p==1) {
		cont=cont+1;
		Serial.print(cont);
	}
	if (cont%2==0){
		contp=0;
		for (int i=59;i>=30;i--){
			cadena.setPixelColor(i, 0, 0, 0);
		}
		cadena.show(); 
	} else if (cont%2!=0){
		for (int i=58;i>=(leds+1);i--){
			if (i>=53){
				cadena.setPixelColor(i, 0, 0, 100);
			} else{
				cadena.setPixelColor(i, 100, 0, 0);
			}
			cadena.show(); 
		}
		if (var>leds){
			cadena.setPixelColor(var,0,0,0);
		}
	}
	var=leds;
	delay(500);
	contp=contp+1;
	contv=contv+1;
	if (contv==240){
		contuv=0;
		for (int i=0;i<=29;i++){
			cadena.setPixelColor(i, 0, 0, 0);
		}
		cadena.show(); 
	}
	if (contp==240){
		cont=0;
		for (int i=30;i<=58;i++){
			cadena.setPixelColor(i, 0, 0, 0);
		}
		cadena.show(); 
	}
	Serial.println(contp);
}

 

 

 

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.