Нужен компактный вольтметр, который реально показывает до сотых долей вольта, а не просто «примерно 5 В»? Обычный мультиметр не всегда под рукой, а вот самодельный на базе ADS1115 и маленьком OLED-экране — это как раз тот проект, который собирается за вечер, паяется без проблем и выдаёт точность, которой хватит для большинства задач с Arduino и другой электроникой.
ADS1115 — это 16-битный АЦП с интерфейсом I²C. Он снимает напряжение с четырёх каналов, причём с программируемым усилением, что позволяет мерить не только «от 0 до 5 В», но и милливольты, и даже отрицательные напряжения (по дифференциальной схеме). OLED-дисплей на SSD1306 — 0.96 дюйма, 128×64 пикселя, тоже на I²C. Два устройства на одной шине, никаких конфликтов при правильных адресах.
Ниже — пошагово: что купить, как соединить, как паять, как прошить и что делать, если что-то не работает.
Что понадобится
Я не буду привязываться к конкретным магазинам — детали есть и на AliExpress, и в локальных магазинах электроники. Главное — совместимость.
| Компонент | Что искать | На что обратить внимание |
|---|---|---|
| ADS1115 | Модуль на плате (не чип голый) | Адрес по умолчанию 0x48. На плате обычно есть подтяжки для выбора адреса |
| OLED-дисплей | 0.96″, SSD1306, I²C | Белый или синий — не принципиально. Убедитесь, что модуль именно I²C, не SPI (у I²C 4 пина: VCC, GND, SDA, SCL) |
| Arduino (для прошивки) | Nano, Uno или любая совместимая | Nano удобнее для последующей вставки в корпус |
| Провода и разъёмы | Dupont-провода, провод для щупов, mini-USB или Type-C кабель | Щупы можно взять от старого мультиметра или купить отдельно |
| Питание | 5В от USB или аккумулятор 3.7В с повышающим модулем | Если нужна портативность — литиевый аккумулятор с модулем зарядки TP4056 и повышающим преобразователем до 5В |
Резисторы для делителя напряжения — 10 кОм и 10 кОм (если хотите расширить диапазон измерения выше 5 В). Без делителя ADS1115 в режиме ±6.144 В измеряет до примерно 5.5 В (с учётом напряжения питания).
Схема подключения
Всё просто — оба устройства вешаются на одну I²C-шину:
- Arduino 5V → VCC на ADS1115 и VCC на OLED
- Arduino GND → GND на оба модуля
- Arduino A4 (SDA) → SDA на ADS1115 и SDA на OLED
- Arduino A5 (SCL) → SCL на ADS1115 и SCL на OLED
Входное напряжение подаётся на канал A0 ADS1115. Если нужен делитель:
- Измеряемое напряжение → резистор 10 кОм → A0
- A0 → резистор 10 кОм → GND
Это делит входное напряжение пополам. То есть при входе 10 В на A0 будет 5 В, и в коде нужно умножать показание на 2.
Не подавайте на ADS1115 напряжение выше VCC + 0.3 В и не превышайте максимальный диапазон АЦП в выбранной настройке усиления. Иначе сгорит вход.
Пайка: пошагово
Если у вас модули уже с припаянными пинами — можно обойтись без пайки вообще, используя макетную плату и Dupont-провода. Но для портативного устройства лучше всё нормально пропаять.
- Припаяйте пины к модулям. Если их нет — вставьте штырьки в макетку, приложите модуль и пропаяйте. Следите, чтобы не было перемычек между соседними контактами.
- Соедините общие линии питания. Сделайте шину 5V и GND на макетной плате или на куске печатной платы. К ней подключите оба модуля и Arduino.
- Подключите SDA и SCL. Провод от Arduino A4 идёт на SDA обоих модулей (параллельно). То же самое с A5 → SCL. Длина проводов для I²C старайтесь держать в пределах 20–30 см, иначе будут ошибки обмена.
- Припаяйте делитель напряжения. Если используете — два резистора на отдельной маленькой платке или прямо на проводах щупа. Место соединения резисторов → провод к A0.
- Подключите щупы. Один щуп — к точке измерения, второй — к «земле» измеряемой цепи. Важно: общий провод щупа идёт на GND Arduino/модулей.
Если используете аккумулятор: подключите его через TP4056 к входу повышающего модуля, выход 5В — на VCC всей схемы. Не питайте Arduino одновременно от USB и от внешнего 5В без понимания схемы — лучше выбрать один источник.
Прошивка для Arduino
Вам понадобятся две библиотеки. Установите их через библиотечный менеджер Arduino IDE:
- Adafruit ADS1X15 — для работы с ADS1115
- Adafruit SSD1306 + Adafruit GFX Library — для дисплея
Вот рабочий скетч, который измеряет напряжение на канале A0 и выводит на OLED:
#include <Wire.h>
#include <Adafruit_ADS1X15.h>
#include <Adafruit_SSD1306.h>
Adafruit_ADS1115 ads;
Adafruit_SSD1306 display(128, 64, &Wire, -1);
void setup() {
Serial.begin(115200);
if (!ads.begin()) {
Serial.println("ADS1115 not found");
while (1);
}
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("SSD1306 not found");
while (1);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.display();
ads.setGain(GAIN_ONE); // ±4.096V
}
void loop() {
int16_t raw = ads.readADC_SingleEnded(0);
float voltage = ads.computeVolts(raw);
// Если используете делитель 1:1, умножьте на 2:
// voltage *= 2.0;
display.clearDisplay();
display.setCursor(0, 0);
display.setTextSize(2);
display.print(voltage, 3);
display.println(" V");
display.setTextSize(1);
display.print("Channel: A0");
display.display();
delay(500);
}
Что здесь важно:
- setGain(GAIN_ONE) — это диапазон ±4.096 В. Если измеряете напряжения до 5 В с делителем — подходит. Для малых напряжений (до ±0.256 В) используйте GAIN_SIXTEEN — это даст разрешение 0.0078 мВ.
- Адрес дисплея — 0x3C. У некоторых модулей он 0x3D. Если экран не загорается, попробуйте другой адрес или запустите I²C-сканер.
- Если используете делитель — раскомментируйте строку с умножением на 2.
Калибровка и точность
ADS1115 — 16-битный, но реальная точность зависит от нескольких факторов:
- Внутренний опорный источник стабилен, но имеет погрешность около 0.05%.
- Резисторы делителя имеют допуск. Если взять 1% — итоговая погрешность будет около 1–2%.
- Шум на входе можно уменьшить, усредняя несколько измерений в коде.
Для калибровки: подключите известное напряжение (например, 3.3 В с пина Arduino или батарейку) и сравните с показаниями. Если есть систематическая ошибка — введите поправочный коэффициент в код:
float calibratedVoltage = voltage * 1.002; // пример поправки
Частые ошибки и как их избежать
- Ничего не отображается на дисплее. Проверьте адрес I²C. Запустите скетч I²C Scanner — он покажет, какие устройства найдены на шине. Если адрес 0x3C не находится, попробуйте 0x3D.
- ADS1115 не определяется. Проверьте подключение SDA/SCL. Убедитесь, что на модуле ADS1115 есть подтяжки к VCC (обычно стоят по умолчанию). Если нет — добавьте 4.7 кОм от SDA к VCC и от SCL к VCC.
- Показания скачут или неверные. Убедитесь, что общий провод (GND) щупа подключён к GND схемы. Без общей земли измерение бессмысленно.
- Напряжение показывается с противоположным знаком. Перепутали полярность щупов при дифференциальном измерении. При одностороннем (SingleEnded) такого быть не должно.
- Дисплей мерцает или гаснет. Недостаточное питание. OLED потребляет до 20–30 мА, ADS1115 — около 0.5 мА. Если повышающий преобразователь не тянет — будет просадка.
Как лучше сделать корпус и разъёмы
Для портативного использования удобно использовать небольшой пластиковый корпус (например, от распределительной коробки или напечатанный на 3D-принтере). В нём делаются отверстия для дисплея и для разъёма щупов.
Вместо обычных Dupont-разъёмов лучше использовать разъёмы «банан» — как на мультиметрах. Это удобнее и надёжнее. Если не найдёте — подойдут и просто припаянные провода с зажимами на конце.
Для включения/выключения — маленький тумблер между аккумулятором и повышающим модулем. Не забывайте, что Arduino и модули потребляют ток и в простое — если хотите долго работать от батареи, добавьте схему полного отключения питания.
Что выбрать в зависимости от задачи
Нужно просто измерять напряжение 0–5 В с точностью до 0.01 В: используйте GAIN_ONE, без делителя. Этого хватит для проверки питания Arduino, датчиков, светодиодов.
Нужно измерять до 20–30 В (например, аккумуляторы, блоки питания): поставьте делитель 1:1 или 1:3 (подберите резисторы так, чтобы на вход АЦП не приходило больше 4 В при максимальном измеряемом напряжении).
Нужна высокая точность на малых напряжениях (милливольты, термопары, тензодатчики): используйте GAIN_SIXTEEN (±0.256 В) — разрешение будет 0.0078 мВ. Но помните, что и погрешность на малых уровнях из-за шума будет заметнее.
Нужна автономность: используйте аккумулятор 18650 (или плоский Li-Po) с модулем зарядки и повышающим преобразователем. Потребление всей схемы — около 50–80 мА, так что аккумулятора 2000 мАч хватит на 20+ часов непрерывной работы.
Хотите измерять ток: ADS1115 измеряет только напряжение. Для тока нужно добавить шунт (резистор малого сопротивления) и измерять падение напряжения на нём, либо использовать специализированный чип вроде INA219.
Итог
Портативный вольтметр на ADS1115 и OLED — это реальный, полезный инструмент, который собирается из доступных модулей за пару часов. Точность у него выше, чем у большинства дешёвых мультиметров, а компактность позволяет носить с собой.
Ключевые моменты, которые стоит запомнить:
- ADS1115 и OLED работают по I²C — проверьте адреса перед загрузкой прошивки.
- Не забывайте про общую землю между измеряемой цепью и схемой.
- Делитель напряжения расширяет диапазон, но вносит погрешность из-за допуска резисторов.
- Для автономной работы — аккумулятор с повышающим модулем и тумблером питания.
Если что-то не работает — начните с проверки питания и I²C-адресов. 90% проблем решаются на этом этапе.



