Solare Fotovoltaico
Scheda per gestire lo scambio enel-FV con inverter-UPS NO INVERTER PURO

VISUALIZZA L'ALBUM

Pag: (76)  < ...  5   6   7   [8]   9   10   11  ...>    (Ultimo Msg)


FinePagina

shadowcaster
MegaWatt


Utente
Msg:322

Stato:



Inviato il: 27/8/2013,22:08

Mi sa che ci vuole una bobina contattore da 24V 20/32A con contatti uno NA e l'altro NC...penso...
Qualcosa del genere http://www.energiasolare100.it/rele-contat...-24v-p-294.html ma solo con due contatti, bipolare...penso...
Alla fine si deve interrompere la fase che va ad alimentare l'inverter e quando la batteria raggiungerà una soglia di scarica, il relé si chiuderà, alimentando la bobina
del contattore, che chiuderà i suoi contatti di potenza e porterà la fase all'inverter mettendolo in bypass e facendo passare l'enel...
Questo è quello che ho imparato...spero di non sbagliare....



---------------



 

Vinss
MegaWatt


Utente
Msg:507

Stato:



Inviato il: 28/8/2013,10:14

Mi pare corretto.
Volevo aggiungere che a distanza di tempo, la sto trovando una soluzione veramente ottima, funziona tutto benissimo.
In pratica se accendo i condizionatori la sera cala sotto la soglia e switcha, altrimenti mi resta sempre in ups. Invece di stare sempre li' a vedere se e' il caso di alimentare con FV o Enel, fa tutto da solo, egregiamente.

 

Sabin

Avatar
MegaWatt


Utente
Msg:522

Stato:



Inviato il: 29/8/2013,13:19

Nei ritagli di tempo ho iniziato ad incollare qualche filo
ForumEA/us/Img0/844/onlk.jpg
Ho fatto delle prove alimentato dalla usb, prossimo passo
alimentazione con DC-DC. Ho provato a leggere la tensione di
una batteria da 9v, e una da telecomando 12v, funziona.
Difficoltà riscontrate: Libreria OneWire da aggiungere.
Cercato e installato driver usb/seriale, quello che si vede nella
foto non è stato riconosciuto.
Ultimo passo (se ci riesco), aggiungere un relè per staccare qualche
secondo prima (dello scambio) la linea frigoriferi.



---------------
Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw) <...

 

shadowcaster
MegaWatt


Utente
Msg:322

Stato:



Inviato il: 29/8/2013,16:01

Bravo! Complimenti… io ancora devo iniziare… mi faresti vedere il retro della mille fori così da "copiare"…
Grazie. Saluti.



---------------



 

calcola
GigaWatt


Utente
Msg:4435

Stato:



Inviato il: 29/8/2013,21:07

Sabin, ottimo lavoro.

perchè vuoi staccare la linea frigoriferi prima dello scambio?
Comunque se proprio vuoi farlo è facile, basta aggiungere un altro zoccolo relè e modificare leggermente il software.

Il programma da caricare è il seguente:

//Inizio listato, VERSIONE CON DISTACCO FRIGO prima della commutazione.
//prodotto da calcola (antrec.geo@yahoo.com) e Sabin//
//ver.3_4
#include "OneWire.h"
#include "Wire.h"

////////////////////////////////
//INIZIO PARTE MODIFICABILE
///////////////////////////////
#define tensione_bassa 11.9 //valori: 11.9 (sistema 12V); 23.8 (sistema 24V)
#define tensione_alta 13.7 //valori: 13.7 (sistema 12V); 27.4 (sistema 24V)
///////////////////////////////
//FINE PARTE MODIFICABILE
///////////////////////////////

#define coefficiente_conversione 0.05620

#define RELAY1 4 //led verde + relè commutazione. Indicatore stato batterie
#define RELAY2 5 //led rosso. Indicatore stato rete.
#define RELAY3 6 //relè frigo
#define inputPin (A0) //Sensore tensione collegato al pin analogico 0
#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;
#define media1 (bassatensione + altatensione)/2 // Media tensione per avvio

void setup()
{
//Apro la comunicazion seriale
Serial.begin(9600);
Wire.begin();
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(inputPin, INPUT);

{if (analogRead(inputPin) > media1)
{digitalWrite(RELAY3, LOW);
digitalWrite(RELAY2, LOW);
digitalWrite(RELAY1, HIGH);
delay(3000);
digitalWrite(RELAY3, HIGH);
}

else

{digitalWrite(RELAY3, LOW);
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, HIGH);
delay(3000);
digitalWrite(RELAY3, HIGH);
}
}

for (int i = 0; i < NUMREADINGS; i++)
readings[i] = 0; //Mette tutti 0 nell'array

}

void loop()

{
for (int A = 0; A < NUMREADINGS; A++)
{
total -= readings[index]; //Sottrae l'ultima lettura
readings[index] = analogRead(inputPin); //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)
index = 0; //Alla fine dell'array resetta l'indice a 0

average = total / NUMREADINGS; //Calcola la media
}

float VoltageReading;
float media_avvio;
VoltageReading=average*coefficiente_conversione;
media_avvio=media1*coefficiente_conversione;

if (VoltageReading < tensione_bassa)

{
{
if (salto != 5 )
digitalWrite(RELAY3, LOW);
delay(3000);
digitalWrite(RELAY3, HIGH);
delay(200);
salto = 5;
}
digitalWrite(RELAY2, HIGH);
delay(200);
digitalWrite(RELAY1, LOW);
}

else if (VoltageReading > tensione_alta)
{
{
if (salto != 10 )
digitalWrite(RELAY3, LOW);
delay(3000);
digitalWrite(RELAY3, HIGH);
delay(200);
salto = 10;
}
digitalWrite(RELAY1, HIGH);
delay(200);
digitalWrite(RELAY2, LOW);
}
Serial.print(" Voltaggio batteria intermedio tra min-max: ";
Serial.println(media_avvio);
Serial.println("-----------";
Serial.print(" Voltaggio batteria (media 5 letture): ";
Serial.println(VoltageReading); //Serial.println(average);
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.println("-----------";
Serial.println();
delay(2000);
}
//Fine listato


Il relè frigo è pilotato dal pin6, l'alimentazione di questo relè è in parallelo con quella del relè1.




Modificato da calcola - 30/8/2013, 08:16


---------------
Impara l'arte e mettila da parte

14 pannelli da 100w, inverter kemapower 3kw, regolato...

 

Sabin

Avatar
MegaWatt


Utente
Msg:522

Stato:



Inviato il: 29/8/2013,21:07

@ shadowcaster. Il posteriore è molto impasticciato, avrei dovuto fare prima un disegno.
Ti consiglio di fare prima uno schizzo su carta, e mettere vicini
i punti comuni, tipo GND, 5,5v.

@ calcola.
>>> Nei Led ho messo una resistenza per ogni uno, perchè
con resistenza comune ho riscontrato un comportamento anomalo del relè.
Ho aggiunto il secondo relè per mettere in pausa la linea frigo.
Anche questa sembra che funzioni.
La parte importante del codice è questa

if (VoltageReading < tensione_bassa) // passa a enel (se VR minore di TB)
{
{
if (salto != 5 )
digitalWrite(RELAY3, LOW);
delay(1500);
digitalWrite(RELAY3, HIGH);
delay(200);
salto = 5;
}
digitalWrite(RELAY2, HIGH);
delay(200);
digitalWrite(RELAY1, LOW);
}

else if (VoltageReading > tensione_alta) // passa a FTV (se VR maggiore di TB)
{
{
if (salto != 10 )
digitalWrite(RELAY3, LOW);
delay(1500);
digitalWrite(RELAY3, HIGH);
delay(200);
salto = 10;
}
digitalWrite(RELAY1, HIGH);
delay(200);
digitalWrite(RELAY2, LOW);

La variabile "salto" serve a saltare la conferma della verifica,
altrimenti il relè ad ogni passaggio accende e spegne,
in questo modo viene eseguito solo una volta quando si verifica
il passaggio da tensione alta a bassa, o viceversa.



---------------
Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw) <...

 

calcola
GigaWatt


Utente
Msg:4435

Stato:



Inviato il: 29/8/2013,21:20

Si, funziona anche così, il problema da te riscontrato della doppia commutazione ad ogni passaggio dipende da una non corretta impostazione dello stato del relay nella void setup. Ho appena verificato che il listato sopra postato non presenta quel problema.

I led devono avere in comune il neutro e tra questo ed il gnd dell'arduino serve una resistenza da 1Kohm. Se ne metti due funziona lo stesso, hai solo saldato una resistenza in più.



---------------
Impara l'arte e mettila da parte

14 pannelli da 100w, inverter kemapower 3kw, regolato...

 

Sabin

Avatar
MegaWatt


Utente
Msg:522

Stato:



Inviato il: 29/8/2013,21:32

Ho appena provato il codice e il relè figo accende e spegne ogni tre secondi circa.
Ho rimesso quello con la variabile "salto"

I led sono tre e ho messo una resistenza per ogni led



---------------
Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw) <...

 

calcola
GigaWatt


Utente
Msg:4435

Stato:



Inviato il: 30/8/2013,05:51

Ora ho capito quale è il problema e con la condizione numerica in effetti si risolve, ho modificato il listato aggiungendo la tua modifica. Provalo e fammi sapere se funge.



---------------
Impara l'arte e mettila da parte

14 pannelli da 100w, inverter kemapower 3kw, regolato...

 

Sabin

Avatar
MegaWatt


Utente
Msg:522

Stato:



Inviato il: 30/8/2013,06:59

CITAZIONE (calcola @ 30/8/2013, 06:51)
Ora ho capito quale è il problema e con la condizione numerica in effetti si risolve, ho modificato il listato aggiungendo la tua modifica. Provalo e fammi sapere se funge.

Si, adesso funziona bene.
Ho controllato la tensione, e come valore di conversione (alimentato con dc-dc)
devo mettere 0.05900



---------------
Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw) <...

 

calcola
GigaWatt


Utente
Msg:4435

Stato:



Inviato il: 30/8/2013,07:22

Ho fatto delle altre prove, mi sembra che funzioni meglio togliendo la quantificazione della variabile salto nel void setup ed aumentando il delay da 1500 a 3000 nel void loop..
Il valore della costante di conversione dipende dalla precisione delle resistenze del partitore, quindi va modificato ad ogni nuova costruzione.



---------------
Impara l'arte e mettila da parte

14 pannelli da 100w, inverter kemapower 3kw, regolato...

 

Sabin

Avatar
MegaWatt


Utente
Msg:522

Stato:



Inviato il: 30/8/2013,09:58

Sarebbe da "int salto = o;" a "int salto;"
forse all'accensione di arduino è meglio, ma per il normale funzionamento
non credo che cambi molto.

Quasi vorrei complicare un po la situazione faccine/smile.gif
Volendo inserire un pulsante normalmente aperto per dire ad arduino di
passare forzatamente (per un test) a fotovoltaico?
Se usassi l'ingresso analogico A1 (tipo A0 per la lettura della tensione)
solo con una resistenza da 10Kohm, poi
basterebbe istruire il codice per leggere il pin A1
e se legge una tensione superiore a 0 (per sicurezza 3v)
passare a fotovoltaico, poi se la tensione è sopra il minimo,
rimane a FTV, altrimenti ritorna a enel.



---------------
Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw) <...

 

Vinss
MegaWatt


Utente
Msg:507

Stato:



Inviato il: 30/8/2013,11:46

Si ci ho pensato anch'io al pulsante, a volte puo' essere utile.
Credo si potrebbe falsare la variabile della lettura quando si preme il pulsante, per poi riportare tutto in lettura reale ripremendolo.

 

calcola
GigaWatt


Utente
Msg:4435

Stato:



Inviato il: 30/8/2013,19:54

CITAZIONE
Volendo inserire un pulsante normalmente aperto per dire ad arduino di
passare forzatamente (per un test) a fotovoltaico?

Non complichiamo le cose semplici, è sufficiente inserire un interruttore sul positivo che va al contattore, quando vuoi restare ad enel è sufficiente azionarlo. Non ha senso passare a FV se le batterie sono scariche, mentre può essere utile rimanere su enel per non scaricare troppo le batterie. Es. la giornata è nuvolosa devo attaccare la lavatrice o altro carico pesante e non voglio buttare troppo giù le batterie, aziono l'interruttore e l'inverter ritorna ad enel, quando ho finito riporto l'interruttore in posizione automatica. Interruttore aperto: Enel, interruttore chiuso: UPS, io ho marcato le posizioni in questo modo.



---------------
Impara l'arte e mettila da parte

14 pannelli da 100w, inverter kemapower 3kw, regolato...

 

Sabin

Avatar
MegaWatt


Utente
Msg:522

Stato:



Inviato il: 30/8/2013,21:00

Funziona anche il (futuro) pulsante.
Ho tolto la verifica if (analogRead(inputPin) > media1).
All'accensione ardunio è in posizione enel,
e rimane cosi fino a quando le batterie raggiungono la tensione massima.
Se il pin a1 legge tensione, la condizione if (pulsante > 800)
lo mette in fotovoltaico, e ci rimane fino a quando non si
verifica la condizione if (VoltageReading < tensione_bassa).
Se spengo e riaccendo arduino si mette in enel.

Incredibile la sensibilità di lettura del pin a1
con alimentatore universale da 1A collegato al DC-DC
metto un dito sul positivo,
nell'altra mano una resistenza da 180.000 ohm,
poggio la resistenza sun pin a1 e ardiuno passa a fotovoltaico.

Il codice è da definire nelle pause, e nei valori tensione.

//Arduino Pro Mini VERSIONE CON DISTACCO FRIGO prima della commutazione, e pulsante FTV
//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 6 //valori tipo: 11.9 (sistema 12V); 23.8 (sistema 24V)
#define tensione_alta 8 //valori tipo: 13.7 (sistema 12V); 27.4 (sistema 24V)
///////////////////////////////
//FINE PARTE MODIFICABILE
///////////////////////////////

#define coefficiente_conversione 0.05400 // con usb 0.05400 .. con DC-DC 0.05900.. origine 0.05620
#define RELAY1 4
#define RELAY2 5
#define RELAY3 6
#define inputPin A0 //lettura volt
#define a1pin A1 //pulsante, ON fotovoltaico
#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(inputPin, INPUT);
pinMode(a1pin, INPUT);

digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, HIGH);
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(inputPin); //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(1500);
digitalWrite(RELAY3, HIGH);
delay(200);
salto = 5;
}
digitalWrite(RELAY2, HIGH);
delay(200);
digitalWrite(RELAY1, LOW);
}

if (VoltageReading > tensione_alta) // passa a FTV (se VR maggiore di TB)
{
{
if (salto != 10 )
digitalWrite(RELAY3, LOW);
delay(1500);
digitalWrite(RELAY3, HIGH);
delay(200);
salto = 10;
}
digitalWrite(RELAY1, HIGH);
delay(200);
digitalWrite(RELAY2, LOW);

}

pulsante = analogRead(a1pin); // controllo pulsante
if (pulsante > 800)
{
{
if (salto != 10 )

digitalWrite(RELAY3, LOW);
delay(1500);
digitalWrite(RELAY3, HIGH);
delay(200);
salto = 10;
}
digitalWrite(RELAY1, HIGH);
delay(200);
digitalWrite(RELAY2, LOW);
delay(3000);
}


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) <...

 
 InizioPagina
 

Pag: (76)  < ...  5   6   7   [8]   9   10   11  ...>    (Ultimo Msg)

Versione Completa!

Home page     TOP100-SOLAR    Home page forum