Чтение аналогового напряжения: analogRead и перевод в вольты
Читаем аналоговый сигнал с потенциометра, переводим значение АЦП в вольты и выводим результат в Serial Monitor.
В этом уроке разберём, как считывать аналоговый сигнал с пина A0, переводить «сырые» числа из analogRead() в реальное напряжение и выводить результат в Serial Monitor Arduino IDE.
Необходимые компоненты
- Потенциометр 10 кОм
Схема подключения

Схема подключения потенциометра к Arduino UNO на макетной плате
Потенциометр подключается тремя проводами. Один крайний вывод идёт на GND, другой крайний — на 5V. Средний (ползунок) подключается к аналоговому входу A0.
Когда вы вращаете ручку потенциометра, меняется соотношение сопротивлений по обе стороны от ползунка. Это напрямую влияет на напряжение в средней точке: в одном крайнем положении оно стремится к 5 В, в другом — к 0 В. Именно это изменяющееся напряжение и является аналоговым сигналом, который мы будем читать.
Внутри микроконтроллера работает схема, которая называется аналого-цифровой преобразователь (ADC). Она превращает входное напряжение в целое число от 0 до 1023 (для плат с 10-битным ADC). Ноль вольт → значение 0, пять вольт → значение 1023. Всё, что между ними, analogRead() возвращает пропорционально.
Принципиальная схема

Принципиальная схема: ПОТЕНЦИОМЕТР подключён к пину A0 Arduino UNO. Крайние выводы — на 5V и GND, средний — на A0.
Код
В функции setup первым делом открываем последовательный порт на скорости 9600 бод:
Serial.begin(9600);
В основном цикле loop создаём переменную для хранения «сырого» значения АЦП (от 0 до 1023 — как раз умещается в intdatatype):
int sensorValue = analogRead(A0);
Чтобы перевести это число в реальное напряжение, объявляем переменную типа float и применяем простую пропорцию: делим 5.0 на 1023.0 и умножаем на sensorValue:
float voltage= sensorValue * (5.0 / 1023.0);
Важно: пример рассчитан на платы с питанием 5 В. Если вы используете плату с питанием 3.3 В — замените
5.0на3.3. Если разрядность вашего ADC отличается от 10 бит — замените1023на соответствующее максимальное значение (например, для 12-битного АЦП это4095).
Наконец, печатаем напряжение в Serial Monitor командой Serial.println():
Serial.println(voltage)
Как проверить результат
Откройте Serial Monitor в Arduino IDE (иконка в правом верхнем углу или сочетание Ctrl+Shift+M). Вы увидите непрерывный поток чисел от 0.0 до 5.0. При вращении ручки потенциометра значения будут плавно меняться — это и есть напряжение на пине A0 в данный момент.
Как это работает
10-битный АЦП делит диапазон от 0 до 5 В на 1024 равных шага (2¹⁰ = 1024). Один шаг соответствует примерно 4.9 мВ. Формула sensorValue * (5.0 / 1023.0) выполняет линейное масштабирование: нулевому коду соответствует 0 В, коду 1023 — ровно 5 В.
Типичные ошибки
- Плавающий пин. Если потенциометр не подключён, пин
A0«висит в воздухе» и показания прыгают хаотично — это нормально для неподключённого входа. - Неверное опорное напряжение. На платах с питанием 3.3 В используйте
3.3вместо5.0, иначе вычисленное напряжение будет завышено. - Неправильная скорость порта. Убедитесь, что в Serial Monitor выбрана та же скорость, что задана в
Serial.begin()— иначе в мониторе будет мусор. - Целочисленное деление. Пишите
5.0 / 1023.0, а не5 / 1023— иначе результат деления будет равен нулю из-за целочисленной арифметики.
Где пригодится
Эта техника — основа для работы с любыми аналоговыми датчиками: термисторами, датчиками света (LDR), датчиками давления, джойстиками. Везде, где нужно получить реальное физическое значение из «сырого» числа АЦП, применяется тот же принцип масштабирования.
Дополнительные материалы
Больше базовых примеров — в разделе built-in examples.
Подробное описание всех функций языка Arduino — в language reference.
Последнее обновление: 20 ноября 2022 г., Killaship