[RISOLTO]mantenere temperatura per tot tempo???

ciao a tutti, mi scuso anticipatamente se già ci sono topic simili ma non sono riuscito a trovare niente, e anche se la domanda vi sembrerà sicuramente stupida... :roll_eyes: :roll_eyes: :roll_eyes:
ho bisogno di mantenere la temperatura di una pentola per esempio a 50 gradi per 10 minuti poi a 60 per altri 10 minuti, e questo all'interno di un codice che fa anche altre cose, avevo pensato di utilizzare millis() ma non sono riuscito bene a capire come :roll_eyes:...come sensore di temperatura uso un lm35 classico tanto non mi serve chissà quale precisione, avete qualche idea su come fare? si potrebbe fare con un semplice if...else ma come fare a farlo durare 10 minuti!??!?
grazie

ciao
non sono il più indicato a risponderti, i millis sono difficili da tenere in mente
in questo semplice codice il led 13 si spegne dopo 10 secondi,
potresti lavorare su questo

 int ciao = 13;
int time;
void setup() {
  pinMode (ciao, OUTPUT);
  time = millis();
}
void loop() {
  if (time + 10000 < millis()) {
    digitalWrite (13, LOW);
  }
  else {
    digitalWrite (13, HIGH);
  }
}

Intanto grazie della risposta... Quello che dico io peró è come posso fare per far eseguire delle istruzioni per un determinato tempo ma io sapevo che il millis() ti da il tempo da cui è iniziato il programma ma io ho un cosice lungo e solo una determinata parte voglio che si attivi per 10 minuti? Potrebbe funzionare lo stesso? Grazie

superpeg ...
... ti devi studiare prima QUESTO articolo e poi QUESTO altro e ...
... vedrai che programmare un "intervallo di tempo" è una banalità XD

Dopo che li hai studiati e cercato di metterli in pratica ... se avrai ancora difficoltà, chiedi :wink:

Guglielmo

Motlo interessante grazie mille provo e se ho problemi ti faccio sapere grazie mille

grazie mille del consiglio oggi pomeriggio mi sono applicato e sono giunto a questa conclusione che funziona molto bene ho tre step che vengono mantenuti tutti per un minuto progressivamente proprio quello che mi serviva(poi basta cambiare i valori e cambi le durate dei step e le temperature) fin qua tutto bene, ho un piccolo problema,, dovendo usare questo codice per gestire un fornello elettrico con un relè ho notato sul serial monitor che va on e off molte volte quando si trovo a cavallo della temperatura settata a causa dell'instabilità della lettura massacrandomi il relè e il fornello questo succede perchè il ciclo gira ad una velocità assurda e di solito metteve un delay di un secondo alla fine del programma ma in questo caso non riesco a fare una lettura al secondo senza sballare tutti i tempi.... come posso fare? vorrei ottenere i stessi step di tempo ma con letture del sensore una volta al secondo grazie 8) 8) 8)

unsigned long int time;
unsigned long int primostep;
unsigned long int secondostep;
unsigned long int terzostep;
unsigned long int fine;
int tempC;
int rele=7;

void setup(){
  Serial.begin(9600);
time=millis();
primostep=millis();
secondostep=millis();
terzostep=millis();
fine=millis();
}

void loop(){
pinMode(rele, OUTPUT);
time=millis();
tempC = analogRead(A0);
tempC = (5.0 * tempC * 100.0)/1024.0;

if(time>primostep+5000&&time<secondostep+120000){
  if(tempC>20){
    digitalWrite(rele, LOW);
    Serial.println(tempC);
    Serial.print("primostepoff");
  }
    else{
    digitalWrite(rele, HIGH);
    Serial.println(tempC);
    Serial.print("primostepon");
  }
}
if(time>secondostep+120000&&time<terzostep+180000){
  if(tempC>20){
    digitalWrite(rele, LOW);
    Serial.println(tempC);
    Serial.print("secondostepoff");
  }
    else{
    digitalWrite(rele, HIGH);
    Serial.println(tempC);
    Serial.print("secondostepon");
  }
}

if(time>terzostep+180000&&time<fine+240000){
  if(tempC>20){
    digitalWrite(rele, LOW);
    Serial.println(tempC);
    Serial.print("terzostepoff");
  }
    else{
    digitalWrite(rele, HIGH);
    Serial.println(tempC);
    Serial.print("terzostepon");
  }
}
if(time>fine+240000){
  digitalWrite(rele, LOW);
}
}

superpeg:
... ho un piccolo problema,, dovendo usare questo codice per gestire un fornello elettrico con un relè ho notato sul serial monitor che va on e off molte volte quando si trovo a cavallo della temperatura settata a causa dell'instabilità della lettura ...

Prima di tutto, cortesemente, modifica il tuo post e racchiudi il codice tra i tag CODE (che, in fase di edit, ti inserisce il bottone # ... terzultimo della seconda fila) e NON tra i tag QUOTE, poi ...

... quando si fanno questi confronti con le temperature è sempre bene inserire un ciclo di isteresi. Ovvero, devi andare ad ON quando la temperature scende sotto il valore che vuoi meno un X percento ed andare OFF quando la temperatura supera il valore che vuoi più un X percento.
Esempio ... accendi quando scendi sotto (20 - 5%) ... ovvero sotto i 19 e spegni quando sali sopra i (20 + 5%) ovvero 21 ... vedrai che il relè ringrazierà XD XD XD

Guglielmo

a ok il problema è che sono proprio di coccio...ho fatto copia per il forum direttamente da arduino... ahahha :slight_smile: :slight_smile: :slight_smile:
però quello che intendo dire io è che ok si accende ai 21 gradi ma comunque "sfarfalla" tra 20 e 21 perchè il ciclo gira molto veloce... non so bene come spiegarlo però hai prsente quando metti un serial.print senza delay che sul monitor seriale stampa le cose talmente veloci che nanche si leggono? ecco succede la stessa cosa e con la stessa velocità legge la temperatura, ma io vorrei che lo facesse ogni secondo.
grazie mille

... non so che sensore usi, comunque, per avere una lettura delle temperature più stabile e precisa, devi fare più campionamenti ed effettuare la media (... comunque, il discorso dell'isteresi, in un qualsiasi regolatore di temperatura, resta sempre valido).

Nel loop, puoi avere ad esempio un contatore che di dice quante letture hai fatto (... che tu, mano a mano, sommi) e, quando arrivi, ad esempio a 10, dividi per 10 per avere il valor medio, salvi il valore ottenuto come vera temperatura e azzeri il contatore per ricominciare il giro.

Guglielmo

Ok apposto grazie mille mi hai dato l'idea di come fare. Grazie guglielmo

goldx:
queste elementari nozioni per chi non lo sapesse, .....per gli altri, per chi "non me ne puo' frega' de meno", per chi "ha risolto", come non detto XD
sera

ciao goldx e grazie della risposta, comunque come puoi ben vedere dal titolo il problema era semplicemente software nel senso che mi serviva solamente far girare una parte di codice per tot tempo poi ovvio che un controllo a relè per un riscaldamento fa abbastanza schifo specialmente per mantenere una temperatura ma quello è un problema secondario poichè il mio progetto è puramente dimostrativo senza richiedere chissà quali precisioni... inoltre se c'è scritto risolto un motivo ci sarà no? io il mio problema l'ho risolto altrimenti sta tranquillo che non scrivevo "risolto" un'abitudine che purtroppo su molti forum sta scomparendo
cmq grazie della risposta... :slight_smile: :slight_smile:

Piccolo O.T.
E' possibile sapere come hai interfacciato LM ad Arduino?
In passato, per gioco, ho provato a fare una simile applicazione, ma i valori rilevati dai vari LM (provati più di uno) mi hanno sempre restituito risultati ben lontani dalla realtà.

Grazie.

io uso questo codice:(famoso per lm35)
temp = analogRead(A0);
tempC = (5.0 * temp * 100.0)/1024.0;

ho verificato la temperatura con un termometro classico(quelli ad alcool) e ci siamo sballa di mezzo grado come previsto
io ho un lm35dz se potrebbe cambiare qualcosa...
ciao