Ночник на макетке проработал ровно два вечера, а на третий начал включаться через раз. Я крутил задержки в коде, перезаливал скетч дважды, проверял пин — всё было правильно и всё было бесполезно. На четвёртый вечер я понял закономерность: схема гасла, когда я подходил к столу. Шаги по полу чуть-чуть трясли макетку, и этого хватало: одна ножка в одном столбце теряла соседа по узлу. Никакой код тут ни при чём — я два вечера чинил программу, которой не существовало.
Такие сюрпризы — плата за главное удобство беспаечной макетки. Каждый контакт тут пружинный лепесток, который держит ножку трением, и любое ослабление трения превращается в случайность. В отличие от ошибки в скетче, железная случайность не ловится компилятором: схема то работает, то нет, и это сбивает с толку сильнее полной тишины. Плохой контакт — самая частая причина «сломанных» сборок у новичков, и искать её надо глазами и пальцами, а не в мониторе порта.
Разберём три диагноза, которые дают девять десятых таких историй: разболтанный контакт, обрыв и перегрев. Для каждого — симптом, проверка и лечение. Из этого урока вырастает рабочая привычка: собрал — прозвони — только потом подай питание. Отправной точкой будет устройство платы из урока про макетку изнутри: без понятия узла диагностика превращается в тыканье наугад.
Три диагноза: плохой контакт, обрыв, перегрев
Плохой контакт — это соединение, которое есть, но через сопротивление. Пружинный лепесток разболтался от частых перестановок, ножка детали тоньше стандартной (у самодельных выводов и дешёвых модулей бывает 0,4 мм вместо 0,6), окислилась поверхность — и место стыка начинает недодавлять. Схема продолжает работать, потому что сигнал всё же проходит, но по пути теряет часть себя. Коварство в том, что симптом плавает: то всё идеально, то гаснет от вибрации.
Обрыв — это соединение, которого нет. Провод выпал из столбца, жила перемычки надломилась внутри изоляции (внешне провод целый!), деталь воткнулась мимо узла — по одной ножке в каждый столбец через канавку. Тут картина честнее: узел мёртв всегда, а не через раз. Самый противный подвид — надломленная жила: она соприкасается волосками, и контакт есть, пока провод лежит спокойно.
Перегрев — уже не тишина, а пожарная сигнализация. Тёплый резистор — норма, тёплый провод или рейка — авария: где-то через это место идёт ток, в разы больше расчётного, обычно из-за короткого замыкания по соседству. Перегрев ловится пальцем и носом — запах тёплой изоляции не спутаешь ни с чем. Ниже — таблица, по которой я ставлю диагноз за пару минут.
| Симптом | Диагноз | Проверка |
|---|---|---|
| Работает, пока не трогаешь плату | плохой контакт в узле | шевели детали по одной: виновник отзовётся сразу |
| Узел мёртв всегда, код верный | обрыв провода или вывода | прозвонка цепи мультиметром при выключенном питании |
| Схема гаснет от вибрации стола | надломленная жила или разболтанный лепесток | шевели провода по одному, начиная с самых длинных |
| Провод или модуль тёплый, пахнет изоляцией | короткое замыкание рядом | выключить питание немедленно, искать замкнутые узлы глазами |
| Половина макетки молчит | разорванная половина рейки | перемычка между половинами, проверка описана в уроке про шины |
| Плата периодически отваливается от USB | затесалось замыкание, предохранитель щёлкает | обесточить и прозвонить рейки между собой |
Почему светодиоду всё равно, а серво — нет
Числа объясняют, почему одна и та же грязь в узле ведёт себя по-разному. Плохой контакт даёт сопротивление от долей ома до десятков ом — зависит от площади касания и окислов. Пропустим через него ток светодиода: 15–20 мА. При пяти омах закон Ома, который мы считали в уроке про ток, отдаёт падение 0,075–0,1 В — светодиод даже не заметит, что что-то не так.
А теперь то же самое место в цепи питания сервопривода, который в момент движения тянет 300–500 мА. На тех же пяти омах просадка уже 1,5–2,5 В: серво, рассчитанное на 5 В, получает три с половиной, сдается и дёргается. Сопротивление одно и то же, а последствия зависят от тока — поэтому первым делом я смотрю, что именно питается через подозрительный узел. Если там светодиод — проблемы можно месяц не замечать; если мотор, серво или лента — схема развалит себя за секунды. Похожая история с дёргающимся приводом разобрана в уроке про серво и помехи, там же про чистку питания.
Отсюда практический вывод, который экономит вечера: если «глючит» мощная нагрузка, а код прост как два байта, начинай с контактов в силовой цепи, а не с программы. Дребезг кнопки — родственный случай: контакт на доли миллисекунды гуляет сам по себе, и лечится он в уроке про антидребезг — но там виновата физика кнопки, а не лепесток макетки.
Порядок диагностики: глаза, шевеление, прозвонка
Диагностику я веду в одном и том же порядке, от дешёвого к дорогому. Шаг первый — глаза: при выключенном питании пройтись взглядом по каждому узлу, что в нём сидит и что должно сидеть. Половина находок на этом шаге: провод воткнут в соседний столбец, ножка мимо канавки, деталь перекочевала при перестановке. Шаг второй — шевеление при работающей схеме: палец поочерёдно гнёт каждую перемычку и каждую деталь на полмиллиметра. Отозвалось — виновник найден, диагноз «плохой контакт» или «надлом».
Шаг третий — прозвонка мультиметром в режиме звукового теста, питание выключено. Ставишь щупы на два конца подозрительной цепи: писк — соединение есть, тишина — обрыв. Прозванивать удобно от рейки до конкретного столбца: минусовая шина до ножки светодиода, плюсовая до входа модуля. Метод «от шины вглубь» находит обрыв за три-четыре замера, а не за тридцать. Замеры между красной и синей рейкой — отдельная история: писк между ними означает короткое замыкание, и это как раз тот случай, когда плата отваливается от USB.
Есть и электрический способ поймать перезагрузки без мультиметра — заставить плату сама себя отчитываться. Если схема внезапно перезапускается (замыкание, просадка, перегрев), скетч стартует заново и печатает строку запуска ещё раз: лишние строки в мониторе — улика.
unsigned long sek = 0; void setup() { pinMode(13, OUTPUT); Serial.begin(9600); Serial.println("start=1"); // здоровая схема печатает это один раз} void loop() { digitalWrite(13, HIGH); delay(300); digitalWrite(13, LOW); delay(300); if (millis() - sek >= 5000) { Serial.print("rabota="); Serial.println(millis() / 1000); // секунд без перезагрузки sek = millis(); }}Читается такой лог просто: start=1 в начале и дальше rabota=5, rabota=10 — схема живёт. Если между рабочими строками выскочила вторая start=1 — счёт времени сбросился, плата перезапускалась, и искать надо питание, а не логику. Счётчик на миллисах построен по правилам из урока про millis вместо delay, поэтому маячок не мешает основной программе.
Перегрев заслуживает отдельной строки в этом списке, потому что лечится только профилактикой. Греются три вещи: резисторы, через которые честно идёт расчётный ток (тёплые — нормально), регулятор платы при тяжёлой нагрузке и провода с контактами при замыкании. Тест ладонью простой: палец держится спокойно две секунды — всё в порядке, отдёргиваешь сразу — выключай и ищи причину. По поводу «вздувающихся» электролитов и их полярности на рейках есть отдельный урок про полярность шин — там же про порядок подключения питания в конце сборки.
В симуляторе ниже — прозвонка в движении: кнопка изображает проверяемый контакт, светодиод подтверждает, а счётчик переходов показывает, сколько раз соединение меняло состояние за секунду. На настоящей макетке, когда контакт болтается, этот счётчик растёт сам, без твоего участия, — это и есть улика.
- 1. Схема работает, пока никто не прикасается к макетке, и гаснет от лёгкой вибрации. Что проверять первым?
- 2. Через один и тот же подозрительный узел питаются светодиод и сервопривод. Почему светодиод работает нормально, а серво дёргается?
- 3. В мониторе порта среди рабочих строк rabota=5, rabota=10 появилась вторая строка start=1. О чём это говорит?
- 4. Какой симптом указывает на короткое замыкание, а не на плохой контакт?
- 5. Почему надломленная внутри изоляции жила опаснее выпавшего провода?
- «Работает, пока не трогаешь» — это плохой контакт; «мёртв всегда» — обрыв; «тепло и пахнет» — замыкание.
- Последствия плохого контакта зависят от тока: светодиоду 5 Ом безразличны, сервопривод на 5 Ом проседает на 2 В.
- Порядок диагностики: глаза по узлам, шевеление при питании, прозвонка при выключенном, от рейки вглубь.
- Повторная строка start=1 в мониторе — улика перезагрузки; питание проверяем раньше логики.
- Провода, которые часто перегибались, держи отдельно и проверяй шевелением в первую очередь.
Частые вопросы по теме урока
- Схема работает, пока никто не прикасается к макетке, и гаснет от лёгкой вибрации. Что проверять первым?
- Симптом «работает, пока не трогаешь» — визитная карточка плохого контакта. Код тут ни при чём: компилятор не видит железо. плохой контакт в узле: шевелить перемычки по одной
- Через один и тот же подозрительный узел питаются светодиод и сервопривод. Почему светодиод работает нормально, а серво дёргается?
- 5 Ом при 20 мА съедают 0,1 В — незаметно; те же 5 Ом при 400 мА съедают 2 В — серво недоедает и дёргается. сервопривод сломан, нужен новый
- В мониторе порта среди рабочих строк rabota=5, rabota=10 появилась вторая строка start=1. О чём это говорит?
- setup() выполняется один раз на загрузку. Повторная строка запуска — след перезагрузки, виновато железо, а не логика. плата перезагружалась — искать проблему в питании или замыкание
- Какой симптом указывает на короткое замыкание, а не на плохой контакт?
- Греющийся провод — авария: ток идёт мимо деталей. Выключай питание немедленно и ищи замкнутые узлы. провод тёплый и пахнет изоляцией
- Почему надломленная внутри изоляции жила опаснее выпавшего провода?
- Плавающий сбой сбивает с толку сильнее полной тишины: выглядеть всё будет как «случайная ошибка в программе». контакт то есть, то нет — схема живёт своей жизнью, а симптомы похожи на ошибку в коде