Мой первый проект после мигалок — фонарик с кнопкой. Кнопку я подключил, светодиод подключил, код взял из официального туториала. А дальше началось месиво: светодиод загорался сам, когда я просто подходил к столу; мигал, когда я касался провода; гас, когда я садился на стул. Я купил вторую кнопку. Потом третью. Кнопки были ни при чём.
Диагноз мне поставили на форуме в двух сообщениях: плавающий вход. Пин, ни к чему не подтянутый, читает случайные уровни — работает как антенна. Лечение стоило два рубля: резистор 10 кОм. А чтобы такие истории не повторялись, нужен был навык, которого мне тогда не хватило, — чтение схем: на принципиальной схеме подтяжка нарисована явно, и вопрос «куда девается случайность» решается за минуту.
В этом уроке выучим словарь обозначений — резистор, светодиод, кнопка, GND, VCC, узлы и точки; соберём по схеме связку «кнопка с подтяжкой плюс светодиод» на виртуальной плате; поймём, что такое плавающий вход, и закрепим кнопку скетчем-переключателем с защитой от дребезга.
Зачем схема, если есть фотография макетки
Фотография собранной макетки — плохая документация. Провода перекрывают друг друга, половина соединений скрыта под деталями, взгляду не за что зацепиться. Схема — честный список электрических связей без геометрии: на ней не видно, что где лежит, зато видно, что с чем соединено. Схему можно распечатать, перерисовать по памяти и показать человеку на другом конце мира — он соберёт ровно ту же цепь.
Мнение с оговоркой: новички схем побаиваются, потому что выглядят они как иероглифы. Но словарь крошечный — около десяти символов закрывают все учебные схемы, а логика чтения одна: идти по линиям и следить, где образуются узлы. Всё остальное — практика, и лучшая практика у вас уже есть: уроки про макетку и резисторы — это половина схемной грамотности.
Словарь: десять символов, которые закрывают 90% схем
Резистор рисуют прямоугольником — так принято в отечественных и европейских схемах — или зигзагом, это американский стиль; рядом подписывают номинал: «220» или «R1 10k». Светодиод — треугольник с чёрточкой на вершине и двумя стрелками наружу: стрелки показывают, что деталь светит, а направление треугольника — куда течёт ток. Кнопка — две точки и перекладина над ними: контакт замыкается нажатием.
| Символ на схеме | Что означает | Куда встанет на макетке |
|---|---|---|
| Прямоугольник или зигзаг с подписью номинала | Резистор | Двумя ножками в два соседних столбца |
| Треугольник с чёрточкой и стрелками наружу | Светодиод; ток — по направлению треугольника | Анод к резистору, катод к минусовой рейке |
| Две точки с перекладиной | Кнопка, замыкается при нажатии | Одна пара ножек в столбец с пином, другая — к земле |
| Три убывающие линии, подпись GND | Земля, общий минус | Синяя рейка, соединённая с GND Arduino |
| Линия вверх с подписью 5V или VCC | Плюс питания | Красная рейка от 5V Arduino |
| Жирная точка на пересечении линий | Соединение, узел | Один столбец макетки |
| Пересечение линий без точки | Провода не соединены | Разные столбцы, ничего общего |
Самые важные две строчки таблицы — про точки. Жирная точка на пересечении линий означает соединение; пересечение без точки — линии просто прошли мимо друг друга. Второе правило: значок GND может встречаться на схеме сколько угодно раз — это всё один и тот же узел, общий минус. Подпись экономит линии: вместо того чтобы тащить провод от каждой детали в один угол чертежа, художник ставит значок земли рядом с каждой. То же с подписями 5V и VCC — в учебных схемах это, как правило, одна и та же плюс-рейка.
Читаем схему кнопки с подтяжкой построчно
Классика жанра: пин D2 соединён с 5V через резистор 10 кОм; той же линией — с одной ножкой кнопки; вторая ножка кнопки уходит в GND. Светодиодная часть: пин D8 — резистор 220 Ом — анод светодиода, катод — в GND. Всё. Две ветки, четыре детали плюс Arduino.
Читаем как электрик. Узел номер один — пин D2: в нём встречаются три вещи — резистор подтяжки, ножка кнопки и сам пин. Пока кнопка отпущена, ток из 5 В течёт через 10 кОм в пин: вход читает HIGH. Нажали кнопку — узел D2 замкнулся на землю, вход читает LOW, а через подтяжку идёт жалкие 0,5 мА. Узел номер два — анод светодиода: пин D8 и резистор. Когда D8 включается, ток идёт по пути 5 В → пин 8 → 220 Ом → светодиод → GND, ограниченный до тех самых 14 мА из урока про резисторы.
Перевод в макетку — по узлам, не по линиям. Столбец A: провод от D2, ножка кнопки, ножка резистора 10 кОм — три вещи в одном узле, ровно как на схеме. Вторая ножка резистора — в красную рейку, вторая ножка кнопки — в синюю. Столбец B: провод от D8 и ножка резистора 220 Ом; вторая ножка резистора — в столбец C вместе с анодом светодиода; катод — в синюю рейку. Пять столбцов, ноль паек, схема воплощена.
// Схема: D2 -- 10 кОм -- 5V, D2 -- кнопка -- GND// Схема: D8 -- 220 Ом -- LED -- GND void setup() { pinMode(2, INPUT_PULLUP); // подтяжка со схемы: не нажата — HIGH pinMode(8, OUTPUT); Serial.begin(9600);} void loop() { if (digitalRead(2) == LOW) { // кнопка замкнула узел D2 на землю digitalWrite(8, HIGH); // ток: пин 8 -> 220 Ом -> LED -> GND } else { digitalWrite(8, LOW); } delay(10);}Плавающий вход: почему пин читает ветер
Цифровой вход Arduino — прибор с чудовищно высоким сопротивлением: он почти не потребляет ток, чтобы не влиять на измеряемую цепь. Оборотная сторона: если вход ни к чему не подтянут, он ловит всё, что летает в воздухе — наводки от сети 50 Гц, от вашего тела, от соседних проводов. Уровень на нём гуляет, и digitalRead отдаёт случайные нули и единицы. Это и есть плавающий вход — та болезнь, из-за которой мой фонарик включался от приближения руки.
Симптомы узнаваемы: без нажатия кнопки Serial сыплет и нулями, и единицами; светодиод на входе мерцает сам по себе; кнопка «срабатывает» от прикосновения к проводу. Диагностика мгновенная: поднесите палец к неподключенному пину — показания сойдут с ума. Лечение тоже мгновенное: подтяжка. Внешняя — резистор 10 кОм к 5 В, как на схеме выше. Внутренняя — режим INPUT_PULLUP: микроконтроллер ATmega328P подключает к входу собственный резистор примерно 20–50 кОм. Внутренняя даёт инвертированную логику — нажатая кнопка читается как LOW — зато не занимает места на макетке.
Почему случайность вообще возможна, если «в воздухе ноль вольт»? Потому что вход не мерит ноль — он сравнивает напряжение с порогом: ниже примерно 2 В — LOW, выше примерно 3 В — HIGH, а между ними — зона неопределённости, где вход может счесть уровень чем угодно. Плавающий вход живёт именно в этой серой зоне и барахтается в ней от помехи к помехе. Подтяжка вытаскивает уровень из серой зоны и держит его там, где мы сказали: у кнопки с подтяжкой к 5 В — на HIGH до нажатия.
Мой порядок перевода схемы в макетку
Со временем перевод станет рефлексом, а на первых порах держите порядок из шести шагов — он экономит и время, и детали:
- Подайте питание на рейки: провод от 5V к красной, от GND — к синей. До подключения USB можно смело расставлять всё остальное.
- Разметьте узлы по схеме: для каждого узла — свой столбец. Проверка на глаз: сколько соединений нарисовано в узле, столько ножек и проводов должно оказаться в столбце.
- Расставьте детали, начиная с крупных: микросхемы — поперёк канавки, резисторы и кнопки — между соседними столбцами.
- Соедините узлы с рейками: подтяжки — к красной, «низы» деталей — к синей.
- Пройдитесь глазами по каждому столбцу и сверьте узел за узлом — так же, как мы читали схему кнопки.
- Подключите питание и щупайте: ничего не греется, светодиоды ведут себя по сценарию. Горячее — сразу выключаем.
Дребезг: мелочь, о которой схема не расскажет
Схема кнопки с подтяжкой электрически безупречна, но у кнопки есть механика, и она врёт: контакты при нажатии дребезжат — размыкаются и замыкаются несколько раз за 1–20 миллисекунд. Для фонарика из первого скетча это невидимо, но как только код начнёт считать нажатия, каждое нажатие окажется десятью — и переключатель будет переключать в случайную сторону.
Классическое лечение: убедиться, что уровень держится стабильно 50–60 мс, и только потом считать состояние изменившимся. Именно это делает скетч выше с таймером на millis(): цикл крутится без блокирующих delay и не пропустит даже быстрое нажатие. С millis() вы ещё плотно познакомитесь в разделе «Продвинутая платформа» — а здесь важно само ощущение, что схема и механика — два разных источника сюрпризов.
Собери цепь светодиода и кнопки перетаскиванием: от ноги платы к дырке, чек-лист проверит каждую связь.
Подгружаем интерактив…
- Схема — список электрических связей без геометрии; фотография макетки — плохая документация
- Жирная точка на пересечении — соединение; без точки — провода прошли мимо
- Все GND на схеме — один общий узел; все 5V/VCC — одна плюс-рейка
- Кнопка с подтяжкой 10 кОм: не нажата — HIGH на входе, нажата — LOW и 0,5 мА через подтяжку
- Плавающий вход ловит помехи и читает случайные уровни; лечится подтяжкой — внешней или INPUT_PULLUP
- Механический дребезг 1–20 мс лечится проверкой стабильности уровня на millis()
- 1. Две линии пересекаются на схеме, точки на пересечении нет. Это...
- 2. На схеме пять значков GND в разных местах. Сколько это узлов?
- 3. Кнопка с подтяжкой 10 кОм к 5 В. Что вернёт digitalRead, пока кнопку не нажали?
- 4. Кнопку никто не трогает, а Serial сыплет случайные нули и единицы. Диагноз?
- 5. Что делает pinMode(2, INPUT_PULLUP)?
- 6. Как на схемах рисуют резистор?
Раздел «Макетирование и схемы» завершён: у вас в руках макетка, которую вы понимаете изнутри, глаза, читающие кольца резисторов, и словарь схемных символов. Дальше по курсу — «Продвинутая платформа»: неблокирующие задержки на millis(), ШИМ и прерывания, тот инструментарий, который превратит связки «кнопка плюс светодиод» в устройства с характером. А фонарик из начала урока у меня до сих пор работает — на третьей кнопке, той самой, что оказалась ни при чём.
Частые вопросы по теме урока
- Две линии пересекаются на схеме, точки на пересечении нет. Это...
- Точка — обязательный знак соединения. Без неё линии просто прошли рядом, и в макетке их втыкать в один столбец нельзя. Провода не соединены
- На схеме пять значков GND в разных местах. Сколько это узлов?
- Все значки GND обозначают один общий минус. На макетке это синяя рейка, соединённая с GND Arduino. Один общий
- Кнопка с подтяжкой 10 кОм к 5 В. Что вернёт digitalRead, пока кнопку не нажали?
- Подтяжка держит вход на плюсе: отпущенная кнопка — HIGH, нажатая — LOW. HIGH
- Кнопку никто не трогает, а Serial сыплет случайные нули и единицы. Диагноз?
- Неподтянутый вход ловит наводки и читает случайные уровни. Лечение — резистор 10 кОм к 5 В или режим INPUT_PULLUP. Плавающий вход без подтяжки
- Что делает pinMode(2, INPUT_PULLUP)?
- ATmega328P подключает к входу собственный резистор подтяжки. Логика инвертируется: нажатие притягивает пин к земле и читается как LOW. Подключает внутреннюю подтяжку 20–50 кОм; нажатая кнопка даёт LOW
- Как на схемах рисуют резистор?
- Оба стиля означают одно и то же; рядом всегда подписан номинал или позиционное обозначение вроде R1. Прямоугольником (Европа и ГОСТ) или зигзагом (США)