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
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);
}