Аналоговые порты на Ардуино

Рассмотрим работу аналоговых портов Arduino A0-A5 ► разберем, что к можно подключать к аналоговому входу. Соберем схему светильника с управляемой яркостью.

На этом занятии рассмотрим, аналоговые порты Arduino A0-A5. Разберем принцип работы аналоговых портов, что к ним можно подключать. Соберем с помощью макетной платы схему светильника с управляемой яркостью, чтобы с помощью потенциометра (переменного резистора) можно было изменять яркость свечения светодиода. Рассмотрим директиву #define и analogRead в языке Ардуино IDE.

Устройство и принцип работы потенциометра

Переменный резистор (потенциометр) поворотом ручки изменяет сопротивление в электрической цепи от нуля до номинального сопротивления в 10 кОм. Потенциометр сделан состоит из токопроводящей поверхности — плоского постоянного резистора с двумя контактами и скользящего по поверхности токосъемника. Потенциометр предназначен для точной регулировки напряжения в электрической цепи.

Со средней ножки потенциометра снимают значение напряжения
Со средней ножки потенциометра снимают значение напряжения

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

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

Аналоговые входы на Ардуино

Микроконтроллер Atmega в Arduino, содержит шестиканальный аналого-цифровой преобразователь (АЦП). Разрешение преобразователя составляет 10 бит, что позволяет получать значения от 0 до 1023. Основным применением аналоговых входов Ардуино (A0 — A5 в Arduino UNO) является снятие значений с аналоговых датчиков. Рассмотрим применение аналогового входа для снятия показаний с потенциометра.

Аналоговые порты можно настроить, как цифровые
Аналоговые порты можно настроить, как цифровые

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

Светильник с управляемой яркостью Ардуино

На этом занятии мы соберем электрическую схему светильника со светодиодом с управляемой яркостью. С помощью потенциометра мы сможем плавно изменять яркость светодиода, подключенного к пину 9. Потенциометр подключается крайними ножками к портам 5V и GND, со средней ножки снимается значение напряжения и подключается к аналоговому входу A0 микроконтроллера Ардуино.

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • потенциометр;
  • 1 светодиод и резистор 220 Ом;
  • провода «папа-папа».
Схема сборки светильника с управляемой яркостью
Схема сборки светильника с управляемой яркостью

Соберите электрическую цепь, как на рисунке. Средняя ножка переменного резистора подключается к аналоговому порту A0, чтобы снимать показания напряжения. Какую из крайних ножек подключить к портам 5V и GND значения не имеет, изменится лишь направление вращения ручки потенциометра для увеличения яркости светодиода. После сборки схемы, подключите Arduino к компьютеру и загрузите скетч.

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

// Присваиваем имя для пина со светодиодом (англ. «led»)
#define LED_PIN 9

// Присваиваем имя для пина с потенциометром (англ. «potentiometer»)
#define POT_PIN A0

void setup()
{
  // пин со светодиодом будет выходом (англ. «output»)
  pinMode(LED_PIN, OUTPUT);

  // пин с потенциометром будет входом (англ. «input»)
  pinMode(POT_PIN, INPUT);
  
  // Запускаем монитор последовательного порта
  // снимите комментарий // Serial.begin(9600);
}

void loop()
{
  // заявляем, что будем использовать 2 переменные - rotation и brightness
  // хранить в переменных будем только целые числа (англ. «integer»)
  int rotation, brightness;  

  // rotation равна значениям с потенциометра в интервале от 0 до 1023
  rotation = analogRead(POT_PIN);

  // переменная brightness будет равна rotation делённое на 4
  // brightness может быть только целым числом, дробная часть будет отброшена
  // в итоге переменная brightness будет находится в пределах от 0 до 255
  brightness = rotation / 4;

  // выдаём напряжение, рассчитанное по формуле brightness = rotation / 4
  analogWrite(LED_PIN, brightness);
  
  // Выдаем значение rotation на монитор последовательного порта
  // снимите комментарий // Serial.println(rotation);
  // снимите комментарий // delay(1000);
}

Пояснения к коду:

  1. с помощью директивы #define мы заменили номер пина 9 на имя LED_PIN, аналоговому входу A0 мы задали имя POT_PIN;
  2. локальная переменная rotation пропорциональна напряжению и находится в интервале от 0 до 1023 (минимальное и максимальное значение АЦП);
  3. переменная brightness равна rotation делённое на 4 и находится в пределах от 0 до 255 (минимальное и максимальное значение аналогового входа).
1 Star2 Stars3 Stars4 Stars5 Stars (3 votes, average: 5,00 out of 5)
Загрузка...

Похожие записи по теме:

3 комментариев для “Пример: Аналоговые порты на Ардуино”

  1. Здравствуйте, а что будет, если в скетче не прописывать такие команды как pinMode(LED_PIN, OUTPUT) и pinMode(POT_PIN, INPUT)?

    1. LED_PIN и POT_PIN можно заменить на 9 и A0, чтобы не использовать #define. Если удалить полностью обе команды, то скетч не будет работать.

  2. Всегда хотел спросить, почему во всех Ардуино АЦП 10 битный (делит сигнал на 1023 части), А ЦАП 8 битный (делит сигнал на 256 частей) ?

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *