Energiemeter

From VoidWarranties - Hackerspace Antwerp, Belgium
(Difference between revisions)
Jump to: navigation, search
Line 7: Line 7:
 
|Short description=We zijn bezig met het uitzoeken van de werking van AC current clamps, en hoe we ze kunnen gebruiken om het stroomverbruik van de space in kaart te bregen. Hier is de progress.
 
|Short description=We zijn bezig met het uitzoeken van de werking van AC current clamps, en hoe we ze kunnen gebruiken om het stroomverbruik van de space in kaart te bregen. Hier is de progress.
 
}}
 
}}
== 11 maart ==
+
== 10 maart ==
 
*Heb een bordje gemaakt met dit circuit:
 
*Heb een bordje gemaakt met dit circuit:
  
Line 70: Line 70:
 
* Ik heb de baudrate proberen verhogen, tot 921600, maar vanaf dat ik over de 115200 ga wordt het aantal samples kleiner.
 
* Ik heb de baudrate proberen verhogen, tot 921600, maar vanaf dat ik over de 115200 ga wordt het aantal samples kleiner.
  
== resultaten ==
+
=== resultaten ===
=== onbelast ===
+
==== onbelast ====
 
[[File:Noload.png|500px]]
 
[[File:Noload.png|500px]]
 
RAW: [[File:Noload.txt]]
 
RAW: [[File:Noload.txt]]
  
=== 160mA ===
+
==== 160mA ====
 
[[File:160mA.png|500px]]
 
[[File:160mA.png|500px]]
 
RAW: [[File:160mA.txt]]
 
RAW: [[File:160mA.txt]]
  
=== 4,22A ===
+
==== 4,22A ====
 
[[File:4A22.png|500px]]
 
[[File:4A22.png|500px]]
 
RAW: [[File:4A22.txt]]
 
RAW: [[File:4A22.txt]]
  
=== 7,78A ===
+
==== 7,78A ====
 
[[File:7A78.png|500px]]
 
[[File:7A78.png|500px]]
 
RAW: [[File:7A78.txt]]
 
RAW: [[File:7A78.txt]]
 +
 +
 +
== 10 maart ==
 +
*Na wat proberen lijkt de interessantste manier om stroom uit te lezen een aantal samples te nemen (2000 in dit geval), en dan het gemiddelde van de absolute waarden te nemen. Dit lijkt een heel lineair cijfer te zijn, dus kunnen we hier mee verder. We moeten het met ongeveer 155 vermenigvuldiggen om de stroom te weten.
 +
 +
void printDouble( double val, unsigned int precision){
 +
    Serial.print (int(val));  //prints the int part
 +
    Serial.print("."); // print the decimal point
 +
    unsigned int frac;
 +
    if(val >= 0)
 +
        frac = (val - int(val)) * precision;
 +
    else
 +
        frac = (int(val)- val ) * precision;
 +
    Serial.println(frac,DEC) ;
 +
}
 +
 +
void setup() {
 +
  Serial.begin(9600);
 +
}
 +
 +
void loop() {
 +
  const double samples=2500;
 +
  const int vermenigvuldigmet = 155;
 +
  double averageABS = 0;
 +
  for(int I=0; I<samples; I++){
 +
    averageABS += (double(abs(analogRead(A0)-512)))/samples;
 +
  }
 +
  printDouble(averageABS,100); //gemiddelde lezing
 +
  printDouble(averageABS*vermenigvuldigmet,1000); //gemiddelde stroom
 +
  printDouble(225*((averageABS*vermenigvuldigmet)/1000),1000); //gemiddelde VA
 +
}
 +
 +
*Metingen zijn goed, bij 0 lezen we een waarde kleiner als 5VA (heeft met ruis te maken), en bij grotere metingen blijft de fout ook heel beperkt. Het enige nadeel is dat we de gemiddelde stroom met de gemiddelde spanning vermenigvuldiggen en dus VA (VoltAmpère) hebben in plaats van W (Wattage). Om het wattage te bekomen zouden we nog ergens een spanningsreferentie moeten hebben en iedere sample direct stroom met spanning moeten vergelijken.

Revision as of 19:18, 11 March 2014


Energiemeter
What:
We zijn bezig met het uitzoeken van de werking van AC current clamps, en hoe we ze kunnen gebruiken om het stroomverbruik van de space in kaart te bregen. Hier is de progress.
Event.png
Participants:
warddr, Berz
Category:
Electronics
Locations:
Den Bunker

Contents

10 maart

5V ----- 330kR ------ 330kR ----- GND -----
                 |                 |      |
                 |                 |      |
                 |                 |      |
             SPOEL p1 --------- 100nF -- 10µF
                 |
                 |
                 |
                68R
                 |
                 |
                 |
A1 --------- SPOEL p2


code

arduino

void setup() {
  Serial.begin(115200);
}
void loop() {
  Serial.println(analogRead(A0));
}

python

from serial import Serial
from matplotlib import pyplot
import time

def millis(): #give current time in miliseconds
    return int(round(time.time()*1000))

ser = Serial('/dev/ttyACM0',115200,timeout=2)
ser.open()
start = millis()               
x=[]
y=[]
while True:
            mytime = millis()-start
            reading = ser.readline()

            if ((mytime > 3250) and (mytime < 3500)):
                x.append(mytime)
                y.append(reading)
            if (mytime>3500):
                break
ser.close()

pyplot.plot(x, y, '-' )
pyplot.show()

for idx,item in enumerate(x):
        print (str(x[idx]) + ";" + str(y[idx]))

resultaten

onbelast

Noload.png RAW: File:Noload.txt

160mA

160mA.png RAW: File:160mA.txt

4,22A

4A22.png RAW: File:4A22.txt

7,78A

7A78.png RAW: File:7A78.txt


10 maart

void printDouble( double val, unsigned int precision){
   Serial.print (int(val));  //prints the int part
   Serial.print("."); // print the decimal point
   unsigned int frac;
   if(val >= 0)
       frac = (val - int(val)) * precision;
   else
       frac = (int(val)- val ) * precision;
   Serial.println(frac,DEC) ;
} 

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

void loop() {
 const double samples=2500;
 const int vermenigvuldigmet = 155;
 double averageABS = 0;
 for(int I=0; I<samples; I++){
   averageABS += (double(abs(analogRead(A0)-512)))/samples;
 }
 printDouble(averageABS,100); //gemiddelde lezing
 printDouble(averageABS*vermenigvuldigmet,1000); //gemiddelde stroom
 printDouble(225*((averageABS*vermenigvuldigmet)/1000),1000); //gemiddelde VA
}
Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox
Content Creation
Belgian Spaces