| eliafino
| Inviato il: 12/03/2014 10:01:14
|
CITAZIONE (calcola, 12/03/2014 09:17:55 ) 
@eliafino
non riesco a trovare l'esempio in cui si prelevano i dati dal file db, quale hai usato?
Infatti credo di non averlo trovato neanche io... sono andato a tentativi... ti incollo il mio codice per il grafico "oggi".
include("/usr/local/bin/pChart/class/pDraw.class.php");
include("/usr/local/bin/pChart/class/pImage.class.php");
include("/usr/local/bin/pChart/class/pData.class.php");
include("/usr/local/bin/pChart/class/pCache.class.php");
$myData = new pData();
mysql_connect("localhost", "root", "quilapass") or die("Could not connect: " . mysql_error());
mysql_select_db("solare");
$sql1 = mysql_query("SELECT DATA, WIN, WINV, VOUT FROM oggi WHERE MOD(ID,30)=0");
$sql2 = mysql_query("SELECT MAX(WH), MAX(VIN), MAX(IIN), MAX(WIN), MIN(TEMP), MAX(TEMP), MIN(VOUT), MAX(VOUT), MIN(IBATT), MAX(IBATT), MIN(TEMPBATT), MAX(TEMPBATT), MIN(SOC), MAX(SOC), MAX(IINV), MAX(WINV) FROM oggi");
while($row1 = mysql_fetch_array($sql1)){
$timestamp = strtotime($row1['DATA']);
$oggi = date('d/m/Y', $timestamp);
$ora = date('H:i:s', $timestamp);
$data=$ora;
$myData->addPoints($row1["WIN"],"Serie1");
$myData->setSerieDescription("Serie1","Potenza Prodotta");
$myData->setSerieOnAxis("Serie1",0);
$myData->setPalette("Serie1",array("R"=>0,"G"=>0,"B"=>255));
$myData->setSerieWeight("Serie1",2);
$myData->addPoints($row1["WINV"],"Serie2");
$myData->setSerieDescription("Serie2","Potenza Assorbita");
$myData->setSerieOnAxis("Serie2",0);
$myData->setPalette("Serie2",array("R"=>255,"G"=>0,"B"=>0));
$myData->addPoints($row1["VOUT"],"Serie3");
$myData->setSerieDescription("Serie3","Tensione Batteria");
$myData->setSerieOnAxis("Serie3",1);
$myData->setPalette("Serie3",array("R"=>0,"G"=>204,"B"=>0));
$myData->addPoints($ora,"Absissa");
$myData->setAbscissa("Absissa");
$myData->setAxisPosition(0,AXIS_POSITION_RIGHT);
$myData->setAxisName(0,"Potenza Prodotta/assorbita");
$myData->setAxisUnit(0,"W");
$myData->setAxisPosition(1,AXIS_POSITION_RIGHT);
$myData->setAxisName(1,"Tensione Batteria");
$myData->setAxisUnit(1,"V");
}
while($row2 = mysql_fetch_array($sql2)){
$KWH = ($row2[0]) / 1000;
$KWH2 = number_format($KWH, 2);
$MAXVIN = $row2[1];
$MAXIIN = $row2[2];
$MAXWIN = $row2[3];
$MINTEMP = $row2[4];
$MAXTEMP = $row2[5];
$MINVOUT = $row2[6];
$MAXVOUT = $row2[7];
$MINIBATT = $row2[8];
$MAXIBATT = $row2[9];
$MINTEMPBATT = $row2[10];
$MAXTEMPBATT = $row2[11];
$MINSOC = $row2[12];
$MAXSOC = $row2[13];
$MAXIINV = $row2[14];
$MAXWINV = $row2[15];
}
$myPicture = new pImage(1355,650,$myData,TRUE);
$myPicture->Antialias = FALSE;
$myPicture->drawRectangle(0,0,1354,649,array("R"=>0,"G"=>0,"B"=>0));
$myPicture->setFontProperties(array("FontName"=>"/usr/local/bin/pChart/fonts/verdana.ttf","FontSize"=>12));
$myPicture->drawText(600,20,"Produzione di Oggi $oggi");
$myPicture->setGraphArea(5,30,1235,590);
$myPicture->setFontProperties(array("R"=>0,"G"=>0,"B"=>0,"FontName"=>"/usr/local/bin/pChart/fonts/verdana.ttf","FontSize"=>8));
$AxisBoundaries = array(0=>array("Min"=>0,"Max"=>6000), 1=>array("Min"=>40,"Max"=>65));
$Settings = array("Pos"=>SCALE_POS_LEFTRIGHT
, "Mode"=>SCALE_MODE_MANUAL
, "ManualScale"=>$AxisBoundaries
, "LabelingMethod"=>LABELING_ALL
, "GridR"=>168, "GridG"=>168, "GridB"=>168, "GridAlpha"=>10
, "TickR"=>0, "TickG"=>0, "TickB"=>0, "TickAlpha"=>100
, "LabelRotation"=>90, "LabelSkip"=>15, "CycleBackground"=>1
, "DrawXLines"=>1, "DrawSubTicks"=>1
, "SubTickR"=>255, "SubTickG"=>0, "SubTickB"=>0, "SubTickAlpha"=>100, "DrawYLines"=>ALL
, "DrawSubTicks"=>TRUE, "CycleBackground"=>TRUE, "Floating"=>TRUE);
$myPicture->drawScale($Settings);
$Config = "";
$myPicture->drawSplineChart($Config);
$Config = array("FontR"=>0, "FontG"=>0, "FontB"=>0, "FontName"=>"/usr/local/bin/pChart/fonts/verdana.ttf", "FontSize"=>8, "Margin"=>6, "Alpha"=>0, "BoxSize"=>5, "Style"=>LEGEND_BOX
, "Mode"=>LEGEND_HORIZONTAL);
$myPicture->drawLegend(15,16,$Config);
$myPicture->setFontProperties(array("FontName"=>"/usr/local/bin/pChart/fonts/verdana.ttf","FontSize"=>11));
$myPicture->drawText(20,50,"Produzione Parziale: $KWH2 kWh");
$myPicture->drawText(20,70,"Max Tens. Pannelli: $MAXVIN V");
$myPicture->drawText(20,90,"Max Corr. Pannelli: $MAXIIN A");
$myPicture->drawText(20,110,"Max Prod. Pannelli: $MAXWIN W");
$myPicture->drawText(20,130,"Temp. Regolatore: $MINTEMP °C - $MAXTEMP °C");
$myPicture->drawText(20,150,"Tensione Batteria: $MINVOUT V - $MAXVOUT V");
$myPicture->drawText(20,170,"Corrente Batteria: $MINIBATT A - $MAXIBATT A");
$myPicture->drawText(20,190,"Temp. Batteria: $MINTEMPBATT °C - $MAXTEMPBATT °C");
$myPicture->drawText(20,210,"SOC Batteria: $MINSOC % - $MAXSOC %");
$myPicture->drawText(20,230,"Max Corr. Inverter: $MAXIINV A");
$myPicture->drawText(20,250,"Max Assorb. Inverter: $MAXWINV W");
$myPicture->autooutput("/var/www/grafici/oggi.png");
?>
--------------- Impianto Fotovoltaico "eliafino" in Tempo Reale. http://www.eliafino.it:3000/d/solare/impianto-fotovoltaico-eliafino
| | | | calcola
| Inviato il: 12/03/2014 10:47:38
|
Grazie, forse ho capito, dove vi sono gli array Mydata() devo sostituirli con la funzione di estrazione del valore desiderato dalla stringa che lo contiene. Bho, provo, nel complesso è una libreria ben fatta. Chissà perchè non è stato previsto il caso della generazione del grafico da un file di dati e dire che nella cartella data vi sono due file di dati, pensavo che li utilizzasse in qualche esempio.
--------------- 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: 12/03/2014 11:37:52
|
Salve e buongiorno a tutti.
Mi è venuto in mente un miglioramento che può essere fatto al programma tenendo conto del carico consumi giornalieri medio/produzione.
Ho notato che la mattina, diciamo vs le 08.00, la tensione delle batterie è a 25V, sufficiente per il carico in quell'orario, penso...mentre vs le 10.00/11.00 all'aumentare del carico aumenta anche la produzione.
Allora, perchè aspettare che le batterie siano completamente cariche a 27V per switchare a fotovoltaico?
Si potrebbe effettuare un primo switch a 25V, poi se il carico supera la produzione, un secondo switch a 27V ed così per tutta la giornata.
Si tratta solo di anticipare il primo switch e non gli altri giornalieri, per sfruttare da subito la produzione.
Ho detto una cavolata?
Saluti. | | | | shadowcaster
| Inviato il: 13/03/2014 07:06:49
|
CITAZIONE
Attento che se usi un relè per PCB non puoi alimentare la bobina con la tensione in uscita dal pin dell'arduino, lo bruci. Devi mettere un transistor NPN (BC548), ed anche un diodo . Lo schema è questo:

Mi serve un aiutino...x il collegamento transistor relè 5V diodo...
Il transistor ha tre contatti:B,C,E.
Il contatto B l'ho collegato tramite una resistenza da 1K,come consigliato, al pin digitale che dall'arduino accende il led verde.
Il contatto E l'ho collegato al GND in uscita dallo step down.
Manca il contatto C del transistor.
Passiamo al relè da PCB a 5V.
Da un lato ho tre contatti, due x la bobina ed uno com o int, dal lato opposto ho due contatti, NC ed NO.
NC del relè l'ho collegato al positivo che arriva dalle batterie a 24V.
Il negativo della bobina contattore a 24V l'ho collegato al negativo che arriva dalle batterie a 24V.
Il positivo che va alla bobina contattore da 24V l'ho collegato al contatto int o com del relè a 5V.
Passiamo alla bobina del relè a 5V sul quale ho i dubbi...
Un capo della bobina l'ho collegato al VCC che arriva dallo step down.
Un altro capo l'ho collegato al contatto C che arriva dal transistor.
Tra i contatti della bobina a 5V ho inserito un diodo rivolto vs VCC.
Mi manca qualcosa...
Prima il contatto int veniva collegato al pin che arrivava dall'arduino, ora mi rimane libero...cosa ho sbagliato?
Grazie e saluti. | | | | sabin
| Inviato il: 13/03/2014 07:35:57
|
Questo schema (per NPN) forse ti può aiutare.
La base la devi vedere come fosse il comando di un rubinetto,
il percorso collettore/emettitore l'uscita dell'acqua
Modificato da sabin - 13/03/2014, 07:39:37
--------------- 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: 13/03/2014 10:39:21
|
Grazie Sabin. Ho letto ma non mi è molto chiaro... | | | | calcola
| Inviato il: 13/03/2014 15:27:30
|
Quando sul pin base (B) vi è una tensione da 0-5V, il transistor collega C con E. Al pin C colleghi il negativo della bobina del contattore mentre colleghi E con la massa.
Quindi quando arriva tensione su B, C è collegato con E e permette alla bobina di chiudere il circuito sul neutro e quindi di far scattare il relè. Il flusso è diretto da C--> E e non al contrario perchè dentro il transistor vi è un diodo che impedisce il flusso da E --->C.
--------------- 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.
| | | | calcola
| Inviato il: 13/03/2014 15:53:16
|
Sabin, ho visto il tuo listato, l'hai ben adattato alle tue esigenze, proprio un buon lavoro.
Ora però il software è piuttosto lungo, devi mettere in conto possibili blocchi. Per prevenirli ti suggerisco di abilitare la funzione di auto reset. In pratica si abilita un contatore e si imposta un numero di secondi massimi per eseguire un ciclo, all'inizio di ogni ciclo parte un cronometro che conta i secondi impiegati se entro il limite impostato arriva il reset, tutto bene, altrimenti riavvia l'arduino.
ATTENTO che per far funzionare il tutto occorre avere sull'arduino basato su ATMEGA328P il bootloader dell'UNO, altrimenti nel momento dell'autoreset entra in loop e si blocca tutto.
Per uscirne occorre staccare l'alimentazione e riavviare manualmente, se ne esce sempre che l'evento che aveva determinato l'autoreset non si verifichi nuovamente al momento del riavvio.
Comunque per abilitare la funzione occorre scrivere all'inizio:
#include < avr/io.h>
#include < avr/wdt.h>
dentro il setup:
wdt_enable(WDTO_8S); //abilito il watchdog e imposto come tempo di reset 8 secondi
alla fine del ciclo di loop, nel tuo caso alla fine del listato:
wdt_reset();//resetto il watchdog
Per misurare il tempo di reset occorre sommare tutti i delay impostati nella peggiore delle situazioni. Comunque il tempo massimo impostabile è di 8s, se la somma dei delay è superiore occorre ridurla.
Modificato da calcola - 13/03/2014, 15:57:46
--------------- 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: 13/03/2014 18:15:04
|
CITAZIONE (calcola, 13/03/2014 15:53:16 ) 
Quando sul pin base (B) vi è una tensione da 0-5V, il transistor collega C con E. Al pin C colleghi il negativo della bobina del contattore mentre colleghi E con la massa.
Quindi quando arriva tensione su B, C è collegato con E e permette alla bobina di chiudere il circuito sul neutro e quindi di far scattare il relè. Il flusso è diretto da C--> E e non al contrario perchè dentro il transistor vi è un diodo che impedisce il flusso da E --->C.
Grazie! È come avevo collegato. Ora stampo il PCB e testo! | | | | sabin
| Inviato il: 13/03/2014 19:15:29
|
CITAZIONE (calcola, 13/03/2014 18:15:04 ) 
Sabin, ho visto il tuo listato, l'hai ben adattato alle tue esigenze, proprio un buon lavoro.
Ora però il software è piuttosto lungo, devi mettere in conto possibili blocchi. ......
Fino ad ora non ho avuto blocchi. Questo inverno per circa due mesi
ha lavorato di continuo senza problemi, poi ho fatto un aggiornamento
e dunque un reset. Ho un'altro codice per controllo temperature e
altro, quello è più del doppio, quando lo carico sono 19.244 bytes su 30.720 disponibili.
Sono convinto che se il codice è buono, e i collegamenti elettrici anche, non
ci devono essere problemi. I codici a rischio dovrebbero essere quelli che
impegnano particolarmente la CPU, matematica di alto livello, e
troppe operazioni molto ravvicinate.
Altre situazioni a rischio sono i disturbi elettrici, e ne so qualcosa,
ma per quelli non sono sicuro che riesca a fare il reset.
--------------- 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: 13/03/2014 19:27:36
|
Altra domanda...lo step down che mi abbassa la tensione a 5V, può essere sostituito da un partitore di tensione?
Si solo se la tensione in ingresso è sempre costante?
Modificato da shadowcaster - 13/03/2014, 19:43:52
| | | | calcola
| Inviato il: 13/03/2014 22:37:21
|
Vanno avanti per mesi poi basta una giornata particolarmente calda, una interferenza su un sensore, la scalogna...e si bloccano, certo più grande è il codice e l'elettronica collegata e maggiore sarà il rischio di blocco, non è un problema di codice è solo prudenza, abilitano la funzione anche nei cellulari e li...
Comunque male non fa è un paracadute...
--------------- 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.
| | | | calcola
| Inviato il: 13/03/2014 22:47:39
|
CITAZIONE
Ora stampo il PCB e testo!
Cosa usi, il bromografo o quale sistema? Io li mando a stampare in USA da un tizio che raccoglie le richieste e due volte la settimana manda a stampare un foglio intero, poi rispedisce. Ordine minimo tre schede, non costa molto, anzi poco è una specie di gruppo d'acquisto. Il problema è che tra una cosa e l'altra passa un mese.
CITAZIONE
lo step down che mi abbassa la tensione a 5V, può essere sostituito da un partitore di tensione?
No, il partitore non è un trasformatore, se fai una ricerca sul forum troverai delle spiegazioni più competenti di quella che potrei fornirti. Comunque ha a che fare con il fatto che il partitore riduce la tensione in modo proporzionale quindi fornisce in uscita una tensione variabile tra o e 5V.
Modificato da calcola - 13/03/2014, 22:51:56
--------------- 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: 13/03/2014 22:59:32
|
CITAZIONE
Ora stampo il PCB e testo!
Cosa usi, il bromografo o quale sistema? Io li mando a stampare in USA da un tizio che raccoglie le richieste e due volte la settimana manda a stampare un foglio intero, poi rispedisce. Ordine minimo tre schede, non costa molto, anzi poco è una specie di gruppo d'acquisto. Il problema è che tra una cosa e l'altra passa un mese.
X stampare uso dei particolari fogli gialli x trasferimento senza bromografo.
Creo il circuito con sprint layout.
Stampo con una stampante laser sul foglio giallo.
Passo il circuito con un ferro da stiro su una basetta ramata.
Ripasso le tracce con pennarello indelebile x PCB.
Corroso con cloruro ferrico...
Insomma mi ci diverto... | | | | calcola
| Inviato il: 14/03/2014 07:46:28
|
Conosco quel sistema, il difetto è che le piste devono essere larghe altrimenti la risoluzione della stampante non permette di creare dei buoni PCB, ultimamente mi hanno parlato di una tecnica che permette di costruire le piste fresando la piastra di rame, bho...
--------------- 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!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|