Current transformer en Emon library

Hi all,

Ik wil graag een stroomtransformator uitlezen met de Arduino Uno. Hiervoor heb ik een stukje code geschreven, maar blijf daar een foutmelding op krijgen. Heb al heel wat sites afgestruind op zoek naar een antwoord, maar kom er niet uit.

De foutmelding is:
expected primary-expression before '.' token en geldt voor de een na laatste regel (waarin de emon.calcIrms wordt gebruikt).

Code voeg ik toe.

Ik hoop dat iemand me kan helpen.

Groet, Dorien

code uploaden lukt niet dus dan maar even zo:

#include <EmonLib.h>

EnergyMonitor emon1; //current sensor 1

#define emon1.calcIrms();

void setup()
{
Serial.begin(9600);

emon1.current(0,22); //current input pin, calibration

}

void loop()
{

double Irms = emon1.calcIrms(1480); //calculate Irms only

Serial.println(Irms); //print value Irms

}

Het zit hem in deze regel:

#define emon1.calcIrms();

In feite definieer je de functie emon1.calcIrms(); als een leeg stukje code.

Stel

#define LED 13

Dan definieer je LED als 13
In de PRE-compiler wordt dan overal in je source LED vervangen door 13 tijdens de compilatie.
In jouw regel wordt dan emon1.calcIrms(); vervangen door niets. Want er staat niets achter en zal de compiler deze regel als volgt zien:

double Irms = (1480); 
of
double Irms = .calcIrms(1480);       // dit waarschijnlijk

En daar komt ie niet uit

@edit: Gooi je die define regel boven in eruit dan compileert hij prima. Het is ook een zinloze regel. Want daar komt trouwens je compilatie error al uit. Niet de regel die je aangeeft.

Klopt! Heb het even geprobeerd en hij doet het!

Dankjewel!

Hi Nico,

Mag ik je nog een vraag stellen? Ik heb het programmaatje getest op een opstelling met een kacheltje (2000W) dat ~8A trekt. Deze is aangesloten op een verlengsnoer waarvan ik de isolatie van de kabels heb gehaald (niet de binnenste isolatie) Ik heb een current sensor van dit type http://isafiles.eu/Products/Talema/AZ-serie/AZ-Series.pdf om de fase heen gehangen. Ik meet de stroom met een Fluke 325 stroomtang en lees de waarden af in de serial monitor van de Arduino.

De stroom transformator wordt via een burden resistor en een tweetal weerstanden en condensator omgezet naar een VAC met swing rond 2.5V.

Nu valt het op dat de waarden die de Arduino weergeeft lager liggen dan de stroomwaarde op de meettang. Ik heb geprobeerd om te spleen met de calculatie waarde in de code, maar dat resulteert niet in een juiste meting over het hele bereik van 8A.

Heb jij een suggestie hoe ik dit kan oplossen? Hoe komt het dat de warden van de Arduino afwijken?

Ik probeer even de code en het circuitje te uploaden...

Groet, Dorien

#include <EmonLib.h>
#include "EmonLib.h"

EnergyMonitor emon1; //current sensor phase 1

void setup()
{
Serial.begin(9600);

emon1.current(0,22); //current input pin A0, calibration

}

void loop()
{
//read current sensors
double Irms1 = emon1.calcIrms(1480); //calculate Irms phase 1 only

Serial.println("Irms phase 1");
Serial.println(Irms1); //print value Irms1
delay(2500);

//read voltage sensors

}

en het circuit...

ik denk dat je wat mist aan electtronica, want de ingang is een wisselspanning, de emon maakt daar rms waardes van door er gewoon een hoop te meten en dan te berekenen, gebruik je ook de 1.1 volt ref?
en pinnummer moet A0 zijn want er is ook een 0 pin!!!

a) Ik weet niet hoe die emon lib zijn berekeningen doet. En nee dat ga ik ook niet doen.
b) Een stroomtang sampled meestal een aantal keren per seconden en geeft daar het gemiddelde over.
c) Maar wat voor waardes krijg je dan dat je een afwijking hebt? zowel op de fluke als de jouw oplossing.

de ingang A0 kun je ook gewoon meten met een fluke op volt stand, dan moet er dus iets uitkomen van 1.6 Voltrms bij de maximale input van 50 mA.
Op de arduino zie je echt van allerlei getallen, maar die zet emon netjes om naar een rms waarde.
de stroom moet wel netjes een sinus zijn, want anders kloppen veel meters niet hoor.

nico RMS werkt iets anders.

@shooter: dankjewel voor je reacties.Iik gebruik een Arduino Uno. ik zie op internet dat de 1.1Vref internal functie alleen voor de Arduino Mega is? Klopt dat?

Ik vind verschillende manieren van hoe een referentiespanning te gebruiken op een Arduino Uno:

  • Aref gebruiken met externe spanning
  • functie analogReference(DEFAULT) gebruiken
  • geen referentiespanning gebruiken omdat de Uno een interne 5V referentie heeft op de ADC pinnen

Ik weet nu niet wat ik moet gebruiken...

Kun je mij adviseren?

dat ligt vooral aan wat de maximale ingangsspanning is op de analoge ingangen.
default is het 5 Volt, maar dat kun je veranderen.

Hi Shooter,

Ik wil het volledige bereik van 0-5V gebruiken, dus wil ook een Vref van 5V.

Als ik het goed begrijp activeer ik de Vref door deze code in de void setup te zetten:
analogReference(INTERNAL);

Moet ik qua hardware dan nog een pin met iets verbinden om de Vref ook echt te latenw erken of is de code voldoende?

Voor een Arduino Uno is de Vref dan 5V. Juist? Deze 5V haalt de arduino zelf uit de voeding toch? Op welk punt kan ik zelf met een multimeter de Vref meten?

Ander vraagje nog:
Ik gebruik de analoge pinnen nu ook voor een spanningsensor. Wat mij opvalt is dat de pinnen standaar ~450 uitlezen terwijl er geen sensor is aangesloten. Als ik de sensor aansluit op de pinnen verandert de analogRead waarde. Het spreekt vanzelf dat hierdoor mijn uiteindelijke berekening niet klopt. Hoe komt het dat de analoge pinnen zonder aangesloten hardware toch een waarde uitlezen?

als je de 5V wilt gebruiken hoef je niets te doen, echter moet de ingangsspanning dan ook in de buurt liggen van de 5 V.
bij de stroomsensor is dat wel goed, want als er geen stroom loopt zul je ongeveer 512 meten door de beide weerstanden die zorgen dat de spanning in het midden is. (de software zorgt voor middeling en RMS.

analoge pinnen zijn hoogohmig ofwel als je je hand in de buurt houd zie je de waarde al veranderen, dat is alleen maar goed.
je berekening zal wel kloppen hoor, maar ook deze trafo moet je ongeveer hetzelfde aansluiten als de stroomsensor, dus de uitgangsspanning van het trafotje is (zonder weerstanden 2.5 Volt.) want de spanning is sinusvormig.
trafo aansluiten en de waarde zou weer in de burt van de 512 uit moeten komen, maar dan wel constant, als je geen spanning aansluit.

Begrijp je de schema's?
en begrijp je wat de software ermee doet?

Bedoel je dat ik dezelfde spanningsdeler als ik heb gebruikt voor de stroomtransformators ook achter de spanningsensor moet zetten?

Ik gebruik deze sensor:
http://www.protostore.eu/sensoren/89-ac-spanning-sensor-230-vac.html

Deze sensor geeft netjes 5 Volt af bij een spanning van 250 Volt dus daar hoef je verder niets aan te doen. (dus 100 Volt is 2 Volt DC uit.
Nadeel van dit ding is wel dat je geen cos phi kunt meten (en emon zal daar ook niet intrappen.)
wel alleen netjes Sinus, want anders gaat de gedachte niet goed.
Zo zijn er trouwens ook prima stroomshieldjes te krijgen hoor.
de zero is dan wel 2.5 Volt, maar dat is bij een AC spanning ook nodig want de helft van de tijd is er een negatieve stroom.
afhankelijk van wat je wilt meten zul je meer moeite moeten doen.

Thanks Shooter!

Ik heb inmiddels de spanningsensor aan de praat. Deze werkt redelijk nauwkeurig. ik heb hiervoor ook de emonlib gebruikt.

Heb ik nog een ander vraagje. Ik wil PWM uitlezen uit een datakabel die afhankelijk van de status van een auto van 12V naar 9V en 6V gaat, Kan ik deze kabel gewoon verbinden met een analoge pin (moet analoog zijn neem ik aan?) en dan met emonlib de spanning uitlezen?

Dat is geen gewoon PWM, maar dat werkt met een databus, en ja die kun je via een simpel filter en een paar weerstanden zo op een analoge ingang zetten, maar dan verlies je natuurlijk wel de data.

jan dankjewel

@shooter
ggd