jackie2_it
| Inviato il: 07/02/2014 22:14:10
|
Ciao a tutti dopo aver letto della possibilità di collegare il mio regolatore EPsolar modello 1206RN al computer tramite un cavo usb-rs232 mi è venuta in mente l'idea di sostituire Arduino al PC e lottare i dati che provengono dal regolatore su una scheda SD e in futuro inviate via rete su un server web.
Iniziamo con questa avventura (Elettroshocknow Style)
Inizia la ricerca su san google alla ricerca del protocollo di comunicazione tra il regolatore e il suo display remoto mt-5.
Ecco che salta fuori il documento in allegato ora il passo successivo sarà quello di creare il primo sketch con un Arduino uno o 2009 e vedere come realizzare il collegamento tra il regolatore (porta rj45 style) e Arduino.
Se vedete qualcosa che non quadra fatemi sapere visto che penso che sias un progetto che farà gola a molti
Download documento protocollo---> Link
///////////////////////////////////////////////////////////////////////////////////
Licenza d'uso:
Questo progetto non è in vendita, tutte le sue parti, foto, schemi e descrizioni vengono pubblicati dall'autore secondo la licenza creative commons:
http://creativecommons.org/licenses/by-nc-sa/3.0/it/deed.it
In dettaglio puoi consultare anche il legal code:
http://creativecommons.org/licenses/by-sa/3.0/it/legalcode
Licenza
Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Italia
.
Le modalità di riconoscimento della paternità sono qui di seguito:
- Chiunque porti questo progetto, fuori da questo forum, deve indicare inserendo un link di collegamento su ogni sua foto e progetto, questa discussione/progetto e questo forum.
- La paternità dell'idea ed ideazione del datalogger all'autore jackie2_it in quanto pubblicate unicamente in prima data.
- Le modalità sono soggette a modifiche e ad aggiornamenti a piacere dell'autore.
///////////////////////////////////////////////////////////////////////////////////////
Modificato da jackie2_it - 04/05/2014, 22:02:02
--------------- 2 pannelli solari da 50 watt con regolatore steca p1010 Ecco i miei pannelli solari [URL=http://www.ilampidigenio.it]qui[/URL]
| |
| | jackie2_it
| Inviato il: 12/02/2014 21:21:53
|
Iniziamo con il leggere il documento in allegato.
Come possiamo vedere quando il display richiede i dati al regolatore (ogni 30 secondi) invia una sequenza di byte alla quale il regolatore risponde con un altra sequenza di risposta.
Il display invia la seguente sequenza di byte (ogni 30 secondi)
synchronous head + ID + A0H + 00H + CRCH + CRCL + 7FH
il regolatore risponde con la seguente sequenza
synchronous head + ID + A0H + 0DH + collected data strings + CRCH + CRCL + 7FH
Come potete vedere dalle due sequenze il regolatore risponde con la stessa synchronous head inviata dal display (penso per indicare che si tratti di un dato per il regolatore).
Mentre nella sequenza di ritorno potete vedere fra i vari valori la stringa contenente i valori da visualizzare sul display.
Ora vediamo come possiamo convertire il tutto in codice arduino in modo da abbozzare una prima versione di sketch che visualizza questi valori su un display collegato ad arduino.
Dobbiamo per prima cosa inviare i comandi da arduino al regolatore scrivendoli sulla seriale, per fare questa operazione dobbiamo usare il comando Serial.Write
//inizio inviando il synchronous head (preso paro paro dalla documentazione)
Serial.write(0xEB);
Serial.write(0x90);
Serial.write(0xEB);
Serial.write(0x90);
Serial.write(0xEB);
Serial.write(0x90);
Serial.write(0x01); // versione indico 1
Serial.write(0xA0); // Richiedo al regolatore i dati in tempo reale.
Serial.write(0x00); // Lunghezza dei dati
Serial.write(0x6F); // Check sum
Serial.write(0x52); // Check sum
Serial.write(0x7F);
Poi arduino si deve mettere in attesa dei valori che verranno inviati dal regolatore con il comando Serial.available().
I dati verranno caricati in un buffer che verrà analizzato byte per byte per estratte i valori di tensione, corrente, etc.
Ecco come:
tensioneBatteria = (bufferRegolatore[10] << 8) | bufferRegolatore[9];
tensionePannello = (bufferRegolatore[12] << 8) | bufferRegolatore[11];
correnteCarico = (bufferRegolatore[16] << 8) | bufferRegolatore[15];
tensioneBatteriaScarica = (bufferRegolatore[18] << 8) | bufferRegolatore[17];
tensioneBatteriaCarica = (bufferRegolatore[20] << 8) | bufferRegolatore[19];
caricoOnOff = bufferRegolatore[21];
sovraccarico = bufferRegolatore[22];
cortoCircuitoCarico = bufferRegolatore[23];
soc = bufferRegolatore[24];
batteriaSovraccarica = bufferRegolatore[25];
indicatoreSottoScarica = bufferRegolatore[26];
indicatoreBatteriaCarica = bufferRegolatore[27];
indicatoreCarica = bufferRegolatore[28];
temperaturaBatteria = bufferRegolatore[29];
correnteCarica = (bufferRegolatore[31] << 8) | bufferRegolatore[30];
Nella prossima puntata vedremo come realizzare il collegamento tra il regolatore di carica e arduino in modo da poter testare lo sketch.
Sò che siete inpazienti di vedere lo schema (che è più semplice del previsto solo 3 fili), ma non voglio rovinarvi la sorpresa.
--------------- 2 pannelli solari da 50 watt con regolatore steca p1010 Ecco i miei pannelli solari [URL=http://www.ilampidigenio.it]qui[/URL]
| | | | danye
| Inviato il: 19/02/2014 12:53:57
|
Ottimo lavoro ti seguo interessato!
--------------- 1x185Wp poli direzione sud 1xRegolatore MPPT EpSolar Tracer 3015 7x batterie auto da recupero in parallelo 12volt 400 Ah molto teorici Sistema 12 volt che alimenta le luci a led di tutto l'appartamento Sito realtime in versione beta... solare.altervista.org
| | | | | | | danye
| Inviato il: 08/03/2014 17:56:30
|
Fantastico, il mio arduino ha già il motore caldo...
--------------- 1x185Wp poli direzione sud 1xRegolatore MPPT EpSolar Tracer 3015 7x batterie auto da recupero in parallelo 12volt 400 Ah molto teorici Sistema 12 volt che alimenta le luci a led di tutto l'appartamento Sito realtime in versione beta... solare.altervista.org
| | | | ElettroshockNow
| Inviato il: 09/03/2014 10:39:24
|
mi sorprendi sempre di più ,riesci a spaziare in mille direzioni.
Io l'ho segnalata come preferita ,perchè son sicuro che prima o poi entrerà in casa un EP
o ancor meglio si potrebbe fruttare lo stesso protocollo per dei regolatori Homemade
cosi' da creare una compatibilità con software o hardware sviluppati per gli EP.
Ciao
Elettro | | | | jackie2_it
| Inviato il: 09/03/2014 18:25:07
|
Ciao a tutti e bentornati.
Oggi causa febbre sono chiuso in casa e quindi ne ho approfittato per realizzare lo sketch per arduino per leggere i dati dal nostro regolatore epsolar.
Ed ecco che è nata la prima versione del logger la 0.1 .
Come potete vedere dal codice qui sotto ogni 30 secondi arduino interroga il regolatore chiedendogli i dati.
Ed l'epsolar gli risponde.
Non spaventatevi per i valori di tensione perchè andranno ancora divisi per 100 in modo da ottenere i volt.
#define SER_SIZE 256 //dimensione massima del buffer
static uint8_t bufferRegolatore[SER_SIZE + 1] = ""; //buffer che conterrà i byte letti dalla seriale.
int serind; //indice per il buffer.
//variabili d'appoggio per i valori letti dal regolatore.
int tensioneBatteria = 0;
int tensionePannello = 0;
int correnteCarico = 0;
int tensioneBatteriaScarica = 0;
int tensioneBatteriaCarica = 0;
int caricoOnOff = 0;
int sovraccarico = 0;
int cortoCircuitoCarico = 0;
int soc = 0;
int batteriaSovraccarica = 0;
int indicatoreSottoScarica = 0;
int indicatoreBatteriaCarica = 0;
int indicatoreCarica = 0;
int temperaturaBatteria = 0;
int correnteCarica = 0;
int contasecondi = 0;
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
Serial1.begin(9600); //comunica con il regolatore a 9600.
}
void parser() {
//elabora il buffer ed estrae i valori.
tensioneBatteria = (bufferRegolatore[10] << 8) | bufferRegolatore[9];
tensionePannello = (bufferRegolatore[12] << 8) | bufferRegolatore[11];
correnteCarico = (bufferRegolatore[16] << 8) | bufferRegolatore[15];
tensioneBatteriaScarica = (bufferRegolatore[18] << 8) | bufferRegolatore[17];
tensioneBatteriaCarica = (bufferRegolatore[20] << 8) | bufferRegolatore[19];
caricoOnOff = bufferRegolatore[21];
sovraccarico = bufferRegolatore[22];
cortoCircuitoCarico = bufferRegolatore[23];
soc = bufferRegolatore[24];
batteriaSovraccarica = bufferRegolatore[25];
indicatoreSottoScarica = bufferRegolatore[26];
indicatoreBatteriaCarica = bufferRegolatore[27];
indicatoreCarica = bufferRegolatore[28];
temperaturaBatteria = bufferRegolatore[29] - 30; // come indicato nella documentazione bisogna sottrarre 30 al valore rilevato.
correnteCarica = (bufferRegolatore[31] << 8) | bufferRegolatore[30];
//invio sull'usb i dati rilevati in modo da poterli leggere dal pc.
Serial.print("Tensione Batteria: ");
Serial.println(tensioneBatteria);
Serial.print("Tensione Pannello: ");
Serial.println(tensionePannello);
Serial.print("Corrente Carico: ");
Serial.println(correnteCarico);
Serial.print("Tensione Batteria Scarica: ");
Serial.println(tensioneBatteriaScarica);
Serial.print("Tensione Batteria Carica: ");
Serial.println(tensioneBatteriaCarica);
Serial.print("Carico Acceso/Spento: ");
Serial.println(caricoOnOff);
Serial.print("C'è stato un sovraccarico: ");
Serial.println(sovraccarico);
Serial.print("Cortocircuito del carico: ");
Serial.println(cortoCircuitoCarico);
Serial.print("SOC: ");
Serial.println(soc);
Serial.print("Batteria sovraccarica: ");
Serial.println(batteriaSovraccarica);
Serial.print("Batteria scarica: ");
Serial.println(indicatoreSottoScarica);
Serial.print("Batteria completamente carica: ");
Serial.println(indicatoreBatteriaCarica);
Serial.print("Batteria in carica: ");
Serial.println(indicatoreCarica);
Serial.print("Temperatura della batteria: ");
Serial.println(temperaturaBatteria);
Serial.print("Corrente di carica: ");
Serial.println(correnteCarica);
Serial.println("--------------------------------");
}
void loop() {
if (contasecondi == 0) {
//inizio inviando il synchronous head (preso paro paro dalla documentazione)
Serial1.write(0xEB);
Serial1.write(0x90);
Serial1.write(0xEB);
Serial1.write(0x90);
Serial1.write(0xEB);
Serial1.write(0x90);
Serial1.write(0x01); // versione indico 1
Serial1.write(0xA0); // Richiedo al regolatore i dati in tempo reale.
Serial1.write(0x00); // Lunghezza dei dati
Serial1.write(0x6F); // Check sum
Serial1.write(0x52); // Check sum
Serial1.write(0x7F);
contasecondi=30;
serind=0;
//Serial.println("Inviato comando");
}
// leggo la risposta del regolatore.
while (Serial1.available() > 0) {
/*Serial.print("ricezione");
Serial.print(serind);*/
char *ptr; //puntatore al buffer in memoria.
ptr = (char *) &bufferRegolatore;
ptr = ptr + serind;
if (Serial1.readBytes(ptr, 1) == 1) {
serind++;
}
if ((serind == 36) && (bufferRegolatore[35] == 0x7F)) parser();
}
delay(1000);
contasecondi -=1;
//Serial.println(contasecondi);
}
Ed ecco alcune foto del datalogger in funzione mentre legge i dati e me li visualizza a video.
Ecco arduino collegato con il regolatore.
Ora il passaggio successivo sarà quello di scrivere questi dati su una scheda sd in modo da poterli consultare a fine giornata a dopo una settimana.
L'idea è quella di utilizzare lo shield di rete per arduino che oltre a semplificare di molto le cose per chi non è pratico con il saldatore consentirà in futuro oltre a fare il logging in locale su scheda sd di inviare i dati direttamente su internet oppure di consentire di controllare da remoto via browser web il nostro regolatore aprendo un sacco di strade anche a applicazioni su smarthphone per vedere quando siete in vacanza come stà il vostro impianto.
--------------- 2 pannelli solari da 50 watt con regolatore steca p1010 Ecco i miei pannelli solari [URL=http://www.ilampidigenio.it]qui[/URL]
| | | | danye
| Inviato il: 10/03/2014 11:57:06
|
Grande, appena posso lo provo sul mio Arduino.Una domanda, dal DOC che hai linkato leggo che la stringa di richiesta deve avere in testa "AA55AA55AA55", funziona anche senza?
Modificato da danye - 10/03/2014, 17:03:55
--------------- 1x185Wp poli direzione sud 1xRegolatore MPPT EpSolar Tracer 3015 7x batterie auto da recupero in parallelo 12volt 400 Ah molto teorici Sistema 12 volt che alimenta le luci a led di tutto l'appartamento Sito realtime in versione beta... solare.altervista.org
| | | | jackie2_it
| Inviato il: 10/03/2014 14:01:09
|
è sostituita dalla sequenza
Serial.write(0xEB);
Serial.write(0x90);
Serial.write(0xEB);
Serial.write(0x90);
Serial.write(0xEB);
Serial.write(0x90);
che da quando vedo è più utilizzata (ho preso come esempio i sorgenti del programma windows).
Per provarlo sul tuo arduino uno bisogna apportare alcune modifiche al programma perchè ha una sola seriale, ma tempo 1/2 giorni metto su lo sketch per arduino uno che fà il log direttamente su sd.
--------------- 2 pannelli solari da 50 watt con regolatore steca p1010 Ecco i miei pannelli solari [URL=http://www.ilampidigenio.it]qui[/URL]
| | | | jackie2_it
| Inviato il: 10/03/2014 21:38:37
|
Vediamo che cosa ci serve per realizzare il primo datalogger sperimentale.
Per prima cosa un timer per memorizzare sul log la data e l'ora possiamo utilizzare un ds1307 che è molto semplice da programmare ed utilizzare io ho preso questo.
Poi ci serve un lettore di SD il più economico (per adesso non guardiamo ancora quello integrato nella shield di rete) ho trovato questo e come ultima cosa non meno importante ci serve il nostro Arduino uno, per l'alimentazione ci pensiamo dopo, penso che punterò comunque sul tipico step down che avevo usato sull'altro datalogger. A presto per il nuovo sketch
--------------- 2 pannelli solari da 50 watt con regolatore steca p1010 Ecco i miei pannelli solari [URL=http://www.ilampidigenio.it]qui[/URL]
| | | | danye
| Inviato il: 11/03/2014 13:26:29
|
Ieri sera ho provato il tuo sketch sul mio Arduino uno. Ho sostituito la Serial1 con "software serial" una classe che consente di dichiarare due pin digitali come TX e RX, ma non funziona, non ho nessun debug sulla seriale hardware.La prova è stata veloce e forse ho tralasciato qualcosa.
Provero' il tuo prossimo sketch.
Intanto ho preparato una bella cosetta....
LINK
Ciao.
--------------- 1x185Wp poli direzione sud 1xRegolatore MPPT EpSolar Tracer 3015 7x batterie auto da recupero in parallelo 12volt 400 Ah molto teorici Sistema 12 volt che alimenta le luci a led di tutto l'appartamento Sito realtime in versione beta... solare.altervista.org
| | | | jackie2_it
| Inviato il: 11/03/2014 14:14:55
|
Molto bello ma si basa su un database? oppure su un file fisso?
--------------- 2 pannelli solari da 50 watt con regolatore steca p1010 Ecco i miei pannelli solari [URL=http://www.ilampidigenio.it]qui[/URL]
| | | | danye
| Inviato il: 11/03/2014 14:28:38
|
CITAZIONE (jackie2_it, 11/03/2014 14:14:55 )
Molto bello ma si basa su un database? oppure su un file fisso?
Si basa su MySQL e PHP, i valori a 0 sono in attesa di essere aggiornati dal tuo lavoro, mentre la tensione delle batterie è in real time senza bisogno di refresh della pagina. Per il momento prende il valore da un pin analogico di Arduino.
--------------- 1x185Wp poli direzione sud 1xRegolatore MPPT EpSolar Tracer 3015 7x batterie auto da recupero in parallelo 12volt 400 Ah molto teorici Sistema 12 volt che alimenta le luci a led di tutto l'appartamento Sito realtime in versione beta... solare.altervista.org
| | | | jackie2_it
| Inviato il: 11/03/2014 17:11:37
|
Magari posta poi il codice della pagina così la possiamo integrare con altre funzionalità
--------------- 2 pannelli solari da 50 watt con regolatore steca p1010 Ecco i miei pannelli solari [URL=http://www.ilampidigenio.it]qui[/URL]
| | | | danye
| Inviato il: 11/03/2014 18:04:58
|
CITAZIONE (jackie2_it, 11/03/2014 17:11:37 )
Magari posta poi il codice della pagina così la possiamo integrare con altre funzionalità
Certo, appena riesco ad interfacciare il mio Arduino uno al regolatore completo almeno la lettura delle tensioni e correnti. Poi dovrò far funzionare il grafico e la sezione settaggi per controllare ad esempio l'on/off del carico ecc...
--------------- 1x185Wp poli direzione sud 1xRegolatore MPPT EpSolar Tracer 3015 7x batterie auto da recupero in parallelo 12volt 400 Ah molto teorici Sistema 12 volt che alimenta le luci a led di tutto l'appartamento Sito realtime in versione beta... solare.altervista.org
| |
| | |
|
Versione Mobile!
|
|
|
|
|
|
|
|
|
|
|
|
|
|