[RISOLTO]fotoresistenza schermo lcd

ciao a tutti… come da titolo del topic vorrei realizzare con uno schermo lcd e quindi con la sua retroilluminazione, pilotarla con una fotoresistenza…
è possibile che quando è buio, e quindi non si visualizza lo schermo, far quasi spegnere la retroilluminazione e quando c’e la luce far accedere sempre la retroilluminazione??
ho letto molti tipic che fanno accendere diodi o cose del genere, piu o meno è lo stesso principio???
grazie mille come sempre…:slight_smile:

Ciao :slight_smile:

Hai una fotoresistenza, un fotodiodo o un fototransistor ???

Guglielmo

ho una fotoresistenza...
ma non è un problema a cambiarla se non va bene..:):slight_smile:

No, no, va bene ... era solo per capire con cosa abbiamo a che fare XD

Bé ... lo sai come funziona il gioco no ? ]:smiley:

Quindi ... comincia a buttare la qualche idea e ... la correggiamo/sviluppiamo :wink: Inizia con dire tu come faresti ...

Guglielmo

si si so gi a come funziona il gioco...:):):):slight_smile:
vediamo se la notte porta buoni consigli.. 8) 8)
se ho letto bene da altri topic, la fotoresistenza andrebbe a pilotare un pin di arduino in PWM, pero essendo che non ha corrente sufficente per far accendere uno schermo o altri dispositivi, conviene mettere un transistor il quale si va a pilotare la base..

ho capito bene o mi sono perso in qualche passaggio??

Allora, il PWM è un OUTPUT e viene dopo (... quindi tu la retroilluminazione non la vuoi solo accendere e spegnere, ma anche avere valori intermedi di luminosità) ... adesso preoccupiamoci di capire come leggere in INPUT la fotoresisteza e decidere cosa fare :wink:

Quindi ?

Aiutino ... la fotoresistenza cambia la sua "resistenza" in funzione dell'esposizione alla luce ...
... al buio la sua resistenza è molto alta, alla luce è bassa.

Guglielmo

ok ottimo grazie mille per l'aiutino...:):):slight_smile:

ora meglio che dorma cosi non inizio il topic dicendo subito delle "cavolate"....ahhaha

ci sentiamo domani...
buona notte..... :sleeping: :sleeping: :sleeping: :sleeping:

A domani, buona notte :sleeping: :sleeping: :sleeping:

Guglielmo

ciaooo a tutti…
in questo modo ho fatto piu che altro acendi e spegni del display… non è un vero e proprio PWM…vediamo dove non è corretto

#include <LiquidCrystal.h>

//
int val1;
const byte lum = 10;
unsigned long fotoresistenza;
void setup()  
{  
  pinMode(A0,INPUT);  
  pinMode(lum,OUTPUT); 
  val1 = 0;
  
  
}  

void loop()  
{  
  int val1 = analogRead(fotoresistenza); // salvo il valore fotoresistenza dentro alla variabile val  
  
  if(val1<800) //il valore letto dalla fotoresistenza è basso spengo il pin 10
   analogWrite ( lum, 20);
   else 
   analogWrite (lum , 255);
  
    

}

Ciao,
non mi hai ancora specificato ...

... vuoi la retro-illuminazione legata con qualche proporzione alla luce ambiente o vuoi che al di sotto di un certo valore si accenda ed al di sopra si spenga ???

Guglielmo

allora in teoria va bene anche che se la luce ambiente è accesa la retroilluminazione è accesa e viceversa se la luce ambiente è spenta la retroilluminazione è quasi spenta...

pero ovviamente se imparo anche come si fa la proporzione retroilluminazione legato alla luce ambiente è sempre una buona cosa...:):slight_smile:
dimmi te

Allora ...

1a. c'è luce ambiente -> retroilluminazione spenta
1b. non c'è luce ambiente -> retroilluminazione accesa

... il controllo della retroilluminazione NON richiede PWM ... basta una digitalWrite(pin stato) per accendere e spegnere.

2. luce ambiente da 0 a 1024 (range del ADC) -> retroilluminazione da 255 a 0 (range del PWM)

... il controlo della retroilluminazine richiede il PWM e un po' di calcoli per aggiustare il valore.

Decidi tu perché, come puoi capire, sono due strade diverse ... :roll_eyes:

Guglielmo

ok... lo sketch che ti ho mandato prima dovrebbe essere piu o meno il numero 1 vero?? almeno va bene???:):):slight_smile:

ok proviamo a fare il 2 che è piu complesso ma piu completo...

Si, andava rivisto ma l'idea c'era ... ok allora per la soluzione 2.

Però prima di cominciare a scrivere il programma ...
... mi devi dire come pensi di misurare l'illuminazione, ovvero, come fai il circuito con la fotoresistenza ... lo schema mi devi far vedere :wink:

Consiglio: ... calma e ragiona ... e, senza usare Arduino ... ma usando solo il tester ... fatti una simulazione di ciò che poi sarà.

Guglielmo

ok ora provo a fare lo schema...

una curiosita... possiamo correggere quello di prima cosi vedo dove ho sbagliato e non mi porto dietro l'errore...

anche per chi legge a meta il topic..ahahaah

Mah .. a parte cose come dichiarare unsigned long il valore della variabile "fotoresistenza", quando un'analogRead() ti da un numero che, al massimo, è tra 0 e 1023 ... per il resto, di massima andrebbe anche e .. che messo li così ... senza sapere come e cosa leggerai ... è un po' prematuro ... :wink:

Guglielmo

ecco lo schema… diciamo io lo avrei fatto cosi senza arduino…

fotoresistenza.sch (211 KB)

Benissimo ... allora comincia montarlo e invia il segnale analogico su un pin di Arduino, poi scrivi un semplice programma che ti permetta di vederne l'andamento in funzione delle varie condizioni di illuminazione ...

In pratica ... nel loop(), ogni tot tempo, leggi il valore analogico e lo stampi sul serial monitor così ti rendi conto se hai ben tarato il potenziometro e in che range oscillano i valori in funzione dell'illuminazione (ricorda che analogRead() ti ritorna da un minimo di 0 ad un massimo di 1023) ...

Guglielmo

ok va bene.... visto con arduino faccio un po "schifino" ma in elettronica alcune cose mi vengono al primo colpo...
ahahahah

eccomi… scusate per la mia breve assenza ma è stato un week end di fuoco…:):slight_smile:
va bene questo sketch??

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const int PIN_SENSORE = 0; 

int lettura_sensore = 0 ;

void setup() {

  // setup dell’LCD numero di collonne e righe:
  lcd.begin(16, 2);

  lcd.print("Dati");

  Serial.begin(9600); 

}

void loop()  {

  lettura_sensore = analogRead(PIN_SENSORE); 

  Serial.print("Lettura Sensore ");
  Serial.println(lettura_sensore);

  delay(1000);  
  lcd.setCursor(0, 1);
  lcd.print(lettura_sensore);
}