Найти в Дзене
Serg SV

🔋 Простой вольтметр на Arduino с OLED-дисплеем

📟 Миниатюрное устройство для измерения напряжения с графическим выводом данных В этом проекте мы соберем простой цифровой вольтметр на базе Arduino Nano и OLED-дисплея (128×32 пикселя) и (128×64 пикселя) с интерфейсом I2C. Устройство умеет измерять напряжение в диапазоне до 5 напрямую и до 25 вольт с делителем на резисторах. И красиво отображать результат на дисплее с помощью текста и графики. Изменив резисторы диапазон измерений можно увеличить Также приглашаю всех на одноимённый Telegram канал и чат: ☑️ Telegram Канал —- Компоненты: OLED контакт------Подключить к Arduino VCC ------------------ 5V GND------------------GND SDA------------------A4 SCL------------------ A5 ⚠️ Если используете другой микроконтроллер, уточните его I2C-выводы! Arduino считывает напряжение с аналогового входа A0, преобразует его в цифровое значение (от 0 до 1023) и пересчитывает в вольты. Полученное значение отображается на OLED-дисплее. Программа написана с использованием библиотек Adafruit_SSD1306 и Ad
Оглавление

📟 Миниатюрное устройство для измерения напряжения с графическим выводом данных

📌 Описание проекта

В этом проекте мы соберем простой цифровой вольтметр на базе Arduino Nano и OLED-дисплея (128×32 пикселя) и (128×64 пикселя) с интерфейсом I2C. Устройство умеет измерять напряжение в диапазоне до 5 напрямую и до 25 вольт с делителем на резисторах. И красиво отображать результат на дисплее с помощью текста и графики. Изменив резисторы диапазон измерений можно увеличить

Также приглашаю всех на одноимённый Telegram канал и чат:

☑️ Telegram Канал —-

🧰 Что потребуется

Компоненты:

  1. Arduino Nano или Uno
  2. OLED-дисплей 0.91″ 128×32 I2C (SSD1306)
  3. Резисторы для делителя (если нужно измерять больше 5В)
  4. Макетная плата и провода
  5. Источник измеряемого напряжения (батарейка, БП и т.д.)

⚙️ Схема подключения

OLED контакт------Подключить к Arduino
VCC ------------------ 5V
GND------------------GND
SDA------------------A4
SCL------------------ A5

⚠️ Если используете другой микроконтроллер, уточните его I2C-выводы!

💡 Принцип работы

Arduino считывает напряжение с аналогового входа A0, преобразует его в цифровое значение (от 0 до 1023) и пересчитывает в вольты. Полученное значение отображается на OLED-дисплее.

🖥 Код программы

Программа написана с использованием библиотек Adafruit_SSD1306 и Adafruit_GFX, которые можно установить через библиотечный менеджер Arduino IDE.

#include <Wire.h> // Библиотека для работы с I2C
#include <Adafruit_GFX.h> // Графическая библиотека от Adafruit
#include <Adafruit_SSD1306.h> // Драйвер дисплея SSD1306

#define SCREEN_WIDTH 128 // Ширина дисплея
#define SCREEN_HEIGHT 64 // Высота дисплея
#define OLED_RESET -1 // Не используем аппаратный RESET
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#define ANALOG_PIN A0 // Пин, к которому подключен делитель напряжения

// Значения сопротивлений делителя (в омах)
const float R1 = 100000.0; // Верхний резистор (100 кОм)
const float R2 = 10000.0; // Нижний резистор (10 кОм)

const float VREF = 5.0; // Опорное напряжение Arduino (можно уточнить)

float voltage = 0.0; // Измеренное напряжение
float maxVoltage = 0.0; // Максимально зафиксированное напряжение

void setup() {
Serial.begin(9600); // Инициализация порта для отладки
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Инициализация дисплея по адресу 0x3C
display.clearDisplay(); // Очистка экрана
splashScreen(); // Показ приветственного экрана
}

void loop() {
int analogValue = analogRead(ANALOG_PIN); // Считывание аналогового значения (0-1023)

// Перевод в напряжение с учётом делителя:
voltage = (analogValue * VREF / 1023.0) * ((R1 + R2) / R2);

// Обновляем максимальное значение
if (voltage > maxVoltage) {
maxVoltage = voltage;
}

display.clearDisplay(); // Очистка дисплея перед новым выводом
drawVoltage(voltage, maxVoltage); // Отображение данных
display.display(); // Отрисовка содержимого
delay(500); // Пауза между обновлениями
}

// Показываем заставку при включении
void splashScreen() {
display.clearDisplay();
display.setTextSize(2); // Крупный шрифт
display.setTextColor(SSD1306_WHITE); // Белый цвет
display.setCursor(10, 10); // Смещение курсора
display.print("V-Meter"); // Надпись
display.display();
delay(2000); // Показываем заставку 2 секунды
}

// Функция для отображения напряжения и шкалы
void drawVoltage(float v, float vmax) {
display.setTextSize(3);
display.setCursor(0, 0);
display.print("V:");
display.print(v, 2); // Текущее напряжение с 2 знаками

display.setTextSize(2);
display.setCursor(0, 45);
display.print("Max: ");
display.print(vmax, 1); // Максимальное напряжение с 1 знаком

// Преобразуем напряжение в длину полосы от 0 до 128 пикселей
int barLength = map(v * 10, 0, 250, 0, 128); // (0...25.0В *10 = 250)
display.fillRect(0, 30, barLength, 10, SSD1306_WHITE); // Рисуем шкалу
}

🛠 Возможные улучшения

  • 🔋 Добавить делитель напряжения из резисторов, чтобы измерять до 12В, 24В и выше.
  • 📊 Реализовать график изменения напряжения во времени.
  • 💾 Добавить сохранение данных в EEPROM или на SD-карту.
  • ⚠️ Отображать предупреждение при превышении порога (например, мигающий дисплей).

📈 Как расширить проект

С этим вольтметром можно делать многое:

  • Собрать электронную нагрузку с мониторингом.
  • Добавить датчик тока, превратив его в амперметр.
  • Объединить с RTC и вести лог напряжения по времени.
  • Использовать BLE или Wi-Fi модуль и передавать данные на смартфон.

Волтметр-Амперметр-Ватметр DC730

-2

🧪 Тестирование

Проект отлично работает в онлайн-симуляторе Wokwi. Ты можешь протестировать свою версию схемы и кода без пайки — быстро и просто!

📝 Заключение

Такой проект — отличный способ:

  • начать знакомство с Arduino,
  • научиться работать с дисплеями,
  • освоить преобразование аналоговых сигналов в цифровую форму.

Он прост в сборке, понятен и отлично подходит как первая «полезная» самоделка.