Pages: [1]   Go Down
Author Topic: primo sketch, qualche opinione?  (Read 610 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

allora sono 48 ore che ho  arduino 1
 ho provato a scrivere il primo programmino devo dire che è molto divertente  anche se forse dovevo far piu pratica con cose piu semplici  comunque alla fine sembra che ci sono riuscito (almeno dal mio punto di vista)    lo sketch  "pilota" un impianto solare termico a svuotasmento  (è un po che avevo quesata idea)
in questo modo  appena la temperatura dei pannelli supera una certa differenza con la temperatura del serbatoio (es 20 gradi)  partono 2 circolatori pin 8,9,  e uno si spegne dopo pochi secondi (perche serve solo di spinta iniziale) dopo qualche minuto (5)  si spegne anche l'altro circolatore,
poi ci sono tutti  i segnali di blocco che portano a livello alto le varie uscite,
tipo mancanza acqua nel serbatoio, mancanza di sole, temperatura dei pannelli troppo alta, tempersatura dell'aqua piu che sufficente,
tutte queste uschite di allarme vanno ad attivare un rele che toglie corrente a i circolatori
oltre ad accendere il relativo led

la sezione dei termometri e da sistemare in base alle sonde che si adoperano,
sembra "funzionare tutto"  mettendo le entrate a massa o a +5V legge zero o 1023  se metto un led sulle uscite  si attiva in modo corretto,

che ve ne pare? qualche consiglio su qualche cosa da migliorare? vedete errori?

qui il codice

Code:
int liv_acqua; // variabile mancanza livello acqua corretto
int temp_dif; // variabile differenza temperatura tra pannelli e serbatoio
int tempmaxpan; // variabile temperatura pannello maggiore a 102°
int tempmaxser; // variabile temperatura serbatoio maggiore di 50°
int fotores; // variabile fotoresistenza
int analogValue; //variabile per stampare il valore di temperatura nel monitor seriale
int analogValue2;//variabile per stampare il valore di temperatura nel monitor seriale


void setup () { 
  Serial.begin(9600); 
pinMode (5, OUTPUT); //  LED LIVELLO  LIVELLO INSUFFICENTE ACQUA SERBATOIO
pinMode (6, OUTPUT); //  LED FOTORESISTENZA GIORNO NOTTE
pinMode (8, OUTPUT); // CIRCOLATORE ACQUA UNO
pinMode (9, OUTPUT); // CIRCOLATORE ACQUA DUE
pinMode (10, OUTPUT); // LED TEMPERATURA >72°
pinMode (11, OUTPUT); // LED TEMPERATURA PANNELLO >102°
pinMode (A3, INPUT); // SENSORE LIVELLO INSUFFICENTE ACQUA SERBATOIO
pinMode (13, OUTPUT); // LED LIVELLO INSUFFICENTE ACQUA SERBATOIO
pinMode (7, OUTPUT); // ATTIVA ELETTROVALVOLA BYPASS CALDAIA A TEMPERATURA SERBATOIO >50° facoltativo
pinMode (A0, INPUT); // INPUT TERMOMETRO PANNELLI
pinMode (A1, INPUT); // INPUT TERMOMETRO SERBATOIO
pinMode (A2, INPUT); // INPUT FOTORESISTENZA GIORNO/NOTTE

}

void loop ()

 {
     
   analogValue =(5.0 * analogRead(A1) * 100.0) / 1024; //  legge la temperatura sull'ingresso A1  con LM35
  Serial.println(" -------------------------------");  //  stampa la scritta  -------------------------------
  Serial.print(" temperatura  acqua ");  //  stampa la scritta    temp. acqua
  Serial.println(analogValue, DEC);//  stampa la temperatura
 
   delay (10); //  attesa di 10 millisecondi  (5.0 * analogread (a1) *100.0) /1024.0)
 
  analogValue = (5.0 * analogRead(A0) * 100.0) / 1024;   //  legge  la temperatura  con LM35
 Serial.print(" temperatura pannelli "); //  stampa la scritta    temp. pannelli 
  Serial.println(analogValue, DEC);      //  stampa la temperatura nei monitor seriale
 
   delay (10);//  attesa di 10 millisecondi
   
   
    liv_acqua=analogRead(A5);
    if (liv_acqua > 300) digitalWrite (5, HIGH);
    if (liv_acqua > 300)Serial.println
  (" manca acqua nel serbatoio ");//  stampa la scritta manca acqua nel serbatoio
 
  delay (10);//  attesa di 10 millisecondi
 
   analogValue2 = analogRead(A2);   //  legge  l'ingresso A2
 Serial.print(" lettura fotoresistenza "); //  stampa la scritta    temp. pannelli 
  Serial.println(analogValue2, DEC);      //  stampa la temperatura
   
   fotores=analogRead(A2);
   digitalWrite (6, LOW); // porta il pin della fotoresistenza a livello basso
    delay (10);//  attesa di 10 millisecondi
   if (fotores < 100  )digitalWrite (6, HIGH);  // comando fotoresistenza soleggiato
   if (fotores > 500  )digitalWrite (6, HIGH);  // comando fotoresistenza soleggiato
   
   if (fotores > 50)Serial.println
  (" fotoresistenza assente/difettosa/cavo rotto ");//  stampa la scritta fotoresistenza assente/difettosa/cavo rotto
  delay (10);//  attesa di 10 millisecondi
   
   tempmaxpan=(5.0 * analogRead(A0) * 100.0) / 1024;
   if (tempmaxpan > 102)digitalWrite (11, HIGH); // comando:  1) fermo impianto per sovratemperatura pannelli 2) led di segnalazione
   else {digitalWrite (11, LOW);}
    if(tempmaxpan > 102)Serial.println
  (" pannelli in sovratemperatura impianto inattivo per sicurezza "); //  stampa la scritta pannelli in sovratemperatura impianto bloccato   
  delay (10);//  attesa di 10 millisecondi
  tempmaxser=(5.0 * analogRead(A1) * 100.0) / 1024;
  if(tempmaxser > 72)digitalWrite (10, HIGH); // temperatura massima acqua serbatoio raggiunta 72 °
  else {digitalWrite (10, LOW);};
  if(tempmaxser > 72)Serial.println
  (" temperatura acqua serbatoio elevata  impianto l'impianto  inattivo ");  //  stampa la scritta  temp. aqua maggiore di 72 gradi impianto in stanby   
  delay (10);//  attesa di 10 millisecondi
 
  if(tempmaxser > 50)digitalWrite (7, HIGH); //  comando:  1) per evitare che l'acqua già troppo calda circoli nello scaldinon  a gas
                                             //  2) messa in standby  dell'impianto 3) led segnalazione evento,
  else {digitalWrite (7, LOW);}
   if(tempmaxser > 50)Serial.println
  (" elettrovalvole antiricircolo attivate per temperatura acqua sufficiente");  //  stampa la scritta  elettrovalvole antiricircolo attivate   
  delay (10);//  attesa di 10 millisecondi

   
   temp_dif=(tempmaxser)-(tempmaxpan); // sottrzione tra temperatura serbatoio e temperatura pannelli messi tra parentesi e in ordine
   Serial.print (" differenza temperatura pannelli serbatoio "); //stampa la scritta differenza temperatura pannelli serbatoio
   Serial.println (temp_dif); // stampa la temperatura di differenza tra pannelli e serbatoio
   if (temp_dif > 20)digitalWrite (8, HIGH);
   if (temp_dif > 20)digitalWrite (9, HIGH);
   if (temp_dif > 20)Serial.println (" segnali dei 2 circolatori  accesi ");
 
   delay (1500);  //tempo in millisecondi per spegnere un circolatore  (15 secondi)
   
    digitalWrite (8, LOW);  //spegne un circolatore
    Serial.println (" segnale circolatore 1 acceso segnale circolatore 2 spento");
   
    delay (3000);  //tempo di (5 minuti)  300 secondi per spegnere un  circolatore
   
    digitalWrite (9, LOW); //spegne un circolatore
   
    delay (3000);
   
  }

« Last Edit: June 08, 2012, 04:22:13 pm by GINGARDU » Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6974
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non commentare le cose ovvie.
Code:
Serial.println(" -------------------------------");  //  stampa la scritta  -------------------------------
Serial.print(" temperatura  acqua ");  //  stampa la scritta    temp. acqua
Questi commenti sono superflui anzi, secondo me, rendo meno leggibile il programma

Code:
if (liv_acqua > 300) digitalWrite (5, HIGH);
if (liv_acqua > 300) Serial.println(" manca acqua nel serbatoio ");//  stampa la scritta manca acqua nel serbatoio
Qui puoi eliminare un if e mettere 2 parentesi graffe.

Ti conviene poi con un pò di #define definire meglio i pin usati per collegare led e sensori. Sono utili in caso vorresti variare al volo la posizione degli uni o degli altri.

Code:
if (temp_dif < 20)digitalWrite (8, HIGH);
if (temp_dif < 20)digitalWrite (9, HIGH);
if(temp_dif < 20)Serial.println (" segnali dei 2 circolatori  accesi ");
Anche qui stesso discorso di prima.
Ci sono poi anche degli if con degli else che potresti associare.

Code:
delay (15000);  //tempo in millisecondi per spegnere un circolatore  (15 secondi)
digitalWrite (8, LOW);  //spegne un circolatore
Serial.println (" segnale circolatore 1 acceso segnale circolatore 2 spento");
delay (30000);  //tempo di (5 minuti)  300 secondi per spegnere un  circolatore
digitalWrite (9, LOW); //spegne un circolatore
delay (15000);
Questa parte di codice viene sempre eseguita perché non è condizionata da nessuna if.
Un loop viene compiuto ogni 5 minuti e mezzo.

EDIT: Hai scritto 30mila e non 300mila
Code:
delay (30000);  //tempo di (5 minuti)  300 secondi per spegnere un  circolatore
« Last Edit: June 08, 2012, 02:27:26 pm by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3245
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Di norma i circolatori non vengono attivati a tempo, ma un segnale li attiva e restano in funzione fino a quando una temperatura non è arrivata al di sotto di una soglia prestabilita. A cosa serve misurare la temperatura dei pannelli solari?
Ieri hai detto che i circolatori sono in serie, sicuro che non siano in parallelo tra loro?  li attivi entrambi nello stesso istante, ma il primo resta sempre 5 minuti e il secondo  15 minuti, di norma i circolatori devono lavorare alternativamente altrimenti ti troverai la seconda pompa esausta in poco tempo e la prima praticamente nuova.

primo ciclo
pompa 1 - 5 min
pompa 2 - 15 min

secondo ciclo
pompa 1 -15 min
pompa 2 - 5 min

e così via

ciao
« Last Edit: June 08, 2012, 05:00:12 pm by pablos » Logged

no comment

Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non commentare le cose ovvie.
Code:
Serial.println(" -------------------------------");  //  stampa la scritta  -------------------------------
Serial.print(" temperatura  acqua ");  //  stampa la scritta    temp. acqua
Questi commenti sono superflui anzi, secondo me, rendo meno leggibile il programma

Code:
if (liv_acqua > 300) digitalWrite (5, HIGH);
if (liv_acqua > 300) Serial.println(" manca acqua nel serbatoio ");//  stampa la scritta manca acqua nel serbatoio
Qui puoi eliminare un if e mettere 2 parentesi graffe.

Ti conviene poi con un pò di #define definire meglio i pin usati per collegare led e sensori. Sono utili in caso vorresti variare al volo la posizione degli uni o degli altri.

Code:
if (temp_dif < 20)digitalWrite (8, HIGH);
if (temp_dif < 20)digitalWrite (9, HIGH);
if(temp_dif < 20)Serial.println (" segnali dei 2 circolatori  accesi ");
Anche qui stesso discorso di prima.
Ci sono poi anche degli if con degli else che potresti associare.

Code:
delay (15000);  //tempo in millisecondi per spegnere un circolatore  (15 secondi)
digitalWrite (8, LOW);  //spegne un circolatore
Serial.println (" segnale circolatore 1 acceso segnale circolatore 2 spento");
delay (30000);  //tempo di (5 minuti)  300 secondi per spegnere un  circolatore
digitalWrite (9, LOW); //spegne un circolatore
delay (15000);
Questa parte di codice viene sempre eseguita perché non è condizionata da nessuna if.
Un loop viene compiuto ogni 5 minuti e mezzo.

EDIT: Hai scritto 30mila e non 300mila
Code:
delay (30000);  //tempo di (5 minuti)  300 secondi per spegnere un  circolatore

la riga iniziale -----------  l'ho messa cosi quado avvio il monitor seriale la stampa sempre e  si capisce subito
che riparte un nuovo ciclo ,

per eliminare un if mettendo parentesi graffe se mi fai vedere come si fa fai cosa gradita,

poi tutto il ciclo deve girare piu o meno ogni 5 minuti
ti rimetto qui il codice che ho corretto mettendo come sensori di temperatura pannelli e serbatoio gli LM35 cosi sembra piu completo e le temperature sono in gradi (piu comprensibili)
solo i delay dei circolatori li ho ridotti a pochi secondi   (il tutto gira in 8 secondi circa se apri il monitor seriale)
ma nella realta un circolatore dovrebbe stare acceso 30 secondi e l'altro piu di 5 minuti,

Code:
int liv_acqua; // variabile mancanza livello acqua corretto
int temp_dif; // variabile differenza temperatura tra pannelli e serbatoio
int tempmaxpan; // variabile temperatura pannello maggiore a 102°
int tempmaxser; // variabile temperatura serbatoio maggiore di 50°
int fotores; // variabile fotoresistenza
int analogValue; //variabile per stampare il valore di temperatura nel monitor seriale
int analogValue2;//variabile per stampare il valore di temperatura nel monitor seriale


void setup () { 
  Serial.begin(9600); 
pinMode (5, OUTPUT); //  LED LIVELLO  LIVELLO INSUFFICENTE ACQUA SERBATOIO
pinMode (6, OUTPUT); //  LED FOTORESISTENZA GIORNO NOTTE
pinMode (8, OUTPUT); // CIRCOLATORE ACQUA UNO
pinMode (9, OUTPUT); // CIRCOLATORE ACQUA DUE
pinMode (10, OUTPUT); // LED TEMPERATURA >72°
pinMode (11, OUTPUT); // LED TEMPERATURA PANNELLO >102°
pinMode (A3, INPUT); // SENSORE LIVELLO INSUFFICENTE ACQUA SERBATOIO
pinMode (13, OUTPUT); // LED LIVELLO INSUFFICENTE ACQUA SERBATOIO
pinMode (7, OUTPUT); // ATTIVA ELETTROVALVOLA BYPASS CALDAIA A TEMPERATURA SERBATOIO >50° facoltativo
pinMode (A0, INPUT); // INPUT TERMOMETRO PANNELLI
pinMode (A1, INPUT); // INPUT TERMOMETRO SERBATOIO
pinMode (A2, INPUT); // INPUT FOTORESISTENZA GIORNO/NOTTE

}

void loop ()

 {
     
   analogValue =(5.0 * analogRead(A1) * 100.0) / 1024; //  legge la temperatura sull'ingresso A1  con LM35
  Serial.println(" -------------------------------");  //  stampa la scritta  -------------------------------
  Serial.print(" temperatura  acqua ");  //  stampa la scritta    temp. acqua
  Serial.println(analogValue, DEC);//  stampa la temperatura
 
   delay (10); //  attesa di 10 millisecondi  (5.0 * analogread (a1) *100.0) /1024.0)
 
  analogValue = (5.0 * analogRead(A0) * 100.0) / 1024;   //  legge  la temperatura  con LM35
 Serial.print(" temperatura pannelli "); //  stampa la scritta    temp. pannelli 
  Serial.println(analogValue, DEC);      //  stampa la temperatura nei monitor seriale
 
   delay (10);//  attesa di 10 millisecondi
   
   
    liv_acqua=analogRead(A5);
    if (liv_acqua > 300) digitalWrite (5, HIGH);
    if (liv_acqua > 300)Serial.println
  (" manca acqua nel serbatoio ");//  stampa la scritta manca acqua nel serbatoio
 
  delay (10);//  attesa di 10 millisecondi
 
   analogValue2 = analogRead(A2);   //  legge  l'ingresso A2
 Serial.print(" lettura fotoresistenza "); //  stampa la scritta    temp. pannelli 
  Serial.println(analogValue2, DEC);      //  stampa la temperatura
   
   fotores=analogRead(A2);
   digitalWrite (6, LOW); // porta il pin della fotoresistenza a livello basso
    delay (10);//  attesa di 10 millisecondi
   if (fotores < 100  )digitalWrite (6, HIGH);  // comando fotoresistenza soleggiato
   if (fotores > 500  )digitalWrite (6, HIGH);  // comando fotoresistenza soleggiato
   
   if (fotores > 50)Serial.println
  (" fotoresistenza assente/difettosa/cavo rotto ");//  stampa la scritta fotoresistenza assente/difettosa/cavo rotto
  delay (10);//  attesa di 10 millisecondi
   
   tempmaxpan=(5.0 * analogRead(A0) * 100.0) / 1024;
   if (tempmaxpan > 102)digitalWrite (11, HIGH); // comando:  1) fermo impianto per sovratemperatura pannelli 2) led di segnalazione
   else {digitalWrite (11, LOW);}
    if(tempmaxpan > 102)Serial.println
  (" pannelli in sovratemperatura impianto inattivo per sicurezza "); //  stampa la scritta pannelli in sovratemperatura impianto bloccato   
  delay (10);//  attesa di 10 millisecondi
  tempmaxser=(5.0 * analogRead(A1) * 100.0) / 1024;
  if(tempmaxser > 72)digitalWrite (10, HIGH); // temperatura massima acqua serbatoio raggiunta 72 °
  else {digitalWrite (10, LOW);};
  if(tempmaxser > 72)Serial.println
  (" temperatura acqua serbatoio elevata  impianto l'impianto  inattivo ");  //  stampa la scritta  temp. aqua maggiore di 72 gradi impianto in stanby   
  delay (10);//  attesa di 10 millisecondi
 
  if(tempmaxser > 50)digitalWrite (7, HIGH); //  comando:  1) per evitare che l'acqua già troppo calda circoli nello scaldinon  a gas
                                             //  2) messa in standby  dell'impianto 3) led segnalazione evento,
  else {digitalWrite (7, LOW);}
   if(tempmaxser > 50)Serial.println
  (" elettrovalvole antiricircolo attivate per temperatura acqua sufficiente");  //  stampa la scritta  elettrovalvole antiricircolo attivate   
  delay (10);//  attesa di 10 millisecondi

   
   temp_dif=(tempmaxser)-(tempmaxpan); // sottrzione tra temperatura serbatoio e temperatura pannelli messi tra parentesi e in ordine
   Serial.print (" differenza temperatura pannelli serbatoio "); //stampa la scritta differenza temperatura pannelli serbatoio
   Serial.println (temp_dif); // stampa la temperatura di differenza tra pannelli e serbatoio
   if (temp_dif > 20)digitalWrite (8, HIGH);
   if (temp_dif > 20)digitalWrite (9, HIGH);
   if (temp_dif > 20)Serial.println (" segnali dei 2 circolatori  accesi ");
 
   delay (1500);  //tempo in millisecondi per spegnere un circolatore  (15 secondi)
   
    digitalWrite (8, LOW);  //spegne un circolatore
    Serial.println (" segnale circolatore 1 acceso segnale circolatore 2 spento");
   
    delay (3000);  //tempo di (5 minuti)  300 secondi per spegnere un  circolatore
   
    digitalWrite (9, LOW); //spegne un circolatore
   
    delay (3000);
   
  }


* SOLARE_TERMICO8.ino (5.23 KB - downloaded 6 times.)
« Last Edit: June 08, 2012, 04:20:37 pm by GINGARDU » Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Per favore ingloba il codice nell'apposito tag (l'icona con il simbolo #) altrimenti diventa difficile leggere centinaia di righe perse in un post.
Logged


Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Per favore ingloba il codice nell'apposito tag (l'icona con il simbolo #) altrimenti diventa difficile leggere centinaia di righe perse in un post.
ok
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

I pin da 5 a 11 e da A0 a A3 sono sequenziali per cui potresti impostare il loro stato iniziale con un ciclo for, per evitare di scrivere codice ripetitivo.

Sulle parentesi graffe, ricordati che esse racchiudono un blocco di codice, per cui se parliamo di un caso come il tuo:
Code:
if (a>b) faiQuesto;
if (a>b) faiQuello;
il tutto diventa:
Code:
if (a>b) {
  faiQuesto;
  faiQuello;
}

analogValue è di tipo intero, non conterrà mai la parte decimale del calcolo della 1a riga del loop() per cui avrai solo indicazioni con risoluzioni di 1° (70, 71, 72 ecc...) se ciò può bastarti. Altrimenti usa il tipo float.
Ciò vale anche per le altre letture che fai più avanti.
Logged


Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I pin da 5 a 11 e da A0 a A3 sono sequenziali per cui potresti impostare il loro stato iniziale con un ciclo for, per evitare di scrivere codice ripetitivo.

Sulle parentesi graffe, ricordati che esse racchiudono un blocco di codice, per cui se parliamo di un caso come il tuo:
Code:
if (a>b) faiQuesto;
if (a>b) faiQuello;
il tutto diventa:
Code:
if (a>b) {
  faiQuesto;
  faiQuello;
}

analogValue è di tipo intero, non conterrà mai la parte decimale del calcolo della 1a riga del loop() per cui avrai solo indicazioni con risoluzioni di 1° (70, 71, 72 ecc...) se ciò può bastarti. Altrimenti usa il tipo float.
Ciò vale anche per le altre letture che fai più avanti.


ok ho provato ad elimiinare un if ed ho visto che funziona lo stesso per la precisione in questa applicazione dovrebbe bastare mi sembra quasi completo  ovviamente devo mettere il ritardo esatto di spegnimento dei circolatori e sistemare l'input del livello aqua serbatoio  e della fotoresistenza,
alla fine duplichero il codice e nella parte duplicata invertiro i pin 8,9,  in modo che altenativamente i cicolatori funzionano a turno 15 secondi o 5 minuti
cosi dovrebbe bastare , almeno dal mio punto di vista
Code:
int liv_acqua; // variabile mancanza livello acqua corretto
int temp_dif; // variabile differenza temperatura tra pannelli e serbatoio
int tempmaxpan; // variabile temperatura pannello maggiore a 102°
int tempmaxser; // variabile temperatura serbatoio maggiore di 50°
int fotores; // variabile fotoresistenza
int temperatura_1; //variabile per stampare il valore di temperatura nel monitor seriale
int temperatura_2;//variabile per stampare il valore di temperatura nel monitor seriale


void setup () { 
  Serial.begin(9600); 
pinMode (5, OUTPUT); //  LED LIVELLO INSUFFICENTE ACQUA SERBATOIO
pinMode (6, OUTPUT); //  LED FOTORESISTENZA GIORNO NOTTE  (si accende se manca il sole)
pinMode (8, OUTPUT); // ATTIVAZIONE CIRCOLATORE ACQUA UNO
pinMode (9, OUTPUT); // ATTIVAZIONE CIRCOLATORE ACQUA DUE
pinMode (10, OUTPUT); // LED  DI SOVRATEMPERATURA SERBATOIO SOPRA I 72°
pinMode (11, OUTPUT); // LED  DI SOVRATEMPERATURA PANNELLO SOPRA I 102°
pinMode (A3, INPUT); // INGRESSO SENSORE LIVELLO INSUFFICENTE ACQUA SERBATOIO
pinMode (13, OUTPUT); // LED LIVELLO INSUFFICENTE ACQUA SERBATOIO
pinMode (7, OUTPUT); // ATTIVA ELETTROVALVOLA BYPASS CALDAIA A TEMPERATURA SERBATOIO >50° facoltativo
pinMode (A0, INPUT); // INPUT TERMOMETRO PANNELLI SONDA LM35
pinMode (A1, INPUT); // INPUT TERMOMETRO SERBATOIO SONDA LM35
pinMode (A2, INPUT); // INPUT FOTORESISTENZA  CHE SEGNALA GIORNO/NOTTE

}

void loop ()
 {
   
  delay (10);
  temperatura_1  =(5.0 * analogRead(A1) * 100.0) / 1024; //  legge la temperatura sull'ingresso A1  con LM35
  delay (210);
  Serial.println(" -                                                                                                                ");
  Serial.println(" -------------------------------LE SCRITTE IN MAIUSCOLO INDICANO LE CAUSE DEL FERMO IMPIANTO-----------------------------");
  Serial.println(" -                                                                                                                "); 
  Serial.print(" temperatura  acqua "); 
  Serial.println(temperatura_1, DEC);//  stampa la temperatura
 
   delay (10);
 
  temperatura_1 = (5.0 * analogRead(A0) * 100.0) / 1024;   //  legge  la temperatura  con LM35
 Serial.print(" temperatura pannelli ");
  Serial.println(temperatura_1, DEC);      //  stampa la temperatura
 
   delay (10);
   
   
    liv_acqua=analogRead(A5);
   { if (liv_acqua > 300) digitalWrite (5, HIGH); Serial.println  // codice riga a sistemare in base al sensore
  (" RIPRISTINARE IL LIVELLO ACQUA NEL SERBATOIO ");  }//  stampa la scritta manca acqua nel serbatoio
 
  delay (10);
 
   temperatura_2 = analogRead(A2);   //  legge  l'ingresso A2
 Serial.print(" lettura fotoresistenza ");
  Serial.println(temperatura_2, DEC);      //  stampa la temperatura
   
   fotores=analogRead(A2);
   digitalWrite (6, LOW); // porta il pin segnale della fotoresistenza a livello basso
    delay (10);
   if (fotores < 100  )digitalWrite (6, HIGH);  // comando fotoresistenza soleggiato
   if (fotores > 500  )digitalWrite (6, HIGH);  // comando fotoresistenza soleggiato
   
   if (fotores > 50)Serial.println
  (" CAVO FOTORESISTENZA SCOLLEGATO O ROTTO (verificare il collegamento) ");
  delay (10);//  attesa di 10 millisecondi
   
   tempmaxpan=(5.0 * analogRead(A0) * 100.0) / 1024;
   if (tempmaxpan > 102)digitalWrite (11, HIGH); // comando:  1) fermo impianto per sovratemperatura pannelli 2) led di segnalazione
   else {digitalWrite (11, LOW);}
    if(tempmaxpan > 102)Serial.println
  (" I PANNELLI SONO IN SOVRATEPERATURA CAUSANO IL FERMO DELL'IMPIANTO ");   
  delay (10);
  tempmaxser=(5.0 * analogRead(A1) * 100.0) / 1024;
  if(tempmaxser > 72)digitalWrite (10, HIGH); // temperatura massima acqua serbatoio raggiunta 72 °
  else {digitalWrite (10, LOW);};
  if(tempmaxser > 72)Serial.println
  (" TEMPERATURA MASSIMA DEL SERBATOIO RAGGIUNTA  ");   
  delay (10);//  attesa di 10 millisecondi
 
  if(tempmaxser > 50)digitalWrite (7, HIGH); //  comando:  1) per evitare che l'acqua già troppo calda circoli nello scaldinono  a gas
                                             //  2) messa in standby  dell'impianto 3) led segnalazione evento,
  else {digitalWrite (7, LOW);}
   if(tempmaxser > 50)Serial.println
  (" elettrovalvole antiricircolo attivate per temperatura acqua sufficiente");     
  delay (10);//  attesa di 10 millisecondi

   
   temp_dif=(tempmaxpan)-(tempmaxser); // sottrzione tra temperatura serbatoio e temperatura pannelli messi tra parentesi e in ordine
   Serial.print (" differenza temperatura tra pannello e serbatoio ");
   Serial.println (temp_dif); // stampa la temperatura di differenza tra pannelli e serbatoio
   if (temp_dif > 20){ digitalWrite (8, HIGH); digitalWrite(9, HIGH); Serial.println (" segnali dei 2 circolatori  accesi "); }
   
  if (temp_dif < 20) Serial.println (" LA TEMPERATURA DEI PANNELLI NON E' SUFFICIENTE ");
 
   delay (1500);  //tempo in millisecondi per spegnere un circolatore  (valore standard 15 secondi)
   
    digitalWrite (8, LOW);  //spegne un circolatore
    Serial.println (" segnale circolatore 1 acceso segnale circolatore 2 spento");
   
    delay (3000);  //tempo in millisecondi per spegnere il secondo  circolatore  (valore standerd 5 minuti)
   
    digitalWrite (9, LOW); //spegne un circolatore
   
    delay (3000);

  }
 
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Pages: [1]   Go Up
Jump to: