Sì, vero. Serve tutto il codice.
ecco il codice e tutto l' ambaradan se notate " stranezze " ditemelo,
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
int allarme; // variabile per il valore di allarme pin A4
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 (7, OUTPUT); // ATTIVA ELETTROVALVOLA BYPASS CALDAIA A TEMPERATURA SERBATOIO >50° facoltativo
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 (13, OUTPUT); // se non c'è si accende il led dell'arduino al pin 13
pinMode (A0, INPUT); // INPUT TERMOMETRO PANNELLI SONDA LM35 PIN 23
pinMode (A1, INPUT); // INPUT TERMOMETRO SERBATOIO SONDA LM35 PIN 24
pinMode (A2, INPUT); // INPUT FOTORESISTENZA CHE SEGNALA GIORNO/NOTTE PIN 25
pinMode (A3, INPUT); // INGRESSO SENSORE LIVELLO INSUFFICENTE ACQUA SERBATOIO PIN 26
pinMode (A4, INPUT); // INGRESSO POTENZIOMETRO PIN 27 (ANCORA DA DECIDERE COSA REGOLARE)
}
void loop ()
{
digitalWrite (7, LOW);
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(" 1)temperatura acqua ");
Serial.println(temperatura_1, DEC);// stampa la temperatura
delay (10);
temperatura_2 = (5.0 * analogRead(A0) * 100.0) / 1024; // legge la temperatura con LM35
Serial.print(" 2)temperatura pannelli ");
Serial.println(temperatura_2, DEC); // stampa la temperatura
delay (10);
liv_acqua=analogRead(A3);
{ if (liv_acqua < 300) digitalWrite (5, HIGH); }
delay (10);
fotores=analogRead(A2);
digitalWrite (6, LOW); // porta il pin segnale della fotoresistenza a livello basso
delay (10);
Serial.print(" 3) valore fotoresistenza ");
Serial.println(fotores, DEC);
if (fotores < 100 )digitalWrite (6, HIGH); // comando fotoresistenza soleggiato
if (fotores > 400 )digitalWrite (6, HIGH); // comando fotoresistenza soleggiato
if (fotores < 100)Serial.println
(" 4) CAVO FOTORESISTENZA DANNEGGIATO (verificare il collegamento) ");
delay (10);// attesa di 10 millisecondi
if (fotores < 300)Serial.println
(" 5) CAVO FOTORESISTENZA SCOLLEGATO O ROTTO 2 (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);}
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);};
delay (10);
if(tempmaxser > 50)digitalWrite (7, HIGH); // comando: 1) per evitare che l'acqua già troppo calda circoli nello scaldinono a gas
if(tempmaxser > 50) Serial.println (" 6) elettrovalvole antiricircolo attivate per temperatura acqua sufficiente");
delay (10);
allarme=0;
if (digitalRead(5) == HIGH) {allarme=1;
Serial.println (" 7) ALLARME ATTIVO, ACQUA SERBATOIO INSUFFICENTE ");}
delay (10);
if (digitalRead(6) == HIGH) {allarme=1;
Serial.println (" 8) ALLARME ATTIVO, FOTORESISTENZA RILEVA INSUFFICIENTE SOLE ");}
delay (10);
if (digitalRead(10) == HIGH) {allarme=1;
Serial.println (" 9) ALLARME ATTIVO, TEMPERATURA SERBATOIO 72 GRADI ");}
delay (10);
if (digitalRead(11) == HIGH) {allarme=1;
Serial.println (" 10) ALLARME ATTIVO, TEMPERATURA PANNELLI troppo elevata > 102 GRADI ");}
delay (10);
temp_dif=(tempmaxpan)-(tempmaxser); // sottrzione tra temperatura serbatoio e temperatura pannelli messi tra parentesi e in ordine
Serial.print (" 11) differenza temperatura tra pannello e serbatoio ");
Serial.println (temp_dif); // stampa la temperatura di differenza tra pannelli e serbatoio
if (temp_dif < 2 && allarme < 1 ) { digitalWrite (8, HIGH); digitalWrite(9, HIGH);
// questa parte fa partire i cicolatori se non ci sono allarmi che portano la variabile allarme a 1 e se la
//temperatura pannelli e superiore al serbatoio
if (digitalRead(8) == HIGH && digitalRead(9) == HIGH) Serial.println (" 12) segnali dei 2 circolatori accesi "); }
//(digitalRead(8) == HIGH && digitalRead(9); == HIGH) Serial.println (" 15) segnali dei 2 circolatori accesi ");
// RIGA CON IL PUNTO E VIRGOLA FA STAMPARE SEMPRE LA SCRITTA segnali dei 2 circolatori accesi
if (temp_dif > 2) Serial.println (" 13) LA TEMPERATURA DEI PANNELLI NON E' SUFFICIENTE ");
delay (6000); //tempo in millisecondi per spegnere un circolatore (valore standard 15 secondi)
digitalWrite (8, LOW); //spegne un circolatore
if (digitalRead(8) == LOW && digitalRead(9) == HIGH) Serial.println (" 14) 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
Serial.println (" 15) segnali circolatori spenti");
delay (3000); //tempo di standby per far recuperare calore sufficiente a i pannelli nel funzionamento con il sole
}
il funzionamento di questa centralina gestisce l'invio dell'acqua a dei pannelli solari per acqua calda sanitaria (pannelli a svuotamento )
il funzionamento e abbastanza semplice se è tutto ok partono i due circolatori per riempire i pannelli vuoti e più caldi di 20 gradi dell'acqua del serbatoio di accumulo dove e immessa una serpentina in cui passa l'acqua fredda da scaldare,
appena i pannelli sono riempiti 10-15 secondi un circolatore e sufficiente per far circolare l'acqua per 5-6 minuti,
il ciclo si ripete in continuazione
gli allarmi che stoppano tutto sono,
1)pannelli troppo caldi (succede d'estate o se va via la corrente)
2) mancanza d'acqua nel serbatoio)
3) pannelli poco caldi
4) temperatura acqua serbatoio troppo calda
Lo stampato e stato realizzato con
http://www.iprocam.com/download/setup-bigci32.exe(messo anche il file con estensione cim)
Come potete vedere dalle foto il circuito e abbastanza semplice
In alto a sinistra c’è l’ingresso dell’alimentazione con ponte di diodi elettrolitico e 7805
Sulla desta ci sono i relè a 5 volt con pilotaggio a transistor,
l’atmega e il quarzo sulla sinistra ci sono gli ingressi dei sensori lm35 foto-resistenza ecc
c'e anche un potenziometro che per il momento devo acora decidere a cosa assegnarlo
il codice cosi com’è fa quello che gli ho detto di fare
ovviamente ci sono alcuni parametri che ho messo diversi apposta per far in modo che il programma gira su arduino uno senza avere i sensori collegati,
cosi come è sul mio arduino uno gira
alla fine il codice completo sarebbe duplicato nella duplicazione invertite la sequenza dei circolatori per evitare che sempre uno giri 5 minuti e l’altro 10 secondi