Делитель напряжения: формула, выбор резисторов и примеры с Arduino
Как работает делитель напряжения? Vout = Vin × R2 / (R1 + R2), выбор резисторов, влияние нагрузки, измерение 12 V на Arduino, 5 V → 3,3 V, LDR и NTC.
Делитель напряжения — самая простая схема, которая с помощью двух последовательно соединённых резисторов превращает напряжение в меньшее и предсказуемое. Выходное напряжение считается по формуле Vout = Vin × R2 / (R1 + R2): R1 подключается к источнику, R2 — к земле (GND), а выход снимается со средней точки, где они соединяются. Например, два резистора по 10 kΩ делят 12 V ровно пополам, до 6 V. Эти два резистора лежат в основе бесчисленного множества схем: от измерения 12-вольтовой батареи на Arduino и понижения 5-вольтового сигнала датчика до уровня 3,3-вольтовых пинов ESP32 до чтения датчиков вроде LDR и NTC-термисторов.
В этом руководстве на реальных числах разберём, откуда берётся формула, как выбрать номиналы резисторов и почему выход проседает, когда к делителю что-то подключают (влияние нагрузки). Затем шаг за шагом напишем код, который измеряет напряжение батареи на Arduino Uno, ESP32 и Raspberry Pi Pico, подберём правильные пары резисторов для перевода 5 V в 3,3 V и прочитаем LDR и NTC через делитель. В конце объясним, почему делитель напряжения никогда нельзя использовать вместо источника питания.

Что такое делитель напряжения и как он работает?
Формула делителя напряжения следует прямо из закона Ома. Через R1 и R2, соединённые последовательно между источником и землёй, течёт один и тот же ток: I = Vin / (R1 + R2). Напряжение на R2, то есть выходное, равно этому току, умноженному на R2: Vout = I × R2 = Vin × R2 / (R1 + R2). Проще говоря, напряжение источника делится между резисторами пропорционально их номиналам: большему резистору достаётся большая доля. Выход всегда меньше входа, потому что отношение R2 / (R1 + R2) меньше 1. Подробнее о том, как делится напряжение в последовательной цепи, читай в статье «Расчёт последовательного и параллельного соединения резисторов».
| Величина | Формула | Пример (Vin = 12 V, R1 = 22 kΩ, R2 = 10 kΩ) |
|---|---|---|
| Выходное напряжение | Vout = Vin × R2 / (R1 + R2) | 12 × 10 / 32 = 3,75 V |
| Коэффициент деления | k = R2 / (R1 + R2) | 10 / 32 = 0,3125 |
| Вход по известному выходу | Vin = Vout × (R1 + R2) / R2 | 3,75 × 3,2 = 12 V |
| R1 для нужного коэффициента | R1 = R2 × (Vin / Vout − 1) | 10 kΩ × (12 / 3,75 − 1) = 22 kΩ |
| Ток через делитель | I = Vin / (R1 + R2) | 12 / 32 kΩ = 0,375 mA |
| Общая мощность | P = Vin² / (R1 + R2) | 144 / 32 kΩ = 4,5 mW |
| Выходное сопротивление (по Тевенену) | Rth = R1 × R2 / (R1 + R2) | 22 × 10 / 32 = 6,875 kΩ |
Считать можно и в обратную сторону: если нужно понизить 12 V до 3,3 V и для R2 выбрано 10 kΩ, получается R1 = 10 × (12 / 3,3 − 1) ≈ 26,4 kΩ. Такого номинала в продаже нет, поэтому берём ближайший больший стандартный, 27 kΩ, и выход становится 12 × 10 / 37 ≈ 3,24 V. Округление R1 вверх немного снижает выход, а это безопасная сторона для пина. Потенциометр на самом деле тоже регулируемый делитель напряжения: бегунок делит резистивную дорожку на R1 и R2. Если не хочется считать вручную, утилита делителя напряжения сразу покажет выход по входному напряжению и резисторам. В электронике делители напряжения чаще всего решают такие задачи:
- Измерение более высоких напряжений: понижение таких источников, как 12-вольтовая батарея или литиевая сборка на 7,4 V, до диапазона, который способен измерить аналоговый вход.
- Понижение уровня сигнала: 5-вольтовый сигнал становится безопасным для 3,3-вольтовых входов ESP32 или Raspberry Pi Pico.
- Чтение резистивных датчиков: изменение сопротивления таких деталей, как LDR, NTC, датчики изгиба и датчики силы (FSR), превращается в напряжение.
- Много кнопок на одном пине: резистивная лестница даёт каждой кнопке своё напряжение, поэтому пять кнопок могут делить один аналоговый пин.
- Обратная связь стабилизатора: стабилизаторы вроде LM317 и регулируемого LM2596 держат выход неизменным, измеряя его через делитель; для LM317 Vout = 1,25 × (1 + R2 / R1).
- Создание опорного напряжения: половина напряжения питания в качестве опорного в схемах на ОУ.
Как выбрать номиналы резисторов
Формуле важно только отношение: 1 kΩ + 1 kΩ и 100 kΩ + 100 kΩ делят одинаково, ровно пополам. Но на практике важны и абсолютные значения. Через делитель из маленьких резисторов течёт большой ток; этот ток — потерянная энергия, а в проектах на батареях он зря сажает батарею. Большие резисторы потребляют очень мало тока, но их выход слабый: подключённая нагрузка или конденсатор выборки внутри аналогового входа легко искажают выходное напряжение, а помехи, наведённые на провода, проникают легче. Правильный выбор — баланс между этими двумя крайностями:
| Общее сопротивление (R1 + R2) | Ток при 12 V | Плюсы | Минусы | Типичное применение |
|---|---|---|---|---|
| 100 Ω – 1 kΩ | 12–120 mA | Почти не зависит от нагрузки, очень быстрый | Греется, тратит много тока | В измерительных схемах почти не встречается |
| 1 kΩ – 30 kΩ | 0,4–12 mA | Идеальное выходное сопротивление для АЦП, подходит для быстрых сигналов | Постоянный расход тока в проектах на батареях | Перевод сигналов 5 V → 3,3 V, измерения на Arduino |
| 30 kΩ – 300 kΩ | 40–400 µA | Бережёт батарею, не греется | Может понадобиться конденсатор 100 nF на аналоговом входе | Контроль батареи |
| 1 MΩ и больше | Меньше 12 µA | Почти не потребляет ток | Чувствителен к помехам, АЦП не может прочитать его точно, нагружает его даже мультиметр | Только с буфером на ОУ |
- Найди наибольшее входное напряжение. 12-вольтовый свинцово-кислотный аккумулятор при зарядке может дойти до 14,4 V; возьми худший случай для измеряемого напряжения и добавь запас 10%.
- Найди наибольшее напряжение, которое выдерживает пин. 5 V на Arduino Uno, 3,3 V на ESP32 и Pico; в качестве безопасной цели выбирай около 4,5 V на Uno, 2,5 V на ESP32 и 3,0 V на Pico.
- Посчитай коэффициент: k = целевой выход / наибольший вход. Например, 4,5 / 14,4 ≈ 0,31.
- Выбери R2 (в большинстве случаев хорошая отправная точка — 10 kΩ) и найди R1 по формуле R1 = R2 × (1 / k − 1). Округли результат вверх до ближайшего значения из утилиты стандартных номиналов.
- Проверь ток и мощность: I = Vin / (R1 + R2) и P = Vin² / (R1 + R2). В проектах на батареях старайся держать ток в диапазоне микроампер.
- Проверь выходное сопротивление: для Arduino Uno R1 × R2 / (R1 + R2) должно быть меньше 10 kΩ; если это не так, поставь конденсатор 100 nF между аналоговым пином и GND.
- Впиши в код реальный коэффициент: пересчитай коэффициент для выбранных стандартных номиналов, а когда схема собрана, измерь мультиметром и откалибруй.
Влияние нагрузки: что происходит, когда к делителю что-то подключают?
Формула предполагает, что с выхода не берут ток. Как только подключается нагрузка, она оказывается параллельно R2, эквивалентное сопротивление нижнего плеча уменьшается и выходное напряжение падает. Проще всего посчитать это, представив делитель в виде эквивалента Тевенена: источника с напряжением, измеренным без нагрузки (Vth), и внутренним сопротивлением Rth = R1 × R2 / (R1 + R2). С нагрузкой RL выход становится равным Vth × RL / (Rth + RL). В таблице ниже — источник 10 V, разделённый резисторами 10 kΩ + 10 kΩ (Vth = 5 V, Rth = 5 kΩ), с разными нагрузками на выходе:
| Нагрузка на выходе (RL) | Выходное напряжение | Ошибка |
|---|---|---|
| Без нагрузки | 5,00 V | 0% |
| 1 MΩ | 4,98 V | 0,5% |
| 100 kΩ | 4,76 V | 4,8% |
| 10 kΩ | 3,33 V | 33% |
| 1 kΩ | 0,83 V | 83% |
Практическое правило: если сопротивление нагрузки хотя бы в 100 раз больше выходного сопротивления делителя (Rth), ошибка остаётся меньше 1%. Если нагрузка меньше, либо уменьши резисторы, либо поставь между ними повторитель напряжения (буфер) на ОУ. У аналогового входа микроконтроллера сопротивление само по себе очень высокое, но внутри есть маленький конденсатор выборки, который заряжается при каждом преобразовании (около 14 pF у ATmega328P). Поэтому даташит рекомендует выходное сопротивление источника около 10 kΩ или меньше. Если делитель высокоомный, поставь конденсатор 100 nF между аналоговым пином и GND: он держит наготове заряд, нужный в момент выборки. А если по очереди читаются несколько аналоговых пинов, отбрасывание первого показания на каждом пине убирает ошибку, оставшуюся после переключения канала.
Почему делитель напряжения нельзя использовать как источник питания
Самая частая ловушка для новичков — взять 5 V от 12-вольтового адаптера через два резистора и попытаться запитать от них Arduino или модуль. На бумаге делитель из 7 kΩ и 5 kΩ даёт из 12 V ровно 5 V, но только пока с выхода не берут ток. Плата, потребляющая 50 mA, ведёт себя как нагрузка около 100 Ω; параллельно с R2 на 5 kΩ нижнее плечо падает до 98 Ω, и выход проваливается до 0,17 V. Если уменьшить резисторы до 70 Ω и 50 Ω, схема уже без всякой нагрузки потребляет 100 mA и превращает в тепло 1,2 W; с подключённой нагрузкой выход всё равно проседает до 3,9 V, а при каждом изменении тока платы (Wi-Fi, сервопривод, реле) напряжение тоже скачет. Более того, когда нагрузку отключают, напряжение снова поднимается и может повредить чувствительные детали.
Измерение напряжения 12-вольтовой батареи и аккумулятора на Arduino
Аналоговые входы Arduino Uno читают не больше 5 V; если подключить 12-вольтовую батарею напрямую, пин сгорит. Решение — делитель из 22 kΩ (R1) и 10 kΩ (R2): при коэффициенте 0,3125 зарядное напряжение 14,4 V приходит на пин как 4,5 V, а схема может измерять до 16 V. При 12 V делитель потребляет всего 0,375 mA, а его выходное сопротивление 6,9 kΩ ниже рекомендуемой границы 10 kΩ. 10-битный АЦП различает примерно 4,9 mV на шаг; с делителем это разрешение около 15,6 mV на входе. Поскольку ESP32 и Pico работают от 3,3 V, на этих платах берём R1 побольше (56 kΩ):
| Подключение | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| R1 (верхний резистор) | 22 kΩ | 56 kΩ | 56 kΩ |
| R2 (нижний резистор) | 10 kΩ | 10 kΩ | 10 kΩ |
| Верхний конец R1 | Плюс источника (+12 V) | Плюс источника (+12 V) | Плюс источника (+12 V) |
| Средняя точка (R1–R2) | A0 | GPIO 34 (ADC1) | GP26 (ADC0, пин 31) |
| Нижний конец R2 и минус источника | GND | GND | GND (например, пин 38) |
| Напряжение на пине при 14,4 V | 4,50 V | 2,18 V | 2,18 V |
| Наибольший измеряемый вход | 16 V | Около 16 V (точный диапазон) | Около 21 V |
1// 12 V akü gerilimini gerilim bölücüyle ölçme / Measuring a 12 V battery with a voltage divider
2// Kaynak + -> 22k (R1) -> A0 -> 10k (R2) -> GND / Source + -> 22k (R1) -> A0 -> 10k (R2) -> GND
3// Kaynağın eksisi Arduino GND'sine bağlı / Source minus is tied to the Arduino GND
4const int VIN_PIN = A0;
5const float VREF = 5.0; // 5V pininde ölçtüğün gerilim / voltage you measured on the 5V pin
6const float R1 = 22000.0; // üst direnç (ohm) / top resistor (ohms)
7const float R2 = 10000.0; // alt direnç (ohm) / bottom resistor (ohms)
8const float CAL = 1.000; // kalibrasyon: gerçek / okunan / calibration: real / measured
9const float LOW_V = 11.8; // düşük akü eşiği (V) / low battery threshold (V)
10
11float readInputVoltage() {
12 analogRead(VIN_PIN); // ilk okumayı at / discard the first reading
13 long sum = 0;
14 for (int i = 0; i < 16; i++) { // 16 ölçümün ortalaması / average of 16 readings
15 sum += analogRead(VIN_PIN);
16 delay(2);
17 }
18 float vPin = (sum / 16.0) * VREF / 1024.0; // pindeki gerilim / voltage at the pin
19 return vPin * (R1 + R2) / R2 * CAL; // bölücüden önceki gerilim / voltage before the divider
20}
21
22void setup() {
23 Serial.begin(9600);
24 pinMode(LED_BUILTIN, OUTPUT);
25}
26
27void loop() {
28 float v = readInputVoltage();
29 Serial.print(F("Giris / Input: "));
30 Serial.print(v, 2);
31 Serial.println(F(" V"));
32 digitalWrite(LED_BUILTIN, v < LOW_V ? HIGH : LOW); // akü zayıfsa LED yanar / LED on when the battery is low
33 delay(1000);
34}Код отбрасывает первое показание, чтобы конденсатор выборки АЦП успел установиться, а затем усредняет 16 показаний, чтобы уменьшить шум. Прочитанное число сначала переводится в напряжение на пине (делим на 1024, потому что в даташите ATmega328P указано ADC = Vin × 1024 / Vref), а затем умножается на (R1 + R2) / R2 = 3,2, чтобы получить напряжение до делителя. Главный источник ошибки — Vref: пин 5V у Uno с питанием от USB часто выдаёт что угодно от 4,7 до 5,1 V. Поэтому измерь пин 5V мультиметром и впиши значение в VREF; затем измерь мультиметром реальное напряжение батареи, сравни его со значением в мониторе порта и впиши в код CAL = реальное / измеренное. Этот один шаг исправляет сразу и ошибку Vref, и допуск резисторов. Если подключить делитель после выключателя устройства, в выключенном состоянии он не потребляет ток; 0,375 mA набегают примерно до 9 mAh в сутки, что для автомобильного аккумулятора ничто, а для маленькой батареи заметно. Подходящие пары резисторов для других источников:
| Измеряемый источник | Диапазон напряжения | Arduino Uno (5 V): R1 + R2 | ESP32 / Pico (3,3 V): R1 + R2 |
|---|---|---|---|
| Одна ячейка Li-ion / LiPo (1S) | 3,0–4,2 V | Делитель не нужен (4,2 V < 5 V) | 100 kΩ + 100 kΩ → не больше 2,10 V |
| Сборка Li-ion 2S | 6,0–8,4 V | 10 kΩ + 10 kΩ → не больше 4,20 V | 100 kΩ + 33 kΩ → не больше 2,08 V |
| Сборка LiPo 3S | 9,0–12,6 V | 22 kΩ + 10 kΩ → не больше 3,94 V | 56 kΩ + 10 kΩ → не больше 1,91 V |
| 12-вольтовый свинцово-кислотный аккумулятор | 10,5–14,4 V | 22 kΩ + 10 kΩ → не больше 4,50 V | 56 kΩ + 10 kΩ → не больше 2,18 V |
| 24-вольтовая система | 21–29 V | 56 kΩ + 10 kΩ → не больше 4,39 V | 120 kΩ + 10 kΩ → не больше 2,23 V |
Измерение напряжения на ESP32
У ESP32 АЦП 12-битный (0–4095), но у него есть два важных отличия. Во-первых, пины ADC2 нельзя читать, пока включён Wi-Fi, поэтому делитель всегда подключай к одному из пинов ADC1, GPIO 32–39 (GPIO 34–39 работают только на вход и идеально подходят для этой задачи). Во-вторых, АЦП нелинеен по краям диапазона: при ослаблении 11 dB по умолчанию Espressif называет самым точным диапазон примерно 150–2450 mV. Пин покажет значения примерно до 3,1 V, но в этой области ошибка растёт. Поэтому мы выбрали делитель 56 kΩ + 10 kΩ: 14,4 V приходят на пин как 2,18 V и остаются в точном диапазоне. Вместо «сырого» analogRead() используем analogReadMilliVolts(): она сразу возвращает милливольты с учётом калибровочных данных, записанных в микросхему на заводе:
1// ESP32: 56k + 10k bölücüyle 12 V ölçme / ESP32: measuring 12 V with a 56k + 10k divider
2const int VIN_PIN = 34; // ADC1_CH6, Wi-Fi açıkken de çalışır / ADC1_CH6, works with Wi-Fi on
3const float R1 = 56000.0; // üst direnç (ohm) / top resistor (ohms)
4const float R2 = 10000.0; // alt direnç (ohm) / bottom resistor (ohms)
5const float CAL = 1.000; // multimetreyle ayarla / tune with a multimeter
6
7void setup() {
8 Serial.begin(115200);
9 analogReadResolution(12); // 0-4095 (varsayılan / default)
10}
11
12void loop() {
13 uint32_t mv = 0;
14 for (int i = 0; i < 32; i++) {
15 mv += analogReadMilliVolts(VIN_PIN); // kalibre edilmiş milivolt / calibrated millivolts
16 }
17 float vPin = mv / 32.0 / 1000.0; // pindeki gerilim (V) / voltage at the pin (V)
18 float vIn = vPin * (R1 + R2) / R2 * CAL; // bölücüden önceki gerilim / voltage before the divider
19 Serial.printf("Pin: %.3f V Giris / Input: %.2f V\n", vPin, vIn);
20 delay(1000);
21}Измерение напряжения на Raspberry Pi Pico (MicroPython)
У Raspberry Pi Pico аналоговые входы — GP26, GP27 и GP28 (ADC0–ADC2). Функция read_u16() в MicroPython масштабирует 12-битное показание в диапазон 0–65535, а опорой служит ADC_VREF, который берётся от 3,3 V платы. Поскольку АЦП Pico измеряет до 3,3 V, делитель 56 kΩ + 10 kΩ позволяет дойти примерно до 21 V. Интересная деталь: в самой Pico тоже есть делитель напряжения. Делитель на плате делит напряжение питания VSYS на три и подаёт его на GP29 (ADC3); умножь напряжение, прочитанное через ADC(29), на 3 — и увидишь напряжение питания платы (на Pico W пин GP29 общий с беспроводной микросхемой, поэтому напрямую так не получится).
1from machine import ADC
2import time
3
4adc = ADC(26) # GP26 = ADC0 (pin 31)
5VREF = 3.3 # ADC_VREF; multimetreyle ölçüp düzelt / measure and correct with a multimeter
6R1 = 56000 # üst direnç (ohm) / top resistor (ohms)
7R2 = 10000 # alt direnç (ohm) / bottom resistor (ohms)
8CAL = 1.000 # kalibrasyon katsayısı / calibration factor
9
10
11def read_input_voltage(samples=32):
12 total = 0
13 for _ in range(samples):
14 total += adc.read_u16() # 0-65535
15 v_pin = total / samples * VREF / 65535 # pindeki gerilim / voltage at the pin
16 return v_pin * (R1 + R2) / R2 * CAL # bölücüden önceki gerilim / voltage before the divider
17
18
19while True:
20 v_in = read_input_voltage()
21 print("Giris / Input: {:.2f} V".format(v_in))
22 time.sleep(1)Понижение 5-вольтового сигнала до 3,3 V (для ESP32 и Pico)
Пины ESP32 и Pico не рассчитаны на 5 V. Если выход ECHO датчика HC-SR04, пин TX у Arduino Uno или цифровой выход модуля с питанием 5 V подключить к этим платам напрямую, входные защитные диоды работают с перегрузкой, и со временем пин может выйти из строя. Для однонаправленных сигналов самое дешёвое решение — делитель напряжения. Цель — напряжение, которое никогда не превышает 3,3 V, но всё ещё достаточно высокое, чтобы плата читала его как HIGH: ESP32 считает минимальным уровнем HIGH 75% своего питания (около 2,5 V), а RP2040 у Pico — 2,0 V. Поэтому выход от 3,0 до 3,3 V даёт удобный запас на обеих платах. Этот же способ рекомендуется в руководстве по датчику расстояния HC-SR04 для подключения пина ECHO к 3,3-вольтовым платам.
| R1 (сторона сигнала) | R2 (сторона GND) | Выход при входе 5 V | Выходное сопротивление | Вывод |
|---|---|---|---|---|
| 1 kΩ | 2 kΩ (два по 1 kΩ последовательно) | 3,33 V | 667 Ω | Классический выбор; подходит и для быстрых сигналов |
| 1,2 kΩ | 2,2 kΩ | 3,24 V | 776 Ω | Стандартные номиналы E12, чуть ниже 3,3 V |
| 10 kΩ | 20 kΩ | 3,33 V | 6,7 kΩ | Малый ток; достаточно для UART и HC-SR04 |
| 2,2 kΩ | 3,3 kΩ | 3,00 V | 1,3 kΩ | Самый безопасный запас; обе платы всё ещё читают HIGH |
| 4,7 kΩ | 10 kΩ | 3,40 V | 3,2 kΩ | На грани; если шина 5 V поднимется до 5,25 V, получится 3,57 V, не рекомендуется |
Вместе с собственной ёмкостью пина делитель образует маленький RC-фильтр. Выходное сопротивление 6,7 kΩ у делителя 10 kΩ + 20 kΩ и около 15 pF ёмкости пина и макетной платы дают постоянную времени около 100 нс; UART на 115200 бод (8,7 µs на бит) этого не заметит, а вот фронты SPI-сигналов на частоте в несколько MHz скругляются. На быстрых линиях лучше 1 kΩ + 2 kΩ. Помни и о том, что делитель работает только в одну сторону, от большего напряжения к меньшему. В обратную сторону обычно ничего не нужно: Arduino Uno считает HIGH всё, что выше 3,0 V, поэтому может прочитать 3,3-вольтовый выход ESP32, пусть и с небольшим запасом. А вот на двунаправленных линиях вроде I2C делитель бесполезен; там нужен преобразователь логических уровней на MOSFET.
Чтение LDR и NTC через делитель напряжения

Микроконтроллеры не умеют измерять сопротивление напрямую, только напряжение. Если резистивный датчик вроде LDR или NTC соединить последовательно с постоянным резистором в делитель напряжения, изменение сопротивления превращается в изменение напряжения в средней точке. Номинал постоянного резистора задаёт чувствительность. Чтобы получить наибольший размах напряжения, постоянный резистор должен быть средним геометрическим наименьшего и наибольшего сопротивления датчика в нужном диапазоне: R = √(Rmin × Rmax). Для LDR, у которого 1 kΩ на ярком свету и 100 kΩ в полумраке, получается √(1 k × 100 k) = 10 kΩ. При 5 V с резистором 10 kΩ выход меняется в пределах 4,09 V, а с 1 kΩ или 100 kΩ размах сужается до 2,45 V. Поэтому в стартовых наборах и лежат резисторы на 10 kΩ. Есть и ещё один плюс: делитель и АЦП питаются от одних и тех же 5 V, поэтому вычисленное сопротивление не зависит от напряжения питания (ратиометрическое измерение), и коду ниже даже не нужно значение Vref.
1// LDR ve NTC'yi gerilim bölücüyle okuma / Reading an LDR and an NTC with voltage dividers
2// A0: 5V -> LDR -> A0 -> 10k -> GND
3// A1: 5V -> 10k -> A1 -> NTC 10k (B = 3950) -> GND
4const float R_FIXED = 10000.0; // sabit dirençler (ohm) / fixed resistors (ohms)
5const float R0 = 10000.0; // NTC'nin 25 °C direnci / NTC resistance at 25 °C
6const float BETA = 3950.0; // NTC B katsayısı / NTC beta coefficient
7const float T0 = 298.15; // 25 °C kelvin cinsinden / 25 °C in kelvin
8
9void setup() {
10 Serial.begin(9600);
11}
12
13void loop() {
14 analogRead(A0); // kanal değişti, ilk okumayı at / channel changed, discard first reading
15 int ldrRaw = analogRead(A0);
16 analogRead(A1);
17 int ntcRaw = analogRead(A1);
18 if (ldrRaw < 1) ldrRaw = 1; // sıfıra bölmeyi önle / avoid division by zero
19
20 // Oransal ölçüm: besleme gerilimi hesaptan düşer / ratiometric: the supply voltage cancels out
21 float rLdr = R_FIXED * (1024.0 / ldrRaw - 1.0);
22 float rNtc = R_FIXED * ntcRaw / (1024.0 - ntcRaw);
23 float tempC = 1.0 / (1.0 / T0 + log(rNtc / R0) / BETA) - 273.15; // Beta denklemi / Beta equation
24
25 Serial.print(F("LDR: "));
26 Serial.print(rLdr / 1000.0, 1);
27 Serial.print(F(" kOhm NTC: "));
28 Serial.print(rNtc / 1000.0, 2);
29 Serial.print(F(" kOhm "));
30 Serial.print(tempC, 1);
31 Serial.println(F(" C"));
32 delay(1000);
33}В коде LDR стоит сверху, поэтому показание растёт, когда света становится больше; его сопротивление R = 10 kΩ × (1024 / ADC − 1). NTC стоит снизу, и с ростом температуры его сопротивление, а значит и прочитанное напряжение, падает. Для распространённых NTC на 10 kΩ при 25 °C с коэффициентом B 3950 температура находится по уравнению с B-коэффициентом: 1 / T = 1 / T0 + ln(R / R0) / B (температуры в кельвинах). Поскольку постоянный резистор равен сопротивлению NTC при 25 °C, выход при комнатной температуре равен ровно половине питания, и именно там чувствительность выше всего. Для большей точности в широком диапазоне температур уравнение Стейнхарта — Харта и самонагрев NTC разобраны в руководстве по NTC-термистору.
Идеи проектов с делителем напряжения
- Контроль батареи и сигнал о разряде: следи за аккумулятором в автодоме или солнечной установке и включай зуммер, когда напряжение падает ниже 11,8 V; варианты питания для проектов на батареях — в статье «Питание Arduino от батарей».
- Цифровой вольтметр: выводи измеренное напряжение на LCD- или OLED-дисплей; шаги описаны в статье «Вольтметр на Arduino своими руками».
- Автоматический ночник: делитель с LDR включает светодиоды или реле, когда темнеет.
- Солнечный трекер: сравнивай напряжения двух делителей с LDR, чтобы поворачивать панель к свету (солнечный трекер).
- Пять кнопок на одном пине: собери лестницу из разных резисторов и определяй нажатую кнопку по аналоговому значению (подключение кнопок).
- Термостат: измеряй температуру делителем с NTC и включай вентилятор или нагреватель через реле при заданной температуре.
Частые ошибки и как их исправить
| Признак | Вероятная причина | Решение |
|---|---|---|
| Показания бессмысленны и всё время прыгают | Минус источника не соединён с GND Arduino | Соедини общую GND |
| Напряжение на пине намного выше ожидаемого | Перепутаны R1 и R2 | Больший резистор ставится со стороны источника (сверху); измерь мультиметром до подключения |
| Показание отличается от реального на 5–10% | Резисторы 5% или Vref не равно 5,00 V | Возьми металлоплёночные резисторы 1% и откалибруй через VREF и CAL в коде |
| Выход падает при подключении модуля | Влияние нагрузки: нагрузка стоит параллельно R2 | Сделай нагрузку не меньше 100 × Rth, возьми резисторы поменьше или буфер на ОУ |
| Показание плавает с высокоомным делителем | Конденсатор выборки АЦП не успевает полностью зарядиться | Поставь конденсатор 100 nF на пин и отбрасывай первое показание |
| Показания ESP32 пропадают, когда включается Wi-Fi | Делитель подключён к пину ADC2 | Используй GPIO 32–39 (ADC1) |
| Батарея садится даже при выключенном устройстве | Делитель всё время берёт ток от батареи | Подключи делитель после выключателя и используй высокоомные резисторы |
| Модуль, запитанный от делителя, не работает | Делитель — это не источник питания | Используй стабилизатор вроде 7805, AMS1117 или LM2596 |
| I2C не работает через делитель | Делитель работает в одну сторону, а I2C двунаправленная | Используй преобразователь логических уровней на MOSFET |
Делитель напряжения — это всего два резистора и одна формула, но он встречается почти в каждом проекте, который что-то измеряет. Коэффициент выбирается по формуле, абсолютные значения — по балансу между током и выходным сопротивлением; учти влияние нагрузки, откалибруй результат мультиметром — и показания будут надёжными. Основы аналоговых измерений — в статье «Что такое АЦП?». В приложении BlueGrays есть такие проекты, как «Измерение освещённости с LDR», «Ночник на LDR», «Цифровой вольтметр с LCD-дисплеем», «Измерение температуры с NTC и LCD-дисплеем 2x16» и «Ультразвуковой датчик расстояния HC-SR04 на ESP32», и каждый из них разобран шаг за шагом со схемами и кодом.
Частые вопросы
Какая формула у делителя напряжения?
Выходное напряжение Vout = Vin × R2 / (R1 + R2), где R1 — резистор со стороны источника, а R2 — со стороны земли. Например, если разделить 9 V резисторами 10 kΩ и 10 kΩ, получится 4,5 V. Формула точна только тогда, когда с выхода не берут ток.
Можно ли получить 5 V из 12 V с помощью делителя напряжения?
Для измерения или сигнала — да: резисторами 22 kΩ и 10 kΩ можно понизить 12 V до 3,75 V и прочитать их аналоговым входом Arduino. Для питания платы или модуля — нет: выход проваливается, как только нагрузка начинает потреблять ток. Для питания используй стабилизатор вроде 7805 или понижающий преобразователь вроде LM2596.
Какие резисторы нужны, чтобы перевести 5 V в 3,3 V?
Самая распространённая пара — 1 kΩ со стороны сигнала и 2 kΩ со стороны земли: она превращает 5 V в 3,33 V. Тот же коэффициент дают 10 kΩ и 20 kΩ, но для быстрых сигналов лучше меньшие номиналы. Если резистора на 2 kΩ нет, 2,2 kΩ и 3,3 kΩ дают 3,0 V, которые ESP32 и Pico всё ещё читают как HIGH.
Как выбрать номиналы резисторов для делителя напряжения?
Сначала задай коэффициент по наибольшему входному напряжению и пределу пина, затем выбери R2 (обычно 10 kΩ) и посчитай R1. Если общее сопротивление маленькое, делитель тратит ток впустую; если очень большое, растут влияние нагрузки и ошибки АЦП. Для Arduino хороший баланс — выходное сопротивление меньше 10 kΩ, а в проектах на батареях — общее сопротивление около 100 kΩ.
Как измерить 12 V на Arduino?
Подключи плюс батареи через 22 kΩ к A0, A0 через 10 kΩ к GND, а минус батареи к GND Arduino. В коде умножь значение analogRead() на 5 / 1024, чтобы получить напряжение на пине, а затем умножь его на 3.2, чтобы получить напряжение батареи. С таким делителем можно безопасно измерять до 16 V.
Разряжает ли делитель напряжения батарею?
Да, делитель постоянно потребляет I = Vin / (R1 + R2). Делитель на 32 kΩ при 12 V потребляет 0,375 mA, около 9 mAh в сутки: для автомобильного аккумулятора это ничто, а для маленькой батареи заметно. В проектах на батареях используй резисторы около 100 kΩ с конденсатором 100 nF на аналоговом пине или подключай делитель после выключателя устройства.
Что собрать после прочтения
Все проекты
Измерение освещённости с LDR
Хочешь увидеть яркость своей комнаты в виде числа? LDR — маленькая деталь, реагирующая на свет, — измеряет освещённость вокруг, а Arduino каждые полсекунды выводит значение на экран компьютера. Закрой

Ночник на LDR
Маленький ночник, который сам включается, когда темнеет, и гаснет, когда наступает утро. Датчик освещённости измеряет, насколько светло в комнате, и Arduino включает светодиод, когда достаточно темно,

Измерение освещённости модулем LDR на ESP32
Наблюдение в мониторе порта в реальном времени за сырым значением ADC модуля LDR и относительным процентом освещённости, вычисленным по опорным значениям темноты и света. Этот процент — не измерение в люксах. Учит логике калибровки модуля. Идеально выполнить его перед проектом 10, потому что он нужен для определения порога.

Цифровой вольтметр с LCD-дисплеем
Узнай, какое напряжение даёт батарейка или блок питания, с помощью измерителя, собранного своими руками. Делитель из двух резисторов понижает высокое напряжение до уровня, который может прочитать плат

Измерение температуры с NTC и LCD-дисплеем 2x16
Измерь температуру вокруг с помощью датчика, похожего на крошечную бусинку. Эта деталь, NTC, при нагреве легче пропускает электричество; Arduino читает это изменение, по формуле переводит его в градус

Ночник на LDR с ESP32
Ночник, в котором светодиод сам загорается в темноте и гаснет на свету. Используется пин D0 (цифровой выход) модуля датчика LDR — порог темноты задаётся маленьким потенциометром на модуле, а выход HIGH/LOW формирует сам модуль. ESP32 просто читает этот сигнал через digitalRead(), код очень простой.

Ультразвуковой датчик расстояния HC-SR04 на ESP32
Ультразвуковой датчик HC-SR04 вычисляет расстояние по времени, за которое испущенная им звуковая волна отражается от предмета и возвращается (Time of Flight). В этом проекте ESP32 подаёт импульс 10 микросекунд на пин TRIG датчика, а длительность эха читает с пина ECHO через pulseIn(). Вычисленное расстояние в сантиметрах выводится на I2C LCD 16x2. HC-SR04 работает от 5V, поэтому на пине ECHO нужен делитель напряжения.

Регулировка яркости светодиода потенциометром на ESP32 (аналог → PWM)
В этом проекте яркость светодиода плавно регулируется потенциометром. Пин АЦП ESP32 читает напряжение 0–3,3V с потенциометра, затем это значение превращается в сигнал PWM (широтно-импульсная модуляция) и подаётся на светодиод. В результате при повороте потенциометра светодиод постепенно становится ярче или тусклее. В Arduino Core 3.0+ можно сразу использовать analogWrite(); на ESP32-S2/S3 разрешение АЦП фиксировано — 12 бит.
Другие статьи
Приложение BlueGrays
Собери эту схему шаг за шагом в телефоне
Схема подключения, код и список деталей на одном экране. 200+ проектов на Arduino, ESP32 и Pico готовы к сборке.
Наведи камеру телефона
Наведи камеру на код — откроется магазин приложений на телефоне.
или открыть магазин

