Salve a tutti,
sto cercando di creare un progetto per il mio acquario. Le cose che vorrei realizzare sono le seguenti:
- Controllo temperatura vasca
- Accensione riscaldatore se la temperatura è inferiore ai 24 gradi
- Spegnimento riscaldatore quando arriva a 26°
- Accensione ventole se la temperatura è uguale o superiore a 29°
- Gestione accensione lampade led
- Effetto alba/tramonto/nuvoloso
Sono ai primi step e già sono ai primi problemi.
Con un sensore lm35 leggo 10 temperature in 10 secondi ed effettuo una media. Entro in un if per verificare le condizioni dei 24 gradi e qui sorge il problema. Praticamente quando entra nell'if accende il riscaldatore ed effettua in un for il controllo delle temperature. Arrivato a 26° il riscaldatore si spegne, ma sulla seriale non compare più la temperatura ma strani caratteri. A livello funzionale funziona, cioè a 24 si attiva il riscaldatore e continua fino a 26°, solo che dai 26 in poi tutte le letture risultano sballate.Ho notato inoltre che quando entra nel for la temperatura risulta flasata di 1° Potreste aiutarmi? Grazie
Questo è un output della seriale:
23.49 C
24.27 C
”þ–óœþ¡Ã
48.68 C
25.78 C
24.61 C
24.07 C
23.88 C
24.80 C
•þ–æ�þ¡Ã„͘ù29 C
27.00 C
25.54 C
24.80 C
24.22 C
24.02 C
23.73 C
24.66 C
int riscaldatore = 2;
int ventole = 3;
const int pin = 0; // analog pin
float celsius = 0, farhenheit =0; // temperature variables
float millivolts; //dichiarazione di variabile tensione (float è per i numeri con la virgola)
int sensor;
float somma=0.0;
float media=0.0;
float tref=26.0;
int i=0;
void setup() {
pinMode(riscaldatore, OUTPUT);
pinMode(ventole, OUTPUT);
}
void loop() {
Serial.begin(9600);
sensor = analogRead(pin); //lettura valore del sensore LM35 messo sull'ingresso analogico A0
millivolts = ( sensor/1023.0)*5000; //formula per ottenere la tensione di uscita dell'LM35 in millivolts
celsius =millivolts/10; // valore espresso in gradi Celsius (l'out del sensore è 10mv per grado)
farhenheit=celsius*1.8+32; // valore espresso in gradi Farhenheit
for(i=0;i<10;i++)
{
sensor = analogRead(pin);
sensor = analogRead(pin);
millivolts = ( sensor/1024.0)*5000;
celsius =millivolts/10;
somma=somma + celsius;
delay(1000); //ritardo tra due campionature successive
}
media= (somma/10.0); //calcolo del valore medio di 10 rilievi
somma=0.0; // riazzeramento della variabile somma
Serial.print(media);Serial.println(" C");
if(media <= 24.0){
digitalWrite(riscaldatore, HIGH);
digitalWrite(ventole, LOW);
for(tref;tref>=media;tref){
media=0.0;
for(i=0;i<10;i++){
sensor = analogRead(pin);
sensor = analogRead(pin);
millivolts = ( sensor/1024.0)*5000;
celsius =millivolts/10;
somma=somma + celsius;
delay(1000); //ritardo tra due campionature successive
}
media= (somma/10.0); //calcolo del valore medio di 10 rilievi
Serial.print(media);Serial.println(" C");
}
Serial.print(media);Serial.println(" C");
media=0.0;
somma=0.0;
}
digitalWrite(riscaldatore, LOW);
digitalWrite(ventole, LOW);
}