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 обозначаются какA0–A5, а не просто0–5. - Значения скачут и нестабильны — возможно, средний вывод потенциометра плохо контактирует с макетной платой. Попробуйте слегка подвигать провод.
- С фоторезистором диапазон слишком узкий — подберите номинал постоянного резистора под условия освещения. При очень ярком свете попробуйте увеличить R2 до 47–100 кОм.
- Пин 13 не работает как выход — убедитесь, что в
setup()вызванpinMode(ledPin, OUTPUT).
Как проверить результат
Поверните потенциометр в одно крайнее положение — светодиод должен мигать очень быстро (или гореть почти непрерывно). В другое крайнее — мигать медленно, примерно раз в секунду. Откройте Serial Monitor и добавьте Serial.println(sensorValue) после analogRead(), чтобы видеть числовые значения в реальном времени.
Дополнительные материалы
Больше базовых уроков вы найдёте в разделе built-in examples.
Также рекомендуем изучить language reference — подробный справочник по языку программирования Arduino.
Последнее обновление: 28.07.2015, SM