Arduino — analogRead() на практике

Недавно я написал несколько статей о датчиках, диодах и как они хорошо работают. Но на практике из того, что я могу видеть, я ни разу не написал, как работает та или иная функция в Arduino. Да хотя бы взять недавно используемую функцию analogRead(). Будем исправлять ошибку:)

Как вы уже догадались, а может и нет :), это будет пример с использованием потенциометра. По существу, этот пример в сети неоднократно приводился, но с другой стороны, когда сам создаешь какое-либо устройство и есть идеи с использованием аналоговых портов, необходимо понимать процесс их работы.

Стандартный пример, который вы можете найти на сайте arduino.cc показывает, что подключив потенциометр к +5В, GND и аналоговому входу, мы можем наблюдать изменение напряжения в зависимости от поворота ручки потенциометра.

Так, если повернем потенциометр до упора влево, то получим значение близкое к нулю, если повернем до упора вправо, то получим величину около 1023.

Arduino — analogRead()

Давайте для начала соберем макет. Что нам понадобиться на данном этапе?

  • Arduino UNO
  • Потенциометр 10кОм

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

Arduino - analogRead()

Первый подключите к +5В Arduino (красный провод), средний к аналоговому входу A5 (желтый провод) – на нем мы будем делать измерение, и последний вывод потенциометра подключите к GND (черный провод). Для лучшего восприятия всего сказанного ниже привожу схему.

Далее скетч работы analogRead() с потенциометром:

void setup()
{
Serial.begin(9600); // Инициализация последовательного порта
}
void loop()
{
int pot = analogRead(A5); // Чтение из A5
Serial.println(pot); // вывод в Serial монитор значения с потенциометра
delay(10); // пауза
}

В функции setup() инициализируем Serial монитор, так как на него мы будем отправлять измеренные значения.

В функции loop() у нас немного больше кода. Здесь мы создаем переменную «pot», в который сохраняем значение АЦП с контакт (A5) аналогового порта. В следующей строке Serial.println(A5) мы отправляем в Serial монитор значение переменной «pot». Далее с помощью delay(10) осуществляем задержку на 10 мс, то есть, каждые 10 мс считываем показания на потенциометре.

Функция analogRead() простыми словами — это встроенный аналого-цифровой преобразователь (АЦП) Arduino. То есть аналоговый сигнал, поступающий извне, пересчитывается и масштабируется, а затем выводиться в цифровом виде.

В результате этого диапазон измерения напряжения (0…5В) мы можем представить, как значения от 0 до 1023. Благодаря такому подходу мы можем изготовить различные устройства, которые работают на подобных расчетах.

Если мы подключим выход для наушников к аналоговому контакту Ардуино, весь сигнал будет заменен на соответствующие ему числовые значения в диапазоне 0…1024 и, следовательно, можно сделать классический измеритель уровня звука (VU Meter) на светодиодах.

Простой VU Meter на Ардуино

Можно предположить, что красный светодиод соответствует наибольшему уровню звука, скажем, 1000. Желтый светодиодж соответствует средней громкости на уровне 600 – 999. Зеленый светодиод малой громкости на уровне от 1 до 599. Такую схему можно построить, например, на 8 светодиодах и эффект будет интересный.

Простой VU Meter на Ардуино

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

Цель этого примера, показать, что можно сделать, имея результат измерения АЦП (код ниже):


void setup()
{
Serial.begin(9600); // Инициализация последовательного порта
pinMode(5,OUTPUT); // Зеленый LED
pinMode(6,OUTPUT); // Желтый LED
pinMode(7,OUTPUT); // Красный LED
}
void loop()
{
int pot = analogRead(A5); // Чтение с A5
if (pot > 10)
{ digitalWrite(5,HIGH); }
else
{ digitalWrite(5,LOW); }
if (pot > 500)
{ digitalWrite(6,HIGH); }
else
{ digitalWrite(6,LOW); }
if (pot > 1000)
{ digitalWrite(7,HIGH); }
else
{ digitalWrite(7,LOW); }
Serial.println(pot); // вывод в Serial порт значения с потенциометра
delay(10); // пауза
}

Как это работает?

Как видите, в функции setup() 3 строчки, в которых устанавливают контакты 5, 6, 7, как выходы. К ним подключаем через резисторы светодиоды. В loop () я добавил условный оператор (if), который в зависимости от того, какое значение получено от потенциометра, включает светодиод: зеленый, желтый или красный.

Я побуждаю вас, к сборке этой схемы на макетной плате, чтобы увидеть на практике, как это работает. Дополнительно нам потребуется:

  • Arduino UNO
  • Светодиод 3 шт. – лучше разные цвета
  • Резистор 3 шт. 150 – 220 ом,
  • Макетная плата
  • Провода соединительные

arduino-analogread-na-praktike-3

Надеюсь, что на приведенные выше примерах, мне удалось объяснить вам, как осуществляется измерение с помощью analogRead() и теперь вы более-менее знаете, как эти знания можно использовать в своих проектах.

Источник


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

Ваш электронный адрес не будет опубликован.

*