Дальномер HC-SR04 я однажды питал от батарейного отсека — «чтобы не грузить плату». Триггер подавал с одного пина Arduino, эхо читал с другого, формула из урока про pulseIn была верной. Дальномер показывал то ноль, то две тысячи сантиметров, то четыре — по кругу, при неподвижной стене. Скетч я переписал трижды, заменил датчик, пересобрал макетку. Виноват был один отсутствующий провод: минус батарейного отсека не был соединён с GND платы, и общий провод появился только тогда, когда я его добавил.
Это самая коварная ошибка макетирования: схема включена, светодиоды горят, Serial печатает числа — а числа ерунда. Не хватает опоры: у каждого прибора своя нулевая отметка, и сравнивать показания двух приборов с разными нулями — как мерить высоту гор от подножия разных гор. Схема от этого не «ломается» — она молча врёт, что хуже любой искры.
Разбираемся. Земля как точка отсчёта всех напряжений: что именно мерит АЦП и почему «на пине 5 вольт» — неполная фраза. Путь возврата тока: почему всё стекает в одну точку и что теряется по дороге. Общая земля нескольких источников: когда соединять минусы обязательно, а когда опасно. И скетч-детектор, который следит за целостью минуса на живой макетке.
Ноль, относительно которого всё измеряется
Напряжение — всегда разница потенциалов между двумя точками. Фраза «на пине 5 вольт» — стенограмма: пять вольт относительно GND. Батарейка АА даёт полтора вольта между полюсами — приставь её вторым полюсом куда угодно, разница останется между её полюсами. Поэтому на схемах рисуют не «напряжения», а потенциалы относительно общей земли: каждая точка сидит на шкале, прикрученной к GND. Мультиметр в этом смысле честен: он показывает разницу между щупами, и первый щуп я всегда втыкаю в GND — так любой замер в макетке сразу оказывается «относительно общего провода».
АЦП Arduino — честный пример. analogRead измеряет напряжение на пине относительно GND и печатает числа 0–1023. Делитель с фоторезистором из урока про аналоговые входы выдаёт спокойную шкалу, пока его минус и минус платы — один провод. Питание делителя от отдельной батарейки без общей земли — и АЦП меряет относительно чужой опоры: числа плывут на сотни единиц при неподвижном свете.
Отсюда правило: всё, что обменивается сигналами, обязано делить одну землю. Сигнал — это напряжение относительно GND передатчика; приёмник же смотрит относительно своего. Разные минусы — разные шкалы, и «ноль вольт» одного прибора может быть плюсом для другого. Ноль сигнала — это всегда провод между устройствами, а не договорённость.
Ток течёт по кругу: из плюса через потребителя — и обратно к минусу источника. «Всё стекает в одну точку» — это про путь возврата: минусовых ног у схемы много, а точка возврата одна. Каждый миллиампер, ушедший в светодиод и датчик, возвращается по минусовым проводам, и на каждом проводе падает часть напряжения. При 20 мА на 20-сантиметровой перемычке это доли вольта... нет, даже меньше: доли ома сопротивления дают милливольты, и схема их не замечает.
Умножь ток — и милливольты станут вольтами. Сервопривод в рывке ест 500–700 мА: на минусовом контакте в один ом падает уже 0,6 вольта, и «ноль» сервы уезжает относительно нуля платы. Датчики видят искажённые уровни, плата — дёрганья. Поэтому минусовые провода толстые и короткие, а серве готовят отдельную дорогу через рейку, а не сигнальную перемычку.
Практический вывод: минусовую шину собирай первой и без петли «через голову». Один провод от GND платы в синюю рейку, от рейки — потребителям, и ток возврата не гуляет по сигнальным цепям. Иначе каждое включение мотора будет отражаться на показаниях всего остального — эффект, который новички ищут в скетче, а он живёт в минусе.
Минусовую разводку радиолюбители зовут «звездой»: от точки возврата — GND платы — расходятся лучи к потребителям, и ни один ток возврата не пересекает чужой путь. В идеальной звезде лучше всех живёт АЦП: его опора не дрожит от чужих токов. В макетке идеал недостижим — рейка общая, — но правило «минус первым, минус без петель» приближает сборку к звезде на глаз.
| Симптом | Что происходит | Лечение |
|---|---|---|
| Аналоговые значения скачут на сотни | у датчика и платы разные минусы — разные нули | один провод GND между ними |
| Серва дёргается и сбивает показания | ток возврата идёт через сигнальные провода | минус сервы — в рейку, рейка — к GND платы |
| Половина схемы мертва | разрыв минусовой рейки посередине | перемычка через разрыв, рейку прозвонить |
| Работает от USB, умирает от батарейки | минус батарейки не связан с GND платы | соединить минусы, плюсы не трогать |
| Схема оживает при касании проводов | «плавающий» минус: контакт через палец | прозвонить минусовую цепь, пересобрать |
Общая земля нескольких источников
Как только в проекте появился второй источник — батарейный отсек, внешний блок, вторая плата, — минусы соединяются. Обязательно. Сигналы между устройствами не имеют смысла без общей опоры: транзистор открывается относительно своего минуса, и если минусы не соединены, «ноль вольт» одного прибора может быть плюсом для другого. Один провод минус-минус — и шкалы совпали; тот самый дальномер из начала урока ожил именно после этого провода.
Плюсы соединять не надо и часто нельзя: 5 В от USB и 9 В от блока — разные напряжения, и связка плюсом превратит регулятор в нагреватель. Питание раздельное, земля общая — стандартная раскладка для реле с 220 вольтами: слаботочная логика и силовая часть в модуле развязаны, и общий провод туда не тянется — там развязка делает свою защитную работу.
Исключение из «соединяй всегда» — гальваническая развязка. Реле, оптопара, изолированный драйвер и существуют ради того, чтобы две стороны не имели общего провода: сигнал проходит светом или магнитным полем, опасный потенциал остаётся по ту сторону. Правило на стол: два слаботочных прибора — общий GND; слаботочное с сетевым — только через развязку, минус не перебрасывается.
Порядок для двух источников у меня простой. Минусы соединяются первым проводом и проверяются щупом детектора: minus=1 — общая земля есть. Потом каждый источник заводится в свою часть схемы, и перед включением меряется напряжение между плюсом источника и общим минусом: там должно быть ровно паспортное число. Если вместо девяти вольт вольтметр молчит — где-то по пути минус оборван, и включать питание нельзя до разборки.
Детектор целости минуса
const int PIN_PROBA = 2; // провод из этого пина — в минусовую рейкуconst int PIN_SVET = 13; // горит, пока минус на месте int poslednee = HIGH;int obryvov = 0;unsigned long start = 0; void setup() { pinMode(PIN_PROBA, INPUT_PULLUP); pinMode(PIN_SVET, OUTPUT); Serial.begin(9600); Serial.println("Monitor minusa: podergajte provod k reyke");} void loop() { int sejchas = digitalRead(PIN_PROBA); // LOW = минус на месте if (sejchas == LOW) { digitalWrite(PIN_SVET, HIGH); } else { digitalWrite(PIN_SVET, LOW); if (poslednee == LOW) { obryvov = obryvov + 1; // связь с минусом пропала } } poslednee = sejchas; if (millis() - start >= 5000) { start = millis(); if (sejchas == LOW) { Serial.println("minus=1"); } else { Serial.println("minus=0"); } Serial.print("obryvov="); Serial.println(obryvov); obryvov = 0; } delay(10);}Читать показания просто. Воткнул щуп в синюю рейку: minus=1, светодиод горит — путь возврата цел. Пошевели все минусовые провода по очереди: счётчик обрывов обязан молчать, ведь каждая единица — момент, когда ток возврата терял дорогу, а «ноль» половины схемы уезжал в неизвестность. Если счётчик тикает на неподвижных щупах — контакт плавает: плохой обжим или уставший лепесток. Минусовые соединения, как и сигнальные перемычки, не отлаживают — их заменяют.
Второй сценарий — приёмка свежей сборки: щуп в дальний конец рейки, шевелишь плату и провода питания. Минус жив при любом передёргивании — собрано правильно, можно подавать плюс. Диагностика в парах имя=значение — наш привычный способ смотреть в Serial; в симуляторе ниже детектор упрощён до кнопки и светодиода: нажата кнопка — минус на месте.
- 1. Датчик питается от своей батарейки и обменивается сигналами с платой. Что обязательно?
- 2. Почему на токах 20 мА минусовыми проводами можно пренебрегать?
- 3. Схема на большой макетке: слева всё работает, справа мертво. Первая версия?
- 4. Откуда сервопривод берёт минус в правильной сборке?
- 5. Реле управляет сетевым прибором. Нужен ли общий GND между 5-вольтовой и сетевой стороной?
- «5 вольт» — сокращение от «относительно GND»: всё, что обменивается сигналами, делит одну землю
- Ток возвращается к минусу источника; на 20 мА провод теряет милливольты, на 600 мА сервы — уже десятые доли вольта
- Появился второй источник — соедините минусы; плюсы соединять нельзя: разные напряжения убивают регулятор
- Сетевая сторона — только через гальваническую развязку, общий провод туда не тянется
- Детектор минуса: щуп из пина 2 в рейку, minus=1 — путь возврата цел, счёт обрывов ловит плавающий контакт
Частые вопросы по теме урока
- Датчик питается от своей батарейки и обменивается сигналами с платой. Что обязательно?
- Сигналы измеряются относительно GND передатчика; без общего провода приёмник смотрит на другую шкалу. Плюсы соединять не нужно. Соединить минусы — сделать общую землю
- Почему на токах 20 мА минусовыми проводами можно пренебрегать?
- 0,02 ампера на доле ома — десятки милливольт. А 600 мА сервы на контакте в один ом — уже 0,6 вольта, и ноль уезжает. На доли ома падают милливольты — схема их не видит
- Схема на большой макетке: слева всё работает, справа мертво. Первая версия?
- Полноразмерные рейки разорваны посередине: без перемычки правая половина сидит без минуса. Прозвонка рейки — до сборки. Разрыв минусовой рейки посередине
- Откуда сервопривод берёт минус в правильной сборке?
- Ток возврата сервы — сотни миллиампер: ему нужна дорога через рейку, а не сигнальные перемычки, по которым он портит показания соседей. Из минусовой рейки, связанной с GND платы
- Реле управляет сетевым прибором. Нужен ли общий GND между 5-вольтовой и сетевой стороной?
- Реле и оптопара существуют ради развязки: сигнал проходит через них, а общий провод между слаботочной и сетевой стороной не тянется. Не нужен и опасен: там гальваническая развязка