Главная chevron_right Функции chevron_right Аналоговый ввод/вывод chevron_right analogRead()

analogRead()

Считывает напряжение на аналоговом входе и возвращает число типа int от 0 до 1023 — удобно для работы с потенциометрами, датчиками света и температуры.

Полная статья

Описание

analogRead() преобразует напряжение на аналоговом входе в целое число — это и есть суть работы аналого-цифрового преобразователя (ADC). Функция удобна везде, где нужно измерить непрерывный сигнал: уровень освещённости с фоторезистора, положение потенциометра, температуру с аналогового датчика.

Например, Arduino UNO оснащён 10-битным ADC: напряжение от 0 до +5 В преобразуется в число от 0 до 1023. Шаг квантования при этом составляет около 4,9 мВ — то есть функция различает изменения напряжения примерно в 5 мВ.

Диапазон входного напряжения можно сдвинуть с помощью analogReference(), а разрядность analogRead() на некоторых платах можно увеличить через analogReadResolution(). По умолчанию разрядность установлена в 10 бит для обратной совместимости.

Синтаксис

analogRead(pin)

Параметры

pin: номер или имя аналогового входного контакта, с которого нужно считать значение. На большинстве плат аналоговые входы обозначаются как A0, A1 и так далее.

Возвращает

Целое число типа int — результат преобразования. Диапазон зависит от разрядности ADC:

  • 0–1023 при 10-битном разрешении
  • 0–4095 при 12-битном разрешении

Чем выше напряжение на входе, тем больше возвращаемое значение.

Примеры кода

Следующий код считывает аналоговое значение с контакта analogPin и выводит его в монитор порта.

int analogPin = A3; // средний вывод потенциометра подключён к аналоговому пину 3
                    // крайние выводы подключены к GND и VCC
int val = 0;  // переменная для хранения считанного значения

void setup() {
  Serial.begin(9600);           //  инициализация serial
}

void loop() {
  val = analogRead(analogPin);  // считываем значение с входного пина
  Serial.println(val);          // отладочный вывод значения
  delay(200);
}

Чтобы перевести «сырое» значение ADC в напряжение, используйте простую пропорцию: voltage = rawValue * (Vref / 1023.0) для 10-битного ADC. Если опорное напряжение равно 5 В, значение 512 будет примерно соответствовать 2,5 В.

Где применяется

  • Потенциометр — регулировка яркости, скорости или любого другого параметра в зависимости от положения ручки.
  • Фоторезистор или LDR — измерение уровня освещённости для автоматического управления подсветкой.
  • Аналоговый датчик температуры (например, TMP36) — чтение напряжения, пропорционального температуре.
  • Джойстик — считывание положения по двум осям через два аналоговых входа.

Практические замечания

  • Вход без сигнала даёт случайные значения. Если к аналоговому входу ничего не подключено, analogRead() будет возвращать хаотично меняющиеся числа — это нормальное поведение, а не ошибка. Причина — наводки от соседних цепей, электростатика и высокая чувствительность входа.
  • Время преобразования. Одно измерение занимает около 100 мкс, поэтому максимальная частота опроса — порядка 10 000 раз в секунду. Для большинства задач этого более чем достаточно.
  • Напряжение не должно превышать рабочее. Подавать на аналоговый вход напряжение выше питания платы (обычно 5 В или 3,3 В) опасно: это может повредить микроконтроллер. Используйте делитель напряжения, если сигнал выходит за допустимый диапазон.
  • Пересчёт в напряжение. Формула зависит от опорного напряжения: voltage = rawValue * (Vref / 1023.0) для 10-битного ADC. Если опора 3,3 В — подставьте 3.3, если 5 В — 5.0.
  • Шумные показания. Если значения «прыгают» даже при стабильном сигнале, попробуйте усреднить несколько измерений подряд или добавить небольшой конденсатор (100 нФ) между аналоговым входом и GND.

На что обратить внимание

Показания analogRead() редко бывают идеально стабильными. Даже при постоянном напряжении значение может слегка колебаться из-за шума питания, длинных проводов, особенностей датчика или самой схемы. Для интерфейсов вроде потенциометра это обычно не проблема, а для измерительных задач лучше усреднять несколько чтений и следить за качеством земли и питания.

Полезные материалы