Se sei già registrato           oppure    

Orario: 29/03/2024 09:51:47  

 

Energia Alternativa ed Energia Fai Da Te > Arduino

VISUALIZZA L'ALBUM

Pagine: (5)   [1]   2   3   4   5    (Ultimo Msg)


Datalogger Arduino per regolatore EP Solar
FinePagina

jackie2_it
KiloWatt


Gruppo:Utente
Messaggi:212

Stato:



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
KiloWatt


Gruppo:Utente
Messaggi:212

Stato:



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

Avatar
KiloWatt


Gruppo:Utente
Messaggi:258

Stato:



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

 

jackie2_it
KiloWatt


Gruppo:Utente
Messaggi:212

Stato:



Inviato il: 08/03/2014 17:06:26

Ciao a tutti torniamo alla costruzione del datalogger per epsolar dopo un periodo di stop causa lavoro.
Ma non preoccupatevi il progetto continua vediamo a che punto siamo rimasti la scorsa volta, abbiamo visto una semplice implementazione del protocollo di comunicazione con il regolatore epsolar.
Oggi vedremo come effettuare il collegameto tra il regolatore epsolar ed arduino.
Per arrivare al collegamento con arduino ho per prima cosa realizzato il cavo di collegamento con il computer per verificare i segnali che venivano scambiati.
Per realizzare il cavo ho utilizzato il cavo PL2303HX (che è un convertitore usb a RS232 ttl) nel mio caso ho utilizzato questo
ed ho effettuato il seguente schema di collegamento (sul connettore rj45).

http://www.energialternativa.info/public/newforum/ForumEA/schemaCollegamento.gif

pin 8 (cavo nero)
pin 6 (cavo verde)
pin 5 (cavo bianco)

Vi chiederete e il cavo rosso. il cavo rosso non serve perchè fornisce i 5volt e non sono necessari per la comunicazione visto che il regolatore ha già la sua alimentazione.
Ora passiamo al programma per testare il collegamento ho scaricato il programma che trovate a questo indirizzo
, il produttore fornisce anche i sorgenti del programma che saranno molto utili per il nostro datalogger.
Ho collegato per prima cosa il solo cavo al computer e l'ho fatto riconoscere dal sistema, poi ho verificato qual'era la porta com assegnata dal sistema ed ho avviato il programma.
Sotto potete vedere che il computer colloquia correttamente con il regolatore.

http://www.energialternativa.info/public/newforum/ForumEA/2014-03-07%2019.43.52.jpg

Ed ecco una carrellata di altre foto del regolatore collegato al computer.
http://www.energialternativa.info/public/newforum/ForumEA/2014-03-07%2019.44.01.jpg

http://www.energialternativa.info/public/newforum/ForumEA/2014-03-07%2019.44.09.jpg

Ora visto che il collegamento risulta corretto passiamo al replicarlo con arduino, il tutto è molto semplificato visto che il regolatore comunica con livelli ttl a 5v (che sono compatibili con arduino).
L'arduino che risulta più adatto per fare esperimenti è l'arduino mega perchè ha 4 porte seriali molto utili per debuggare il programma e verificare tramite la porta usb di arduino quali sono i valori che vengono restituiti dal regolatore.
Iniziamo con il creare un connettore rj45 per il collegamento di arduino con l'epsolar, nel mio caso come da foto sotto ho utilizzato un connettore rj45 e tre fili rigidi (di quelli che vengono utilizzati nel cavo del telefono) che facilitano la connessione tra arduino e l'epsolar.
http://www.energialternativa.info/public/newforum/ForumEA/2014-03-08%2011.52.18.jpg
Il collegamento deve essere fatto nel seguente modo.
pin 8 (gnd arduino)
pin 6 (tx1 arduino)
pin 5 (rx1 arduino)
Il risultato è quello sotto (per adesso è ancora un collegamento volante)
http://www.energialternativa.info/public/newforum/ForumEA/2014-03-08%2012.00.55.jpg
Il prossimo passo sarà quello di realizzare il primo sketch di test e verificare i valori su pc.



---------------
2 pannelli solari da 50 watt con regolatore steca p1010
Ecco i miei pannelli solari [URL=http://www.ilampidigenio.it]qui[/URL]

 

danye

Avatar
KiloWatt


Gruppo:Utente
Messaggi:258

Stato:



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

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



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
KiloWatt


Gruppo:Utente
Messaggi:212

Stato:



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.

http://www.energialternativa.info/public/newforum/ForumEA/2014-03-09%2017.25.51.jpg

Ecco arduino collegato con il regolatore.

http://www.energialternativa.info/public/newforum/ForumEA/2014-03-09%2017.25.56.jpg

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

Avatar
KiloWatt


Gruppo:Utente
Messaggi:258

Stato:



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
KiloWatt


Gruppo:Utente
Messaggi:212

Stato:



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
KiloWatt


Gruppo:Utente
Messaggi:212

Stato:



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

Avatar
KiloWatt


Gruppo:Utente
Messaggi:258

Stato:



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
KiloWatt


Gruppo:Utente
Messaggi:212

Stato:



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

Avatar
KiloWatt


Gruppo:Utente
Messaggi:258

Stato:



Inviato il: 11/03/2014 14:28:38

CITAZIONE (jackie2_it, 11/03/2014 14:14:55 ) Discussione.php?211451&1#MSG11

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
KiloWatt


Gruppo:Utente
Messaggi:212

Stato:



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

Avatar
KiloWatt


Gruppo:Utente
Messaggi:258

Stato:



Inviato il: 11/03/2014 18:04:58

CITAZIONE (jackie2_it, 11/03/2014 17:11:37 ) Discussione.php?211451&1#MSG13

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

 
 InizioPagina
 

Pagine: (5)   [1]   2   3   4   5    (Ultimo Msg)

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum