The concept is fairly straight forward. Since I needed this only to measure the mains AC voltage and the output voltage of the sine wave inverter I was working on (based on the PIC32MX250F128B - more on this later), I didn't need to do any "true RMS" measurement. All I had to do was to convert the mains AC to DC, filter it and measure the peak voltage. Of course this had to be scaled down to a safe range for the microcontroller. The RMS voltage for a sine wave is equal to 0.707 (to 3 decimal places) the peak voltage.
The design was based on the Microchip PIC16F676. However I realized that I didn't have any in stock with me. So, I just used the pin-compatible PIC16F684. On the software side of things, the difference between the code for PIC16F676 and PIC16F684 is just one line. (See source file attached below.)
The variable resistor is adjusted so that the reading of my AC voltmeter matches that of a commercial voltmeter (Extech MA640 DMM). This is a sort of calibration.
CAUTION: THIS CIRCUIT IS NOT ISOLATED FROM THE MAINS AC AND HAS THE POTENTIAL TO BE LETHAL. YOU MUST BE VERY CAREFUL IF YOU ARE GOING TO USE THIS DESIGN. DO NOT ATTEMPT IF INEXPERIENCED. I CANNOT AND WILL NOT BE HELD RESPONSIBLE FOR ANY DAMAGE DONE WHILE USING THIS CIRCUIT.
Here's the schematic:
Fig. 1 - Voltmeter
Fig. 2 - The PCB without (above) and with (below) the transformer
Fig. 3 - The test setup
Fig. 4 - Measuring voltage set with the variac
Fig. 5 - Measuring voltage set with the variac
Fig. 6 - Measuring voltage set with the variac
Fig. 7 - Measuring voltage set with the variac
C source file:
mikroC project file:
Parts list (Excel XLSX file):
Schematic (ARES DSN file):
PCB (ARES LYT file):
PCB (PDF files):
It's a fun simple yet useful project that you can build pretty easily if you want. Let me know what you think in the comments section below!