Главная chevron_right Уроки chevron_right Встроенные примеры chevron_right Аналоговые примеры chevron_right Analog Input — управление миганием светодиода через потенциометр

Analog Input — управление миганием светодиода через потенциометр

Подключите потенциометр или фоторезистор к аналоговому входу Arduino и управляйте частотой мигания встроенного светодиода.

В этом уроке мы подключим переменный резистор — потенциометр или фоторезистор — к аналоговому входу Arduino и будем менять скорость мигания светодиода в зависимости от его положения или освещённости. Аналоговый вход читает напряжение на пине и преобразует его в число — именно так работает analogRead().

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

  • Потенциометр или
  • Фоторезистор 10 кОм и резистор 10 кОм
  • Встроенный светодиод на пине 13 или
  • Резистор 220 Ом и красный светодиод

Схема подключения

С потенциометром

Схема подключения потенциометра к Arduino UNO на макетной плате: крайние выводы потенциометра идут на GND и 5V, средний — на A0.

С фоторезистором

Схема подключения фоторезистора и резистора 10 кОм к Arduino UNO: делитель напряжения подаёт сигнал на A0.

Для потенциометра соедините три провода с платой Arduino:

  • первый — от одного крайнего вывода потенциометра к GND;
  • второй — от другого крайнего вывода к 5V;
  • третий — от среднего вывода (ползунка) к аналоговому входу A0.

Для светодиода можно использовать встроенный на пине 13. Если хотите подключить внешний — соедините длинную ногу (анод) через резистор 220 Ом с пином 13, а короткую ногу (катод) — с GND.

Почему фоторезистору нужен делитель напряжения

Аналоговые входы Arduino имеют очень высокое входное сопротивление и почти не потребляют ток. Если подключить фоторезистор напрямую к 5V и A0, то по закону Ома напряжение на входе всегда будет близко к 5 В вне зависимости от сопротивления резистора — измерение потеряет смысл.

Решение — делитель напряжения: фоторезистор (R1) и постоянный резистор 10 кОм (R2) включаются последовательно между 5V и GND, а точка между ними подаётся на A0. Напряжение на входе считается по формуле:

Vout = Vin × (R2 / (R1 + R2))

где Vin = 5 В, R2 = 10 кОм, а R1 — сопротивление фоторезистора: от ~1 МОм в темноте до ~10 кОм при нормальном освещении и менее 1 кОм на ярком свету или солнце.

Принципиальная схема

Потенциометр

На схеме обозначен POTENTIOMETER (потенциометр), подключённый между 5V и GND, с выводом ползунка на A0.

Фоторезистор

На схеме обозначены PHOTORESISTOR (фоторезистор) и резистор 10 кОм (10kΩ RESISTOR), образующие делитель напряжения на входе A0.

Код

В начале скетча переменная sensorPin задаётся как аналоговый пин A0 (туда подключён потенциометр или фоторезистор), а ledPin — как цифровой пин 13 (светодиод). Переменная sensorValue будет хранить значение, считанное с датчика.

Команда analogRead() преобразует напряжение на входе (от 0 до 5 В) в целое число от 0 до 1023. Это делает встроенный в микроконтроллер аналого-цифровой преобразовательADC.

Когда вы поворачиваете ось потенциометра, меняется сопротивление между ползунком и крайними выводами — а значит, меняется и напряжение на A0:

  • в одном крайнем положении напряжение равно 0 В, и analogRead() возвращает 0;
  • в другом крайнем положении напряжение равно 5 В, и analogRead() возвращает 1023;
  • в промежуточных положениях analogRead() возвращает число пропорционально напряжению.

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

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

analogRead() опрашивает АЦП и возвращает число от 0 до 1023 — это 10-битное разрешение (2¹⁰ = 1024 градации). Полученное число напрямую передаётся в delay(), поэтому пауза между переключениями светодиода меняется от 0 до 1023 миллисекунд — то есть от почти мгновенного мигания до примерно одного раза в две секунды.

Типичные ошибки

  • Светодиод не мигает или мигает с постоянной скоростью — проверьте, правильно ли указан номер пина в sensorPin. Аналоговые пины на Arduino UNO обозначаются как A0A5, а не просто 05.
  • Значения скачут и нестабильны — возможно, средний вывод потенциометра плохо контактирует с макетной платой. Попробуйте слегка подвигать провод.
  • С фоторезистором диапазон слишком узкий — подберите номинал постоянного резистора под условия освещения. При очень ярком свете попробуйте увеличить R2 до 47–100 кОм.
  • Пин 13 не работает как выход — убедитесь, что в setup() вызван pinMode(ledPin, OUTPUT).

Как проверить результат

Поверните потенциометр в одно крайнее положение — светодиод должен мигать очень быстро (или гореть почти непрерывно). В другое крайнее — мигать медленно, примерно раз в секунду. Откройте Serial Monitor и добавьте Serial.println(sensorValue) после analogRead(), чтобы видеть числовые значения в реальном времени.

Дополнительные материалы

Больше базовых уроков вы найдёте в разделе built-in examples.

Также рекомендуем изучить language reference — подробный справочник по языку программирования Arduino.

Последнее обновление: 28.07.2015, SM