Rilevmento luce con fotoresistenza

Ciao ragazzi ho un problema con il rilevamento della luminosita, uso una fotoresistenza con una resistenza in serie.
Se avete qualche consiglio da darmi per favore aiutatemi che fra meno di una settimana ho un esame di stato e non so come fare. Se ce qualcos’altro da metterci al suo posto ditemelo
Grazie

#include <Wire.h>                                               
#include <LiquidCrystal_I2C.h>                                 
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); 
int umidita=A0;                                                 
const int POMPA=8;                                             
int luce = A1;                                                   
const int LUCE=5;                                               
int tempPin = A3;                                               
const int VENTOLE=3;                                           
float tempC;

void setup(){                                                                                       
  pinMode(POMPA, OUTPUT);                                       
  pinMode(LUCE, OUTPUT);                                       
  pinMode(luce, INPUT);                                         
  pinMode(VENTOLE, OUTPUT);                                     
  pinMode(tempPin, INPUT);                                     
 
    lcd.begin(20,4);                                               
  lcd.backlight ();                                             
}

void loop(){                                                     
  lcd.setCursor(0,0);                                             
  lcd.print("Umidita': ");                                     
  lcd.setCursor(10,0);                                         
  lcd.print (analogRead(A0));                                   
  lcd.setCursor(14,0);                                         
  lcd.print("%");                                               
 
   if (analogRead(A0)>100.0) {                                 
    digitalWrite (POMPA,   LOW);                                 
   }
   if (analogRead(A0)<700.0) {                                 
    digitalWrite(POMPA, HIGH);                                   
   }
 
   lcd.setCursor(0,1);                                         
  lcd.print("Luce: ");                                           
  lcd.setCursor(6,1);                                           
  lcd.print(analogRead(A1));                                   
  lcd.setCursor(10,1);                                         
  lcd.print ("lux");                                           
 
     if (analogRead(A1)<300) {                                   
    digitalWrite (LUCE, LOW);                                   
   }
   if (analogRead(A1)>400){                                     
    digitalWrite(LUCE, HIGH);                                     
   }
   
    tempC = analogRead(A3);                                     
    tempC = (5.0 * tempC * 100.0)/1024;                         
   lcd.setCursor(0,2);                                         
   lcd.print("Temp serra: ");                                     
   lcd.setCursor(12,2);                                         
   lcd.print(tempC);                                           
   lcd.setCursor(18,2);                                         
   lcd.print("C");                                               
   lcd.setCursor(17,2);                                                                                 
   lcd.print((char)223);                                       
   lcd.setCursor(0,3);                                           
   lcd.print("Ventole: ");                                     
   
  if (tempC >= 28.0 ) {                                         
    digitalWrite (VENTOLE, LOW);                               
  }
  if (tempC <= 27.0 ) {                                         
    digitalWrite(VENTOLE, HIGH);                               
  }
  if (digitalRead(VENTOLE) == LOW) {                                                       
    lcd.setCursor(9, 3);                                         
    lcd.print("ON");                                           
  }
  else {                                                       
    lcd.setCursor(9, 3);                                       
    lcd.print("OFF");                                           
  }

   delay(1000);                                                 
  lcd.clear();                                                   
}

ho un problema con il rilevamento della luminosita

Con questo noi dovremmo capire qual'è il problema? :o

Non so il perche fa cosi

Perdona, ma se non metti uno schema esatto dei collegamenti ... ... come pensi che noi facciamo a capire cosa succede ? ? ? :o

Guglielmo

come si inserisce la foto sul fourm? Scusate la mia ignoranza ma è da poco che sono iscritto qui :')

Ho collegato cosi

Se magari metti anche i valori delle resistenze, un LINK alla fotoresistenza usata (così si può vedere il datasheet) e ci spieghi esattamente QUALE è il problema che riscontri ... è meglio non ti pare? ::)

Guglielmo

resistenza da 10kohm fotoresistenza LDR GL5528. Il problema e che rimane fisso sul valore massimo e non scende anche oscurando la fotoresistenza

Quella fotoresistenza (da datasheet) ha un valore di 8/20KΩ quando illuminata e di 1MΩ quando è al buio ... ... ora, applica questi valori nel partitore resistivo e valuta ... se la tua R fissa è giusta o troppo piccola ... ::)

Guglielmo

gpb01: Quella fotoresistenza (da datasheet) ha un valore di 8/20KΩ quando illuminata e di 1MΩ quando è al buio ... ... ora, applica questi valori nel partitore resistivo e valuta ... se la tua R fissa è giusta o troppo piccola ... ::)

Guglielmo

Visto che a causa del circuito sample and Hold del Converttore A/D il circuito ha una impedenza troppo alta e non puó fornire la corrnete necessaria per caricare correttamente il condensatore S&H interno. Per ovviare questo problema metti un condensatore da 0,1µF tra il pin analogico e massa.

Usa come resistenza fissa una da 100k o 220kOhm.

Ciao Uwe

 lcd.print(analogRead(A1));                                   
  lcd.setCursor(10,1);                                         
  lcd.print ("lux");

Sono sicuro che il valore che leggi non sia LUX.

Le entrate analogiche non devono essere dichiarate entrate con pinMode() oltre a quello perché dichiari A1 come uscita?

pinMode(LUCE, OUTPUT);

Ciao Uwe

Quando ce scritto luce in piccolo e l'ingresso e sarebbe il valore da rilevare mentre quando è scritto in grande e un uscita perché mi accede una lampada. Raga per favore ditemi cosa fare datemi vuoi già tutto fatto perché sono un po in ritardo e non so che fare.

raga se non va con la fotoresistenza cosa posso metterci al suo posto come rilevatore?

Ma nessuno ha notato che non ha ancora spiegato in parole povere quale è il problema... Nonostante gli è stato chiesto quale è il problema risponde.... "Non capisco perché fa così" Ma così cosa??????

pablos:
Ma nessuno ha notato che non ha ancora spiegato in parole povere quale è il problema…

… posso solo IMMAGINARE che non gli vada questo pezzo di codice:

if (analogRead(A1)<300) {                                   
   digitalWrite (LUCE, LOW);                                   
}
if (analogRead(A1)>400){                                     
   digitalWrite(LUCE, HIGH);                                     
}

… e gli ho detto che probabilmente è troppo basso il valore della R … ma non ho visto né altre prove né risultati ::slight_smile:

Guglielmo

ragazzi il problema uno eh, non rileva la variazione di luminosita e rimane sempre scritto quello massimo cioè 1020/21. Ho messo una resistenza da 220kohm e niente rimane lo stesso cosi

Stai evidentemente [u]sbagliando il collegamento[/u] ...

Fai un semplice programmino che, SENZA FARE ALTRO, ti riporta sul monitor seriale il valore letto dal pin analogico ... ... io l'ho appena fatto al volo :smiling_imp: e mi oscilla da 25 (fotoresistenza illuminata) a 400 (fotoresistenza al buio) quindi ... ce n'è da identificare luce/buio :D

Guglielmo

Me lo puoi postare per favore così lo mett0 nel mio programma?

Cosa ? tre righe che leggono il pin analogico e lo visualizzano sul monitor seriale ? ? ? :o :o :o

T'ho detto di NON lavorare sul tuo programma, ma di scrivere tre righe che leggono il pin e lo visulaizzano così sei sicuro che funziona ...

int v = analogRead(pin);
Serial.println(v);
delay(1000);

... non è che devi fare di più è per verificare che la fotoresistenza reagisca :smiling_imp:

Guglielmo

Non da niente nessun valore