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:
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.
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 ...
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));
}
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 ...
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è
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 ...
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