u.r. 18-Gen-2026
In un precedente post, si è visto come usare un sensore AD590, con Arduino UNO R3, senza ricorrere a stadio di condizionamento, ma a un software un po' più complesso. Volendo semplificare il software occorre quindi un hatdware aggiuntivo, uno stadio di condizionamento (in questo caso un amplificatore di tensione) che "scali", quanto più possibile, la piccola dinamica del sensore a quella più ampia dell'ADC di Arduino. Ma anche in questo caso, si vuole semplificare quanto più possibile: non vogliamo alimentazioni aggiuntive, né riferimenti di tensione esterni...
L'idea di questo stadio di condizionamento, con op-amp, nasce da due esigenze: la prima, di usare solo l'alimentazione 5V fornita da Arduino e non ricorrere ad un alimentatore duale esterno, anche per lo stadio di condizionamento. La seconda, di volere usare la tensione di riferimento ADC di default da 5V, dello stesso microcontrollore ATmega328.
Problema n.1
Alimentando il sensore AD590 a 5V, con in serie una resistenza da 1kOhm (non è possibile usare a questa tensione una resistenza da 10k), abbiamo una tensione sulla stessa resistenza di 1mV per ogni grado Kelvin, mentre la risoluzione, teorica, della conversione ADC di Arduino, con Vref=5V, è circa 5mV.
Si rende dunque necessario amplificare questa tensione, per esempio, di un fattore pari a 10 volte, in modo da avere 10mV/K e quindi una risoluzione in temperatura di 0,5K (ovvero 0,5 °C).
Problema n.2
Abbiamo bisogno di un op-amp che possa lavorare ad alimentazione singola, come l'LM358, componente economico, molto reperibile, e dalle buone prestazioni. Bisogna però tenere conto della sua tensione di uscita massima (VSAT+), che è intorno ai 3,5V, quando lo si alimentata a 5V.
Supponendo di volerci limitare alla misura di una temperatura massima di 50°C, abbiamo dunque in corrispondenza una tensione di uscita massima di circa 3,2V (323K->3,23V),
Supponendo, poi, di volerci limitare alla misura di una temperatura minima di -20 °C avremo, quindi, in corrispondenza una tensione di uscita minima di circa 2,5V (250K -> 2,5V)
Dimensionamento dello stadio di condizionamento
Per ottenere un guadagno di tensione di 10 con un unico op-amp, in configurazione non invertente, possiamo usare due resistori da 22k e 68k in serie, per il ramo di retroazione, e un resistore da 10K collegato fra il morsetto invertente e massa; infatti abbiamo:
Risultati più accurati si possono ottenere sostituendo R2A con un'ulteriore resistenza serie formata, per esempio, da un resistore da 18k fisso e un trimmer da 5k, in modo da correggere le tolleranze dei resistori e gli effetti dovuti alle correnti di polarizzazione e alla tensione di offset dell'op-amp.
Schematico
Software
float tempC; float tempK; const float VREF=5.0; const float CAL1=0; // cal.offset, da determinare mediante calibrazione con termometro campione
const float CAL2=1; // cal.pendenza, da determinare mediante calibrazione con termometro campione
float vin; int N; void setup() { Serial.begin(9600); } void loop() { N=analogRead(A0); // si consiglia misura ripetuta vin=N*VREF/1024.0; tempK=10*vin; // temp in K tempC=(tempK-273.15)*CAL2+CAL1; // temp in °C Serial.println(tempC, 1); delay(30000); }

