Функция analogRead

arduino-logo

Описание функции analogRead

Функция analogRead в Arduino принимает аналоговые значения в качестве входных данных со своих контактов, предназначенных для аналоговых измерений. В Arduino Uno контакты с A0 по A5 используются для ввода входных значений аналоговых сигналов. Эти контакты имеют предварительно установленный АЦП (аналого-цифровой преобразователь), который преобразует аналоговый сигнал в цифровой, чтобы он мог быть обработан и проанализирован микроконтроллером. АЦП считывает изменяющееся напряжение и преобразует аналоговый сигнал в числовое значение от 0 до 1023.

Платы ардуино имеют 10-битные (по умолчанию) или 12-битные (на платах Zero, Due, MKR) аналого-цифровые преобразователи, количество которых зависит от модели. В последних упомянутых платах разрядность можно установить функцией analogReadResolution.

Если АЦП 10-битный, а на вход будет подано напряжение от 0 до 5В (или от 0 до 3.3В, в зависимости от платы), то функция analogRead преобразует напряжение в значение от 0 до 1023 (210 = 1024 дискретных точек), а для 12-битного АЦП — от 0 до 4095 (212 = 4096).

Например, если АЦП 10-бит, диапазон входного напряжения от 0 до 5 (опорное напряжение 5 вольт), а напряжение на аналоговом входе равно 2.5В, то функция вернет значение 512.

Формула для расчета цифрового значения АЦП:

\[\text{Цифровое значение} = \frac{разрядность}{U_{опорное}}×U_{АЦП}\]

При UАЦП = 2.5В получим:

\[\text{x} = \frac{1024}{5}×2.5 = 512\]

По официальным данным, на считывание значения с аналогового ввода/вывода микроконтроллер затрачивает 100 мкс.

Таблица сравнения некоторых плат Ардуино
Плата Напряжение питания Аналоговые вводы/выводы Разрядность АЦП
Uno +5V От A0 до A5 10 бит
Mini, Nano +5V От A0 до A7 10 бит
Mega, Mega2560, MegaADK +5V От A0 до A14 10 бит
Micro +5V От A0 до A11 10 бит
Leonardo +5V От A0 до A11 10 бит
Zero +3.3V От A0 до A5 12 бит
Due +3.3V От A0 до A11 12 бит

Синтаксис

analogRead(pin)

Параметры

  • pin : номер аналогового входа, с которого необходимо получить значение напряжения. Например: analogRead(A4)

Возвращаемое значение

(int) Целочисленное значение от 0 до 1023

Если аналоговый вход ни к чему не подключен, то функция analogRead может возвращать случайные значения, которые зависят от различных факторов.

Пример использования функции analogRead

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

В скетче раз в секунду будем получать значение с аналогового контакта Ардуино А3, сохранять его в переменной value и выводить в последовательный порт.

#define PIN A3 // Номер контакта, к которому подключен потенциометр 

void setup() { 
Serial.begin(9600); // Устанавливаем скорость передачи данных 
pinMode(PIN, INPUT); // Настраиваем контакт A3 на вход 
} 

void loop() { 
uint16_t value = analogRead(PIN); // Получаем значение с A3 
Serial.println(value); // Выводим в порт 
delay(1000); // Подождем 1 секунду 
}

Вот что получилось при симуляции в протеусе:

Как использовать функцию analogRead в Ардуино
5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии