Главная chevron_right Уроки chevron_right Встроенные примеры chevron_right Основы chevron_right Чтение аналогового напряжения: analogRead и перевод в вольты

Чтение аналогового напряжения: 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