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 |
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.
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.
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.