Эксперимент №15. Аналоговые порты ардуино и потенциометр

У ардуино нано и уно есть 6 аналоговых портов ввода-вывода. Они имеют обозначение A0..A5 (A – Analog). Из их названия можно догадаться, что они используются для получения и передачи аналоговых значений. В действительности, это мультифункциональные порты, и с их помощью можно не только работать с аналоговыми сигналами. Но об этом – в других экспериментах!

Кстати, на китайских клонах ардуино нано обычно можно видеть дополнительные порты A6..A7, которые также можно использовать для чтения аналогового сигнала, но ни для чего другого.

Итак, аналоговое значение, в отличие от цифрового (логического), может принимать любое значение, и даже дробное. Однако у ардуино есть пара ограничений на этот счет:

  • на аналоговый порт ардуино должно подаваться напряжение в пределах от 0 до 5V;
  • точность измерения ардуино поставляет 1/1024, т.е., примерно, 0.001, что весьма неплохо.

Прежде чем продолжить теорию, давайте соберем следующую простую схему и загрузим ниже приведенный скетч.

Необходимые компоненты

  • 1 потенциометр (любого номинала)
  • Остальное – как обычно.

Схема подключения потенциометра к ардуино

У потенциометра (переменного резистора) –  3 контакта. В нашем случае средний контакт подключаем к аналоговому порту A0, а два других – к земле (GND) и 5V, соответственно.

Скетч чтения аналогового входа ардуино

/**
 * Эксперимент № 1. 
 * 
 * https://jarduino.ru
 *
 * Эксперименты с ардуино.
 */

const byte POT_PIN = A0; // Порт для ...
int val{0}; // Переменная для ...

// вызывается 1 раз, для первичной настройки
void setup()
{
	Serial.begin(9600);

	pinMode(A0, INPUT); // пин A0 будет входом (англ. «input»)
}

// вызывается в цикле
void loop()
{
	val = analogRead(POT_PIN); // Прочесть аналоговое значение и присвоить его переменной val.

	Serial.print(val); // Вывести прочитанное значение в последовательный порт.
	Serial.print(" (");
	Serial.print(map(val, 0, 1023, 0, 5)); // Вывести значение в вольтах
	Serial.println("V)");

	delay(100); // Небольшая задержка в мсек.
}

Результат чтения аналогового входа ардуино

Скетч считывает значение с аналогового порта A0 (с небольшой задержкой) и выводит его в последовательный порт. При этом считываемое значение переводится в вольты и тоже выводится.

Объяснение

Для получения аналогового значения мы вызываем функцию analogRead(A0). Она вернет целочисленное значение в пределах 0..1023. При этом 0 соответствует 0V, а 1024 – максимуму, т.е. 5V.

Потенциометр играет роль делителя напряжения, позволяющего подавать на порт A0 напряжение в пределах от 0V до значения на входе (5V).

Теперь должно быть понятным, почему точность измерения ардуино составляет 1/1024: это цена деления шкалы считывателя аналоговых значений.

Чтобы получить реальное, аналоговое значение, выраженное в вольтах, можно применить простую формулу отношения. Однако у ардуино есть готовая функция map, которая это сделает за нас:

map(val, 0, 1023, 0, 5)

На вход подается значение, которое нужно преобразовать, диапазон значений в текущих единицах измерения (0..1023) и диапазон в единицах на выходе (0..5V).

Еще немного об аналоговом входе ардуино

На примере использования потенциометра с ардуино, мы на самом деле показали как использовать с ардуино любой аналоговый датчик.

К аналоговому входу ардуино подключается любой аналоговый датчик. Измеряя напряжение на аналоговом входе, программа ардуино судит о реальном аналоговом сигнале от источника. Это может быть, например, интенсивность освещенности, измеряемая в люменах или температура в градусах цельсия, все что угодно, выраженное диапазоном значений от 0 до 5V.

Т.о. для получения реального значения необходимо, как минимум, знать какому значению (например, температуры) соответствует 0V, а какому – 5V.

Кроме того, зависимость между реальным измеряемым значением и напряжением на пине ардуино обычно далеко не линейная. Т.е. если предположить, что 0V соответствует 0*C, а 5V – 100*C, то 2,5V – вовсе не обязательно = 50*C. Это надо понимать, и всегда сверяться с документацией на применяемый аналоговый датчик.

Заключение

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

Кроме того, вы понимаете как считывать данные с любого налогового датчика, подключенного к ардуино.

Добавить комментарий