
Интернет-магазин «Неглупый Дом»
Понижающий преобразователь LM2596 регулируется подстроечным резистором на плате, но у базовой версии нет собственного дисплея — приходится проверять напряжение отдельным мультиметром при каждой настройке. В этом проекте Arduino измеряет реальное выходное напряжение через делитель и показывает точное число на дисплей TM1637.
Аналоговый вход Arduino умеет измерять напряжение только в диапазоне 0-5V (на платах с опорным напряжением 5V), а LM2596 на выходе может выдавать заметно больше — обычно от 1.25V до немного меньше входного напряжения, которое часто 12V или выше. Чтобы безопасно измерить такое напряжение, перед аналоговым пином ставится делитель напряжения — два резистора, соединённые последовательно между измеряемым напряжением и землёй, с которых снимается уменьшенная в известное число раз часть реального напряжения, безопасная для входа Arduino.
Зная точное соотношение сопротивлений делителя (коэффициент деления), можно пересчитать прочитанное `analogRead()` обратно в реальное исходное напряжение простым умножением. Например, делитель из резисторов 10 кОм и 2.2 кОм уменьшает напряжение примерно в 5.5 раза — такой делитель позволяет безопасно измерять входные напряжения примерно до 27В на аналоговом пине с опорным 5V.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему. ОБЯЗАТЕЛЬНО перепроверьте
// расчёт делителя напряжения мультиметром перед подключением к Arduino.
#include <TM1637Display.h>
TM1637Display display(9, 10); // CLK, DIO
const int SENSOR_PIN = A0;
const float R1 = 10000.0; // Ом, верхнее плечо делителя
const float R2 = 2200.0; // Ом, нижнее плечо делителя
const float VREF = 5.0; // опорное напряжение Arduino
void setup() {
Serial.begin(9600);
display.setBrightness(5);
}
void loop() {
int raw = analogRead(SENSOR_PIN);
float voltageAtPin = (raw / 1023.0) * VREF;
float realVoltage = voltageAtPin * (R1 + R2) / R2; // пересчёт обратно через коэффициент делителя
Serial.print("Напряжение: ");
Serial.print(realVoltage);
Serial.println(" В");
display.showNumberDecEx((int)(realVoltage * 100), 0b01000000, false); // два десятичных знака через точку
delay(300);
}
Библиотека TM1637Display ставится через Менеджер библиотек Arduino IDE. Для точных измерений рекомендуется подстроить константы `R1`/`R2` под реально измеренные мультиметром номиналы ваших резисторов (у дешёвых резисторов реальное сопротивление может на несколько процентов отличаться от номинала на корпусе).
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 211 ₽ 190 ₽ (экономия 21 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.