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

Sensor de llum

El sensor de llum TSL2561 (fotografia de la dreta) ens permet conèixer la quantitat de llum que arriba al sensor. Té un diàmetre de menys de 14 mm (menor que una moneda d'un cèntim) i un gruix inferior als 2 mm. Això facilita el seu us incorporant-los a elements tèxtils.

Encara és a la venda la versió antiga d'aquest sensor (fotografia de l'esquerra).

Aquest sensor es connecta amb la placa del microcontrolador fent servir una comunicació i2c que ens permet transferir la informació fent servir només dos fils (més els dos d'alimentació). Cada placa de microcontrolador només pot tenir connectat un sensor TSL2561 però sí admet altres elements i2c coexistint amb ell. Per això, la placa del sensor té duplicades les connexions i2c de manera que sigui fàcil encadenar els dispositius.

LSM303           LSM303  [AF]

Per fer servir aquest sensor cal connectar el born 3V (inferior a la foto) al born 3,3 V de la placa del microcontrolador (ATENCIÓ: No al born VBATT), el born gnd (superior a la foto) al negatiu de l'alimentació i els borns SDA i SCL amb els del mateix nom de la placa del microcontrolador. A la placa del sensor aquests dos borns hi apareixen dos cops de manera que podem triar la disposició que ens sigui més còmoda.

Per fer servir el sensor ens caldrà la Adafruit TSL2561 Light Sensor Driver i també la Adafruit Unified Sensor Driver. Si és necessari, podeu consultar la instal·lació de biblioteques.

Un cop ja tinguem la biblioteca, podem fer els nostres programes. A la part inicial, hem de carregar les biblioteques corresponents.

#include <Wire.h>  // Per a la comunicació i2c
#include <Adafruit_Sensor.h>
#include <Adafruit_TSL2561_U.h>  // Sensor de lluminositat

A la part de declaració de variables, hem de crear un objecte Adafruit_TSL2561_Unified. El número 12345 pot ser qualsevol però han de ser diferents per a cada sensor. En aquest cas l'objecte s'anomena tsl.

Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT, 12345);

En la inicialització del programa, cal inicialitzar el sensor. D'aquesta manera el nostre microcontrolador hi estableix connexió i convé preveure que la connexió no sigui possible.

	tsl.begin()

També cal configurar-lo; per exemple amb els valors més bàsics:

	tsl.enableAutoRange(true);  // Funcionament normal amb guany automàtic
	tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS);  // Més velocitat però menys resolució

En el programa cal definir un objecte del tipus sensors_event_t i cridem a la funció que llegeix els valors indicant-li que guardi els valors a l'event corresponent. El signe & indica que el que posem no és un paràmetre de la funció sinó la variable on ha de guardar els resultats.

	sensors_event_t event;
	tsl.getEvent(&event);

El valor llegit ens quedarà a la variable event.light (amb el nom d'event que hem definit abans).

A continuació hi ha un programa de prova per a l'entorn Arduino. En aquest cas, obrim també un canal sèrie que ens permeti veure si la connexió ha anat bé i les lectures del sensor al monitor sèrie. El nostre programa de prova llegirà el valor llegit pel sensor i el mostrarà.

#include <Wire.h>  // Per a la comunicació i2c
#include <Adafruit_Sensor.h>
#include <Adafruit_TSL2561_U.h>  // Sensor de lluminositat
Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT, 12345);
void setup() {
	Serial.begin(9600);
	if(!tsl.begin()) {
		Serial.print("Comprova que el sensor està ben connectat");
		while(1);
	}
	tsl.enableAutoRange(true);  // Funcionament normal amb guany automàtic
	tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS);  // Més velocitat però menys resolució
}
void loop() {  
	sensors_event_t event;
	tsl.getEvent(&event);
	Serial.print(event.light); Serial.println(" lux");
	delay(250);
}

El següent programa en CircuitPython llegeix el sensor i mostra la lectura.

import board
import busio
import time
import adafruit_tsl2561
i2c = busio.I2C(board.SCL, board.SDA)
sensor = adafruit_tsl2561.TSL2561(i2c)
while True:
    print("Lux: ",sensor.lux)
    time.sleep(1.0)

Per poder comparar quan feu proves, a continuació teniu una taula amb els valors recomanats per a alguns espais:

Espai Il·luminació recomanada (lux)                     Espai Il·luminació recomanada (lux)
Passadissos 100 Escales 150
Aules i laboratoris 400 Oficines 500
Biblioteques i sales d'estudi 500 Botigues 500
Treballs amb poques necessitats visuals 300 Cuines i banys 150
Treballs amb necessitats visuals significatives 750 Dormitoris 150
Treballs de precisió visuals 1500 Sales d'estar 300

En aquesta pàgina podeu trobar més informació sobre el sensor.

 

 

 

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.