Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

isteresi con arduino

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[1] isteresi con arduino

Messaggioda Foto Utentenicoct » 24 giu 2018, 7:20

salve dovrei realizzare un controllo di temperatura con arduino:
la logica che vorrei seguire è la seguente:
-la temperatura deve essere mantenuta tra i 20 e i 24 °C
- se la temperatura suera i 24° interviene una ventola che rimane attiva fino a quando la temperatura raggiunge il valor medio 22°C
- se la temperatura scende sotto i 20 interviene una piastra scaldante che rimane attiva fino a quando la temperatura raggiunge i 22°C..
a monte ho realizzato un circuito di condizionamento del segnale in modo da adattare la dinamica dello stesso alla scheda arduino.
ho trovato la seguente corrispondenza fra le temperature e i valori numerici in uscita dall' adc di arduino:
20°C corrispondono a 409
22°C corrispondono a 450
24°C corrispondono a 491
io avevo impostato qualcosa del genere:
Codice: Seleziona tutto
# define piastra 7
# define ventola 8
void setup() {
  pinMode(piastra,OUTPUT);
   pinMode(ventola,OUTPUT);
   digitalWrite(ventola,LOW);
   digitalWrite(piastra,LOW);
}

void loop() {
  int temperatura;
temperatura =analogRead(0);
      if (temperatura>450)
    {
           if (temperatura<491)
           {
            digitalWrite(ventola,HIGH);
            digitalWrite(piastra,LOW);
           }
           else
           {
           
            digitalWrite(piastra,LOW);
           }
    }
    else
     
    {
           if (temperatura<409)
           {
            digitalWrite(piastra,HIGH);
            digitalWrite(ventola,LOW);
           }
           else
           {
           
            digitalWrite(ventola,LOW);
           }
    }
}

secondo voi può andare come programma?
Avatar utente
Foto Utentenicoct
139 1 6
Frequentatore
Frequentatore
 
Messaggi: 190
Iscritto il: 2 nov 2010, 15:56

0
voti

[2] Re: isteresi con arduino

Messaggioda Foto UtenteMarcoD » 24 giu 2018, 8:31

Premetto che una delle attività più sgradevoli/difficile è cercare di capire come funziona un programma fatto da altri.

Mi pare che il tuo programma sia inutilmente complicato e molto probabilmente non corretto.

Hai due controllori indipendenti la piasta e il ventilatore, quindi la logica si semplifica

Per realizzare l'isteresi devi prima esaminare prima lo stato del comando uscita:

if ( statopiasta==0) // =0 spenta esamina lo stato del comando piastra
{ if (temperatura < minimo) statopiastra = 1;// accendi piastra}
else ( //allora e' accesa)
{ if (temperatura > massimo) statopiasta = 0;// spegni piastra
end if

.. lo stesso per la ventola...

L'ho scritto in uno pseudo C++ sgrammaticato, spero si capisca :-)


p.s.: devi definire le variabili interne e statopiastra statoventola, non assegnare ad esse il pin in uscita
int piasta, ventol Le ho definite come INT cui assegno solo valore 1 o 0.

if (statopiastra == 0) //==0 spenta
{digitalWrite(piastra,LOW);//comanda bit corrispondente a 0)
else
{digitalWrite(piastra,HIGH);//comanda bit corrispondente a 1)
Avatar utente
Foto UtenteMarcoD
12,2k 5 9 13
Master EY
Master EY
 
Messaggi: 6696
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

[3] Re: isteresi con arduino

Messaggioda Foto Utentenicoct » 24 giu 2018, 9:01

Sì il mio programma scritto veloce non convinceva neanche me...Infatti stavo pensando di aggiungere dei flag per memorizzare lo stato delle uscite tramite questo comandare le uscite....In ogni caso il tuo programma e molto più semplice del mio Grazie...Più tardi ti posto il mio per confronto....
Avatar utente
Foto Utentenicoct
139 1 6
Frequentatore
Frequentatore
 
Messaggi: 190
Iscritto il: 2 nov 2010, 15:56

0
voti

[4] Re: isteresi con arduino

Messaggioda Foto Utentenicoct » 24 giu 2018, 12:05

nicoct ha scritto:Sì il mio programma scritto veloce non convinceva neanche me...Infatti stavo pensando di aggiungere dei flag per memorizzare lo stato delle uscite tramite questo comandare le uscite....In ogni caso il tuo programma e molto più semplice del mio Grazie...Più tardi ti posto il mio per confronto....

adesso che sono rientrato ti osto il mio programmino...
purtroppo quando ho cominciato a ragionarci ero fuori e quindi non potevo scriverlo...
Codice: Seleziona tutto
# define piastra 7
# define ventola 8
flagv=0;      //flag di memorizzazione di stato dei due attuatori, v=ventola, p=piastra
flagp=0;
void setup() {
  pinMode(piastra,OUTPUT);
   pinMode(ventola,OUTPUT);
   digitalWrite(ventola,LOW);
   digitalWrite(piastra,LOW);
}

void loop() {
  int temperatura;

//lettura analogica e conversione adc
temperatura =analogRead(0);
      if (temperatura>450)
    {
           if (temperatura>491)
           {
            flagv=1;
            flagp=0;
            }
           else
           {
            flagp=0;
            }
     }
    else
     {
           if (temperatura<409)
           {
           flagv=0;
           flagp=1;
           }
           else
           {
            flagv=0;
            }
    }

if (flagp==0)
    digitalWrite (piastra, LOW)
else
     digitalWrite (piastra, HIGH)
if (flagv==0)
    digitalWrite (ventola, LOW)
else
     digitalWrite (ventola, HIGH)
}

che ne pensi? potrebbe andare? O_/
Avatar utente
Foto Utentenicoct
139 1 6
Frequentatore
Frequentatore
 
Messaggi: 190
Iscritto il: 2 nov 2010, 15:56

1
voti

[5] Re: isteresi con arduino

Messaggioda Foto UtenteMarcoD » 24 giu 2018, 12:32

No. Non hai cambiato la logica del funzionamento .
Avatar utente
Foto UtenteMarcoD
12,2k 5 9 13
Master EY
Master EY
 
Messaggi: 6696
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

[6] Re: isteresi con arduino

Messaggioda Foto Utentenicoct » 24 giu 2018, 12:34

ok il tuo mi ha convinto.... :D
Avatar utente
Foto Utentenicoct
139 1 6
Frequentatore
Frequentatore
 
Messaggi: 190
Iscritto il: 2 nov 2010, 15:56

1
voti

[7] Re: isteresi con arduino

Messaggioda Foto Utentedadduni » 24 giu 2018, 14:17

Io in questi casi (e in moltissimi altri) mi aiuto con una macchina a stati finiti. Hai solo 3 stati che dipendono dalla temperatura: troppo alta, troppo bassa, giusta. In ogni caso compi un azione e continui a monitorare la temperatura così da quando arrivi nel dance giusto.
Codice: Seleziona tutto
temp=analogread....
If(temp<20) accendiStufa(),
Else if(temp>20 && temp<24) spegniStufa(); spegniVentola();
Else accendiVentola();


Questo dentro un bel ciclo infinito
Davide
Avatar utente
Foto Utentedadduni
2.073 2 7 12
Expert EY
Expert EY
 
Messaggi: 1370
Iscritto il: 23 mag 2014, 16:26

1
voti

[8] Re: isteresi con arduino

Messaggioda Foto Utentenicoct » 24 giu 2018, 19:36

Questa è una semplice comparatore a finestra....Potrebbe andare bene ma nel mio caso serve un comportamento a isteresi .....
Avatar utente
Foto Utentenicoct
139 1 6
Frequentatore
Frequentatore
 
Messaggi: 190
Iscritto il: 2 nov 2010, 15:56

0
voti

[9] Re: isteresi con arduino

Messaggioda Foto Utentedadduni » 24 giu 2018, 20:57

mmm non basta togliere la riga al centro? :lol:
Se maggiore spegni uno e accendi l'altro, se è minore viceversa, nel centro non cambia nulla e si resta cosi com'è. Forse sto dicendo una cavolata...
Avatar utente
Foto Utentedadduni
2.073 2 7 12
Expert EY
Expert EY
 
Messaggi: 1370
Iscritto il: 23 mag 2014, 16:26

0
voti

[10] Re: isteresi con arduino

Messaggioda Foto Utentenicoct » 25 giu 2018, 19:43

dadduni ha scritto:mmm non basta togliere la riga al centro? :lol:
Se maggiore spegni uno e accendi l'altro, se è minore viceversa, nel centro non cambia nulla e si resta cosi com'è. Forse sto dicendo una cavolata...

...non so dovrei verificare...
allora supponiamo che la temperatura sia superiore alla soglia positiva...quindi attacca la ventola mentre la piastra rimane staccata.......
continuo il ciclo e supponiamo che la temperatura scende fino al valor medio....in cui io vorrei che la ventola conservi il suo stato mentre l'areatore rimane off....
io pensavo di memorizzare lo stato della ventola in questo periodo di decrescenza della temperatura....
Avatar utente
Foto Utentenicoct
139 1 6
Frequentatore
Frequentatore
 
Messaggi: 190
Iscritto il: 2 nov 2010, 15:56

Prossimo

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti