03. Ввод сигналов, ШИМ
Кнопка, потенциометр, фоторезистор. ШИМ (analogWrite)
Тема: Считывание сигналов с кнопки, потенциометра и фоторезистора. Цифровой и аналоговый вход. ШИМ и плавная регулировка яркости.
Цель: научить детей не только управлять выводами, но и принимать информацию из внешнего мира; ввести digitalRead, analogRead, analogWrite, понятия подтяжки, делителя напряжения и ШИМ; закрепить работу с макетной платой и константами #define.
Оборудование: Arduino UNO, USB-кабель, макетная плата, провода, светодиоды (красный, жёлтый, зелёный), резисторы 220 Ом, резистор 10 кОм, кнопка, потенциометр, фоторезистор.
Ход урока
1. Повторение (5 мин)
- Что мы уже умеем? Управлять внешними объектами: светодиодами и RGB-модулем.
- Вспомнить:
#define, pinMode(..., OUTPUT), digitalWrite, HIGH, LOW, delay.
- Вопрос: а как Arduino узнаёт, что происходит вокруг неё? Как узнать, нажата ли кнопка, светло ли в комнате?
2. Выход и вход. Цифровой и аналоговый сигнал (7 мин)
- До сих пор выводы работали как выход (от англ. output — «выход»). Arduino подавала сигнал наружу.
- Теперь выводы будут работать как вход (от англ. input — «вход»). Arduino будет читать сигнал снаружи.
- Сигналы бывают двух видов:
- Цифровой — только два состояния:
HIGH (высокий, 5 В) или LOW (низкий, 0 В). Пример: кнопка нажата / не нажата.
- Аналоговый — плавно меняется в диапазоне. Пример: яркость света, положение ручки потенциометра.
- Объяснение названий:
digital — от англ. digital — «цифровой». Работает с двумя значениями.
analog — от англ. analog — «аналоговый». Работает с плавно меняющимся значением.
read — от англ. read — «читать». Считывает значение с вывода.
write — от англ. write — «записывать». Подаёт значение на вывод.
3. Кнопка и digitalRead (10 мин)
- Кнопка (от фр. bouton — «пуговица») — простой переключатель. Нажата — контакт замкнут, отпущена — разомкнут.
- Подключаем: одну ножку кнопки → к пину Arduino, другую → к GND.
- Проблема: если пин ни к чему не подключён, он «висит в воздухе» и читает случайные значения. Такое состояние называют плавающим.
- Решение — подтяжка: слабый резистор внутри платы «подтягивает» пин к 5 В. В Arduino это делают одной строкой:
pinMode(BTN, INPUT_PULLUP);
- Объяснение названий:
INPUT — от англ. input — «вход». Пин работает как вход.
PULL — от англ. pull — «тянуть». Резистор «тянет» пин к питанию.
UP — от англ. up — «вверх». Тянет к высокому уровню 5 В.
- Как читать: не нажата →
HIGH, нажата → LOW (потому что кнопка замыкает пин на GND).
- Внимание: если вход имеет подтяжку, то
HIGH и LOW читаются наоборот по сравнению с выходом. Это важно запомнить.
4. Практика 1: кнопка включает светодиод (8 мин)
Подключение:
- Красный светодиод через резистор 220 Ом → пин 3
- Кнопка: одна ножка → пин 2, другая → GND

#define LED_R 3
#define BTN 2
void setup() {
pinMode(LED_R, OUTPUT);
pinMode(BTN, INPUT_PULLUP);
}
void loop() {
int state = digitalRead(BTN);
if (state == LOW) {
digitalWrite(LED_R, HIGH);
} else {
digitalWrite(LED_R, LOW);
}
}
Разбор нового:
int state — переменная. int — от англ. integer — «целое число». Хранит целое значение.
digitalRead(BTN) — читает сигнал с пина кнопки.
if ... else — от англ. if — «если», else — «иначе». Условие: если кнопка нажата — включить, иначе — выключить.
Задание: добавить второй светодиод на другой пин и включать его по нажатию второй кнопки.
5. Потенциометр и analogRead (10 мин)
- Потенциометр (от лат. potentia — «сила, мощность» + греч. metron — «мера») — это переменный резистор. Крутишь ручку — меняется сопротивление, а значит и напряжение на среднем выводе.
- У потенциометра три вывода: крайние — к 5V и GND, средний — к аналоговому входу Arduino.
- Аналоговый вход — это пины A0…A5. Они читают напряжение и превращают его в число от 0 до 1023.
- 0 В → 0
- 5 В → 1023
- 2,5 В → примерно 512
- Читаем командой
analogRead(A0).
- Объяснение: почему 1023? Arduino использует 10-битный аналого-цифровой преобразователь (АЦП). 2¹⁰ = 1024, значит значения от 0 до 1023.
6. ШИМ и analogWrite (7 мин)
- Чтобы плавно менять яркость, нельзя просто подать
HIGH или LOW — нужен промежуточный уровень.
- Arduino умеет это делать через ШИМ — широтно-импульсная модуляция.
Англ. PWM — Pulse Width Modulation: pulse — «импульс», width — «ширина», modulation — «модуляция». Пин очень быстро включается и выключается, а скважность задаёт среднюю яркость.
- Значения для
analogWrite — от 0 до 255 (8 бит, 2⁸ = 256).
- Важно:
analogWrite работает только на пинах с пометкой ~ (на UNO это 3, 5, 6, 9, 10, 11).
- Связь диапазонов:
analogRead → 0…1023
analogWrite → 0…255
- Чтобы перевести одно в другое, значение делят на 4 (или используют функцию
map).
7. Практика 2: потенциометр плавно регулирует яркость (10 мин)
Подключение:
- Красный светодиод через резистор 220 Ом → пин 3 (с пометкой ~)
- Потенциометр: крайние выводы → 5V и GND, средний → A0

#define LED_R 3
#define POT A0
void setup() {
pinMode(LED_R, OUTPUT);
}
void loop() {
int value = analogRead(POT); // 0..1023
int bright = value / 4; // 0..255
analogWrite(LED_R, bright);
}
Задание: сделать так, чтобы при повороте ручки менялся цвет RGB-модуля (например, R плавно растёт, B плавно падает).
8. Фоторезистор и делитель напряжения (8 мин)
- Фоторезистор — от греч. phos — «свет» + лат. resisto — «сопротивляюсь». Его сопротивление меняется от освещения: светло — сопротивление маленькое, темно — большое.
- Английское название — LDR (Light Dependent Resistor): light — «свет», dependent — «зависимый», resistor — «резистор».
- Чтобы Arduino могла прочитать его значение, собираем делитель напряжения: фоторезистор и обычный резистор 10 кОм последовательно. Средняя точка — к аналоговому входу.
- Чем больше света, тем меньше сопротивление фоторезистора и тем выше напряжение на входе.
9. Практика 3: ночник (10 мин)
Подключение:
- Красный светодиод через резистор 220 Ом → пин 3
- Фоторезистор + резистор 10 кОм (делитель) → средняя точка к A1

#define LED_R 3
#define LDR A1
void setup() {
pinMode(LED_R, OUTPUT);
}
void loop() {
int light = analogRead(LDR);
if (light < 300) {
digitalWrite(LED_R, HIGH);
} else {
digitalWrite(LED_R, LOW);
}
}
Задание: подобрать порог так, чтобы ночник включался именно в темноте. Заменить digitalWrite на analogWrite, чтобы яркость зависела от освещённости (чем темнее — тем ярче).
10. Практика 4: одновременная работа (5 мин)
- В одном скетче объединить:
- кнопка → включает жёлтый светодиод;
- потенциометр → регулирует яркость красного;
- фоторезистор → включает зелёный в темноте.
- Проверить, что все три входа и три выхода работают независимо.

11. Вопросы для обсуждения (5 мин)
- Чем вход отличается от выхода?
- Чем цифровой сигнал отличается от аналогового?
- Что такое плавающий пин и как от него избавиться?
- Что означает
INPUT_PULLUP? Почему при нажатии читается LOW, а не HIGH?
- Какой диапазон значений у
analogRead и analogWrite?
- Почему
analogWrite работает не на всех пинах?
- Что такое делитель напряжения и зачем он нужен с фоторезистором?
- Что делает
if ... else?
12. Итог и рефлексия (5 мин)
- Что нового узнали о вводе сигналов?
- Что было самым интересным?
- Какие правила подключения запомнили?
- Домашнее задание: придумать, как использовать кнопку и потенциометр вместе, и описать идею проекта.
Ключевые слова для запоминания
Вход, выход, INPUT, INPUT_PULLUP, подтяжка, плавающий пин, digitalRead, analogRead, analogWrite, ШИМ, PWM, АЦП, диапазон 0…1023, диапазон 0…255, int, if, else, потенциометр, фоторезистор, LDR, делитель напряжения, кнопка, BTN, POT, LDR, LED_R.