Giter Site home page Giter Site logo

har-in-air / esp32_multi_meter Goto Github PK

View Code? Open in Web Editor NEW
22.0 3.0 6.0 8.5 MB

ESP32 Multi-meter : Current and voltage meter using an INA226 sensor, frequency counter and generator

HTML 7.94% CSS 5.84% Python 0.12% C 4.86% C++ 64.76% JavaScript 16.48%
esp32 websocket visual-studio-code arduino platformio ina226 chartjs frequency-counter oscillator current-voltage-meter

esp32_multi_meter's Introduction

ESP32 MULTI-METER

ESP32 development board used to implement WiFi multi-meter with following functions :

Tested with Chrome and Opera browsers on Ubuntu 20.04 LTS.

Configuration

If not configured, the meter boots up as a stand-alone WiFi Access Point (SSID ESP32_METER, no password required) and web server.

Connect to this WiFi Access Point, then open the home page http://192.168.4.1 in a browser. If your OS has mDNS support, use the url http://meter.local.

MacOS has built-in support for mDNS. On Windows, install Bonjour. On Ubuntu, install Avahi.

Full meter functionality is available in this stand-alone mode.

However, it is more convenient for the meter to connect as a station to an existing WiFi Access Point.

On the home page you can specify an external WiFi Access Point SSID and password. Submit the WiFi credentials and restart the ESP32. Now it will connect as a station to the configured Access Point and then start the web server. The web page is at http://meter.local as before.

If you do not have OS mDNS support, and you still want to use the meter in station mode, you will need a serial debug connection to the ESP32. Check the serial monitor log on reboot to get the station IP address assigned to the meter by the external WiFi Access Point.

Current & Voltage Display

Full-scale bus voltage = ~40V.

There are two ranges for current measurement :

  • HIGH : Full-scale 1638mA, with a resolution of 50uA.
  • LOW : Full-scale 78mA, with a resolution of 2.4uA.

Meter configuration, capture and display functions are available via a web page.

There are two display modes :

  • Meter display with current and voltage readings updated every second
  • Scrollable chart display with manually triggered or gated capture

Current & Voltage Meter

DUT current and voltage readings are updated every second.

The meter uses a fixed sampling configuration :

  • Vbus ADC conversion time 332uS
  • Shunt ADC conversion time 332uS
  • Averages 0.4 seconds of samples for every meter reading

Select the current scale from one of the following options :

  • HI : Full-scale 1638.35mA, resolution 50uA
  • LO : Full-scale 78.017mA, resolution 2.4uA
  • Auto

If you select Auto, samples are first captured with the LO range setting, as this has higher resolution. If any sample is off-scale, the averaging process is restarted with HI range configured.

Do not select the LO or Auto option if the expected current is high and the DUT cannot tolerate the voltage drop across the 1ohm LO current range shunt resistor.

For any selected option, if the final averaging process used off-scale samples, the current display background will flash orange as a warning.

Current & Voltage Chart

There are two capture options : manually triggered with a selected capture interval, and gated capture.

Sample rate options :

  • 2000Hz : no sample averaging, vbus ADC conversion time 204uS, shunt ADC conversion time 204uS.
  • 1000Hz : no sample averaging, vbus ADC conversion time 332uS, shunt ADC conversion time 332uS.
  • 400Hz : averaging 4 samples, vbus ADC conversion time 140uS, shunt ADC conversion time 140uS.

Current scale options :

  • HI : Full-scale 1638.35mA, 50uA resolution
  • LO : Full-scale 78.017mA, 2.4uA resolution

In Chart Display mode, current auto-ranging is not possible due to the high sampling rate.

Click on the legends ma and V above the plot to toggle the display of the corresponding data.

Use the scroll bar sliders to display a subset of the captured data.

Manually triggered capture with selected time interval

Up to 16000 samples can be captured with a single trigger. So the maximum capture interval depends on the selected sampling rate.

  • max 8 seconds capture @ 2000Hz
  • max 16 seconds capture @ 1000Hz
  • max 40 seconds capture @ 400Hz

Gated Capture

The external gate signal is input via an opto-isolator. This gate signal can come from the Device Under Test (DUT) or other external trigger.

Once triggered, capture will start when the gate input goes high.

Capture will end when the gate input goes low, or 16000 samples have been captured.

Example D.U.T.

The DUT is an ESP32 development board running an Internet connectivity test.

The power supply is a fully-charged 18650 Li-Ion battery.

On reset, the DUT ESP32 executes the following sequence :

  1. Connects to a WiFi Internet Access Point as a station
  2. Connects to a Network Time Protocol (NTP) server to get local time
  3. Enters deep sleep for 5 seconds
  4. Restarts

The DUT ESP32 is periodically active for approximately 2.4 seconds, and in deep-sleep for 5 seconds.

The DUT ESP32 uses a GPIO pin to set the meter gate signal high on restart, and resets the gate signal just before going to sleep.

Manually triggered capture

This is an example of an 8-second manually triggered capture. The capture was triggered approximately half-way during the DUT ESP32 deep-sleep interval.

We can see that the DUT load current is ~10mA when the ESP32 is in deep-sleep. This residual current is due to the USB-UART IC and LDO regulator on the DUT ESP32 development board.

When the DUT ESP32 is active, we can see high current pulses (> 450mA) corresponding to WiFi radio transmission bursts.

Gated capture

This is an example of gated capture. It records the load current & voltage only while the DUT ESP32 is active.

Choosing Sample Rates

Example : Sample Rate = 400Hz

Sampling at 400Hz will result in less noise due to sample averaging. It also allows you to capture longer intervals.

However, it may not capture brief current pulses or record accurate maximum/minimum values.

Example : Sample Rate = 2000Hz

The measurements are noisier, but it captures all the current pulses due to WiFi transmission bursts.

Maximum and minimum current values are more accurately captured.

Frequency Counter & Oscillator

Frequency Counter

  • 3.3V TTL level frequency counter input on GPIO 34.
  • 1Hz to 40MHz range with 1Hz resolution.

Oscillator

  • Independent oscillator output on GPIO 33.
  • For the screen snapshot above, the oscillator output pin was connected to the frequency counter pin, and the oscillator frequency set to 13429Hz.

Build Environment

  • Ubuntu 20.04 LTS amdx64
  • Visual Studio Code with PlatformIO plugin using Arduino framework targeting esp32dev board.
  • The file platformio.ini specifies the framework packages, ESP32 configuration, and external libraries.
  • External libraries used :
    • EspAsyncWebServer
    • AsyncTCP
    • ArduinoJson
  • Chart.js v3.7.0

Hardware

  • Circuit Schematic (PDF)
  • Any ESP32 development board with on-board USB-UART.
  • INA226 current sensor
  • A pi-filter network + low-noise MIC5205 LDO voltage regulator provides the power supply for the INA226.
  • High-side current metering. Si4925 dual PMOSFET, 2N7002 NMOSFETs are used to switch shunt resistors for low and high scale current measurements.
  • PC817 opto-coupler for gated measurement.
  • 0.05ohm 1% shunt resistor for HIGH current scale (0 - 1638mA, 50uA resolution)
  • 1.0 ohm 1% additional shunt resistor for LOW current scale (0 - 78mA, 2.4uA resolution).
  • SS56 schottky diode, protects the 1.0 ohm shunt resistor when the LOW current scale is selected.
  • Frequency counter input signal (3.3V TTL level) on GPIO 34.
  • Independent Oscillator output signal on GPIO 33.

Credits

esp32_multi_meter's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.