| Sabin
| Inviato il: 31/8/2013,19:51
|
Arduino è arruolato da oltre 2 ore.
Ha fatto lo scambio a 23,8V e le batterie si sono stabilizzate a 24,6.
Dato che ho deciso di mettere i fili del contattore sull'uscita
normalmente aperta, ho invertito High e low su relay1 e relay2, così
in caso di problemi con l'arduino il contattore mi rimane su enel.
Dopo aver messo una resistenza per ogni led l'anomalia si era ripresentata,
ma da quando ho settato Serial.begin(9600); la posto di 57600
non ho riscontrato anomalie.
La foto in versione "Tablet"
Il codice, abbastanza definitivo.
// Arduino Pro Mini VERSIONE CON DISTACCO FRIGO prima della commutazione (linea con relè temporizzato 3 minuti)
// + pulsante batterie, (reay1, high spento (enel), fili su contatto NO, Low = batterie)
// prodotto da calcola (antrec.geo@yahoo.com)
#include "OneWire.h" // consente di accedere ai dispositivi 1-wire (1 filo)
#include "Wire.h"
////////////////////////////////
//INIZIO PARTE MODIFICABILE
///////////////////////////////
#define tensione_bassa 23.8 //valori tipo: 11.9 (sistema 12V); 23.8 (sistema 24V)
#define tensione_alta 27.5 //valori tipo: 13.7 (sistema 12V); 27.4 (sistema 24V)
///////////////////////////////
//FINE PARTE MODIFICABILE
///////////////////////////////
#define coefficiente_conversione 0.05900 // con usb 0.05400 .. con DC-DC 0.05900.. origine 0.05620
#define RELAY1 4
#define RELAY2 5
#define RELAY3 6
#define a0pin A0 //lettura volt
#define a1pin A1 //pulsante, ON batterie
#define NUMREADINGS 5 //Il numero indica i valori tensione da leggere
#define bassatensione (tensione_bassa/coefficiente_conversione) // Valore della tensione stop batt ritorno rete
#define altatensione (tensione_alta/coefficiente_conversione) // Valore tensione stop rete ritorno batt.
int readings[NUMREADINGS]; //Letture dal input analogico
int index = 0; //Indice della lettura corrente
int total = 0; //Totale letture
int average = 0; //Media
int salto = 0;
int pulsante = 0;
#define media1 (bassatensione + altatensione)/2
void setup()
{
//Apro la comunicazion seriale
Serial.begin(9600);
Wire.begin();
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(a0pin, INPUT);
pinMode(a1pin, INPUT);
digitalWrite(RELAY1, HIGH);
digitalWrite(RELAY2, LOW);
digitalWrite(RELAY3, HIGH);
for (int i = 0; i < NUMREADINGS; i++)
readings[i] = 0; //Mette tutti 0 nell'array
}
void loop()
{
//Serial.println(media1);
for (int A = 0; A < NUMREADINGS; A++)
{
total -= readings[index]; //Sottrae l'ultima lettura
readings[index] = analogRead(a0pin); //Legge i valori provenienti dal sensore e li salva nell'array
total += readings[index]; //Aggiunge la lettura al totale
index = (index + 1); //Incrementa l'indice
if (index >= NUMREADINGS) // > maggiore di .. < minore di
index = 0; //Alla fine dell'array resetta l'indice a 0
average = total / NUMREADINGS; //Calcola la media
}
float VoltageReading; // comprende i numeri reali, rappresentati in virgola mobile , 32 bit, 7 cifre
float media_avvio;
VoltageReading=average*coefficiente_conversione;
media_avvio=media1*coefficiente_conversione;
if (VoltageReading < tensione_bassa) // passa a enel (se VR minore di TB)
{
{
if (salto != 5 )
digitalWrite(RELAY3, LOW);
delay(2000);
digitalWrite(RELAY3, HIGH);
delay(200);
salto = 5;
}
digitalWrite(RELAY2, LOW);
delay(200);
digitalWrite(RELAY1, HIGH);
}
if (VoltageReading > tensione_alta) // passa a batterie (se VR maggiore di TB)
{
{
if (salto != 10 )
digitalWrite(RELAY3, LOW);
delay(2000);
digitalWrite(RELAY3, HIGH);
delay(200);
salto = 10;
}
digitalWrite(RELAY1, LOW);
delay(200);
digitalWrite(RELAY2, HIGH);
}
pulsante = analogRead(a1pin); // controllo pulsante, ON passa a batterie
if (pulsante > 800)
{
{
if (salto != 10 )
digitalWrite(RELAY3, LOW);
delay(2000);
digitalWrite(RELAY3, HIGH);
delay(200);
salto = 10;
}
digitalWrite(RELAY1, LOW);
delay(200);
digitalWrite(RELAY2, HIGH);
delay(4000);
}
Serial.print(" Voltaggio batteria media 5 letture: ");
Serial.println(VoltageReading); //Serial.println(average);
Serial.print(" Voltaggio batteria intermedio tra min-max: ");
Serial.println(media_avvio);
Serial.print(" Passa a enel quando minore di: ");
Serial.println(tensione_bassa);
Serial.print(" Passa a batterie quando maggiore di: ");
Serial.println(tensione_alta);
Serial.print(" tensione A1: ");
Serial.println(pulsante);
Serial.println();
delay(2000);
}
//Fine listato
--------------- Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw) Pannelli 11,1 mq. Wp 1320 (x120 Wp mq)... n° 5 monoc. 72 celle 750 Wp (SO) su MPPT SolarMate 40A n° 3 polic. 60 celle 570 Wp (Sud) su PWM 30A... batterie: 2 coppie SMA (trazione) 24V 120 Ah C/10 (+ 2 avviamento 70Ah) Switch enel/batterie con Arduino Pro Mini
| | | | calcola
| Inviato il: 31/8/2013,22:28
|
Bravo, fai bene a sperimentare nuove soluzioni, come vedi il limite è solo nella fantasia.
Personalmente però ritengo il pulsante una inutile complicazione, alla fin fine a cosa ti serve?
Se all'accensione la tensione è più alta della media tra il minimo ed il massimo, vuol dire che vi è il sole che e le batterie sono in ricarica quindi puoi permetterti di passare a batterie, altrimenti il sistema rimane ad enel fino alla completa ricarica. Infatti, se come consigliato imposti come tensione minima 23,8v e massima di 27,4v, la media sarà di 25,6v. Tale valore di tensione lo puoi avere solo se le batterie sono cariche ed a riposo oppure se vi è il sole. Come vedi quella semplice condizione svolge in automatico la funzione che il tuo pulsante esegue in manuale. Il nostro scopo è quello di automatizzare non di tornare al manuale.
Invece hai riflettuto che il tuo pulsante può svolgere altre funzioni? Ad esempio se lo colleghi ad una foto resistenza avrai... un crepuscolare, oppure...
Purtroppo con il codice non posso più aiutare nessuno, qualunque mia aggiunta sarebbe influenzata dal codice che altri hanno scritto per me e come ho già detto, ho promesso di non divulgare, quindi... non comment.
--------------- Impara l'arte e mettila da parte 14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.
| | | | Sabin
| Inviato il: 1/9/2013,08:47
|
Si è vero, si potrebbe lasciare che va a batterie se sopra la media, ma l'imperfezione è solo se spengo e riaccendo l'arduino e le batterie sono sopra il max, succede che va in enel e subito in batterie, però se la tensione è sotto il max va bene. Posso decidere se lasciarlo in enel, o se forzarlo (con pulsante) a batterie. Per il crepuscolare, nel mio caso non vedo utilità, ma una cosa che mi frullava, e che forse potrei realizzare per la prossima estate, è un secondo livello di tensione minima (tipo 24,5v) per deviare solo il climatizzatore da batterie a enel, e riprenderlo a tensione massima.
--------------- Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw) Pannelli 11,1 mq. Wp 1320 (x120 Wp mq)... n° 5 monoc. 72 celle 750 Wp (SO) su MPPT SolarMate 40A n° 3 polic. 60 celle 570 Wp (Sud) su PWM 30A... batterie: 2 coppie SMA (trazione) 24V 120 Ah C/10 (+ 2 avviamento 70Ah) Switch enel/batterie con Arduino Pro Mini
| | | | calcola
| Inviato il: 1/9/2013,20:09
|
Scusa, ma quale è il problema, se parte a enel e subito dopo passa a batteria, l'inverter commuta solo quando passa a batteria è solo un problema del led, la funzionalità rimane inalterata.
--------------- Impara l'arte e mettila da parte 14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.
| | | | Sabin
| Inviato il: 1/9/2013,21:37
|
L'imperfezione a cui mi riferivo riguarda la mia modifica. Nel tuo codice originale, if (analogRead(inputPin) > media1), all'accensione di arduino verifica se la tensione è sopra la media e va direttamente in batterie. Ma al momento preferisco la modifica che ho fatto.
--------------- Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw) Pannelli 11,1 mq. Wp 1320 (x120 Wp mq)... n° 5 monoc. 72 celle 750 Wp (SO) su MPPT SolarMate 40A n° 3 polic. 60 celle 570 Wp (Sud) su PWM 30A... batterie: 2 coppie SMA (trazione) 24V 120 Ah C/10 (+ 2 avviamento 70Ah) Switch enel/batterie con Arduino Pro Mini
| | | | calcola
| Inviato il: 2/9/2013,05:47
|
Ok, ho capito
--------------- Impara l'arte e mettila da parte 14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.
| | | | shadowcaster
| Inviato il: 2/9/2013,05:49
|
Salve a tutti…mi è venuta un'idea, non so se sia stata già realizzata o di per se lo switch lo faccia in automatico…comunque la proposta è questa: Ho notato che se la tensione delle batterie è intorno ai 24,3V, quindi si potrebbe utilizzare ancora una carica residua, e si allaccia un carico, per esempio parte il motore del frigorifero, questo valore scende di colpo, ovviamente…e poi si stabilizza. Tutto ciò è dovuto alla maggiore potenza assorbita dall'utilizzatore allo spunto, sicuramente superiore di quella utilizzata dallo stesso a regime. Lo switch misurerà la tensione e passerà su Enel attendendo la carica completa delle batterie…ma effettivamente la tensione misurata è falsata dalla richiesta di potenza dello spunto del motore…per cui il sistema non dovrebbe praticamente passare su Enel ma rimanere sul FV, erogando la corrente necessaria all'utilizzatore a regime. Le proposte per risolvere tutto ciò sono 2, e correggetemi se dico cavolate… 1 - si potrebbe istruire il sistema, con un ritardo nel passaggio ad Enel, per cui misurata la tensione allo spunto, si attende per es 10 secondi prima di switchare, si rieffettua una nuova misurazione di tensione, e se questa torna a valori accettabili, il sistema rimane sul FV. 2 - si potrebbe inserire un "tampone" per es batterie di condensatori con resistenze che forniscano alla rete domestica quella potenza in più, impulsiva, dovuta allo spunto…
Ho detto stupidaggini? Saluti
| | | | ronwal
| Inviato il: 2/9/2013,05:58
|
secondo mè invece bisogna implementare uno stato di carica... mettendo un sensore di corrente per la ricarica ed uno per la scarica....
in questo modo settando la capacità batteria non ci saranno piu di questi problemi....... basterebbe un solo sensore hall con cui sapere se entra o se esce corrente dalle batterie...
--------------- 6 bosch csi 240 mono, 9 ldk 225 poly, Outback flex max 60, psw 7 advance 4kw 48v, 24 elementi 400ah c 5 tubolari
| | | | Sabin
| Inviato il: 2/9/2013,07:49
|
CITAZIONE (shadowcaster @ 2/9/2013, 06:49) Salve a tutti…mi è venuta un'idea, non so se sia stata già realizzata o di per se lo switch lo faccia in automatico…comunque la proposta è questa: Ho notato che se la tensione delle batterie è intorno ai 24,3V, quindi si potrebbe utilizzare ancora una carica residua, e si allaccia un carico, per esempio parte il motore del frigorifero, questo valore scende di colpo, ovviamente…e poi si stabilizza. Tutto ciò è dovuto alla maggiore potenza assorbita dall'utilizzatore allo spunto, sicuramente superiore di quella utilizzata dallo stesso a regime. Lo switch misurerà la tensione e passerà su Enel attendendo la carica completa delle batterie…ma effettivamente la tensione misurata è falsata dalla richiesta di potenza dello spunto del motore…per cui il sistema non dovrebbe praticamente passare su Enel ma rimanere sul FV, erogando la corrente necessaria all'utilizzatore a regime. Le proposte per risolvere tutto ciò sono 2, e correggetemi se dico cavolate… 1 - si potrebbe istruire il sistema, con un ritardo nel passaggio ad Enel, per cui misurata la tensione allo spunto, si attende per es 10 secondi prima di switchare, si rieffettua una nuova misurazione di tensione, e se questa torna a valori accettabili, il sistema rimane sul FV. 2 - si potrebbe inserire un "tampone" per es batterie di condensatori con resistenze che forniscano alla rete domestica quella potenza in più, impulsiva, dovuta allo spunto…
Ho detto stupidaggini? Saluti Dato che non conviene scaricare troppo le batterie, anche se resta un 20% di corrente utilizzabile non è un problema, la ritroveremo l'indomani, anticipando un po il passaggio a batterie. Non so in che tempi avvengono le 5 letture della tensione, eventualmente si potrebbero rallentare con un "delay()"
--------------- Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw) Pannelli 11,1 mq. Wp 1320 (x120 Wp mq)... n° 5 monoc. 72 celle 750 Wp (SO) su MPPT SolarMate 40A n° 3 polic. 60 celle 570 Wp (Sud) su PWM 30A... batterie: 2 coppie SMA (trazione) 24V 120 Ah C/10 (+ 2 avviamento 70Ah) Switch enel/batterie con Arduino Pro Mini
| | | | Sabin
| Inviato il: 4/9/2013,20:38
|
La mia versione 2.0 dovrebbe essere questa,
e penso che la realizzo presto, anzi il tempo che arrivi un'altro arduino,
perchè la nuvoletta fantozziana pomeridiana non mi molla,
e il climatizzatore ancora mi serve.
--------------- Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw) Pannelli 11,1 mq. Wp 1320 (x120 Wp mq)... n° 5 monoc. 72 celle 750 Wp (SO) su MPPT SolarMate 40A n° 3 polic. 60 celle 570 Wp (Sud) su PWM 30A... batterie: 2 coppie SMA (trazione) 24V 120 Ah C/10 (+ 2 avviamento 70Ah) Switch enel/batterie con Arduino Pro Mini
| | | | shadowcaster
| Inviato il: 4/9/2013,22:23
|
Ciao sabin. Mi spieghi una cosa, perché il relè per linea frigo e climatizzatore?
| | | | Sabin
| Inviato il: 5/9/2013,10:27
|
Perchè non avendo un adeguata capacità di accumulo devo fare in modo che nei momenti di crisi tolgo i carichi più pesanti. La superficie fotovoltaica mi basta, ma questa estate qui in Sicilia è stata e continua ad essere uno schifo. Non ho motivo di aggiungere batterie di solito finito settembre il climatizzatore non mi serve più. Perciò per gestire al meglio i consumi, il climatizzatore lo devo passare ad enel prima di raggiungere il limite minimo.
La pausa per la linea frigo (due frigo e un congelatore, e climatizzatore) mi serve per non stressare i motori e l'inverter.
--------------- Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw) Pannelli 11,1 mq. Wp 1320 (x120 Wp mq)... n° 5 monoc. 72 celle 750 Wp (SO) su MPPT SolarMate 40A n° 3 polic. 60 celle 570 Wp (Sud) su PWM 30A... batterie: 2 coppie SMA (trazione) 24V 120 Ah C/10 (+ 2 avviamento 70Ah) Switch enel/batterie con Arduino Pro Mini
| | | | calcola
| Inviato il: 5/9/2013,22:12
|
Si deve fare in modo che, raggiunta la condizione di passaggio all'enel, l'arduino attenda 3-4 secondi, rilegga la tensione e se ancora più bassa del minimo passa ad enel altrimenti rimane a batteria. Si può ottenere implementando nel codice una condizione if.... else dopo : if (VoltageReading < tensione_bassa).
Purtroppo non posso sperimentare la fattibilità in quanto ho già smontato la mia applicazione.
--------------- Impara l'arte e mettila da parte 14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.
| | | | Sabin
| Inviato il: 6/9/2013,07:12
|
Ho visto che quando la tensione si avvicina al minimo nelle letture della tensione, Ardunino vede delle variazioni come un'onda costante, tra una lettura a latra c'e un sali e scendi di almeno 5 decimi di volt, quando passa a enel la variazione è meno di 2 decimi.
E se di letture ne facesse 10 al posto di 5? Inserendo un delay (300) nelle letture alla fine passeranno 3 secondi
for (int A = 0; A < NUMREADINGS; A++) { total -= readings[index]; //Sottrae l'ultima lettura readings[index] = analogRead(a0pin); //Legge i valori provenienti dal sensore e li salva nell'array total += readings[index]; //Aggiunge la lettura al totale index = (index + 1); //Incrementa l'indice delay(300);
if (index >= NUMREADINGS) // > maggiore di .. < minore di index = 0; //Alla fine dell'array resetta l'indice a 0
average = total / NUMREADINGS; //Calcola la media } Che ne pensi?
--------------- Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw) Pannelli 11,1 mq. Wp 1320 (x120 Wp mq)... n° 5 monoc. 72 celle 750 Wp (SO) su MPPT SolarMate 40A n° 3 polic. 60 celle 570 Wp (Sud) su PWM 30A... batterie: 2 coppie SMA (trazione) 24V 120 Ah C/10 (+ 2 avviamento 70Ah) Switch enel/batterie con Arduino Pro Mini
| | | | calcola
| Inviato il: 7/9/2013,08:25
|
L'arduino ha un processore a 16Mhz, di operazioni in un secondo ne fa milioni, le letture le fa in meno di un centesimo di secondo. In realtà così come è fa non 5 letture, ma 25, infatti il ciclo di letture è ripetuto per se stesso. Se poni il numero delle letture pari a 10, quelle effettive saranno 100! Allora ci si può chiedere perchè non far fare direttamente 25 letture e non 5X5? L'ho già spiegato più sopra, da prove fatte ho sperimentato che facendo leggere 5 volte la tensione e facendo poi ripetere questo ciclo per 5 volte, la lettura è più stabile rispetto ad un solo ciclo di 25 letture, non so perchè, ma è così.
Il partitore è di tipo resistivo, ha una precisione del 90% circa. Le comuni resistenze hanno una tolleranza del 5% e siccome sono due in serie l'errore si somma, quindi è normale una piccola oscillazione nelle letture che comunque variano in volt di un decimale rispetto alla tensione effettiva (se il partitore è stato montato correttamente).
Se ti riferisci al post di ronwal, io ho già collegato al mio arduino due sensori di corrente, il problema è che per fare un vero soc devono essere memorizzati i valori di corrente in ingresso ed in uscita per poi effettuare dei calcoli, dovremmo aggiungere una eprom... per me va bene così.
Modificato da calcola - 7/9/2013, 09:48
--------------- Impara l'arte e mettila da parte 14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.
| |
| | |
|
Versione Mobile!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|