Salve a tutti, sto costruendo una serra riscaldata mediante l'uso di una cella di peltier.
Ho problemi nel leggere le temperature utilizzando questi sensori: mcp9700
qui il datasheet https://www.sparkfun.com/datasheets/DevTools/LilyPad/MCP9700.pdf
dal serial monitor leggo dei valori di temperatura; molti di questi sono corretti, ma spesso capita una o più letture sballate con valori a caso di temperature.
Nel mio caso la temperatura reale è di 22,75°C, su 10 letture 7 hanno questo valore, le altre 3 mi danno valori tipo 25°-37°..
Ho già cercato online e nello stesso forum se qualcuno aveva lo stesso problema, ed ho effettivamente trovato qualche caso.
I suggerimenti dati agli altri li ho provati in prima persona, ma non sembrano funzionare..
-Prima cosa che ho provato è inserire un condensatore da 100nF come consigliato nel datasheet.
-Seconda cosa anzichè alimentare i sensori con i 5V dell'Arduino, ho utilizzato un alimentatore esterno a 12V con un modulino DC-DC che mi porta la tensione a 5V (fino a 2A).
Un dato che volevo dare è la lunghezza dei cavi dei due sensori, infatti uno ha un cavetto di 150cm mentre l'altro di 50cm; non credo sia però la lunghezza dei cavi a dare problemi.
Ora non so più che fare, un'ultima cosa è che ho notato questo problema delle letture con tutto l'hardware collegato, mentre con solo i sensori non dava questi problemi.
Ecco lo sketch da me utilizzato:
/* Serra riscaldata
controllo di due rele (cella di peltier e ventola)
grazie alla lettura di due temperature in due diversi
punti della serra (lato caldo cella e ambiente serra)
Utilizzo del sensore di temperatura della Microchip.
Non necessita di calibrazione ed ha un’accuratezza di ±2°C nel range da -40 a +125°C (±1°C nel range 0÷70°C).
Può essere alimentato con una tensione di 3,3V o di 5V, o comunque compresa nell’intervallo 2,3÷5,5V ed
ha una caratteristica di trasduzione lineare con una variazione di 10 mV/°C con un’uscita di 0,5V a 0°C. Contenitore TO92.
é consigliato inserire un condensatore di 100nF all'alimentazione del sensore.
By Simone
http://myweb96.altervista.org
*/
int relecella = 8; //assegna il pin 8 al rele della cella (carico 12V 5A)
int releventola = 9; //assegna il pin 9 al rele della ventola (carico 12V 0,25A)
int ledaccensione = 12; //assegna il pin 12 al led di accensione cella (led rosso)
int ledventola= 11; //assegna il pin 11 al led della ventola (led giallo)
int ledverde=10; //assegna il pin 10 al led verde che indica che la temperatura è stata raggiunta
int sens1 = A0; //assegna il pin A0 al primo sensore di temperatura
int sens2 = A1; //assegna il pin A1 al secondo sensore di temperatura
float temp1;
float temp2;
void setup(){
pinMode(relecella,OUTPUT);
pinMode(releventola,OUTPUT);
pinMode(ledverde,OUTPUT);
pinMode(ledaccensione,OUTPUT);
pinMode(ledventola,OUTPUT);
Serial.begin(9600);
}
float temperature(byte _pin) {
float T = (analogRead(_pin) * 5.0) / 1024.0;
T -= 0.5;
T /= 0.01;
return T;
}
void loop(){
temp1 = temperature(sens1);
temp2 = temperature(sens2);
Serial.print("sensore1: ");
Serial.println(temp1);
Serial.print("sensore2: ");
Serial.println(temp2);
delay(500);
if(temp1>=25) {
digitalWrite(relecella,LOW);
digitalWrite(ledverde,HIGH);
digitalWrite(ledaccensione,LOW);
}
else
if (temp1<25) {
digitalWrite(relecella,HIGH);
digitalWrite(ledverde,LOW);
digitalWrite(ledaccensione,HIGH);
}
if (temp2>=70) {
digitalWrite(releventola,HIGH);
digitalWrite(ledventola,HIGH);
}
else
if (temp2<70) {
digitalWrite(releventola,LOW);
digitalWrite(ledventola,LOW);
}
}
Allego inoltre lo schema elettrico del tutto in formato fritzing e immagine.
serra.fzz (19.8 KB)