Buongiorno e grazie in anticipo a chi vorrà aiutarmi.
Partendo da uno dei tanti sketch per i sensori in oggetto ne ho realizzato uno con due sensori di cui dopo farei la media delle letture, ma è un passo successivo.
Il problema è che le letture non sono costanti ma variano ciclicamente da 0 a valori alti e non sono coerenti. Questo per entrambi i sensori.
Il cablaggio è corretto.
Ok, su arduino UNO R3, quando si cambia canale analogico (ovvero, prima leggi un certo Ax e poi Ay) è d'obbligo effettuare almeno una lettura a vuoto (scartando il risultato) sul nuovo canale scelto per problemi di come funziona il circuito interno di S/H.
Metti uno schema dei collegamenti e delle alimentazioni ...
... gli LM35 sono sensori non raziometrici e come tali sono insensibili alle variazioni di tensione (dentro gli LM35 c'è un generatore a corrente costante, usato per la misura, che li rende indipendenti dalla tensione di alimentazione, che può essere compresa tra 4 e 30 V, e anche al rumore sulla stessa se non è troppo alto).
Il problema, in funzione dell'ampiezza delle oscillazioni, potrebbe essere l'ADC della MCU che richiede un riferimento di tensione preciso e noto (più gli eventuali problemi legati al rumore che possono causare notevoli fluttuazioni nella misura).
Per la conversione PWM per il pilotaggio dei LED delle luci psichedeliche ho messo doppie letture e 1ms di pausa fra l'una e l'altra. Se il programma deve girare più velocemente, usa millis() al posto dei delay:
void loop()
{
analogRead(IN_BASSI); bassi=analogRead(IN_BASSI);
delay(1); // I delay servono per evitare interferenze con le letture successive!
analogRead(IN_MEDI); medi=analogRead(IN_MEDI);
delay(1);
analogRead(IN_ALTI); alti=analogRead(IN_ALTI);
delay(1);
... ... ...
void loop() {
analogRead(Temp1); float T1=analogRead(Temp1)/2.048;
delay(1);
analogRead(Temp2); float T2=analogRead(Temp2)/2.048;
// Non metto il delay perché poi ce n'è uno di 100ms.
Serial.print(" T1 "); Serial.print(T1);
Serial.print(" T2 "); Serial.println(T2);
delay(100);
}