Progetto Arduino e OpenEnergyMonitor. Condensatore elettrolitico

Ciao a tutti, sono nuovo nel forum. Ho partecipato al workshop di Arduino in Tour a Verona e ora è da qualche settimana che smanetto dietro ad Arduino. In particolare ho replicato il progetto di pitusso Arduino e OpenEnergyMonitor Arduino Playground - HomePage con Arduino Uno e Ethernet shield.

Ho qualche perplessità però sui valore rilevati dalla mia pinza amperometrica perchè vanno da 2000 a 6000 molto variabili tra una rilevazione e l'altra.
In lettura il sensore analogico rileva valori invece di circa 450-500 con il pc collegato, mentre di 100-150 senza niente collegato alla ciabatta.
Se collego anche un fornelletto piccolo al quarzo arriva a punte di 600 ma a colpi scende a 200. Sono normali questi alti e bassi nei valori?
Nel tutorial c'era scritto di utilizzare un condensatore elettrolitico da 10uF ma io utilizzato il condensatore elettrolitico presente nello starter kit che se non sbaglio è da 100uF. Può essere dovuto a questo?

p.s. la pinza (utilizzo una Pinza Amperometrica da 100A max [E000019]) l'ho collegata ad una delle due fasi dei cavi di una ciabatta, alla quale poi vado a collegare l'alimentatore del pc ecc.. è corretto?

Più che il condensatore, verifica bene se il tuo sensore di corrente ha già la resistenza di carico...

Ciao

Nel tutorial c'era scritto di utilizzare un condensatore elettrolitico da 10uF ma io utilizzato il condensatore elettrolitico presente nello starter kit che se non sbaglio è da 100uF. Può essere dovuto a questo?

attenzione che i condensatori presenti nel kit non son elettrolitici :stuck_out_tongue:
Che pinza amperometrica stai utilizzando?

pitusso:
Ciao

Nel tutorial c'era scritto di utilizzare un condensatore elettrolitico da 10uF ma io utilizzato il condensatore elettrolitico presente nello starter kit che se non sbaglio è da 100uF. Può essere dovuto a questo?

attenzione che i condensatori presenti nel kit non son elettrolitici :stuck_out_tongue:
Che pinza amperometrica stai utilizzando?

Ah cavolo non avevo notato la piccola differenza, grazie! allora devo acquistare un condensatore elettrolitico..
tipo questo potrebbe andare?? CONDENSATORE ELETTROLITICO 10uF 450V ELECTROLITYC CAPACITOR | eBay

Sto utilizzando il sensore di corrente presente nello store ufficiale http://store.arduino.cc/it/index.php?main_page=product_info&cPath=6&products_id=256

Quindi il problema sarà con tutta probabilità legato al condensatore? Oppure è una problema di resistenze come diceva khrisss75? Le resistenze che ho usato sono 2 da 10k montate sulla breadboad come indicato sul tutorial!

Ciao,
la pinza SCT-013-000 ha un output in corrente (Ampere), hai pertanto bisogno della resistenza di carico - khriss75 aveva visto giusto :stuck_out_tongue:
Sulla guida c'è uno schema in cui è presente, puoi vedere lì come collegarla.
Puoi usare una resistenza da 33 Ohm.
Per il condensatore, puoi stare su voltaggi minori.

pitusso:
Ciao,
la pinza SCT-013-000 ha un output in corrente (Ampere), hai pertanto bisogno della resistenza di carico - khriss75 aveva visto giusto :stuck_out_tongue:
Sulla guida c'è uno schema in cui è presente, puoi vedere lì come collegarla.
Puoi usare una resistenza da 33 Ohm.
Per il condensatore, puoi stare su voltaggi minori.

Perfetto grazie mille. Ora è più chiaro.

Ma come resistenza posso usare quelle incluse nello starter kit giusto?

Unica cosa che non riesco a capire: la resistenza da 33 ohm è quella che su questo schema è indicata come resistenza variabile?

ma la devo collegare sulla breadboard. Perchè sullo schema fritzing sotto non appare. https://lh5.googleusercontent.com/-0vff5t8ceBM/UOdROCdZMEI/AAAAAAAAGUM/HXgUwd4itss/s720/13.jpg

scusate l'ignoranza ma sto muovendo i primi passi con l'elettronica e sto cercando di capire.. :blush:

Ciao

Ma come resistenza posso usare quelle incluse nello starter kit giusto?

se corrispondono al "taglio" richiesto certo che sì :smiley:

Unica cosa che non riesco a capire: la resistenza da 33 ohm è quella che su questo schema è indicata come resistenza variabile?

esatto!

ma la devo collegare sulla breadboard. Perchè sullo schema fritzing sotto non appare.

questo perchè in specifico ho utilizzato una pinza SCT-013-030, che monta già la resistenza di carico (sulla guida c'è una parte che spiega la differenza tra i due tipi di pinza ]:))

scusate l'ignoranza ma sto muovendo i primi passi con l'elettronica e sto cercando di capire..

non ti preoccupare, facendo si impara :slight_smile:

Ciao Andrea,
ho visto che ti hanno risposto già in modo abbastanza esaustivo.
Il condensatore deve essere elettrolitico 10uF, la tensione di esercizio non è così restrittiva, se ne trovi uno che lavora a tensione maggiore va bene lo stesso.

Io non ho ancora tra le mani il sensore, ho preso quello con uscita in corrente e quindi dovrò applicare la resistenza (quella che viene chiamata variabile" per "trasformare" in tensione (volt) la corrente (milli ampere) fornita dal sensore stesso.

A dire il vero sto sviluppando il progetto (misuratore consumi) anche con dei sensori ACS712 molto più semplici da interfacciare con arduino ma più rognosi da collegare alla linea.

Tienici informati dei tuoi progressi e chiedi pure.

Ah, per calibrare con semplicità il sensore ti consiglierei di acquistare un misuratore di consumi (a volte lo vendono alla lidl a circa 10 euro) in modo da avere un riferimento abbastanza preciso. Tra l'altro forse nell'articolo consigliavano già questo.

Ciao

A dire il vero sto sviluppando il progetto (misuratore consumi) anche con dei sensori ACS712 molto più semplici da interfacciare con arduino ma più rognosi da collegare alla linea.

interessanti, giustamente la pinza è più easy da interfacciare all'impianto, oltre che più sicura

Ah, per calibrare con semplicità il sensore ti consiglierei di acquistare un misuratore di consumi (a volte lo vendono alla lidl a circa 10 euro) in modo da avere un riferimento abbastanza preciso. Tra l'altro forse nell'articolo consigliavano già questo

yep :smiley:

Grazie mille ad entrambi!
Ora è tutto molto più chiaro.. e ho capito anche che i prossimi tutorial dovrò leggerli con molta più attenzione in tutte le parti..anche quelle che apparentemente sembrano meno importanti!! XD

Ora mi mancano un pò di componenti quindi rimango in attesa di:

dite che vanno bene? non vorrei sbagliare componenti e ritardare la riuscita del progetto! :slight_smile:

grazie ancora ad entrambi!!

L'elettrolitico va bene, io prima di prendere una semplice resistenza prenderei un trimmer multigiri tipo questo:
http://www.ebay.it/itm/Trimmer-professionale-multigiri-50-Ohm-5-pezzi-/261212201713?pt=Componenti_elettronici_passivi&hash=item3cd175e2f1&_uhb=1#ht_4073wt_1109

Avrai così la possibilità di tarare al meglio il sistema regolando il multigiri al valore di resistenza più consono alle tue esigenze.
Se leggi bene l'articolo viene spiegato come calcolare la resistenza di carico che "potrebbe" non essere un valore fisso o comunque riportato nell'esempio.

Va anche detto che eventuali correzioni e aggiustamenti si possono fare via software con il mitico arduino. L'avessi conosciuto prima, non mi troverei a dover rivedere il 60% del mio sistema domotico :slight_smile:

@Pituso: gli ACS712 sono comodissimi, danno in uscita una tensione proporzionale alla corrente che circola tra i pin del morsettino. AlessioZ li sta utilizzando con successo per il controllo del suo sistema fotovoltaico, io però dopo aver visto la dimensione di tale sensore mi sono un poco spaventato... far passare fino a 30A in quel morsettino così piccolo... Ecco perché ho ripiegato acquistando in Cina (accidenti, non l'avevo visto sull'arduino shop, mannaggia!!!!) il sensore di corrente meno invasivo...

Grazie mille della dritta!
Ma il trimmer multigiri a cosa mi servirebbe? Fa da resistenza variabile o mi dice solo di che valore dovrà essere la resistenza?
Da quel che ho letto fa proprio da resistenza variabile giusto?

Andreataba:
Grazie mille della dritta!
Ma il trimmer multigiri a cosa mi servirebbe? Fa da resistenza variabile o mi dice solo di che valore dovrà essere la resistenza?
Da quel che ho letto fa proprio da resistenza variabile giusto?

Figurati, è per me un piacere aiutare qualcuno quando posso!

Il trimmer multigiri è una resistenza variabile, ti permette di ottenere un valore che non otterresti con le resistenze standard. Esempio, non troverai mai una resistenza da 31 ohm (forse in ambito professionale?), con un trimmer invece puoi regolare il valore a te più ideale.
Attenzione però, io ho specificato un "multigiri", esistono trimmer non multigiri la cui regolazione è più complicata. Con un trimmer standard puoi ad esempio fare al massimo un giro della vitina spaziando da 0 a 50 ohm. Un miltigiri invece, ha la vitina che può fare anche più di 10 giri avendo la possibilità di regolare più finemente il valore.
A differenza della resistenze che hanno 2 terminali, i trimmer hanno 3 terminali tu dovrai utilizzare quello centrale ed uno di quelli esterni. Ci colleghi un multimetro e girando la vitina vedrai la resistenza che varia.
Sempre il trimmer ti permetterà ad esempio (attenzione, i numeri sono casuali, è solo un esempio) di regolare meglio la tensione che fornirai ad arduino (la sonda produce corrente, la resistenza, o il trimmer nel tuo caso "trasforma" la corrente in tensione) come da schema del progetto. Ad esempio, con 10A di carico (ipotizzando che a te interessa misurare con precisione correnti attorno ai 10A) la sonda collegata a resistenza da 33ohm ti da 0.897 volt. Con la resistenza variabile, potrai regolare in modo da avere 1V. Diciamo che puoi ottimizzare ulteriormente il valore da dare in pasto ad arduino.
Attenzione però a non esagerare e fornire più di 5 volt.

khriss75:
Esempio, non troverai mai una resistenza da 31 ohm (forse in ambito professionale?)

Si, tra quelle a maggior precisione. Ne prendi una da 30 e una da 1. Sono molto utilizzate proprio come shunt per la misura di correnti.

Ciao , complimenti e grazie a tutti per gli ottimi tutorial.
Ho bisogno di un aiutino da qualcuno se è possibile.
Sto giocando con ardu e openenergymonitor.Ho già montato tutto l'hardware, tranne il sensore amperometrico che non ho e devo comprare a breve. Conosco abbastanza bene arduino e il suo hardware, molto meno la programmazione. Sto iniziando a capirci qualcosa in questo periodo. Dopo aver montato tutto su ardu e la ethernet shield, ho caricato lo sketch definitivo. Si è compilato e caricato senza problemi. Ma ardu non va in internet. Se apro il serial monitor mi dice "non trovato wifi shield" e non succede più niente. Ho provato a commentare la riga #define wifi , ma quando ricompilo e carico di nuovo il tutto iniziano i dolori. L'ide mi segnala almeno una decina di errori, che sinceramente mi bloccano.
Qualcuno può spiegarmi dove sta l'inghippo?
Grazie anticipatamente.
Agostino

agostino:
ho caricato lo sketch definitivo

Ci puoi fornire il link allo sketch da te usato?

Grazie per la pronta risposta, chiedo scusa per il ritardo mio.
Questo è il link del tutorial:
http://playground.arduino.cc/italiano/emoncms
E questo è il link dello sketch:

Grazie

khriss75:

Andreataba:
Grazie mille della dritta!
Ma il trimmer multigiri a cosa mi servirebbe? Fa da resistenza variabile o mi dice solo di che valore dovrà essere la resistenza?
Da quel che ho letto fa proprio da resistenza variabile giusto?

Figurati, è per me un piacere aiutare qualcuno quando posso!

Il trimmer multigiri è una resistenza variabile, ti permette di ottenere un valore che non otterresti con le resistenze standard. Esempio, non troverai mai una resistenza da 31 ohm (forse in ambito professionale?), con un trimmer invece puoi regolare il valore a te più ideale.
Attenzione però, io ho specificato un "multigiri", esistono trimmer non multigiri la cui regolazione è più complicata. Con un trimmer standard puoi ad esempio fare al massimo un giro della vitina spaziando da 0 a 50 ohm. Un miltigiri invece, ha la vitina che può fare anche più di 10 giri avendo la possibilità di regolare più finemente il valore.
A differenza della resistenze che hanno 2 terminali, i trimmer hanno 3 terminali tu dovrai utilizzare quello centrale ed uno di quelli esterni. Ci colleghi un multimetro e girando la vitina vedrai la resistenza che varia.
Sempre il trimmer ti permetterà ad esempio (attenzione, i numeri sono casuali, è solo un esempio) di regolare meglio la tensione che fornirai ad arduino (la sonda produce corrente, la resistenza, o il trimmer nel tuo caso "trasforma" la corrente in tensione) come da schema del progetto. Ad esempio, con 10A di carico (ipotizzando che a te interessa misurare con precisione correnti attorno ai 10A) la sonda collegata a resistenza da 33ohm ti da 0.897 volt. Con la resistenza variabile, potrai regolare in modo da avere 1V. Diciamo che puoi ottimizzare ulteriormente il valore da dare in pasto ad arduino.
Attenzione però a non esagerare e fornire più di 5 volt.

Cavolo grazie! Spiegazione perfetta! Ora ho più chiaro il funzionamento della resistenza che avevo compreso a grandi linee googolando un po'.

Per capire anche la logica senza soffermarmi solo sul lato pratico ti farò un'altra domanda:

La resistenza viene applicata perché l'output è in ampere mentre noi vogliamo una misura in volt che se non ci fosse la resistenza sarebbe troppo alta per essere gestita con arduino, è corretto?

Scusa ma vorrei capire la logica sottostante l'applicazione della resistenza.
Inoltre la misura della resistenza è a mio piacimento in base alla scala di volt che voglio mappare oppure vi è una tabellina che x ampere devono corrispondere a y volt?

agostino:
Grazie per la pronta risposta, chiedo scusa per il ritardo mio.
Questo è il link del tutorial:
http://playground.arduino.cc/italiano/emoncms
E questo è il link dello sketch:
Tutorial-Wired/emon_simple_client.ino at master · OfficineArduino/Tutorial-Wired · GitHub
Grazie

Anch’io ho basato il progetto sullo stesso tutorial e sullo stesso sketch.

Ho pero “depurato” il codice dallo shield wifi in quanto utilizzo, come te, la shield ethernet.

ti copio il codice così ti fai un’idea di quello che ho tolto e magari ti può tornare utile.

/*
  Arduino & OpenEnergyMonitor 
  
  This sketch connects to an emoncms server and makes a request using
  Arduino Ethernet shield (or other based on Wiznet W5100) or an 
  Arduino Wifi Shield
  
  re-elaboration of Mirco Piccin aka pitusso p
  
  based on 
  http://arduino.cc/en/Tutorial/WebClientRepeating
*/

#include <SPI.h>
#include <Ethernet.h>
// Include Emon Library
#include "EmonLib.h"                   
  //if using WIRED
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  // fill in an available IP address on your network here,
  // for auto configuration:
  IPAddress ip(10, 0, 1, 188);
  IPAddress subnet(255, 255, 255, 0);
  //IPAddress dns(8, 8, 8, 8);
  //IPAddress gw(192, 168, 1, 254);

 EthernetClient client;
//Calibrations
const int volt = 220;
const float ct_calibration = 29;
const float temp_offset = 4;

// Sensor pins
const int tempSensorPin = A1;
const int lightSensorPin = A0;
const int currentSensorPin = A2;

float tempValue = 0;
float Irms = 0;
int lightValue = 0;

// Create an Emon instance
EnergyMonitor emon1;                   

//Emoncms configurations
char server[] = "emoncms.org";     // name address for emoncms.org
String apikey = "yourstringapikey";  //api key
int node = 0; //if 0, not used

unsigned long lastConnectionTime = 0;          // last time you connected to the server, in milliseconds
boolean lastConnected = false;                 // state of the connection last time through the main loop
const unsigned long postingInterval = 10*1000;  // delay between updates, in milliseconds

void setup() {
  // start serial port:
  Serial.begin(9600);
  // Display a welcome message
  Ethernet.begin(mac, ip);

  if (!Ethernet.begin(mac)) {
    // if DHCP fails, start with a hard-coded address:
    Serial.println("Failed to get an IP address using DHCP, forcing manually");
    Ethernet.begin(mac, ip);
  }
  
  Serial.println("Emoncms client starting...");
  emon1.current(currentSensorPin, ct_calibration);  
  printStatus();
}

void loop() {
  // if there's incoming data from the net connection.
  // send it out the serial port.  This is for debugging
  // purposes only:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // if there's no net connection, but there was one last time
  // through the loop, then stop the client:
  if (!client.connected() && lastConnected) {
    Serial.println();
    Serial.println("Disconnecting...");
    client.stop();
  }
  
  // if you're not connected, and at least <postingInterval> milliseconds have
  // passed sinceyour last connection, then connect again and
  // send data:
  if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
   
    //read sensors
    lightValue = analogRead(lightSensorPin);
    Irms = emon1.calcIrms(1480);
    tempValue = (analogRead(tempSensorPin) * 0.4883 -50);
    //Print values (debug)
    Serial.println();
    Serial.print("Temp : ");
    Serial.print(tempValue - temp_offset);
    Serial.print(" ; Light : ");
    Serial.print(lightValue);
    Serial.print(" ; Power : ");
    Serial.println(Irms*volt);
    Serial.println(analogRead(A2));

      
    //send values
    sendData();
  }
  // store the state of the connection for next time through
  // the loop:
  lastConnected = client.connected();
  
}

// this method makes a HTTP connection to the server:
void sendData() {
  // if there's a successful connection:
  if (client.connect(server, 80)) {
    Serial.println("Connecting...");
    // send the HTTP GET request:
    client.print("GET /api/post?apikey=");
    client.print(apikey);
    if (node > 0) {
      client.print("&node=");
      client.print(node);
    }
    client.print("&json={temp");
    client.print(":");
    client.print(tempValue-temp_offset);    
    client.print(",light:");
    client.print(lightValue);
    client.print(",power:");
    client.print(Irms*volt);   
    client.println("} HTTP/1.1");
    client.println("Host:emoncms.org");
    client.println("User-Agent: Arduino-ethernet");
    client.println("Connection: close");
    client.println();
    // note the time that the connection was made:
    lastConnectionTime = millis();
  } 
  else {
    // if you couldn't make a connection:
    Serial.println("Connection failed");
    Serial.println("Disconnecting...");
    client.stop();
  }
}


void printStatus() {
    // print your local IP address:
    Serial.print("IP address: ");
    for (byte thisByte = 0; thisByte < 4; thisByte++) {
      // print the value of each byte of the IP address:
      Serial.print(Ethernet.localIP()[thisByte], DEC);
      Serial.print("."); 
    }  
  Serial.println();
}

Potrei risponderti con immediatezza dicendoti: "la risposta alle tue domande è la legge di ohm".

Una resistenza nella quale scorre corrente, provoca una caduta di tensione seguendo questa formuletta:
V=R x I
Dove V è la tensione che si genera (caduta di tensione), R è la resistenza, e I è la corrente ad esempio generata dalla sonda.

Ecco qua che hai tutti gli elementi per ricavare la caduta di tensione.
Dato che R è un valore che tu vai a fissare (ad esempio 33 ohm), al variare della corrente generata dalla sonda, varierà la tensione V.
Esempio, resistenza 33 ohm, corrente dalla sonda (sensore) 0.02A, la V sarà 33 x 0.02 = 0.66V.
Se la corrente fosse costante e tu cambiassi la resistenza con una da 50 ohm avresti una V di 1V (50 x 0.02).
Ricorda che tu devi dare ad Arduino un valore in tensione, non in corrente, ecco perché devi mettere questa famosa resistenza di carico, per "trasformare" la corrente in tensione.

Ho scritto velocemente con il tablet, perdonami eventuali errori di battitura...