Pages: [1]   Go Down
Author Topic: Leggere strighe via web da arduino per automazione fotovoltaica  (Read 1700 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buongiorno,
ho a disposizione un arduino uno ethernet, "medie" capacità di programmazione (giusto per dare un'idea,  quello che per ora sono riuscito a fare copiando/adattando pezzi di programmi trovati in giro  è l'apertura/chiusura di tende elettriche con comandi impartiti via web da smartphone/ipad etc). Ho il seguente problema ed ovviamente ho già cercato (ma per ora non trovato) dei codici di esempio. Ho altri dispositivi (non arduino) connessi in rete che caricano su pachube/cosm informazioni relative alla produzione fotovoltaica ed al consumo della mia casa (esattamente utilizzo dispositivi della Current Cost). Quindi già caricati e belli pronti su pachube, aggiornati ogni 5 minuti, ci sono 2 dati relativi alla produzione del fotovoltaico sul tetto ed al consumo della casa. Il mio obiettivo è realizzare, con arduino, un dispositivo che in automatico attivi un relè quando il consumo della casa + delta elettrodomestico è minore o uguale alla produzione fotovoltaica. Esempio: produco 2000 watt con il fotovoltaico, la casa sta consumando 500 watt, ho una stufetta elettrica che consuma 1000 watt, quindi sono in sovraproduzione anche accendendo la stufetta, arduino la accende. Ovviamente ci sarà un loop che ogni 3/5 minuti rifà il controllo. Mi manca la "conoscenza" su come "tirare dentro" arduino questi due dati numerici da pachube. da lì in poi, per i calcoli e l'attivazione del relè sono in grado di arrangiarmi  Utilizzando le api di pachube, questo url "http://api.pachube.com/v2/feeds/xxxxx/datastreams/1.csv" mi produce questa stringa sul browser "2012-10-19T07:31:10.985658Z,126" (in questo momento casa mia sta consumando 126 watt) mentre una seconda api sul canale 4 "http://api.pachube.com/v2/feeds/xxxxx/datastreams/4.csv" produce  la stringa "2012-10-19T07:51:17.198951Z,1642" sul browser (ovvero il fotovoltaico sta producendo 1642 watt). Non so come fare questo passaggio con arduino, ovvero come passare questi due url e ritrovarmi in due stringhe le informazioni da trattare. Grazie mille per l'aiuto.
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10461
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

per ottenere quelle pagine non fai altro che una semplicissima GET.

una volta che hai fatto la get il server ti risponde con un header 200ok (se va tutto bene), un altra sfilza di header, una riga vuota e il contenuto della pagina (la striga da parsare) ed infine 2 righe vuote (fine pagina, chiudi il client)

per lavorare con la stringa usa String: ti permette di "tagliare"(substring), "cercare"(find) e anche "dividere"(slipt) in maniera semplice ed immediata
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 1
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

studiando meglio la cosa, forse potrebbe essere più furbo e pratico (e semplice)  invertire completamente il discorso ovvero sfruttare i trigger di cosm e farmi spedire ad arduino le informazioni di consumo e produzione ogni volta che questi valori cambiano ( arduino quindi che resta in attesa come un web server) ....
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10461
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

possibile ma devi litigare con i DDNS. mi pare che ci sia una libreria però, oppure alcuni router supportano la funzione. In oltre ovrai aprire le porte in firewll/nat per accettare le connessioni.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buongiorno,
ho a disposizione un arduino uno ethernet, "medie" capacità di programmazione (giusto per dare un'idea,  quello che per ora sono riuscito a fare copiando/adattando pezzi di programmi trovati in giro  è l'apertura/chiusura di tende elettriche con comandi impartiti via web da smartphone/ipad etc). Ho il seguente problema ed ovviamente ho già cercato (ma per ora non trovato) dei codici di esempio. Ho altri dispositivi (non arduino) connessi in rete che caricano su pachube/cosm informazioni relative alla produzione fotovoltaica ed al consumo della mia casa (esattamente utilizzo dispositivi della Current Cost). Quindi già caricati e belli pronti su pachube, aggiornati ogni 5 minuti, ci sono 2 dati relativi alla produzione del fotovoltaico sul tetto ed al consumo della casa. Il mio obiettivo è realizzare, con arduino, un dispositivo che in automatico attivi un relè quando il consumo della casa + delta elettrodomestico è minore o uguale alla produzione fotovoltaica. Esempio: produco 2000 watt con il fotovoltaico, la casa sta consumando 500 watt, ho una stufetta elettrica che fotovoltaico consuma 1000 watt, quindi sono in sovraproduzione anche accendendo la stufetta, arduino la accende. Ovviamente ci sarà un loop che ogni 3/5 minuti rifà il controllo. Mi manca la "conoscenza" su come "tirare dentro" arduino questi due dati numerici da pachube. da lì in poi, per i calcoli e l'attivazione del relè sono in grado di arrangiarmi  Utilizzando le api di pachube, questo url "http://api.pachube.com/v2/feeds/xxxxx/datastreams/1.csv" mi produce questa stringa sul browser "2012-10-19T07:31:10.985658Z,126" (in questo momento casa mia sta consumando 126 watt) mentre una seconda api sul canale 4 "http://api.pachube.com/v2/feeds/xxxxx/datastreams/4.csv" produce  la stringa "2012-10-19T07:51:17.198951Z,1642" sul browser (ovvero il fotovoltaico sta producendo 1642 watt). Non so come fare questo passaggio con arduino, ovvero come passare questi due url e ritrovarmi in due stringhe le informazioni da trattare. Grazie mille per l'aiuto.


Buongiorno
Grazie per la condivisione di queste informazioni utili.
« Last Edit: October 29, 2012, 12:33:07 am by Queisi » Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Fatto! Non ho scritto un programma molto elegante ma funziona davvero bene smiley In pratica attiva una utenza da 800 watt quando la produzione fotovoltaica è sufficiente. L'attivazione avviene tramite un relè passopasso 220/220v con l'aiuto di un relè 5v messo sulla porta 9 di arduino.
------

/*  programma che legge da cosm/pachube il consumo della casa e la produzione del fotovoltaico */
/*  attiva (o disattiva) un relè passopasso tramite la porta 9 se la produzione fotovoltaica */
/* è sufficiente (o meno) - CoC 2012 */

#include <SPI.h>
#include <Ethernet.h>
#include <HttpClient.h>
#include <Cosm.h>

byte mac[] = {  0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };  // indirizzo mac dal mio arduino
IPAddress ip(192,168,1,202);  // indirizzo IP del mio arduino
char cosmKey[] = "LA MIA KEY DI COSM"; // la mia key di cosm

// Definisco le stringhe dei miei DatastreamsID (sono 5 nel mio caso)
char temperatureId[] = "0";
char consumocasa1Id[] = "1";
char consumocasa2Id[] = "2";
char contatorefvId[] = "3";
char produzionefvId[] = "4";

CosmDatastream datastreams[] = {
  CosmDatastream(temperatureId, strlen(temperatureId), DATASTREAM_FLOAT),
  CosmDatastream(consumocasa1Id, strlen(consumocasa1Id), DATASTREAM_FLOAT),
  CosmDatastream(consumocasa2Id, strlen(consumocasa2Id), DATASTREAM_FLOAT),
  CosmDatastream(contatorefvId, strlen(contatorefvId), DATASTREAM_FLOAT),
  CosmDatastream(produzionefvId, strlen(produzionefvId), DATASTREAM_FLOAT),
};
CosmFeed feed(IL_MIO_FEED_DI_COSM, datastreams, 5 /* il numero dei datastreams */);
EthernetServer ArduinoServer(80);
EthernetClient client;
CosmClient cosmclient(client);
unsigned long produzione = 0;               // produzione fotovoltaico in watt presa da cosm
unsigned long consumo = 0;                // consumo della casa in watt presa da cosm
unsigned long utenza = 800;                // utenza (stufetta elettrica) da 800 watt
boolean stato_presa = false;                // attualmente la presa è accesa (true) o spenta (false)

void setup() {
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
  ArduinoServer.begin();
}

void loop() {
  int ret = cosmclient.get(feed, cosmKey);
  Serial.println("---------------------------------");
  Serial.print("Codice di connessione a cosm: ");
  Serial.println(ret);
  if (ret > 0)
  {
    Serial.print("Consumo della casa watt: ");
    consumo = (unsigned long)feed[1].getFloat();
    Serial.println(consumo);
    Serial.print("Produzione fotovoltaico watt: ");
    produzione = (unsigned long)feed[4].getFloat();
    Serial.println(produzione);
    Serial.print("Utenza watt: ");
    Serial.println(utenza);
    if (stato_presa)
              {   // se entro qua vuol dire che l'utenza è accesa
              if (produzione < consumo) {
                                         digitalWrite(9, HIGH);
                                         delay (250); // click di 1/4 di secondo al relè per spegnere
                                         digitalWrite(9, LOW);
                                         stato_presa = false;
                                         Serial.println("*** HO SPENTO L'UTENZA ***");
                                        }
              }
    else           
              {    // se entro qua vuol dire che l'utenza è spenta
              if (produzione > (consumo + utenza))
                                         { 
                                         digitalWrite(9, HIGH);
                                         delay (250); // click di 1/4 di secondo al relè per accendere
                                         digitalWrite(9, LOW);
                                         stato_presa = true;
                                         Serial.println("*** HO ACCESO L'UTENZA ***");
                                         }
              }

  }
  Serial.print("Stato Utenza (0=spenta): ");
  Serial.println(stato_presa);
  delay(180000UL); // rifaccio il controllo ogni 3 minuti
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buona sera, ho letto delle infinite possibilità di ARDUINO, e mi chedevo se si può fare o se già esiste, un sistema di monitoraggio e otimizzazione di un impianto fotovoltaico, mi spiego un sistema che collegato ad ogni singolo pannello, monitorizzi lo stato, ed in caso di mal funzionamento, agisca in modo adeguato, il tutto con rete wireless "xBee"collegato ad un pc.Se non mi sono spiegato bene,
Allego un sito dove aver un'idea del sistema "Black Magic "
http://www.bmsolar.it/
Ringrazio per qualsiasi suggeriment, idea o altro.
Grazie
Marco
artigianmetallid@tiscali.it
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quanto costa, a spanne, questo blackmagic ? non so ... per un impianto da 6kw picco (24 moduli, per esempio). comunque sul sito che hai citato ci sono indicazioni di massima sul suo funzionamento, senza specifiche tecniche e dettagli ... quindi replicare con arduino una cosa che non si conosce credo sia ... alchimistico/numismatico/zodiacale smiley
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10461
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

se si hanno abbastanza conoscenze non serve "rubare" l'idea.

probabilmente quel sistema isola i pannelli che stanno producendo molto meno degli altri (e che quindi si comporterebbero da utilizzatore invece che da generatore) e li segnala pure, ma non vedo come possa andare oltre. Trovo mooooolto ottimistico il 90% di rendimento in più, direi che rientra nella tipologia "trochetto magico" (copyright vanna marchi), perchè altrimenti sarebbe un componente standard degli impianti.
Magari qualche esperto di impianti conosce le problematiche che possono verificarsi e mi smentisce.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 1
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

lesto, quoto completamente.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Giustamente come cita LESTO il sistema individua i pannelli che hanno un problema solitamente ombreggiamento o surriscaldamento e li bypassano evitando cosi che la stringa di pannelli in serie non cada di resa.Ora volevo sapere se era possibile per ogni pannello, controllare la tensione,corrente,temperatura.E poi tramite sempre arduino fare in modo che decida se intervenire e come, su tutto il sistema. tutto questo poi seguito sul pc.
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10461
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

misurare tnsione corrente e temperature è una cosa banale con un'arduino, la cosa che ancora non capisco è come intendi intervenire una volta che questi dati sono noti (che poi è il programma che vai a mettere sull'arduino)

per la tensione un partitore di tensione dovrebbe bastare, per la corrente un partitore di corrente, e per la temperatura di pende dal min-max, ma esistono continaia di sesnori a 1 o 2€
immagino che per intervenire servano dei relè o dei mosfet, che probabilmente necessiteranno dei transitor.

Inizia a pensare a questo la comunicazione PC lasciarla per ultima
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: [1]   Go Up
Jump to: