Indice
Il sensore di luminosità TSL2561
prodotto dalla AMS è un sensore avanzato di luce digitale , ideale per l'uso in
una vasta gamma di condizioni di luce.
Rispetto alle
cellule CdS
a basso costo, questo sensore è più preciso, consentendo
misure direttamente in lx e può essere configurato per differenti range di misura in
modo da rilevare gamme di luce comprese tra 0,1 - 40.000 lx.
Questo sensore è che contiene entrambi i sensori per la
misura sia dello spettro totale che nell'infrarosso.
Ciò significa che è possibile misurare separatamente gli infrarossi, che lo
spettro visibile alla vista umana.
La maggior parte dei sensori è in grado di rilevare solo uno o l'altro, che non rappresentano
accuratamente ciò che gli occhi umani vedono (dal momento che non
siamo in grado di percepire la luce a infrarossi che viene rilevato dalla
maggior parte dei fotodiodi)
Il sensore ha una interfaccia digitale (I2C), ed è possibile selezionare uno dei
tre indirizzi in modo da poter gestire sino a tre sensori.
All'interno del sensore è già presente un convertitore ADC, il che significa che
è possibile utilizzarlo con qualsiasi microcontrollore, anche se non dispone di
ingressi analogici.
L'assorbimento di corrente è estremamente basso circa 0,5 mA quando attivo e
meno di 15 uA in modalità powerdown.
NOTA:
Ci si potrebbe chiedere se sia ragionevole collegare un un sensore da 3,3
V, come TSL2561 su un bus di dati 5.0V come Arduino Micro.
In questo caso particolare, il modulo I2C utilizza una resistenza di pullup
per tornare alla tensione di alimentazione di 3.3V, i dati sono inviati a
3.3V. Tutto andrà bene finché tutti i sensori sul bus I2C operano a 3.3v.
Tuttavia fatta attenzione a non usare un dispositivo I2C con pullup a 5.0V (come
DS1307) insieme ad un dispositivo di 3.3V come TSL2561.
Il sensore utilizzato è una vecchia
versione, quella tuttora in vendita risulta già montato su un
piccolo circuito prodotto dalla Adafruit codice (PRODUCT ID: 439)
èd è dotata di traslatori di livelli e di regolatore di tensione, che permettono
di utilizzare i modulo direttamente con la tensione di 5V.
|
|
Sensore di Luminosità TSL2561 Sparkfun
|
Sensore di Luminosità TSL2561 Elecrow
|
Approssima la risposta dell'occhio umano
Misura con precisione illuminamento in diverse condizioni di illuminazione
Gamma dinamica (Lx): |
da 0,1 a 40.000 Lx |
Campo di temperatura: |
da -30 a 80 °C |
Campo di tensione: |
2.7-3.6V |
Interfaccia: |
I2C |
In questo esempio vediamo come collegare
il sensore TSL2561 ad una
scheda
ARDUINO MICRO, questo per realizzare un interruttore
crepuscolare, quando la luminosità scende sotto il valore di 200 lx (valore che
può essere modificato all'interno del programma) viene attivato un relè, per
esempio un
KY-019 5V relay module che a
sua volta può comandare l'accensione di una lampada collegata alle rete
elettrica.
Pin
Arduino Micro |
Pin
Sensore TSL2561 |
Pin relè |
#2 |
SDA |
|
#3 |
SCL |
|
#5 |
|
IN |
+ 3.3V |
VCC |
+ 3.7V |
+ 5V |
|
VCC |
GND |
GND |
GND |
|
|
|
Arduino Micro |
Sensore di luce TSL2561 |
|
|
KY-019 5V relay module |
Breadboard |
|
|
Cavetti per Breadboard
di vari colori |
|
Sketch
Per il test del sensore può essere
utilizzato il programma sotto riportato che rappresenta un interruttore
crepuscolare, quando la luminosità scende sotto il valore di 200 lx (valore che
può essere modificato all'interno del programma) viene attivato l'uscita
digitale che attiva il relè
Per la lettura dei dati del sensore TLS5861, occorre, se non lo si è mai utilizzato
caricare l'apposita libreria, per cui andare al menu Sketch-> #includi
libreria -> Gestione librerie
ricercare TLS2561 e installare la libreria Adafruit TLS2561 By Adafruit,
per il funzionamento occorre anche installare la libreria
Adafruit_Sensor
Le due librerie sono scaricabili dai seguenti link
https://github.com/adafruit/Adafruit_TSL2561 oppure
Adafruit_TSL2561.zip
https://github.com/adafruit/Adafruit_Sensor
oppure
Adafruit_Sensor.zip
Programma
di test
/*
crepuscolare_TSL2561.ino
Il programma rappresenta un sensore crepuscolare, quando il sensore rileva un
valore di luminosità sotto la soglia impostata attiva un relè a cui
può essere collegata una lampada.
Sono utilizzati i seguenti pin
Pin +5V -> Alimentazione relè
Pin +3.3 V -> Alimentazione sensore TSL2561
Pin GND -> GND sensore TSL2561 e relè
Pin Digitale 2 -> SDA sensore TSL2561 (Analogico A4 con Arduino UNO)
Pin Digitale 3 -> SCL sensore TSL2561 (Analogico A5 con Arduino UNO)
Pin Digitale 5 -> Relè
Creato il 01/01/2019 da Adriano Gandolfo
Modificato 01/05/2019 da Adriano Gandolfo
Sito web https://www.adrirobot.it
Blog https://it.emcelettronica.com/author/adrirobot
Pagina Facebook https://www.facebook.com/Adrirobot-318949048122955
Istagram https://www.instagram.com/adrirobot/
This example code is in the public domain.
*/
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_TSL2561_U.h>
#define relePin 5 //Pin collegamento relè
Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT, 12345);
/**************************************************************************
Sono mostrate alcune informazioni sul sensore
**************************************************************************/
void displaySensorDetails(void)
{
sensor_t sensor;
tsl.getSensor(&sensor);
Serial.println("------------------------------------");
Serial.print ("Sensor: "); Serial.println(sensor.name);
Serial.print ("Driver Ver: "); Serial.println(sensor.version);
Serial.print ("Unique ID: "); Serial.println(sensor.sensor_id);
Serial.print ("Max Value: "); Serial.print(sensor.max_value); Serial.println(" lux");
Serial.print ("Min Value: "); Serial.print(sensor.min_value); Serial.println(" lux");
Serial.print ("Resolution: "); Serial.print(sensor.resolution); Serial.println(" lux");
Serial.println("------------------------------------");
Serial.println("");
delay(500);
}
/**************************************************************************
Configures the gain and integration time for the TSL2561
**************************************************************************/
void configureSensor(void)
{
/* You can also manually set the gain or enable auto-gain support */
// tsl.setGain(TSL2561_GAIN_1X); /* No gain ... use in bright light to avoid sensor saturation */
// tsl.setGain(TSL2561_GAIN_16X); /* 16x gain ... use in low light to boost sensitivity */
tsl.enableAutoRange(true); /* Auto-gain ... switches automatically between 1x and 16x */
/* Changing the integration time gives you better sensor resolution (402ms = 16-bit data) */
tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS); /* fast but low resolution */
// tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_101MS); /* medium resolution and speed */
// tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_402MS); /* 16-bit data but slowest conversions */
/* Update these values depending on what you've set above! */
Serial.println("------------------------------------");
Serial.print ("Gain: "); Serial.println("Auto");
Serial.print ("Timing: "); Serial.println("13 ms");
Serial.println("------------------------------------");
}
/**************************************************************************
Funzione di configurazione di Arduino (chiamata automaticamente all'avvio)
**************************************************************************/
void setup(void)
{
Serial.begin(9600);
pinMode(relePin, OUTPUT); // Impostazione della porta come uscita
Serial.println("Light Sensor Test"); Serial.println("");
/* Initialise the sensor */
//use tsl.begin() to default to Wire,
//tsl.begin(&Wire2) directs api to use Wire2, etc.
if (!tsl.begin())
{
/* There was a problem detecting the TSL2561 ... check your connections */
Serial.print("Ooops, no TSL2561 detected ... Check your wiring or I2C ADDR!");
while (1);
}
/* Display some basic information on this sensor */
displaySensorDetails();
/* Setup the sensor gain and integration time */
configureSensor();
/* We're ready to go! */
Serial.println("");
}
/**************************************************************************
Codice del programma crepuscolare
**************************************************************************/
void loop(void)
{
/* Get a new sensor event */
sensors_event_t event;
tsl.getEvent(&event);
// Controllo ativazione del relè in base al valore di luminosità letto
if (event.light < 200)
{
Serial.print (event.light);
digitalWrite(relePin, HIGH); //Attiva l'uscita che eccita il relè
Serial.println(" - ATTIVO USCITA RELE'");
} else {
Serial.print (event.light);
digitalWrite(relePin, LOW); //Disattiva l'uscita che diseccita il relè
Serial.println(" - DISATTIVO USCITA RELE'");
}
delay(1000); //Pausa tra le letture del sensore
} |
|
Collegamento a modulo WeMos D1
mini
Il Modulo WeMos D1 mini è basato sul
microcontrollore Wi-Fi ESP8266 ESP-12F che può essere programmato utilizzando
l'IDE di Arduino oppure NodeMCU. La semplicità della programmazione che può
essere effettuata anche in modalità wireless e l'ampia disponibilità di shield
aggiuntivi permettono di sviluppare il proprio progetto di "Internet delle cose"
in tempi estremamente rapidi.
Il modulo WeMos D1 mini è dotato di una interfaccia USB realizzata tramite il
convertitore seriale-USB CH340
Dal connettore USB viene anche
prelevata l'alimentazione a 5V, un regolatore interno (tipo RT9013) si occupa di generare
l'alimentazione a 3,3V per il modulo ESP-12F. Per evitare confusione tutti i pin
di I/O sono chiaramente etichettati.
Nota: Tutti gli I/O supportano una tensione massima di 3,3V
Pin
WeMos D1 Mini |
Pin
Sensore TSL2561 |
D2 |
SDA |
D1 |
SCL |
+ 3.3V |
VCC |
GND |
GND |
|
|
|
WeMos D1 mini |
Sensore di luce TSL2561 |
|
|
Breadboard |
Cavetti per Breadboard
di vari colori |
Nel programma di test tramite il modulo WeMos D1 mini del
sensore TLS2561, il valore della luminosità viene mostrato all'interno
della finestra del Monitor seriale. La lettura è effettuata ogni 250 ms.
I pin SCL e SDA del sensore sono collegati rispettivamente a D1
e D2 del modulo WeMos D1 mini e gestiti dalla libreria
Wire.
Programma
di test
|
|
/*
wemos_d1_mini_TSL2561.ino
In questo esempio utilizziamo il modulo WeMos D1 mini
per leggere i dati di luminosità forniti
dal sensore TSL2561.
Sono utilizzati i seguenti pin
Pin +3.3V -> Alimentazione TSL2561
Pin GND -> GND TSL2561
Pin D1 -> pin SCL TSL2561
Pin D2 -> pin SDA TSL2561
Creato il 14/8/2017 da Adriano Gandolfo
Sito web http://www.adrirobot.it
Blog http://it.emcelettronica.com/author/adrirobot
Pagina Facebook https://www.facebook.com/Adrirobot-318949048122955
Istagram https://www.instagram.com/adrirobot/
This example code is in the public domain.
*/
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_TSL2561_U.h>
Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT, 12345);
void setup(void)
{
Serial.begin(9600);
Serial.println("Test sensore TSL2561");
Serial.println("");
/* Iinzializzazione sensore */
if (!tsl.begin())
{
Serial.print("TSL2561 non trovato");
while (1);
}
tsl.enableAutoRange(true);
tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS);
Serial.println("");
}
void loop(void)
{
/* Get a new sensor event */
sensors_event_t event;
tsl.getEvent(&event);
/* Mostra il risultato (luce misurata in lx) */
if (event.light)
{
Serial.print(event.light);
Serial.println(" lx");
}
else
{
Serial.println("Sensore fuoriscala");
}
delay(250);
} |
|
Elenco
revisioni: |
01/05/2019 |
Aggiornato programma Crepuscolare |
17/09/2017 |
Inserito gestione del sensore tramite modulo WeMos D1
mini |
30/04/2017 |
Emissione preliminare |
Private Policy
Cookie Policy