Problema lettura analogica

Ciaoo a tutti, ho un problema con la lettura analogica di un sensore di temperatura e di una fotoresistenza...però quando imposto il codice con solo la lettura del primo funziona tutto e lo stesso vale per la fotoresistenza, ma quando vado a leggere entrambi nello stesso sketch mi da valori della temperatura che vanno dai 15°C ai 30°C...quale potrebbe essere il problema? Questo è il codice:

//_____temperatura
float tempC;
int tempPin = 0;

//_____fotoresistenza
int fotoresistenzaPin = 1; 
int fotoresistenzaValue; 

void setup()
{
Serial.begin(9600); 
}

void loop()
{
tempC = analogRead(tempPin);  
tempC = (5.0 * tempC * 100.0)/1024.0;  
Serial.print("Temperatura: ");
Serial.println(/*(byte)*/tempC);  
fotoresistenzaValue = analogRead(fotoresistenzaPin); 
Serial.print("Valore luminosità = ");
Serial.println(fotoresistenzaValue);

delay(1000);
}

Grazie :)

Ciao,

quando hai più sensori collegati ai pin analogici devi mettere una resistenza da 10k tra il sensore ed il pin analogico di input ed un condensatore da 10nF tra il sensore e terra. Questo per entrambe i sensori.

Lo avevo chiesto anche io tempo fa, ma non ritrovo il post, a meno che il tuo problema non sia diverso. Aspettiamo comunque qualcuno più esperto per una conferma, e magari anche per una spiegazione, che non ricordo molto bene :blush:

Emanuele.

..... e se accendi dei led collegati all'alimentazione di arduino, sulle letture analogiche hai dei risultati ancora più sballati. Provare per credere. Usare un alimentazione esterna per sensori e accessori vari è la soluzione migliore, a parte la resistenza e condensatore come detto sopra ciao

Il problema principale riguarda la tensione di alimentazione prelevata dalla usb, che non essendo costante falsa le misure. Il problema scompare alimentando arduino dal connettore principale con almento 7Volts.

Ciao.

Purtroppo il problema non scompare con alimentazione esterna stabilizzata ad arduino.

ho un alimentatore stabilizzato di un PC 12v e usb scollegata

2 sensori luce 2 LM35Dz affiancati sulla board 14 led 6 pulsanti 2 interruttori 1 ricevitore IR 1 Trasmettitore IR

passo 1) tutti i led sono spenti ......temperatura di entrambi gli LM35 23.8 C passo 2) accendo i led uno alla volta i valori di temperatura su entrambi arrivano a 29.3 C...... i valori lux scendono il ricevitore Ir non è più efficiente come prima

Il controller mi sa che ci patisce un po' quando succhio corrente :grin: Domani proverò ad alimentare tutto con l'alimentazione a monte di Arduino e vediamo che succede ciao

Alcuni consigli per miglioare le letture: 1) l'ADC interno dell'Atmega viene alimentato tramite AVCC (pin 20). E' lì che dovete fornire un'alimentazione stabile. 2) usate l'AREF interno a 1V1, è molto più preciso e stabile di quello di default, agganciato a Vcc e quindi soggetto alle sue fluttuazioni. Inoltre usate un C di decoupling fra i pin AREF e AVCC. 3) provate a fare una serie di 10/20 letture per pin ed a prendere solo l'ultima, così da permettere al circuito Sample-&-hold interno di caricarsi per bene prima della lettura finale 4) intervallate le letture per dar modo al circuito di resettarsi come si deve.

@pablos: ovviamente i 14 led non li accendi mai tutti insieme, vero?

ovviamente i 14 led non li accendi mai tutti insieme, vero?

Mi sa di si, anche se decidesse di far scorrere 5ma per led sarebbero 75mA, che unito alle altre utenze potrebbero mettere in crisi il regolatore interno.

Sicuramente contribuisci anche il circuito usato per alimentare i vari sensori, ad esempio i led li colleghi ad una linea lunga tutti insieme e a questa linea non colleghi altri carichi come sensori che invece colleghi più vicino possibile alla sorgente attraverso un altra linea che termini con un condensatore da 1 - 2.2uF. Così hai disaccopiato le linee. Spero sia chiaro, magari fai vedere il circuito se è su breadboard.

Io non ho mai rilevato questa variazione così importante alimentando arduino con 9 Volts, la temp è stabile inchiodata. Ciao.

ciao Leo

  • cosa intendi per "usate l'AREF interno a 1V1, è molto più preciso e stabile di quello di default"? sul mio ADK pin 20 c'e' scritto SDA.... faccio già dei campionamenti prima di inviare il valore.

Per quanto riguarda i led ..... si li accendo anche tutti insieme ovviamente ci sono le adeguate resistenzine. Ti spiego in fase di sperimentazione non voglio creare un alberello di natale :) mi servono solo per visualizzare otticamente quello che succede mentre si esegue il programma e a volte si accendono tutti per breve tempo, il mio scopo finale è quello poi di optoisolare tutto, se al momento le letture subiscono una variazione poco importa e solo un test. E un progetto che attualmente ha 11 file su sd e ne farò ancora, può capitare che si accendano tutti :) spero di non far soffrire troppo Arduino :grin:

Grazie per la precisazione

ciao

Per AREF a 1V1 ti consiglio la lettura di questo documento: http://arduino.cc/en/Reference/AnalogReference

In sintesi, l'ADC, il convertitore analogico/digitale, opera confrontando la tensione in ingresso con una tensione di riferimento. Normalmente la tensione standard è quella di lavoro, ossia 5V. Però la tensione presa dal pin AVCC può subire fluttuazioni che influenzano le letture (come hai potuto constatare). Usando la tensione del generatore interno a 1V1 hai un campione per la comparazione molto stabile. Però devi mettere un partitore sugli ingressi per portare la tensione a 1V1. Parlando di AVCC, mi riferisco al piedino fisico n°20 del micro. Sull'Arduino mi pare sia collegato a Vcc ma se hai un circuito in standalone sarebbe bene collegarlo ad una fonte diversa da quella con cui alimenti le utenze.

Tornando ai led, anche se hanno le R di riduzione, non puoi accendere tutti quei led contemporaneamente usando l'Atmega come fonte di corrente perché al max nel micro possono scorrere 200 mA. Rischi di fonderlo, visto che poi hai anche altri dispositivi collegati.

perfetto grazie .... ci do un occhio

ciao

Perfetto, grazie mille a tutti... quindi alla fine devo utilizzare un' alimentatore esterno, mettere resistenze da 10K e un condensatore a terra e il tutto per ogni sensore!...appena ho tempo c provo, l' unica cosa: l' alimentatore del PC va bene? eroga 5v e anche i 12V...

Devi controllare che siano ben stabilizzati (l’alimentatore è uno scarto o è vecchiotto?), hai un tester per le misurazioni?

Guarda le caratteristiche del tuo Arduino il mio ha queste:

Operating Voltage 5V Input Voltage (recommended) 9V Input Voltage (limits) 6-18V

quindi uso un alimentatore per pc così ho i 12v (Giallo-Nero) e anche i 5v (Rosso-Nero) è alimentato da più di un mese senza scaldarsi mai verifica i tuoi parametri prima

ciao

Perfetto, grazie mille a tutti... quindi alla fine devo utilizzare un' alimentatore esterno, mettere resistenze da 10K e un condensatore a terra e il tutto per ogni sensore!...appena ho tempo c provo, l' unica cosa: l' alimentatore del PC va bene? eroga 5v e anche i 12V...

Se ti riferisci al disaccoppiamento della sorgente di alimentazione, non è necessario mettere un condensatore per ogni sensore, e sufficiente riunire i sensori su una linea terminata da un condensatore. Nota che il disaccoppiamento può essere realizzato anche con componenti RC, per rendere ancora più immune da disturbi la linea. Es. VCC 10 ohm (serie) C10uf (paralello verso gnd), i sensori su questa linea sono immuni a fenomeni di durata minore alla costante di tempo RC.

Tutti i sensori o carichi con basso assorbimento e con assorbimento continuo non impulsivo possono essere riuniti in un'unica linea asservita dal filtro RC di sopra. Carichi che assorbono medio alta corrente (anche i led) in modo impulsivo o discontinuo possono influire sui sensori. In alcuni casi non cè soluzione se non quella di sdoppiare le alimentazioni a partire dai stabbilizzatori o addirittura in altri casi a partire dai trasformatori di rete.

Queste sono le fondamenta di elettronica che se non conosciute ed applicate portano un circuito teorico funzionante a non funzionare a dovere. Sapere da cosa deriva il problema serve a stabbilire come risolverlo quando il circuito dovrà funzionare a regime.

Ciao.

Ragazzi ho fatto tutto ed inoltre mentre lo sketch gira, tengo collegato anche un tester e infatti LM35 mi da fisso 210mV ovvero 21°C senza nessuno sbalzo...però io nella lettura ottengo sempre errori...non vorrei dire stupidate, ma dato che faccio due letture analogiche, non c'è qualche buffer da pulire o qualche registro? GRAZIE

Che reference stai usando per le letture analogiche? Quello interno a 1V1 oppure quello di default (5V)?

Quello di default!

Aspettate...ho appena scoperto una cosa! Quando c'è buio e quindi il valore della fotoresistenza tende a 0 la lettura della temperatura è corretta, mentre se lo lascio pienamente sotto la luce e il suo valore tende a 1024, mi fa una lettura errata dal sensore di temperatura! 0.o bho

Potresti pubblicare uno schemino dei collegamenti?

Allora dato che non so come fare lo schemino mi esprimo a parole: -LM35 Vcc +5V Vout pin A0 GND GND

-Fotoresistenza un piedino l'ho collegato ai +5V mentre l'altro l'ho collegato al pin A1 con un nodo che mi porta una resistenza da 10k al GND

comunque secondo me o è un problema SW oppure c'è qualche interferenza sui piedini del micro anche perché come ho detto, dal tester i valori non sballano i nessun caso!