2022-12-21 15:16:14 -05:00
|
|
|
|
|
|
|
[![Arduino CI](https://github.com/RobTillaart/DMM/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
|
|
|
|
[![Arduino-lint](https://github.com/RobTillaart/DMM/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/DMM/actions/workflows/arduino-lint.yml)
|
|
|
|
[![JSON check](https://github.com/RobTillaart/DMM/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/DMM/actions/workflows/jsoncheck.yml)
|
2023-10-19 09:19:50 -04:00
|
|
|
[![GitHub issues](https://img.shields.io/github/issues/RobTillaart/DMM.svg)](https://github.com/RobTillaart/DMM/issues)
|
|
|
|
|
2022-12-21 15:16:14 -05:00
|
|
|
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/DMM/blob/master/LICENSE)
|
|
|
|
[![GitHub release](https://img.shields.io/github/release/RobTillaart/DMM.svg?maxAge=3600)](https://github.com/RobTillaart/DMM/releases)
|
2023-10-19 09:19:50 -04:00
|
|
|
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/robtillaart/library/DMM.svg)](https://registry.platformio.org/libraries/robtillaart/DMM)
|
2022-12-21 15:16:14 -05:00
|
|
|
|
|
|
|
|
|
|
|
# DMM = Digital MultiMeter.
|
|
|
|
|
2023-02-04 08:10:04 -05:00
|
|
|
Arduino library for a DMM (digital multimeter) class.
|
2022-12-21 15:16:14 -05:00
|
|
|
|
|
|
|
|
|
|
|
## Description
|
|
|
|
|
|
|
|
DMM is a class that uses the Arduino analogRead to make measurements.
|
|
|
|
It is based upon the UNO but will work on some other boards too.
|
|
|
|
|
|
|
|
The first version only works as a voltmeter, DC only.
|
|
|
|
It is meant to be extended in the future to be a complete Digital MultiMeter class.
|
|
|
|
that includes amps ohms, diode testing etc.
|
|
|
|
|
2023-02-04 08:10:04 -05:00
|
|
|
This is an old 'toy' project, wrapped into a class.
|
|
|
|
Do not expect high precision or accuracy.
|
2022-12-21 15:16:14 -05:00
|
|
|
|
|
|
|
|
2023-02-04 08:10:04 -05:00
|
|
|
#### Related
|
2022-12-21 15:16:14 -05:00
|
|
|
|
|
|
|
- https://github.com/RobTillaart/ACS712 (current measurement).
|
|
|
|
|
|
|
|
|
|
|
|
## Interface
|
|
|
|
|
2023-02-04 08:10:04 -05:00
|
|
|
```cpp
|
|
|
|
#include "DMM.h"
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Constructor
|
|
|
|
|
2022-12-21 15:16:14 -05:00
|
|
|
- **DMM()** constructor.
|
|
|
|
|
|
|
|
#### Configuration
|
2023-02-04 08:10:04 -05:00
|
|
|
|
|
|
|
- **begin(uint8_t analogPin, float volts = 5.0, uint16_t maxADC = 1023)** configuration.
|
|
|
|
Note these are the specifications of the ADC used.
|
2022-12-21 15:16:14 -05:00
|
|
|
- **void setMaxVoltage(float maxVoltage)**
|
|
|
|
- **float getMaxVoltage()**
|
|
|
|
- **void setGain(float factor = 1.0)** GAIN e.g. due to voltage divider.
|
2023-02-04 08:10:04 -05:00
|
|
|
A 25V to 5V divider has a factor = 5.
|
2022-12-21 15:16:14 -05:00
|
|
|
- **float getGain()** returns the set gain.
|
|
|
|
|
2023-02-04 08:10:04 -05:00
|
|
|
|
|
|
|
#### ReadVolts
|
|
|
|
|
|
|
|
One must connect GND of Arduino to the GND of the device.
|
|
|
|
```
|
|
|
|
[A0]---- V unknown
|
|
|
|
[GND]---- GND
|
|
|
|
|
|
|
|
or with a divider => setGain(x)
|
|
|
|
|
|
|
|
[A0]----[divider]---- V unknown
|
|
|
|
[GND]----[divider]---- GND
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
- **float readVolts(uint8_t times = 1)** read voltage.
|
2022-12-21 15:16:14 -05:00
|
|
|
Times can be set to average multiple measurements.
|
|
|
|
- **float readMilliVolts(uint8_t times = 1)** convenience wrapper.
|
2023-02-04 08:10:04 -05:00
|
|
|
- **float readNoise(uint8_t times = 1)** measure the noise on the wire.
|
|
|
|
Assumes connected to constant voltage e.g. GND.
|
|
|
|
|
|
|
|
|
|
|
|
#### ReadOhm
|
|
|
|
|
|
|
|
The schema for measuring resistors is based on a simple voltage divider.
|
|
|
|
See below. This schema can be extended with a selector switch that can
|
|
|
|
switch between different reference resistors.
|
|
|
|
|
|
|
|
```
|
|
|
|
[GND] ----[ R reference ]----[A0]----[ R unknown ]----[+5V]
|
|
|
|
```
|
|
|
|
|
|
|
|
- **void setReferenceR(uint32_t ohm = 1000)** set the reference resistor.
|
|
|
|
units are Ohm, default = 1K.
|
|
|
|
- **uint32_t readOhm(uint8_t times = 1)** read ohm.
|
|
|
|
Times can be set to average multiple measurements.
|
|
|
|
- **uint32_t readKiloOhm(uint8_t times = 1)** read ohm.
|
|
|
|
Times can be set to average multiple measurements.
|
|
|
|
|
|
|
|
Character ohm = Ω (ALT-234 or ALT-0216 might work)
|
|
|
|
|
2022-12-21 15:16:14 -05:00
|
|
|
|
|
|
|
#### Calibration
|
2023-02-04 08:10:04 -05:00
|
|
|
|
2022-12-21 15:16:14 -05:00
|
|
|
- **float readNoise(uint8_t times = 1)** get noise level for accuracy.
|
|
|
|
|
2023-02-04 08:10:04 -05:00
|
|
|
|
2022-12-21 15:16:14 -05:00
|
|
|
## Operation
|
|
|
|
|
2023-02-04 08:10:04 -05:00
|
|
|
Basic operation is to connect the Arduino GND to the projects GND (or - )
|
|
|
|
and use the configured analog pin to measure a (positive) voltage.
|
2022-12-21 15:16:14 -05:00
|
|
|
|
|
|
|
By adding a voltage divider one can measure larger voltages.
|
|
|
|
The divider factor can be set with **setGain(factor)**.
|
|
|
|
|
|
|
|
To elaborate.
|
|
|
|
- GND, VCC
|
|
|
|
|
|
|
|
|
|
|
|
## Future
|
|
|
|
|
|
|
|
#### Functional
|
2023-02-04 08:10:04 -05:00
|
|
|
|
2022-12-21 15:16:14 -05:00
|
|
|
- AMPS (how -> measure voltage over a known resistor)
|
|
|
|
- CAPS (how -> RC timing)
|
2023-02-04 08:10:04 -05:00
|
|
|
- RC (load 5 seconds)
|
|
|
|
- disconnect
|
|
|
|
- measure drop rate / time in micros.
|
|
|
|
- DIODE (how -> 5V or 0V)
|
|
|
|
- DigitalRead(INPUT PULLUP) => HIGH or LOW
|
|
|
|
- or 0.7 volt drop from 5V
|
2022-12-21 15:16:14 -05:00
|
|
|
|
|
|
|
|
|
|
|
#### Must
|
2023-02-04 08:10:04 -05:00
|
|
|
|
2022-12-21 15:16:14 -05:00
|
|
|
- update documentation
|
|
|
|
- update examples
|
2023-02-04 08:10:04 -05:00
|
|
|
- add use of AREF
|
2022-12-21 15:16:14 -05:00
|
|
|
- external or internal 1.1 Volt
|
2023-02-04 08:10:04 -05:00
|
|
|
- **float setOffset(float offset)** adjust the voltage used.
|
|
|
|
- this is not the voltage the ADC uses internally.
|
2022-12-21 15:16:14 -05:00
|
|
|
|
|
|
|
#### Should
|
2023-02-04 08:10:04 -05:00
|
|
|
|
2022-12-21 15:16:14 -05:00
|
|
|
- investigate noise
|
|
|
|
- analogReference(EXTERNAL) for external voltage for build in ADC
|
|
|
|
- support external ADC e.g. ADS1115 for 16 bit resolution.
|
|
|
|
|
|
|
|
#### Could
|
2023-02-04 08:10:04 -05:00
|
|
|
|
2022-12-21 15:16:14 -05:00
|
|
|
- multichannel compare
|
2023-02-04 08:10:04 -05:00
|
|
|
- schema for
|
2022-12-21 15:16:14 -05:00
|
|
|
- scope functionality?
|
|
|
|
|
|
|
|
#### Won't
|
|
|
|
|
|
|
|
|
2023-10-19 09:19:50 -04:00
|
|
|
## Support
|
|
|
|
|
|
|
|
If you appreciate my libraries, you can support the development and maintenance.
|
|
|
|
Improve the quality of the libraries by providing issues and Pull Requests, or
|
|
|
|
donate through PayPal or GitHub sponsors.
|
|
|
|
|
|
|
|
Thank you,
|
|
|
|
|
|
|
|
|