Sensore di luce GA1A12S202WD

ultimo aggiornamento 1 maggio 2019


 

Indice

Descrizione

Il sensore GA1A12S202WP prodotto dalla Sharp è un sensore di luce con uscita analogica di tipo logaritmico, questo può essere utilizzato per sostituire nei circuiti le normali fotocellule CdS.
Il sensore si presenta come un piccolo componente a montaggio superficiale tipo SMD dalla dimensioni di 2x1,6mm per uno spessore di 0,6mm, con quattro pin.
Dallo schema a blocchi si può notare che sono presenti due fotodiodi uno principale e uno utilizzato per la compensazione della sensibilità spettrale
Il segnale fornito dai due fotodiodi confluisce in un amplificatore di corrente con compensazione della caratteristica della temperatura, il legnale in uscita dall'amplificatore passa ancora attraverso un amplificatore logaritmico  e da qui tramite una resistenza viene postato al pin OUT.
Per l'uso è disponibile uno speciale modulo prodotto dalla Adrafruit con codice articolo id:1384.

Schema interno del sensore GA1A1S202WP

Grafico dell'uscita del sensore, rapporto tra corrente e lux corrispondenti

homotix

Il sensore non richiede un microcontrollore, la tensione analogica di uscita aumenta con la quantità di luce che colpisce il sensore.
Questo sensore offre molti miglioramenti rispetto alle normali fotocellule avendo un vero rapporto logaritmico con livelli di luce.
La maggior parte dei sensori di luce hanno una relazione lineare con livelli di luce, il che significa che non sono molto sensibili ai cambiamenti di luce in zone oscurate e molto elevata quando c'è molta luce. A volte si può modificare una resistenza per migliorare la resa per luoghi chiari o scuri, ma è difficile ottenere buone prestazioni ad entrambe le estremità.
L'uscita del sensore è logaritmica su una vasta gamma dinamica da 3 a 55.000 Lux, quindi con un'elevata sensibilità a bassi livelli di luce, ma anche a valori elevati, in modo da poter usare al chiuso o all'aperto senza modificare il codice o la calibrazione.
Poiché il sensore è fabbricato su un chip, ci sono anche un minor numero di variazioni di fabbricazione, in modo da non dover calibrare il sensore da una scheda ad un'altra.
Il suo utilizzo è molto semplice, infatti è sufficiente collegare il Vin a 2,3-6Vdc, Gnd a terra e misurare l'uscita analogica su OUT.
Si otterranno sino a 3V con luce diretta del sole all'aperto.
Per il collegamento ad Arduino, basta usare analogRead() con il pin  OUT collegato a un pin analogico.
Sulla scheda breakout è presente una resistenza 68KΩ tra OUT e GND per trasformare la corrente in una tensione.

Vista del kit di vendita della Adafruit

Vista lato componenti del modulo, al centro è visibile il sensore, alla sua destra la resistenza per convertire l'uscita in corrente in tensione.

Vista posteriore del modulo, è visibile la scritta che riporta i limiti di alimentazione

GA1A1S202WP OPIC Light Detector

Piedinatura Datasheet Foto dell'integrato

Utilizzo con Arduino - Semplice Luxmetro

Il cablaggio questo sensore è molto semplice. Come abbiamo visto può essere alimentato da 2.3-6V, ed ha un'uscita analogica fino a 3V max.
Per utilizzare con Arduino, i collegamenti da effettuare sono:

Dal momento che il campo di uscita del sensore è 0-3V, per la massima risoluzione, è meglio utilizzare il pin 3.3V come riferimento di tensione, valore esatto da verificare tramite multimetro..
Per fare questo, eseguire un ponticello da 3.3V a AREF sul vostro Arduino. Nel codice, assicurarsi di specificare analogReference(EXTERNAL).
Quando si utilizza un riferimento analogico esterno, è importante specificare analogReference(EXTERNAL) nel codice prima di eseguire qualsiasi analogRead() lIn caso contrario, vi sarà un cortocircuito tra il vostro riferimento esterno al riferimento 5V interno predefinito. Questo può danneggiare il vostro Arduino.
Il programma fornisce il valore dei LUX letti sia tramite il monitor seriale sia sul display LCD se questo è collegato.
Il tipo di display LCD utilizzato è comandato tramite un collegamento seriale, questo permette l'utilizzo di un solo pin Digitale (nel nostro caso i pin 2, il 3 non è necessario, in questo caso è necessario far ricorso alla libreria SoftwareSerial
Per le istruzioni di come realizzare il display vedere l'apposita pagina.
Il programma, mostra nel caso dell'uscita su monitor seriale vari dati quali:
Il dato grezzo fornito del convertitore analogico, il relativo valore di tensione, tramite il valore della resistenza presente sul modulo risale al valore di corrente in uscita e da questo mediante calcolo al valore in Lux, letto dal sensore.
Nel caso della lettura su display LCD viene mostrato solo il valore in Lux.

Tabella di riferimento valori tipici di LUX

Illuminamento

 Esempio

0.002 lux

Senza luna limpido cielo notturno

0.2 lux

Minimo di Design per illuminazione di emergenza (AS2293).

0.27-1

 lux Luna piena in una notte serena

3.4 lux

Limite oscuro del crepuscolo civile sotto un cielo chiaro

50 lux

Famiglia soggiorno

80 lux

Corridoio / WC

100 lux

Giornata nuvolosa molto scuro

300-500

lux Alba o tramonto in una giornata limpida. Ben illuminato zona ufficio.

1.000 lux

Coperto giorno; tipica illuminazione studio TV

10.000 - 25.000 lux

La luce del giorno completa (non sole diretto)

32.000 - 130.000

lux La luce solare diretta

Schema di collegamento con lettura tramite Monitor seriale

Vista dei collegamenti tra sensore e scheda Arduino, la lettura è fatta attraverso il monitor seriale.

Dettaglio del modulo sensore

Schema di collegamento con lettura tramite LCD 16x2 I2C

 

Display LCD 16x2 con adattatore/convertitore dal bus seriale I2C al bus parallelo

Schema di collegamento con lettura tramite LCD 16x2 seriale

Vista dei collegamenti tra sensore e scheda Arduino
la lettura è fatta attraverso display 16x2

Foto del display seriale utilizzato

Listato del programma per la gestione del sensore

Passiamo ora a testare il sensore, per questo caricheremo il programma sotto riportato, attivando il monitor seriale, potremmo leggere i dati caratteristici forniti dal sensore, se è collegato anche il display( in questo caso del tipo con modulo interfaccia I2C), potremmo leggere il valore il lx misurato.


Scarica il programma

 

/*####################################################################
  FILE: Test_sensore_GA1A12S202.ino
  VERSION: 2.0
  Descrizione: Programma di prova per sensore analogico di luce tipo GA1A12S202

  Collegare l'uscira del sensore al pin Analog Pin 0
  Collegare il pin 5v to VCC e GND a GND
  Collegare il pin 3.3v al pin AREF
  Collegare il in Digital 2 al LCD

  Creato il 31/05/2014 da Adriano Gandolfo
  Modificato il 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.
  #######################################################################*/


#define aref_voltage 3.25 // Verificare il valore con un multimetro!
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

int luxSensorPin = A0;
void setup()
{


  analogReference(EXTERNAL); //

  Serial.begin(9600);
  Serial.println("Test sensore analogico di luce Adafruit");
  Serial.println("Tipo GA1A12S202");
  //Inizializzazione display
  lcd.begin(); //Init with pin default ESP8266 or ARDUINO
  lcd.backlight();
}

void loop()
{
  //lettura dati dal sensore
  int U = analogRead(luxSensorPin); //Valore grezzo
  float V = U * aref_voltage; //
  V /= 1024.0;              //Valore in V
  float I = (V / 68000);    //Valore in A
  I = I * 1000000;          //Corrente in uA
  float Ev = pow(10, I / 10); //Valore lux
  //Stampa dati
  Serial.println(" ");
  Serial.print("Valore grezzo : ");
  Serial.println(U);
  Serial.print("Tensione : ");
  Serial.print(V);
  Serial.println(" V");
  Serial.print("Corrente: ");
  Serial.print(I);
  Serial.println(" uA");
  Serial.print("Flusso : ");
  Serial.print(Ev, 1);
  Serial.println(" lx");

  //Scrittura dati su display LCD
  lcd.setCursor(0, 0);
  lcd.print("Luxmetro"); // Scrive messaggio
  lcd.setCursor(0, 1);
  lcd.print("Lux = ");
  lcd.print(Ev, 1);


  //Pausa tre le letture
  delay(1000);
}

 

Elenco revisioni:

01/05/2019

Aggiornato programma di test

28/04/2019

Aggiornato pagina

24/06/2014

Emissione preliminare
Private Policy Cookie Policy