
Когда мы подключаем датчики к микроконтроллеру, выход датчика во многих случаях является аналоговым по своей природе. Но микроконтроллер обрабатывает цифровые сигналы.
Следовательно, мы используем АЦП (ADC) между датчиком и микроконтроллером. Он преобразует аналоговый сигнал в цифровой и передает его микроконтроллеру.
Arduino Uno имеет 6 встроенных каналов АЦП, которые можно использовать для считывания аналогового сигнала в диапазоне от 0–5В.
Данная плата ардуино имеет 10-битный АЦП, что означает, что он будет выдавать цифровое значение в диапазоне 0 – 1023 (210). Это называется разрешением, которое указывает на количество дискретных значений, которые он может равномерно «растянуть» в диапазоне аналоговых значений.
Вычисление значения цифрового выхода
Разрешение АЦП = Vref / (2n — 1)
Цифровое значение = Vin / разрешение
Где, Vref — опорное напряжение — это максимальное значение, которое может преобразовать АЦП.
Для простоты предположим, что Vref равно 5В, тогда:
- Для Vin = 0В цифровое значение = 0
- Для Vin = 5В цифровое значение = 1023 (10 бит)
- Для Vin = 2.5В цифровое значение = 512 (10 бит)
АЦП Ардуино Уно

Функции для АЦП Arduino
-
analogRead(pin)
- Эта функция используется для считывания аналогового значения с указанного аналогового контакта.
-
analogReference(type)
- Эта функция используется для настройки опорного напряжения, используемого для аналогового входа.
Чтение аналогового значения с помощью Arduino
Давайте напишем программу для считывания различных аналоговых значений, установленных с помощью потенциометра, подключенного к аналоговому каналу A0. Отобразим цифровое значение на последовательном мониторе, которое мы получили от АЦП Arduino.

Скетч чтения аналогового канала
int sensorPin = A0; //Вход контакта потенциометра int digitalValue = 0;// переменная хранит считанное значение аналогового сигнала void setup() { Serial.begin(9600); } void loop() { digitalValue = analogRead(sensorPin);// чтение канала АЦП Serial.print("digital value = "); Serial.println(digitalValue); //печать значения в порт монитора delay(1000); }
Результат работы скетча чтения аналогового канала

Заметка
Если к аналоговому входному каналу ничего не подключено, функция AnalogRead() возвращает зашумленное значение.
Чтение аналогового напряжения с помощью Arduino Uno
Как уже было сказано, АЦП преобразует уровень напряжения на аналоговом контакте в пропорциональное цифровое значение (диапазон значений зависит от разрядности АЦП).
Но чтобы узнать, какое входное аналоговое значение подано на вход платы, нам нужно преобразовать это цифровое значение обратно в аналоговое с помощью формулы в программном коде:
Vin = цифровое значение * (Vref / 2n – 1)
Пример
10-ти битный АЦП с опорным напряжением 5В «считал» значение равное 512. Необходимо определить какому уровню напряжения соответствует данное цифровое значение. Получаем:
Vin = 512 × (5 В / 1023) = 2,5 В
Скетч для чтения аналогового напряжения с помощью Arduino
int sensorPin = A0; int digitalValue = 0; float analogVoltage = 0.00; void setup() { Serial.begin(9600); } void loop() { digitalValue = analogRead(sensorPin); Serial.print("digital value = "); Serial.print(digitalValue); analogVoltage = (digitalValue * 5.00)/1023.00; Serial.print(" analog voltage = "); Serial.println(analogVoltage); delay(1000); }
Результат работы скетча чтения аналогового напряжения
