Считывание аналогового значения напряжения. AnalogRead

Простой пример чтения значения на аналоговом входе с помощью AnalogRead с пересчетом в вольты.

Нам понадобятся:

  • плата Arduino Uno или другая
  • переменный резистор 10 кОм (по-английски он называется potentiometer)

Подключение


Подключите три провода от переменного резистора к вашей плате. Первый идет на землю от одного из внешних контактов резистора . Второй идет на 5 вольт от другого внешнего вывода резистора. Третий идет от среднего контакта к аналоговому входу 0.

Вращая вал переменного резистора, вы изменяете величину сопротивления от 0 до 10кОм, это в свою очередь изменяет напряжение от 5вольт до практически 0. Значение мы считываем

Микроконтроллер платы имеет внутри схему, называемую аналого-цифровым преобразователем или АЦП, которая считывает это изменяющееся напряжение и преобразует его в число от 0 до 1023. Когда вал полностью повернут в одном направлении, 0 вольт поступает на входе, а входное значение равно 0. Когда вал полностью повернут в противоположном направлении, на вход подается 5 вольт, а входное значение равно 1023. В промежутке, AnalogRead() возвращает число от 0 до 1023, что пропорционально величине напряжения, подаваемого на контакт.

Код
Инициируем в Setup связь с компьюетером на скорости 9600 бит/сек

Serial.begin(9600);

Далее, в основном цикле вашего кода вам нужно установить переменную для хранения значения сопротивления (которое будет между 0 и 1023, идеально подходит для типа int), поступающего от вашего переменного реситора:

int sensorValue = AnalogRead (A0);

Чтобы изменить значения от 0 до 1023 на диапазон, соответствующий напряжению, которое считывает контакт, вам нужно создать еще одну переменную, число с плавающей запятой, и немного посчитать. Чтобы масштабировать числа от 0,0 до 5,0, разделите 5,0 на 1023,0 и умножьте на sensorValue :

float voltage= sensorValue * (5.0 / 1023.0);

Передаем/выводим полученное значение:

Serial.println(voltage)

Теперь, когда вы откроете Serial Monitor в Arduino IDE (щелкнув значок справа от верхней зеленой полосы или нажав Ctrl+Shift+M), вы должны увидеть постоянный поток чисел в диапазоне от 0,0 до 5,0. Когда вы поворачиваете потенциометр, значения будут меняться в соответствии с напряжением, поступающим на вход A0.

void setup() {
  // устанавливаем связь:
  Serial.begin(9600);
}

// тело основного цикла:
void loop() {
  // считываем значение с нулевого входа:
  int sensorValue = analogRead(A0);
  // Пересчитываем значение ( 0 - 1023) в вольты (0 - 5В):
  float voltage = sensorValue * (5.0 / 1023.0);
  // выводим полученное значение:
  Serial.println(voltage);

См. также Функция analogRead() | Аппаратная платформа Arduino

3 лайка

В схеме между А0 и потенциометром желательно добавить резистор, скажем 1к, чтобы при неверных манипуляциях с А0 не спалить этот пин.
Также непосредственно на пин А0 и “землю” желательно припаять конденсатор 10 -100 нФ.
Совместно с упомянутым ранее резистором это создает на входе АЦП фильтр низких частот (ФНЧ), что уменьшает шумы.

ФНЧ на входе АЦП следует использовать практически всегда, но при этом необходимо правильно выбирать номиналы его элементов, чтобы частота среза ФНЧ не слишком влияла на полезный входной сигнал.

2 лайка

Частота среза фильтра должна быть равна половине частоты оцифровки.