Sensore di luce
Fotoresistenza
ultimo aggiornamento 23 aprile 2017


JLCPCB - 10 PCB per $ 2 (100 * 100 mm, 2-layer)
Il più grande produttore di PCB in Cina, oltre 600.000 clienti e oltre 10.000 ordini online al giorno
Produzione veloce in sole 24 ore e preventivo online gratuito: https://jlcpcb.com/quote


Indice

Teoria

Le fotoresistenze sono delle resistenze il cui valore dipende dall’intensità e dal colore della luce che le colpisce; in genere sono dei sottili film di solfato di cadmio su un supporto rigido, chiusi in involucri protettivi trasparenti.
Data la struttura fisica, si comprende come questi non siano quasi mai elementi di potenze elevate; valori caratteristici della massima potenza dissipabile sono sui 50mW per le più piccole, circa 1 W per le più grosse.
Le fotoresistenze sono caratterizzate dalla curva di sensibilità, cioè dal colore al quale sono maggiormente sensibili e dai valori della resistenza al buio e alla luce forte, dette valore di buio e valore di luce; si ha indicativamente:

  • valore di buio: qualche MΏ;

  • valore di luce: intorno al KΏ.

Il campo di variabilità è quindi molto elevato, dell’ordine di 1000.
La loro caratteristica di illuminazione è definita dall’equazione

R= ALa

dove:

R è la resistenza del componente in ohm
A è la resistenza in condizioni di illuminamento unitario in ohm
L è l’intensità della radiazione luminosa espressa in lux
a è una costante che varia tra 0.7 e 0.9.


Quindi, date la resistenza di buio e di luce, si può tracciare una caratteristica rettilinea (in scala logaritmica) che approssima abbastanza bene quella reale (vedi grafico).
Bisogna però tener presente che questi elementi sono “lenti” (variazione di circa 200 KΏ/s) cioè se la luce varia rapidamente non è detto che il valore della resistenza la segua con la stessa legge.

OurPCB, your most reliable PCB and PCBA supplier.

Focusing on PCB Prototype and PCB Assembly Turnkey Services.

One-Stop Wire Harness & Cable Assemblies Solution

 Fotoresistenza
Piedinatura Datasheet Foto

 

Resistenza con luce di 10 lux (a 25 ° C)

 8-20KΩ

Resistenza con buio a 0 lux

 1 MΩ· (min)

Valore di gamma a 100-10 lux

 0.7

Dissipazione di potenza (a 25 °C)

 100mW

Max tensione  (a 25 °C)

 150V

Risposta spettrale di picco (a 25 °C)

 540 nm

Campo temperatura ambiente

 - 30- + 70 °C

Altre tipologie di sensori di luce

Sono disponibili altre tipologie di sensori di luce oltre quelli illustrati in questa pagina, per le informazioni a loro riguardo cliccare sulla foto relativa

Sensore di luce GA1A12S202WD KY-018 Photo resistor module APDS-9002 Miniatur Photo Sensor

Lettura luminosità tramite Arduino

Vediamo come utilizzare il sensore di luce che per chi ha realizzato il robot ROBOZAK, ha ricevuto allegato al fascicolo n°22, si tratta di un sensore di luce, questo è composto principalmente da una fotoresistenza che modifica il suo valore di resistenza al variare della luminosità ambientale
Il sensore è dotato di un connettore simile a quelli dei
servomotori, e viste le sue caratteristiche andrà collegato ad una degli ingressi analogici della scheda Arduino.

 

Caratteristiche

Campo operativo più di 80 Lux
Tensione alimentazione 5V
Dimensioni 12.9mm x 14.6mm
Peso 5,8g
Lunghezza cavo 322 mm

 

Arduino Nano Arduino Nano
I/O shield

Schema elettrico del sensore
(non ufficiale)

 

arduino_fotocellula-1.jpg arduino_fotocellula-2.jpg

 

ser_lcd-spark-fun_prova.jpg

Il programma sotto riportato prevede l'utilizzo oltre che del sensore di luce connesso alla porta AD0 la connessione di un display LCD seriale, in questo caso quello costruito sulla base del progetto della SparkFun.
Il display è connesso alla porta digitale 3.
Il programma in base al valore rilevato dalla fotocellula provvede anche all'accensione del led connesso alla porta digitale 13, led presente sulla scheda.

Codice del programma
Il codice è compatibile con l'IDE sino alla versione 023

/*
 Lettura_Fotocellula_lcd.pde
 Il programma monitorizza una fotocellula collegata alla porta AD0
 e riporta il valore sul LCD,lo stesso valore è anche inviato al
 PC dove può essere visualizzato sul Serial monitor.
 In base al valore letto viene anche acceso il led collegato alla
 porta digitale pin 13.

 
 Vengono utilizzati i seguenti pin
 Pin +5V         -> Alimentazione
 Pin GND         -> Alimentazione
 Pin Digital 3   -> Trasmissione dati seriali
 Pin Analogico 0 -> lettura fotocellula
 
 Creato il 19/12/2010
 da Adriano Gandolfo 
 This example code is in the public domain.
 */

// Inclusione della libreria SoftwareSerial in
// modo da poter utilizzare le sue funzioni:
#include 
#define rxPin 4
#define txPin 3

int fotoresistenzaPin = 0  ;   // il centro del partitore lo colleghiamo al pin 0
int fotoresistenzaReading;     // il valore che conterrà la lettura
int valore =90;

// Imposta una nuova porta seriale
SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);
byte pinState = 0;

void setup()  {
  // definisce i pin per tx, rx:
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  pinMode(13, OUTPUT);

  // imposta la velocità della porta per LCD
  mySerial.begin(9600);
  // imposta la velocità della porta per PC
  Serial.begin(9600);   
}
// Resetta il display, annullando qualsiasi scorrimento
// e la rimozione di tutto il testo
void clearLCD(){ 
  mySerial.print(0xFE, BYTE); //command flag 
  mySerial.print(0x01, BYTE); //Comando clear //
  delay(50); 
} 
// Avvia il cursore all'inizio della prima linea
void firstrow(){ 
  mySerial.print(0xFE, BYTE); 
  mySerial.print(128, BYTE); 
  delay(2); 
} 
// Avvia il cursore all'inizio della seconda linea
void secndtrow(){ 
  mySerial.print(0xFE, BYTE); 
  mySerial.print(128+64, BYTE); 
  delay(2); 
} 

// Routine lettura e stampa valore su PC o LCD
void loop (){ 
  fotoresistenzaReading = analogRead(fotoresistenzaPin);  // lettura grezza dall'adc
  
  // Accensione led
  if (fotoresistenzaReading > valore) {
    digitalWrite (13, HIGH);
  } 
  else if (fotoresistenzaReading < valore) {
    digitalWrite (13, LOW);
  }

  //Invia dati su porta seriale PC
  Serial.print("Lettura analogica: = ");
  Serial.println(fotoresistenzaReading);     //stampiamo il valore 
  
  // Stampa su LCD
  clearLCD();
  delay (50);
  firstrow();
  mySerial.print( "Lettura LDR" ); 
  secndtrow();
  mySerial.print("Valore: = ");
  mySerial.print(fotoresistenzaReading);     //stampiamo il valore  
  delay(1000); // Pausa tra le letture 

 

Lettura luminosità tramite Basic Stamp

Il sensore di luce visibile a lato (la dimensione della basetta è di circa 19x23mm), potrà essere utilizzato per esempio per reagire ad una fonte di luce quale può essere una torcia elettrica attivando magari un allarme sonoro.
Il modulo sensore di luce è formato da una Fotoresistenza che fa parte in un circuito RC.
La luce, variando la resistenza, modifica la costante di tempo.
Il valore di tale parametro risulta essere (per ragioni fisiche) inversamente proporzionale all'intensità luminosa rilevata.

 

Elenco componenti
R1 220 ohm 1/4W
C1 10nF multistrato
FTR Fotoresistenza
SV1 strip 3 pin femmina
 

Questo modulo è descritto sul numero 277-278 in edicola nel mese di Luglio 2008 della rivista Fare Elettronica nella sezione ROBOT ZONE nell'articolo dal titolo Moduli input/output per la scheda robotica che descrive la costruzione di ben 11 moduli da collegare alla scheda basata sul processore BS2 SX di PARALLAX.

Circuito stampato e disposizione componenti


Programma TEST_MODULO_LUCE.bsx

Quella visibile nelle foto a lato è un piccolo modulo (la dimensione della basetta è di circa 3 cm di lato) che installato sulla scheda BS2 della DeAgostini permette di rendere il robot sensibile alla luce.
L'articolo da cui ho preso spunto, era disponibile a suo tempo sito della DeAgostini ora non più disponibile.
Ho quindi realizzato il circuito stampato, saldato i componenti e collaudato la scheda con un semplice  programma con esito positivo.
Nella pagina è possibile scaricare il circuito (compreso di stampato) sia in formato compatibile con il programma EAGLE che in formato PDF

 

Elenco componenti
R1,R2 220 ohm 1/4W
C1,C2 10nF multistrato
FTR1, FTR2 Fotoresistenza
JP1 connettore maschio 2x10 90°

Per scaricare il
circuito per
Programma EAGLE

Per scaricare il
circuito in
Formato PDF

Circuito stampato e disposizione componenti

Foto della fase di prova del circuito

Programma di prova

' Prova_luce.BS2
' Programma per il collaudo del sensore luce
' questo utilizza l'istruzione RCTIME che misura la
' carica/scarica di un circuito resistenza/condensatore

' {$STAMP BS2}
' {$PBASIC 2.5}

RC_DX PIN 8
RC_SX PIN 11
result_DX VAR Word
result_SX VAR Word

Main:
 DO
     HIGH RC_DX                                                                              ' carica il condensatore C1
     PAUSE 1                                                                                   ' per 1 ms
     RCTIME RC_DX, 1, result_DX                                                      ' misura il tempo di scarica RC fotoresistenza destra
     HIGH RC_SX                                                                              ' carica il condensatore C2
     PAUSE 1                                                                                   ' per 1 ms
     RCTIME RC_SX, 1, result_SX                                                      ' misura il tempo di scarica RC fotoresistenza sinistra
     DEBUG HOME, "Valore fotoresistenza SX=" , DEC result_SX, CR  ' mostra il valore
     DEBUG "Valore fotoresistenza DX=" , DEC result_DX                    ' mostra il valore
     PAUSE 50
    LOOP
END


Programma prova_sensore luce

Lettura luminosità tramite Cubloc CB220

Questo sensore è stato oggetto di un articolo pubblicato sulla rivista Fare Elettronica n° 292 in edicola nel mese di Ottobre 2009 nella sezione ROBOT ZONE (pagine 100-107), che riguardava la Scheda robotica con Cubloc CB220 e dal titolo "Scheda robotica con CUBLOC CB220 - Sensori e moduli di output"  che descrive la costruzione e l'utilizzo di alcuni sensori da utilizzarsi con la scheda.

Descrizione
Il modulo sensore di luce è formato da una fotoresistenza, la cui valore di resistenza dipende dall’intensità e dal colore della luce che le colpisce; in genere sono dei sottili film di solfato di cadmio su un supporto rigido, chiusi in involucri protettivi trasparenti.
Nel sensore la fotoresistenza fa parte di un partitore di tensione, la luce, variando la resistenza, modifica la tensione di uscita che può essere misurata tramite uno dei convertitori A/D presenti nel processore CB220.

Elenco componenti
R1 10 Kohm 1/4W
FTR Fotoresistenza
SV1 strip 3 pin femmina


File Eagle

 

Prototipo del sensore di luce.

Montaggio e collaudo
Dopo aver realizzato il circuito stampato, o data la semplicità, un piccolo ritaglio di basetta millefori e aver saldato i componenti, si collegherà il modulo alla scheda utilizzando per esempio la porta ADC0.
Si potrà passare al test del modulo utilizzando l’apposito programma che mostrerà il valore letto dalla fotoresistenza.
Questo mostra solo il valore fornito dal convertitore che sarà compreso tra 0 e 1023


Schermata del programma test sensore di luce.


Scarica il programma

Lettura luminosità tramite scheda MR-C-3024

Allegato al fascicolo n°22 troviamo il primo sensore per il Robot RoboZak, si tratta di un sensore di luce, questo è composto principalmente da una fotoresistenza che modifica il suo valore di resistenza al variare della luminosità ambientale
Il sensore è dotato di un connettore simile a quelli dei
servomotori, questo andrà inserito nella scheda di controllo utilizzando gli apposti ingressi analogici, per il controllo si utilizza la scheda di controllo del Robot RoboZak denominata MR-C3024 dotata di un processore ATMEL ATMega 128L con un clock di  7.4MHz, con memoria interna supportata da una memoria aggiuntiva EEPROM da 64k*8 per Robo-Script e per programmi Robo-Basic.

Caratteristiche

Campo operativo più di 80 Lux
Tensione alimentazione 5V
Dimensioni 12.9mm x 14.6mm
Peso 5,8g
Lunghezza cavo 322 mm


Schema elettrico del sensore
(non ufficiale)

 

scheda_robozak_componenti.jpg scheda_robozak_rame.jpg

 

 

Per un esempio di utilizzo vedere il programma SPIDERLIGHT.BAS riportato nel fascicolo 51


Programma
SPIDERLIGHT.BAS

Il programma riportato sotto può essere utilizzato per leggere il valori letti dal sensore


Programma
Lettura_fotocellula.bas

'======================================
' Lettura_fotocellula.bas
' di Adriano Gandolfo
' www.adrirobot.it
'======================================
'Definizione variabili
DIM luce AS INTEGER

'Inizializzazione LCD e
LCDINIT
PRINT "&$"
DELAY 500

lettura:
luce=AD(0) 'Il valore letto dalla porta 0 è salvato nella variabile luce
PRINT "1Lettura sensore#$"
DELAY 100
PRINT "2Valore="
PRINT FORMAT(luce,DEC,2) ' Viene mostrato il valore letto
PRINT "#$"
DELAY 100
GOTO lettura

 

Istruzioni in roboBasic per la lettura e scrittura porte digitali/analogiche

IN p, v
L'istruzione IN legge il valore digitale (0 o 1) dalla porta indicata dal parametro p. Tale valore viene memorizzato nella variabile v.
Esempio:
IN 32, x - Legge il valore presente sulla porta digitale 32 (ossia la porta AD0, utilizzata in modalità digitale) e lo memorizza nella variabile x.

x = AD(p)
L’istruzione AD viene utilizzata per ‘leggere’ il valore presente sulle diverse porte AD della scheda di controllo MR-C3024. Quando si collega un sensore a una delle otto porte, il valore di tensione elettrica su quest’ultima varia in base all’interazione del sensore con l’ambiente. Sebbene ogni sensore utilizzi un diverso ‘stimolo’ per attivarsi, per la scheda di controllo non vi è nessuna differenza, tranne il rilevamento di una diversa tensione elettrica. Il parametro p rappresenta il numero di porta AD (da 0 a 7) che viene letta, alla quale deve essere collegato il sensore. La variabile x, invece, viene utilizzata per memorizzare il valore restituito dall’istruzione AD. Il valore letto è un BYTE e può variare, quindi, tra 0 e 255. Se il sensore non rileva nulla (nel caso del sensore luminoso, ad esempio, c’è la totale assenza di luce) il valore restituito è pari a 255. Se invece il sensore rileva la condizione più ‘estrema’ possibile (considerando ancora il sensore di luce, quindi, vi è la massima condizione di luminosità) il valore restituito è pari a 0. I valori compresi tra 0 e 255 corrispondono a situazioni di rilevamento intermedie. Se alla porta AD non è collegato nessun sensore e si tenta comunque di leggerla, viene restituito il valore 255. Come al solito, è necessario dichiarare una variabile prima di utilizzarla, mediante l’apposita istruzione DIM.
Esempi:
Y = AD(5) - Memorizza nella variabile Y il valore letto sulla porta AD numero 5.
J = AD(3) - Memorizza nella variabile J il valore letto sulla porta AD numero 3.

OUT p, v
L'istruione OUT scrive il valore digitale specificato dal parametro v (0 o 1), sulla porta digitale indicata dal parametro p. Sulla scheda di controllo MR-C3024 non esistono porte specificatamente digitali: piuttosto le normali porte possono essere utilizzate in modalità digitale. Le porte AD da 0 a 7, corrispondono alle porte digitali da 32 a 39, la porta a cui si collega il LED, invece, alla porta digitale 52.
Esempio:
OUT 52, 0 - Scrive il valore 0 sulla porta a cui è collegato il LED (0 accende il LED, 1 lo spegne).

Altro metodo per la lettura del sensore è quello di utilizzare il programma RZ1 Basic , ecco come fare:

Segnalazione della pagina come argomento caldo del FORUM

Elenco revisioni

23/04/2017

Aggiornato tutta la pagina

24/06/2014

Inserito sensore GA1A12S202WP

16/03/2012

Emissione preliminare