У ардуино нано и уно есть 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. Это надо понимать, и всегда сверяться с документацией на применяемый аналоговый датчик.
Заключение
Теперь с помощью простого потенциометра и ардуино вы сможете управлять различными устройствами: управлять яркостью ламп, скоростью вращения шагового двигателя, углом поворота сервомотора и многое другое.
Кроме того, вы понимаете как считывать данные с любого налогового датчика, подключенного к ардуино.