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

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

Небольшая цена деления шкалы позволяет с большой точностью получать значения практически любой физической величины. Чтобы считать показания на аналоговом входе следует использовать функцию analogRead. Аналоговые порты, как цифровые Ардуино можно сделать с помощью команды digitalRead — используется для считывания данных с кнопки и digitalWrite — можно подключить светодиод.
Светильник с управляемой яркостью Ардуино
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- макетная плата;
- потенциометр;
- 1 светодиод и резистор 220 Ом;
- провода «папа-папа».
На этом занятии мы соберем электрическую схему светильника со светодиодом с управляемой яркостью. С помощью потенциометра мы сможем плавно изменять яркость светодиода, подключенного к пину 9. Потенциометр подключается крайними ножками к портам 5V и GND, со средней ножки снимается значение напряжения и подключается к аналоговому входу A0 микроконтроллера Ардуино.

Соберите электрическую цепь, как на рисунке. Средняя ножка переменного резистора подключается к аналоговому порту 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); }
Пояснения к коду:
- с помощью директивы
#defineмы заменили номер пина 9 на имяLED_PIN, аналоговому входуA0мы задали имяPOT_PIN; - локальная переменная
rotationпропорциональна напряжению и находится в интервале от 0 до 1023 (минимальное и максимальное значение АЦП); - переменная
brightnessравнаrotationделённое на 4 и находится в пределах от 0 до 255 (минимальное и максимальное значение аналогового входа).










Здравствуйте, а что будет, если в скетче не прописывать такие команды как pinMode(LED_PIN, OUTPUT) и pinMode(POT_PIN, INPUT)?
LED_PIN и POT_PIN можно заменить на 9 и A0, чтобы не использовать #define. Если удалить полностью обе команды, то скетч не будет работать.
Всегда хотел спросить, почему во всех Ардуино АЦП 10 битный (делит сигнал на 1023 части), А ЦАП 8 битный (делит сигнал на 256 частей) ?
Здравствуйте. С работой аналоговых входов ясно, но есть такая проблема совсем сломал голову- как это реализовать: есть 4 кнопки которые подключены через разные номиналы резисторов не А0. как реализовать такой алгоритм: нажил и отпустил 1 кнопку мк запомнил, что она была нажата и вывел текст на LCD1602 » кнопка 1″. Так для для №2 и №3 а №4 стирает LCD и запускает опрос кнопок 1-2-3.
Посмотрите информацию про кнопки и меню на дисплее
Здравствуйте. Хотел спросить, как мне записать в скетче, чтобы при достижении напряжения от 2 до 2,5 В на аналоговом входе, светодиод загорелся, а при больше 2,5 В и меньше 2 В в гас. Делаю так
if (450< Val< 520) "LED =HIGH
Но не работает. Нужно ли подключать функцию analogReferense(DEFAULT),?
Правильно будет так: if (450< Val< 520) { digitalWrite(LED, HIGH); } Посмотрите подключение фоторезистора к аналоговым портам
Здравствуйте, хотел спросить, как вообще научиться писать скетч для ардуино, я ноыичок и вообще не знаю что к чему