Pages: [1] 2   Go Down
 Author Topic: AC Voltage & Frequency Monitor Project  (Read 6869 times) 0 Members and 1 Guest are viewing this topic.
Offline
Edison Member
Karma: 2
Posts: 1234
"Keep it R.E.I.L. - "Research, Experiment, Investigate and Learn"
 « on: February 22, 2012, 12:37:16 am » Bigger Smaller Reset

Hi guys;

I did a project about monitering the AC main and the frequency. I constructed the circuit to take AC voltage measurment convert into a proper DC voltage the analog pin can received and take the frequency into a square wave into a digital pin.

To take  AC main, I use a transformer. The transformer I use have : 2 secondary output, one is a CT type <- center tap. I will use the center tap secondary to be use as a power supply to provide a dual-power rail line, and the other secondary, for the AC voltage sample to be measure.

For calibration, use a 5 K multiturn pot for VR1 to get at the output for a 3 V out. Measured the Main with DVM - AC mode to have the main voltage. Take the V main / V out = Main Ratio in your code. Also measure the Aref of the Arduino and place in the code like : Aref / 1023.0 <-- that code line.  I will use a precision V reference <-- Kind of voltage regulator to have an exact V ref so I can use in the code.

Right now, it is only a prototype code - without LCD, which I will use later.  To test my code, I use the serial monitor to see what values I have.

Here is the code and a picture of my results of the serial monitor.

Code:
/*
Size : 5262 Bytes

AC Frequency and AVC Main monitor

By Serge J Desjardins
aka techone / tech37

Compile - Tested - Calibrated
*/

//#include <LiquidCrystal.h>

//LiquidCrystal lcd(12,11,10,9,8,7);

byte inpulse=2; // square wave input digital  pin
byte voltpin=1; // Vout input anaalog pin

const int number_of_samples = 50;
const float main_ratio = 40.63018242;  // <-- The ratio of : AC Main / V out

unsigned long duration_ton;
unsigned long average_ton;
unsigned long sample_the_pulse;
unsigned long duration_toff;
unsigned long average_toff;

float frequency;
float voltage;
float single_step;
float voltage_out;

void setup()
{
analogReference(DEFAULT);
pinMode(inpulse, INPUT);
Serial.begin(9600);
//lcd.begin(16, 2);
single_step=4.92/1023.0; // Vref = Aref / 1023.0

}

void loop()
{
duration_ton = 0;
sample_the_pulse= 0;
average_ton = 0;
duration_toff=0;
average_toff=0;

for (int i=0;i<number_of_samples;i++)
{
sample_the_pulse = pulseIn(inpulse, HIGH);
duration_ton = sample_the_pulse+duration_ton;
sample_the_pulse = pulseIn(inpulse, LOW);
duration_toff = sample_the_pulse+duration_toff;
}

average_ton = (duration_ton*10)/number_of_samples;
average_toff = (duration_toff*10)/number_of_samples;
frequency = 1/(float(average_ton+average_toff)/10000000.0);

for (int i=0;i<number_of_samples;i++)
{
}

Serial.print("Ton = ");
Serial.print(float(average_ton/10000.0), 3);
Serial.println(" ms");
Serial.print("Toff = ");
Serial.print(float(average_toff/10000.0), 3);
Serial.println(" ms");
Serial.print("Average Frequency : ");
Serial.print(frequency, 3);
Serial.println(" Hz");
Serial.print("Average V out : ");
Serial.print(voltage_out, 3);
Serial.println(" Volt");
Serial.print("AC Main Voltage : ");
Serial.print(voltage, 3);
Serial.println(" Volt");
delay(1000);
}

 AC_monitor_serial_monitor_data.jpg (223.23 KB, 1024x768 - viewed 306 times.)  AC_Monitor_circuit_v2.jpg (59.28 KB, 1024x703 - viewed 593 times.) Logged

Offline
Edison Member
Karma: 2
Posts: 1234
"Keep it R.E.I.L. - "Research, Experiment, Investigate and Learn"
 « Reply #1 on: February 22, 2012, 12:40:54 am » Bigger Smaller Reset

Here two pictures of my setup.

Top : The set-up

Bottom : Live set-up.
 AC_monitor_setup.jpg (169.67 KB, 1024x768 - viewed 258 times.)  AC_monitor_live_setup.jpg (164.6 KB, 1024x768 - viewed 193 times.) Logged

Dubuque, Iowa, USA
Offline
Edison Member
Karma: 45
Posts: 2469
 « Reply #2 on: February 22, 2012, 12:48:40 am » Bigger Smaller Reset

A long time ago I read of a similar experiment where the user recorded the AC frequency over the course of a day to see how it changes; in the past there was always some effort by manipulators of the grid to slow it down or speed it up to keep it accurate to 60Hz so that clocks that depend on that frequency would be correct.

It would be surprising to see it continually at 60.5Hz as it shows in your readout; that's quite a bit of error. But I'm sure that's the grid's fault and not any mistake of yours
 Logged

Offline
Edison Member
Karma: 2
Posts: 1234
"Keep it R.E.I.L. - "Research, Experiment, Investigate and Learn"
 « Reply #3 on: February 22, 2012, 01:16:33 pm » Bigger Smaller Reset

I agree. It is a good idea to monitor during the day, I am planning for it. I will modify the code to send to the serial port, in addition to display the voltage and frequency to a LCD display.  I will place a switch call : To data logger  - No data logger. I will also build an another project, it will simply take data from serial and store it into a SD card. Just a data logging project. To log any type of data. And at the computer side, a program to analyse the data store inside the SD card. That what I plan to do.

I know, it will be interesting to see that data and to see the power generating to the city of Toronto - Ontario Hydro / Toronto / Hydro is stable or not. It will more interesting to see the voltage and frequency during the summer. Most power failures happen during the summer.

For the project to be complete, I need to build : The AC Monitor, A data linker ( with opto-coupler ) and a Data Logger ( with SD card ). And a program to analyse the data.

Lot of works and lots of fun.
 Logged

Offline
Edison Member
Karma: 2
Posts: 1234
"Keep it R.E.I.L. - "Research, Experiment, Investigate and Learn"
 « Reply #4 on: February 22, 2012, 01:25:43 pm » Bigger Smaller Reset

I forgot to mention that the code and the circuit can be use for 220 V / 50 Hz.

Just change this line :

Code:

const float main_ratio = 40.63018242;  // <-- The ratio of : AC Main / V out

example :  220 / 3 = 73.33333333  <-- change the const float with this number.

You use the measure value for a better accuracy.
 Logged

UK
Offline
Newbie
Karma: 0
Posts: 10
To my Doctor I'm open source, He can look inside and make me better but he doesn't own me.
 « Reply #5 on: February 22, 2012, 04:07:12 pm » Bigger Smaller Reset

The changing frequency of the mains supply is not "Manipulated" in order to keep clocks accurate.
It's caused by an imbalance between supply and demand and the generating / distribution companies have a minute by minute battle to keep the frequency within it's declared value.

There is no way to store electricity in the grid, supply has to match demand. But adding or removing power from the grid is not instant. Turbines have to speed up or slow down, fuel rods have to be added or removed etc.

A good analogy is riding a bycycle. If you are on perfectly flat track you can keep a perfectly constant speed. If there is a hill up or down then the demand on your legs goes up or down, and so does your speed, unless you are really good at matching your effort with the gradient. As you go up a hill you will slow a little as you pedal harder to bump your speed up. and vice versa.

In the UK we have "TV Pickup" when soap operas finish we all go and put the kettle on (1.75 Million kettles in under 5 minutes that's 3 Gigawatts extra). Its such a big surge, and the frequency drops so fast we have to get more in from France!

our "National Balancing Engineer" braces himself, and the grid, for the end of Eastenders (TV soap opera) and sweats a bit when it's late and France lets us down. Watch him go quiet when the end theme tune (Drums. Dum Dum Dum diddiddy) starts.

Great project BTW.

And...  What a good day to be posting about it. Heinrich Rudolf Hertz's 155th Birthday.
 « Last Edit: February 22, 2012, 04:22:50 pm by Bookworm » Logged

Bookworm

Dubuque, Iowa, USA
Offline
Edison Member
Karma: 45
Posts: 2469
 « Reply #6 on: February 22, 2012, 05:33:05 pm » Bigger Smaller Reset

The changing frequency of the mains supply is not "Manipulated" in order to keep clocks accurate.

http://www.msnbc.msn.com/id/43532031/ns/technology_and_science-innovation/t/power-grid-experiment-could-confuse-electric-clocks/
 Logged

Offline
Edison Member
Karma: 2
Posts: 1234
"Keep it R.E.I.L. - "Research, Experiment, Investigate and Learn"
 « Reply #7 on: February 22, 2012, 05:45:49 pm » Bigger Smaller Reset

Quote
What a good day to be posting about it. Heinrich Rudolf Hertz's 155th Birthday.

Hum...I did know about that little detail.

Quote
Its such a big surge, and the frequency drops so fast we have to get more in from France!

That is interresting !!!. In Canada, the extra need power came from the US.  I did not know UK depand on France or Europe for the extra power.  In 1759 , In Canada, French and English where fighting each others... just pointing this out.

Thank for the comment and the U-tube link.

Right now, it still a work in progress. My project will work in the UK. You just need the proper transformer secondary Voltage output. Beside, you can change the value of the AC voltage input of the circuit by increasing or decreasing R5, R6, R4 and VR1 for a proper Vout at IC2A out pin.

 Logged

Offline
Edison Member
Karma: 2
Posts: 1234
"Keep it R.E.I.L. - "Research, Experiment, Investigate and Learn"
 « Reply #8 on: February 22, 2012, 05:56:29 pm » Bigger Smaller Reset

@Chagrin

I just hope this "experiment" will not affect the Canadian electrical system. Maybe an "out of phase" problem may occur.
 Logged

UK
Offline
Newbie
Karma: 0
Posts: 10
To my Doctor I'm open source, He can look inside and make me better but he doesn't own me.
 « Reply #9 on: February 22, 2012, 07:05:31 pm » Bigger Smaller Reset

If one were to construct your instrument for use in the UK  the accuracy of your measurements could be checked against that of the grid.

http://www.nationalgrid.com/uk/Electricity/Data/Realtime/Frequency/Freq60.htm

I don't know if there is something similar in Canada or USA.

BTW The UK has electrical connections to France, Northern Ireland, the Isle of Man & The Netherlands.

 Logged

Bookworm

Offline
Edison Member
Karma: 2
Posts: 1234
"Keep it R.E.I.L. - "Research, Experiment, Investigate and Learn"
 « Reply #10 on: February 22, 2012, 07:36:56 pm » Bigger Smaller Reset

Interesting...Thank.

The Canadian grid system is not all connected together. The Electrical Utility is control by the provinces, not federal. The city I live - Toronto, it is control by Toronto Hydro - in Ontario, it is control by Hydro One, and I pay the City of Toronto for my electrical bills - BTW, one is coming at the end of this month. In Quebec, it is control by Hydro Quebec, in New-runswick, it is control by NB Power. Same for the rest of Canada.

About a monitor web site like in your example ?  That, I don't know...I have to Google it.
 Logged

Left Coast, CA (USA)
Offline
Brattain Member
Karma: 361
Posts: 17262
Measurement changes behavior
 « Reply #11 on: February 22, 2012, 07:51:10 pm » Bigger Smaller Reset

The changing frequency of the mains supply is not "Manipulated" in order to keep clocks accurate.
It's caused by an imbalance between supply and demand and the generating / distribution companies have a minute by minute battle to keep the frequency within it's declared value.

There is no way to store electricity in the grid, supply has to match demand. But adding or removing power from the grid is not instant. Turbines have to speed up or slow down, fuel rods have to be added or removed etc.

A good analogy is riding a bycycle. If you are on perfectly flat track you can keep a perfectly constant speed. If there is a hill up or down then the demand on your legs goes up or down, and so does your speed, unless you are really good at matching your effort with the gradient. As you go up a hill you will slow a little as you pedal harder to bump your speed up. and vice versa.

In the UK we have "TV Pickup" when soap operas finish we all go and put the kettle on (1.75 Million kettles in under 5 minutes that's 3 Gigawatts extra). Its such a big surge, and the frequency drops so fast we have to get more in from France!

our "National Balancing Engineer" braces himself, and the grid, for the end of Eastenders (TV soap opera) and sweats a bit when it's late and France lets us down. Watch him go quiet when the end theme tune (Drums. Dum Dum Dum diddiddy) starts.

Great project BTW.

And...  What a good day to be posting about it. Heinrich Rudolf Hertz's 155th Birthday.

I agree with your analysis of need for proper power balancing and methods used. However in addition to that the grid management does also make slowly 'correcting' frequency changes as and if required to keep clocks, which are driven by the synchronous frequency of the power grid, accurate over longer time frames. It's a fact, at least here in the U.S.

Lefty
 Logged

Offline
Edison Member
Karma: 2
Posts: 1234
"Keep it R.E.I.L. - "Research, Experiment, Investigate and Learn"
 « Reply #12 on: February 23, 2012, 10:18:19 am » Bigger Smaller Reset

Update :

I re-do the code to show the data on a LCD display 16 X 8. Hum.. I may need a larger one... got to check the prices for those...

Here the up-date code :

Code:

/*
Size : 6810 Bytes

Version 2.0

AC Frequency and AVC Main monitor

By Serge J Desjardins
aka techone / tech37

Compile - Tested - Calibrated
*/

#include <LiquidCrystal.h>

LiquidCrystal lcd(12,11,10,9,8,7);

byte sw_mode=3;
byte inpulse=2;
byte voltpin=1;

boolean what_mode;

const int number_of_samples = 50;
const float main_ratio = 40.63018242;

unsigned long duration_ton;
unsigned long average_ton;
unsigned long sample_the_pulse;
unsigned long duration_toff;
unsigned long average_toff;

float frequency;
float voltage;
float single_step;
float voltage_out;
float duty_cycle;

void setup()
{
analogReference(DEFAULT);
pinMode(inpulse, INPUT);
pinMode(sw_mode, INPUT);
Serial.begin(9600);
lcd.begin(16, 2);
lcd.clear();
lcd.print("Main:");
lcd.setCursor(12,0);
lcd.print("VAC");
lcd.setCursor(0,1);
lcd.print("F:");
lcd.setCursor(7,1);
lcd.print(" Hz D:");
lcd.setCursor(15,1);
lcd.print("%");
single_step=4.92/1023.0;
delay(5000);
delay(100);
if ( what_mode == 0 )
{
Serial.print(" S ");
Serial.print(main_ratio, 8);
Serial.print(' ');
Serial.print(single_step, 8);
Serial.print(" E ");
}
}

void loop()
{
pulse_sampling();

average_ton = ((duration_ton*10)/number_of_samples)/10;
average_toff = ((duration_toff*10)/number_of_samples)/10;
frequency = 1/(float(average_ton+average_toff)/1000000.0);
duty_cycle = (float(average_ton)/float(average_ton+average_toff))*100.0;

voltage_sampling();

delay(100);
if ( what_mode == 0 )
{
send_data();
display_the_data();
}
else
{
display_the_data();
}
}

void pulse_sampling()
{
duration_ton = 0;
sample_the_pulse= 0;
duration_toff=0;

for (int i=0;i<number_of_samples;i++)
{
sample_the_pulse = pulseIn(inpulse, HIGH);
duration_ton = sample_the_pulse+duration_ton;
sample_the_pulse = pulseIn(inpulse, LOW);
duration_toff = sample_the_pulse+duration_toff;
}
}

void voltage_sampling()
{

for (int i=0;i<number_of_samples;i++)
{
}
}

void display_the_data()
{
lcd.setCursor(5,0);
lcd.print(voltage, 3);
lcd.setCursor(2,1);
lcd.print(frequency, 3);
lcd.setCursor(13,1);
lcd.print(duty_cycle, 0);
}

void send_data()
{
Serial.print(" S ");
Serial.print(average_ton, DEC);
Serial.print(' ');
Serial.print(average_toff, DEC);
Serial.print(' ');
Serial.print(" E ");

Here a picture of the LCD dispay. The voltage and frequency was taken around 12:20 AM EST.

 AC_monitor_LCD_display.jpg (123.35 KB, 1024x768 - viewed 140 times.) Logged

Offline
Edison Member
Karma: 2
Posts: 1234
"Keep it R.E.I.L. - "Research, Experiment, Investigate and Learn"
 « Reply #13 on: February 23, 2012, 10:22:37 am » Bigger Smaller Reset

I can expend my project to also monitor the power usage of the place I live.  I will need to build a "AC current sensor" <-- picture is included for this concept, build a circuit to "translate" the sensor signal into a 0 > 5 DC Volt for the analog pin and code properly to calculate for the current and wattage.

 Current_sensor.jpg (66.54 KB, 1024x746 - viewed 130 times.) Logged

Offline
Newbie
Karma: 0
Posts: 1
 « Reply #14 on: October 18, 2012, 07:33:34 am » Bigger Smaller Reset

Any further progress on this project? I'm thinking about logging our mains voltage and frequency (240V, 50Hz), and this looks like a good starting point.

P.
 Logged

 Pages: [1] 2   Go Up