Pages: 1 2 [3] 4 5   Go Down
Author Topic: Domanda su Pachube/Cosm  (Read 2739 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 128
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sull Analogo A0 non ho niente stranamente, eppure durante la taratura ho provato a collegarlo e mi segnava il valore relativo a 1.82Vpp di entrata---> 3.3 appunto quasi 1023

Saluti
REmo
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 128
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dopo diverse prove, ne risulta che i valori stanno per lunghi tempi (quasi 1 minuto) a valore 0.

Ora da 15 minuti sempre a "0" per tutte e 3 le sonde.

Domani provero a saldare il tutto per escludere qualsiasi falso contatto.

Intanto ti ringrazio Cyberts.

Un caro saluto e una buona serata.

Remo
Logged

Selvazzano Dentro - Padova
Offline Offline
God Member
*****
Karma: 28
Posts: 928
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Caro Remo,
ci sono da fare delle tarature sul software:
Code:
...
const float CosFi = 0.9;               // CosFi è stato impostato a 0.9 ma può essere modificato
...
// int CicliMax = 50;                   // ogni ciclo dura circa da 500 us a 1 ms
int CicliMax = 1000;                   // per "fotografare" almeno 50 sinusoidi (50 x 20ms = 1s) bisogna che CicliMax = 1000 - 2000
...
// Corrente[I] = AnaMax[I] * ARef / Precisione / sqrt(2);   // questo serviva per ottenere la misura in volt (0 - 3.3)
Corrente[I] = AnaMax[I] * 30 / Precisione;                       // Aref devi sostituirla con 30 che è il valore efficace di fondo scala (A)
Potenza[I] = Corrente[I] * TensioneNom * CosFi;
...

Se vuoi che il programma visualizzi anche i valori istantanei, devo modificarlo: avvertimi se lo desideri.
Rimane il problema che questo metodo è secondo me insicuro: chi ci dice che durante le X letture cogliamo il massimo?

Una nota sull'hardware: il circuito che ti ho mandato non è preciso sino a 0.5-0.7 V (l'ho fatto per sfruttare l'alimentazione a 5V).
Se vuoi una lettura accurata anche su quei valori di assorbimento bisogna alimentarlo a 12 V con un 7812 e modifcare leggermente il circuito.
Logged

Selvazzano Dentro - Padova
Offline Offline
God Member
*****
Karma: 28
Posts: 928
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Caro Remo,

ecco il codice modificato e in allegato il nuovo schema elettrico.

Nota che ho usato uno stabilizzatore da 8V con alimentazione a 12V, ma potresti anche usare direttamente un buon alimentatore stabilizzato esterno da 9-12V (il valore non modifica il circuito) da 250-500 mA, possibilmente non switching per via del rumore che può introdurre.

Code:
/*
  Cosm sensor client
 
 This sketch connects an analog sensor to Cosm (http://www.cosm.com)
 using a Wiznet Ethernet shield. You can use the Arduino Ethernet shield, or
 the Adafruit Ethernet shield, either one will work, as long as it's got
 a Wiznet Ethernet module on board.
 
 This example has been updated to use version 2.0 of the Cosm.com API.
 To make it work, create a feed with a datastream, and give it the ID
 sensor1. Or change the code below to match your feed.
 
 Circuit:
 * Analog sensor attached to analog in 0
 * Ethernet shield attached to pins 10, 11, 12, 13
 
 created 15 March 2010
 updated 16 Mar 2012
 by Tom Igoe with input from Usman Haque and Joe Saavedra
 
 http://arduino.cc/en/Tutorial/PachubeClient
 This code is in the public domain.
 */

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

#define APIKEY "Ljr9Lr5KcVB9RP4Gi61NEYLkvoCSAKxmK2dXSDBTdUMyUT0g" // your cosm api key
#define FEEDID 70979                              // your feed ID
#define USERAGENT "Cosm Arduino Example (70979)"  // user agent is the project name

// assign a MAC address for the ethernet controller.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
// fill in your address here:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

// fill in an available IP address on your network here,
// for manual configuration:
IPAddress ip(84, 73, 123, 181);

EthernetClient client;                            // initialize the library instance:

// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
IPAddress server(216, 52, 233, 121);              // numeric IP for api.cosm.com
//char server[] = "api.cosm.com";                 // name address for cosm API

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 = 10000;      // delay between updates to Cosm.com (10 seconds)

const float CosFi = 0.9;
const float FondoScala = 30.0;                     // fondo scala sensore SCT-013-30
const float TensioneNom = 230.0;

const float ARef = 3.3;
const unsigned int Precisione = 1024;

unsigned int AnaVal[] = {
  0, 0, 0};
unsigned int AnaMax[] = {
  0, 0, 0};

int Cicli = 0;
int CicliMax = 1000;                              // ogni ciclo dura da 500 us a 1 ms
                                                  // per "fotografare" almeno 50 sinusoidi (50 x 20 = 1s) bisogna CicliMax = 1000 ÷ 2000
float Corrente[] = {
  0, 0, 0};
float Potenza[] = {
  0, 0, 0};

void setup() {

  analogReference(EXTERNAL);                      // pin AREF connesso a pin 3.3V

  Serial.begin(115200);                           // attiva porta seriale

  if (Ethernet.begin(mac) == 0) {                 // start the Ethernet connection:
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip);                      // DHCP failed, so use a fixed IP address:
  }
}

void loop() {

  AnaVal[0] = analogRead(A0);                     // lettura sensore linea 1
  delayMicroseconds(150);                         // ritardo per consentire al condensatore del convertitore AD di caricarsi (min 100)
  AnaVal[1] = analogRead(A1);                     // lettura sensore linea 2
  delayMicroseconds(150);                         // ritardo per consentire al condensatore del convertitore AD di caricarsi (min 100)
  AnaVal[2] = analogRead(A2);                     // lettura sensore linea 3

    Serial.print("Linea");                        // stampa testata
    Serial.write(9);                              // equivale a TAB "\t"
    Serial.print("Valore");
    Serial.write(9);
    Serial.print("Corrente");

  for (byte I = 0; I < 3; I ++) {                 // calcola e stampa valori istantanei

    AnaMax[I] = max(AnaVal[I], AnaMax[I]);        // considera solo il valore massimo
                                                  // dovrebbe approssimare il valore reale se CicliMax è sufficientemente grande
    Serial.print(I + 1, DEC);
    Serial.write(9);
    Serial.print(AnaMax[I], DEC);
    Serial.write(9);
    Serial.println((float) (AnaMax[I] * FondoScala / Precisione), 1);
  }

  Cicli ++;

  if (Cicli == CicliMax) {

    Cicli = 0;

    Serial.print("Linea");                        // stampa testata
    Serial.write(9);                              // equivale a TAB "\t"
    Serial.print("Valore");
    Serial.write(9);
    Serial.print("Corrente");
    Serial.write(9);
    Serial.println("Potenza");

    for (byte I = 0; I < 3; I ++) {              // calcola a stampa valori
      Corrente[I] = AnaMax[I] * FondoScala / Precisione;
      Potenza[I] = Corrente[I] * TensioneNom * CosFi;
      Serial.print(I + 1, DEC);
      Serial.write(9);
      Serial.print(AnaMax[I], DEC);
      Serial.write(9);
      Serial.print(Corrente[I], 2);
      Serial.write(9);
      Serial.println(Potenza[I], 2);
      AnaMax[I] = 0;
    }

    Serial.write(9);
    Serial.write(9);
    Serial.print("Totale");
    Serial.write(9);
    Serial.println(Potenza[0] + Potenza[1] + Potenza[2], 2);      // visualizza con due cifre decimali

    // 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 ten seconds have passed since
    // your last connection, then connect again and send data:
    if(client.connected() && (millis() - lastConnectionTime > postingInterval)) {
      sendData(Potenza[0] + Potenza[1] + Potenza[2]);
      // 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(float thisData) {
  // if there's a successful connection:
  if (client.connect(server, 80)) {
    Serial.println("connecting...");
    // send the HTTP PUT request:
    client.print("PUT /v2/feeds/");
    client.print(FEEDID);
    client.println(".csv HTTP/1.1");
    client.println("Host: api.cosm.com");
    client.print("X-ApiKey: ");
    client.println(APIKEY);
    client.print("User-Agent: ");
    client.println(USERAGENT);
    client.print("Content-Length: ");

    // calculate the length of the sensor reading in bytes:
    // 8 bytes for "sensor1," + number of digits of the data:
    int thisLength = 8 + getLength(thisData);
    client.println(thisLength);

    // last pieces of the HTTP PUT request:
    client.println("Content-Type: text/csv");
    client.println("Connection: close");
    client.println();

    // here's the actual content of the PUT request:
    client.print("A_MaxPower,");
    client.println(thisData);
  }
  else {
    // if you couldn't make a connection:
    Serial.println("connection failed");
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
  }
  // note the time that the connection was made or attempted:
  lastConnectionTime = millis();
}


// This method calculates the number of digits in the
// sensor reading.  Since each digit of the ASCII decimal
// representation is a byte, the number of digits equals
// the number of bytes:

int getLength(int someValue) {
  // there's at least one byte:
  int digits = 1;
  // continually divide the value by ten,
  // adding one to the digit count for each
  // time you divide, until you're at 0:
  int dividend = someValue /10;
  while (dividend > 0) {
    dividend = dividend /10;
    digits++;
  }
  // return the number of digits:
  return digits;
}








* Raddrizzatore Ideale.jpg (96.19 KB, 1567x1072 - viewed 8 times.)
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 128
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie Massimo, gentilissimo !

Stasera proveró a saldare il tutto.
Penso che prenderó l'alimentazione diretta, non ho a portata di mano un 7808.

Per la taratura : devo tarare l'uscita posizionandomi su VDC dellôscilloscopio oppure VAC ?

Salutoni e grazie

Remo
Logged

Selvazzano Dentro - Padova
Offline Offline
God Member
*****
Karma: 28
Posts: 928
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok per l'alimentazione esterna, ma assicurati che sia filtrata e stabilizzata (lo puoi vedere con l'oscilloscopio in VDC e poi in VAC)

Con VDC vedi anche qualche eventuale componente continua (che non dovrebbe esserci!).
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 128
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie, e per la taratura dei 3.3 Volt ?
Devo impostare l'oscilloscopio su Vdc o Vac ?

Buon pomeriggio

Remo
Logged

Selvazzano Dentro - Padova
Offline Offline
God Member
*****
Karma: 28
Posts: 928
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ripeto su Vdc vedi entrambe le componenti (continua ed alternata).

Nel nostro caso della taratura, quella continua deve essere a zero (o quasi).
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 128
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao Massimo,
ho avuto riunioni fino a dopo le 20.00.

Il circuito sono riuscito a completarlo poco fa, rimanderò a domani sera le prossime procedure....
Condensatori da 100 nF ne avevo solo a disposizione di quelli fino a 27V Tantal, è un po grosso ma dovrebbe compiere il suo dovere.

Grazie infinite, a domani sera :-)

Buona serata

Remo
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 128
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buongiorno,
ecco la risultante dall'oscilloscopio.

Come detto nell'altro messaggio, ho rimpiazzato la 240 K con una da 316 K.

Oscilloscopio settato su VDC.

Saluti
Remo


* 20120831_080303.jpg (3319.98 KB, 3264x2448 - viewed 10 times.)
Logged

Selvazzano Dentro - Padova
Offline Offline
God Member
*****
Karma: 28
Posts: 928
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Caro Remo,

ho l'impressione che qualcosa non vada.

La taratura va fatta fornendo 1Veff = 1.41 Vp = 2.82 Vpp ed in uscita vedrai un segnale 3.3 Vp.

Ti mando delle immagini che riproducono ciò che vedrai in oscilloscopio.

La foto che mi hai mandato non è molto chiara: riduci la base dei tempi e rimandamela devo controllare lo "zoccolo" dei 0.7 V


* Raddrizzatore Ideale.GIF (13.32 KB, 1096x502 - viewed 9 times.)
* Raddrizzatore Ideale 2.wmf (15.05 KB - downloaded 12 times.)
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 128
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao Massimo.
Grazie die consigli.
Ho ricontrollato e avevi ragione. L’uscita del segnale si trovava sull’anodo del diodo D1 e non sul catodo !!

Ora sono riuscito a calibrarlo a 3.28-3.32 Volt

Ti allego 1 foto scattata sull’oscilloscopio.

Grazie e a stasera….

Remo


* 20120831_151810.jpg (2919.22 KB, 3264x2448 - viewed 11 times.)
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 128
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ho collegato il print.

Se la massa dell'alimentatore, la metto in comune con quello dell'Arduino ho valori "0".

Se la massa la lascio separata (Alimentatore e Print / Arduino propria massa ) mi segna "1023".

Questo problema lo ho avuto tempo fa, ma non ricordo come l'ho risolto !!

Sarà l'eta ....

Saluti

Remo
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 128
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao Massimo,
 allora in casa al momento abbiamo forno e fornelli accesi.

Il mio Wattcher mi mostra un consumo istantaneo pari a 5200 w
L'arduino mi mostra quanto segue :


Linea   Valore   Corrente   Potenza
1   200   5.86   1212.89
2   154   4.51   933.93
3   299   8.76   1813.27
      Totale   3960.09


---------------------------------------------

Credo che sotto i 1000 w non recepisce i valori, credi sia una buona idea innalzare l'offset via Software ?

Saluti
Remo
Logged

Selvazzano Dentro - Padova
Offline Offline
God Member
*****
Karma: 28
Posts: 928
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Caro Remo,

mi hai parlato del WATTCHER, così sono andato a vedere sul sito il prodotto.

Purtroppo non conosco il tedesco, ma ho capito che si compone di un trasmettitore da collegare per via ottica al contatore meccanico od elettronico e da un ricevitore con un pulsantino rosso per la taratura.

Prima di dire che Arduino non funziona, dobbiamo essere sicuri che la misura fatta dal WATTCHER sia affidabile.

Suggerisco, perciò, di collegare su una linea esclusivamente un carico noto (ad esempio un forno da 2kW) e di confrontare il valore letto da Arduino.

Verifica anche la tensione con un tester ed eventualmente correggi la TensioneNom di conseguenza, modifica anche il CosFi per il carico noto (se è puramente resistivo il CosFi=1).

Ricordati che il sensore ha una precisione di +/- 3% di 30A che vuol dire che potrebbe non sentire i primi 200W.
 
Fammi sapere: la differenza di 1200W si può spiegere solo con un errore nella procedura di taratura del Wattcher, oltre che un errore di Arduino

« Last Edit: August 31, 2012, 03:47:25 pm by cyberhs » Logged

Pages: 1 2 [3] 4 5   Go Up
Jump to: