Когда мы подключаем датчики к микроконтроллеру, выход датчика во многих случаях является аналоговым по своей природе. Но микроконтроллер обрабатывает цифровые сигналы.
Следовательно, мы используем АЦП (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);
}
Результат работы скетча чтения аналогового напряжения



