Описание функции 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.
Формула для расчета цифрового значения АЦП:
При UАЦП = 2.5В получим:
По официальным данным, на считывание значения с аналогового ввода/вывода микроконтроллер затрачивает 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 секунду }
Вот что получилось при симуляции в протеусе: