Valori fotoresistenze troppo variabili, cosa può essere?

Salve a tutti,
in un circuito con alcune fotoresistenze, sei servo motori e un port expander per controllare più led.

Ho dei valori delle fotoresistenze che cambiano molto a parità di luce.
Es B schizza a 1000 senza ragione, ma a volte succede ad A e così via...
Cosa può determinare questo fenomeno?

Qualche suggerimento?
Grazie mille

ES. VALORI a parità di illuminazione, A, B, C sono fotoresistenze:

A: 647
B: 571
c: 647

A: 692
B: 570
c: 688

A: 688
B: 587
c: 689

A: 688
B: 634
c: 689

A: 687
B: 1010
c: 684

A: 646
B: 568
c: 645

A: 646
B: 687
c: 645

Collegamento fotoresistenza:

  • già provato a staccare i motori
  • già provato a togliere alimentazione al chip

fedale:
Salve a tutti, in un circuito con alcune fotoresistenze, sei servo motori e un port expander per controllare più led.
Ho dei valori delle fotoresistenze che cambiano molto a parità di luce.
Es B schizza a 1000 senza ragione, ma a volte succede ad A e così via...

ES. VALORI a parità di illuminazione, A, B, C sono fotoresistenze:
A: 647
B: 571
c: 647
x = A - B: -42
ValoreRiferimento0

INIZIO<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
A: 692
B: 570
c: 688
x = A - B: -41
ValoreRiferimento0

A-B è 76 nel primo caso e 122 nel secondo. Già qui non capisco...
Che cos'è il ValoreRiferimento0?
Che cos'è >>>>>>>INIZIO<<<<... ?
Come sono collegate le fotoresistenze? Come è lo schema elettrico?
Forse basta un condensatore di filtro dopo ciascuna fotoresistenza.

... io nella foto di fotoresistenze non ne vedo ...

Forse sono collegate a qualcuno dei fili del groviglio... :slight_smile:

Forse ... pero' non ci vedo neppure molti altri componenti li ... non vorrei che stesse cercando di leggere le fotoresistenze semplicemente collegandole fra i pin e l'alimentazione (o la massa), senza averle inserite in rami resistivi fra VCC e GND ... :wink:

L'ho temuto anch'io, ma che leggerebbe? Sempre 1023 o sempre 0!

le fotoresistenze sono collegate così ma con il GND e 5v invertiti.

Comunque il problema è software non hardware.
Ha lo stesso comportamento anche senza hardware

basta caricare questo codice su Arduino e ci sono già i dati sulla seriale

dov'è l'errore ?
grazie

int fotoresistenzaA = A0;
int fotoresistenzaB = A1;
int fotoresistenzaC = A2;
int fotoresistenzaD = A6;
int fotoresistenzaE = A7;

int A = analogRead(fotoresistenzaA);
int B = analogRead(fotoresistenzaB);
int C = analogRead(fotoresistenzaC);
int D = analogRead(fotoresistenzaD);
int E = analogRead(fotoresistenzaE);

void setup() {

  Serial.begin(9600);

  pinMode(A0, INPUT);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  pinMode(A6, INPUT);
  pinMode(A7, INPUT);

}

void loop() {

  delay(300);

  Serial.print("A: ");
  Serial.println(analogRead(fotoresistenzaA));
  Serial.print("B: ");
  Serial.println(analogRead(fotoresistenzaB));
  Serial.print("c: ");
  Serial.println(analogRead(fotoresistenzaC));

}
void setup()
{
Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(A2, INPUT);
pinMode(A6, INPUT);
pinMode(A7, INPUT);
}

void loop()
{
Serial.print("A: "); Serial.println(analogRead(A0));
Serial.print("B: "); Serial.println(analogRead(A1));
Serial.print("C: "); Serial.println(analogRead(A2));
delay(300);
}

oppure:

#define INA A0
#define INB A1
#define INC A2
#define IND A6
#define INE A7

void setup()
{
Serial.begin(9600);
pinMode(INA, INPUT);
pinMode(INB, INPUT);
pinMode(INC, INPUT);
pinMode(IND, INPUT);
pinMode(INE, INPUT);
}

void loop()
{
Serial.print("A: "); Serial.println(analogRead(INA));
Serial.print("B: "); Serial.println(analogRead(INB));
Serial.print("C: "); Serial.println(analogRead(INC));
delay(300);
}

fedale:
...
Ha lo stesso comportamento anche senza hardware

Senza hardware (cioe', suppongo tu intenda senza nulla collegato al micro) gli ingressi, essendo ad alta impedenza, captano tutti i disturbi elettromagnetici ed elettrostatici dell'ambiente, per cui ti danno valori casuali, e quello e' normale ...

Prova senza nulla, ma collegando gli ingressi analogici a massa con relle resistenze (qualsiasi valore fra 10K e 100K, solo come pulldown) ... se anche cosi ti desse valori casuali, allora potrebbe essere il micro danneggiato ...

Certo... Gli ingressi aperti, con centinaia di megaohm di impedenza d'ingresso, captano di tutto...

Grazie Etemenanki,

ok, ma non risolve il mio problema.

già testato su 2 Arduini, anche con la tua configurazione, passa da valori molto bassi a valori alti e questo mi sballa tutto...
sinceramente non capisco da dove arrivano questi disturbi che non ho mai notato

eventualmente con dei condensatori potrei risolvere? di quale capacità?
ne avrei alcuni da 100 microfarad possono andare?

inoltre questi sbalzi dipendono anche dalla programmazione.... mi domando perchè :confused:

A: 0
B: 0
c: 0

A: 0
B: 0
c: 0

A: 0
B: 0
c: 0

A: 144
B: 41
c: 63

A: 170
B: 251
c: 209

A: 191
B: 274
c: 228

A: 183
B: 255
c: 220

A: 140
B: 204
c: 174

A: 0
B: 150
c: 39

A: 0
B: 110
c: 28

A: 0
B: 0
c: 0

Non sono un programmatore, pero' mi e' venuto un dubbio ... le fotoresistenze le leggi "istantaneamente" ? ... perche' mi sembra che l'ADC interno della MCU sia uno solo per tutti gli ingressi, multiplexato, per cui il modo piu corretto per poter avere valori "realistici" in un caso del genere potrebbe essere quello di fare piu letture con scarto e media ... ad esempio, leggo l'ingressi uno 4 volte di seguito, magari in un ciclo for (che potrebbe anche diventare una singola funzione per tutti gli ingressi, tu gli passi il numero dell'ingresso da leggere e lei ti restituisce il valore finale, ma questo magari piu avanti), scarto (non memorizzo) la prima, sommo i tre valori delle letture successive e poi divido per tre ... in teoria dovrebbe funzionare ... in teoria ...

Si può essere, adesso proviamo a mettere un piccolo delay tra una lettura e l altra x capire se può essere quello il motivo.

È poi vi facciamo sapere

A livello pratico non possiamo fare medie perchè rallentiamo troppo il programma
Ma se è quello troviamo la soluzione dopo.

Intanto grazie

Ehm ... guarda che se usi le fotoresistenze, non puoi comunque usarle per fare letture "veloci" ... non e' un problema di programma, ma di componente, una fotoresistenza ha in media circa 20mS di tempo di reazione quando la luce aumenta, e circa 30mS quando diminuisce, proprio a livello di componente fisico ... il che significa che in ogni caso, il valore resistivo stabile ce l'hai almeno 30mS (come minimo) dopo che c'e' stata una variazione di luce ...

Ho avuto anche io problemi di questo tipo con le fotoresistenze, alla fine ho risolto con il trucchetto della media...
E non ho neanche notato rallentamenti