Руководства · 14 мин чтения

Проект на Arduino не работает? Порядок диагностики за 10 минут

Проект на Arduino не работает? Проверь 6 уровней снаружи внутрь: питание, загрузка, подключение, детали, код, датчик. Таблица-алгоритм, тестовый скетч и чек-лист из 8 пунктов.

Если проект на Arduino не работает, не ищи неисправность, выдёргивая провода наугад. Иди снаружи внутрь: сначала питание (включается ли плата?), затем загрузка (дошёл ли код до платы на самом деле?), затем подключение (общая ли GND, на нужном ли пине каждый провод?), затем ориентация и номинал деталей (не перевёрнут ли светодиод, тот ли резистор?), затем код (номера пинов и логика) и, наконец, датчик и окружение (свет, расстояние, напряжение питания). Делай по одному тесту на уровень и меняй только одну вещь за раз. В таком порядке большинство неисправностей находится за 10 минут, потому что самые частые ошибки сидят во внешних уровнях, а их проверить дешевле всего.

Здесь нет списка отдельных сообщений об ошибках — здесь метод диагностики. Сначала два правила метода, затем таблица-алгоритм, где для каждого уровня указаны признак, тест на 1 минуту и вероятная причина. Дальше — короткий тестовый скетч, который с помощью Blink и монитора порта делит схему на части, 4 проверки мультиметром (плюс альтернативы со светодиодом и монитором порта, если мультиметра нет), пошаговая диагностика неисправности в бесплатном проекте BlueGrays, таблица-шпаргалка по признакам и чек-лист диагностики из 8 пунктов для класса.

Белая макетная плата для схем на Arduino с шинами питания и центральной канавкой
В большинстве неработающих проектов проблема сидит на макетной плате раньше, чем в коде: сдвиг на одну строку, не та сторона центральной канавки или шина питания, разделённая надвое.

Два правила диагностики: снаружи внутрь и одна переменная за раз

Логика «снаружи внутрь» проста: внутренние уровни зависят от внешних. Если на плату не приходит питание, неважно, правильный ли код; если код так и не попал в плату, исправление проводов ничего не изменит. К тому же внешние уровни проверяются быстрее всего: взглянуть на светодиод питания — 5 секунд, прочитать сообщение о загрузке — 10, а поиск логической ошибки в коде может занять минуты. Второе правило — правило одной переменной. Если разом поменять провод, резистор и порог в коде, то даже если проект заработает, будет непонятно, что именно помогло; а если не заработает, можно добавить новую неисправность. Сделай одно изменение, проверь, запиши результат и только потом переходи к следующему.

  • Опиши признак одним предложением: «Когда я закрываю LDR рукой, светодиод должен включаться, но он не включается никогда». «Не работает» — это не признак; когда ожидаемое и фактическое записаны по отдельности, нужный уровень для проверки часто становится очевиден.
  • Отключай USB при сборке: если плата остаётся под питанием, пока меняются соединения, неверное касание может вызвать короткое замыкание. Внеси изменение, проверь его глазами, затем подключи снова.
  • Подставь заведомо исправную деталь: заменить подозрительный светодиод, провод или датчик на точно рабочий — самый сильный тест, который можно сделать без прибора.
  • Записывай: короткие заметки вроде «провод с 7 на 8 перенесён, без изменений» не дают повторять один и тот же тест, а если придётся спросить на форуме или у преподавателя, они станут готовым кратким описанием.
  • Упрощай: если проект большой, убирай модули по одному. Сначала только плата, затем плата плюс выходная часть, затем входная часть. То, на какой части всё ломается, и показывает, где неисправность.

Таблица-алгоритм диагностики за 10 минут

Читай таблицу ниже сверху вниз и не переходи к следующему уровню, пока текущий тест не пройден. Каждый тест занимает около минуты, так что все шесть уровней проходятся за 6–10 минут. Для большинства тестов хватает глаз, светодиодов на плате и монитора порта Arduino IDE; мультиметр ускоряет дело, но не обязателен. В столбце «Вероятная причина» перечислены места, куда стоит смотреть в первую очередь, если тест не пройден, — примерно в порядке того, как часто они встречаются.

УровеньПризнакТест на 1 минутуВероятная причина
1. ПитаниеНичего не происходит, светодиоды на плате не горят или плата греетсяГорит ли светодиод ON? Отключи USB и потрогай детали: что-то тёплое?Кабель USB только для зарядки, разболтанный порт, замыкание между 5V и GND, модуль подключён наоборот
2. ЗагрузкаКод изменён, а плата ведёт себя по-старомуСообщила ли IDE, что загрузка завершена, или есть строка с ошибкой? Правильно ли выбраны плата и порт в меню «Инструменты»?Не та плата или порт, ошибка компиляции, нет драйвера, порт занят монитором порта
3. ПодключениеДеталь вообще не реагирует или работает через разУвеличь схему и пересчитай каждый провод с обоих концов; общая ли GND с платой?Сдвиг строки на макетной плате, разделённая шина питания, перепутаны пины D и A, оборванная перемычка
4. Ориентация и номинал деталейСветодиод не горит или горит очень тускло, кнопка всегда читается как нажатаяИдёт ли длинная ножка светодиода к пину? Что говорят полосы резистора? Не повёрнута ли кнопка на 90 градусов?Перевёрнутый светодиод, 10 kΩ вместо 220 Ω, LDR и резистор поменяны местами, порядок VCC и GND на модуле
5. КодПлата работает, но ведёт себя неправильноСверь каждый номер пина в коде со схемой; выводи контрольные точки в монитор портаНеверный номер пина, нет pinMode, = перепутан с ==, неподходящий порог или задержка
6. Датчик и окружениеЗначения не меняются, не имеют смысла или скачутСмотри значение датчика в мониторе порта и меняй условия (выключи свет, поднеси руку ближе)Внешнее освещение, датчик вне диапазона, время прогрева, несоответствие 3,3 V и 5 V, длинные провода и помехи

Уровни 1 и 2: питание и загрузка

На Arduino Uno первую подсказку по этим двум уровням дают два светодиода. Светодиод ON показывает, что на плату подано питание; если он не горит, сначала замени кабель USB, потому что некоторые кабели только заряжают и не передают данные. Если ON горит, но при подключении пропадает звук USB на компьютере или светодиод мерцает, в схеме может быть замыкание: отключи USB, проследи линии 5V и GND и поищи модуль, вставленный наоборот, или провод, перемыкающий две шины. Нагревающаяся деталь — всегда серьёзный признак; не подавай питание на плату снова, пока её не уберёшь. Если в проекте есть мотор, сервопривод или реле, USB может не дать достаточного тока; тогда признак обычно не «ничего не работает», а случайные перезагрузки или дрожание. Варианты питания от батарей и адаптера — в статье питание Arduino от батарей.

На уровне загрузки нужно ответить на один вопрос: тот ли код на плате, что виден на экране? Когда загрузка завершается, Arduino IDE сообщает об этом в области вывода внизу; если там красные строки, код до платы не дошёл и она продолжает выполнять старую программу. Это коварно: кажется, что исправление просто не помогло. Об ошибках avrdude, порта и драйвера по каждому сообщению рассказывает статья код не загружается в Arduino, а если всё застревает на компиляции, смотри ошибки компиляции. Есть и простой проверочный тест: поменяй в коде задержку со 100 на 1000 и загрузи. Если ритм светодиода не изменился, проблема на уровне загрузки. Некоторым платам ESP32 нужно удерживать кнопку BOOT во время загрузки; на Raspberry Pi Pico проверь, что в правом нижнем углу Thonny выбран интерпретатор MicroPython.

Уровень 3: подключение, GND и пины

Плата под питанием, код загружен — очередь проводов. Две самые частые ошибки — забытая общая GND и неверно понятая макетная плата. Даже если у датчика или модуля своё питание, его GND должна быть соединена с GND Arduino, иначе у сигнального напряжения нет опорной точки. На макетной плате центральная канавка разделяет две половины, а на длинных макетных платах шины питания по краям могут быть разделены посередине; подать 5V на одну половину шины и считать, что это питает деталь на другой половине, — очень частая ошибка. Лучший метод на этом уровне — сверка со схемой один к одному: пересчитай каждый провод, оба конца, и покажи пальцем его пару на схеме. Цифровой 2, перепутанный с аналоговым A2, 5V вместо VIN или провод на одну строку в стороне сразу бросятся в глаза. Если символы на схеме незнакомы, статья как читать электрическую схему проведёт через перенос схемы на макетную плату.

Отключай кабель USB от платы, пока меняешь провода. Никогда не соединяй пин 5V или 3.3V напрямую с GND: плата нагреется, а компьютер может отключить порт USB. Если деталь греется, пахнет горелым или мерцает светодиод питания, отключи питание, прежде чем продолжать.

Уровень 4: ориентация и номинал деталей

Если подключение правильное, а деталь всё равно не отвечает, посмотри на саму деталь. Длинная ножка светодиода (анод) должна идти через резистор к пину, а короткая (катод) — к GND; перевёрнутый светодиод обычно не повреждается, он просто не светится. Чаще всего путают резисторы: у 220 Ω полосы красная-красная-коричневая, у 10 kΩ — коричневая-чёрная-оранжевая. Поставь 10 kΩ рядом со светодиодом — и он засветится так слабо, что это легко не заметить; поставь 220 Ω рядом с LDR или кнопкой — и показания потеряют смысл. Полосы можно расшифровать в утилите цветового кода резисторов, а нужный номинал для светодиода подобрать в калькуляторе резистора для светодиода. Четырёхногая тактовая кнопка, повёрнутая на 90 градусов, будет читаться как всегда нажатая или никогда не нажатая. На модулях порядок VCC, GND и сигнала зависит от производителя, поэтому читай надписи пинов на самой плате, а не на картинке из интернета. У трёхвыводных деталей вроде транзисторов и стабилизаторов напряжения порядок выводов тоже зависит от модели.

Уровень 5: код (номера пинов и логика)

Если железо в порядке, проверь, говорит ли код то же самое, что схема. Первая проверка — номера пинов: если светодиод физически на 8, а в коде digitalWrite(9, HIGH), всё выглядит идеально, и ничего не происходит. Вторая проверка — pinMode: если в setup() нет pinMode(pin, OUTPUT), digitalWrite(pin, HIGH) не делает пин выходом, а только включает встроенный подтягивающий резистор, и светодиод светится очень тускло. Помимо резистора, это самая частая причина «тусклого светодиода». Третья проверка — логика: запись if (value = 100) ничего не сравнивает, а присваивает переменной 100, и условие всегда истинно; правильная форма — ==. К этому уровню относятся и пороги с задержками: если порог не подходит к окружению, ничего не срабатывает даже при идеально рабочем датчике. В проектах с библиотеками проверь ещё, что установлена нужная библиотека; подробности — в статье установка библиотек Arduino.

Уровень 6: датчик и окружение

Последний уровень — внешние условия, которые портят результат даже при правильных схеме и коде. Значение LDR зависит от освещения в комнате; порог, который работает днём у окна, вечером под лампой может не сработать. HC-SR04 не получает эха от мягких поверхностей вроде ткани и не меряет ближе 2 см. Газовым датчикам серии MQ перед измерением нужно несколько минут на прогрев. DHT11 возвращает ошибки, если опрашивать его чаще раза в секунду. Пины ESP32 и Raspberry Pi Pico работают на 3,3 V; прямое подключение датчика с выходом 5 V может дать неверные показания и повредить пин. Длинные провода, помехи от моторов и «висящие» входы тоже заставляют значения скакать. Лучший инструмент на этом уровне — монитор порта: смотри «сырое» значение датчика и намеренно меняй условия. Если I2C-дисплей или датчик вообще не отвечает, скетч-сканер из статьи что такое I2C покажет его адрес.

Быстрее всего уровни проходятся, если разделить схему и код на части. Первая часть — сама плата: ничего не подключая, загрузи код, который мигает встроенным светодиодом L. Если L мигает, питание, загрузка и плата в порядке, и дальше проблему нужно искать за пределами платы. Вторая часть — выход: в том же коде помигай внешним светодиодом. Третья часть — вход: выведи значение датчика в монитор порта. Скетч ниже делает все три шага и на каждом выводит в монитор порта пронумерованную контрольную точку. Подключи внешний светодиод к пину 9 через резистор 220 Ω, а сигнал проверяемого аналогового датчика — к A0, и выставь в мониторе порта скорость 9600 бод.

C++ (Arduino IDE)
1const int LED_PIN = 9;       // Harici LED pini / External LED pin
2const int SENSOR_PIN = A0;   // Analog sensör pini / Analog sensor pin
3
4void setup() {
5  Serial.begin(9600);                  // Seri monitör de 9600 olmalı / Serial Monitor must be 9600 too
6  pinMode(LED_BUILTIN, OUTPUT);        // Karttaki L ışığı / On-board L LED
7  pinMode(LED_PIN, OUTPUT);            // Harici LED çıkış / External LED as output
8  Serial.println("1) setup bitti");    // Kontrol noktası 1 / Checkpoint 1
9}
10
11void loop() {
12  digitalWrite(LED_BUILTIN, HIGH);     // Kart canlı mı? / Is the board alive?
13  digitalWrite(LED_PIN, HIGH);         // Harici LED açık / External LED on
14  Serial.println("2) LED acik");       // Kontrol noktası 2 / Checkpoint 2
15  delay(500);
16
17  digitalWrite(LED_BUILTIN, LOW);
18  digitalWrite(LED_PIN, LOW);          // Harici LED kapalı / External LED off
19  Serial.println("3) LED kapali");     // Kontrol noktası 3 / Checkpoint 3
20  delay(500);
21
22  int value = analogRead(SENSOR_PIN);  // 0-1023 arası okuma / Reading from 0 to 1023
23  Serial.print("4) A0 = ");
24  Serial.println(value);               // Sensör değeri / Sensor value
25}
Что видно в мониторе порта и на платеЧто это значитКакой уровень проверить
Монитор порта пуст, L не мигаетКод не выполняется или так и не попал в плату1. Питание, 2. Загрузка
Бегут мусорные символыСкорость монитора порта не совпадает с Serial.begin(9600)5. Код (настройка скорости)
Время от времени снова появляется «1) setup bitti» (по-турецки «setup завершён»)Плата сама перезагружается, обычно из-за нехватки питания1. Питание
2 и 3 чередуются, L мигает, а внешний светодиод не горитКод и плата в порядке; разорван путь внешнего светодиода3. Подключение, 4. Ориентация и номинал деталей
A0 всё время около 0 или около 1023Сигнальная линия идёт на GND или 5V, на датчик не подано питание или нет резистора делителя3. Подключение, 4. Номинал деталей
A0 случайно скачет, когда ничего не подключеноПин «висит в воздухе»; это нормально и должно прекратиться после подключения датчика3. Подключение

Настоящая сила этого скетча — в контрольных точках. Используй тот же метод в своём проекте: добавь короткий Serial.println() в конец setup() и после каждого важного шага в loop(), например «кнопка нажата» или «порог пройден». Последнее сообщение, появившееся в мониторе порта, показывает, где застряла программа. Чтобы понять, почему условие никогда не срабатывает, выведи сравниваемое значение прямо перед условием; если «value < 50» никогда не выполняется, тут же станет видно, что значение никогда не опускается ниже 50. В больших проектах логика та же: временно закомментируй часть кода и проверяй куски по одному. О настройках монитора порта — скорости, конце строки и плоттере — читай в статье как пользоваться монитором порта Arduino.

4 проверки мультиметром (или светодиодом и монитором порта без него)

Мультиметр превращает диагностику из угадывания в измерение, и всего четыре измерения покрывают большинство неисправностей Arduino. Перед измерением выставь нужный режим: DC V для напряжения, прозвонку (со звуком) для проверки проводов и строк, Ω для сопротивления. Прозвонку и измерение сопротивления делай только при отключённом USB. Если мультиметра нет, способы из последнего столбца дают более грубый, но достаточный ответ на тот же вопрос. Диапазоны прибора и то, в какие гнёзда вставлять щупы, с картинками объясняет статья как пользоваться мультиметром.

ПроверкаРежим прибора и щупыОжидаемоБез мультиметра
Напряжение питанияDC V; чёрный щуп на GND, красный на пин 5V (плата подключена к USB)Примерно 4,7–5,1 V; на пине 3.3V около 3,3 VПосмотри на светодиод ON и загрузи Blink; если L мигает ровно, питание в порядке
Провод и строка макетной платыРежим прозвонки, USB отключён; коснись обоих концов провода или двух отверстий одной строкиЗвуковой сигнал; нет сигнала — провод оборван или это другая строкаЗамени подозрительный провод на заведомо исправный; подключи через этот провод светодиод с резистором 220 Ω между 5V и GND
Номинал резистораДиапазон Ω; вынь резистор из схемы и коснись обеих ножекПримерно 209–231 Ω для 220 Ω (допуск 5 процентов)Прочитай цветные полосы и проверь в утилите цветового кода
Напряжение сигналаDC V; чёрный щуп на GND, красный на выходной пин или сигнальную линию датчикаОколо 5 V при HIGH на выходе, 0 V при LOW; в делителе с LDR — значение, зависящее от светаСмотри значение analogRead в мониторе порта (5 V — примерно 1023, 0 V — примерно 0); подключи светодиод к выходному пину

Разбор примера: в проекте «Ночник на LDR» не включается светодиод

Опробуем метод на бесплатном проекте BlueGrays: Ночник на LDR. В схеме один конец LDR идёт на 5V, а другой на A0; между A0 и GND стоит резистор 10 kΩ, и вместе они образуют делитель напряжения. Светодиод подключён к пину 13 через резистор 330 Ω. Код читает A0 и, если значение ниже 50, считает, что в комнате темно, и включает светодиод. Признак: «Закрываю LDR рукой, а светодиод так и не включается». Вместо того чтобы переставлять провода наугад, пройдём уровни по порядку.

Фоторезистор LDR, сопротивление которого меняется от света
Сопротивление LDR падает с ростом освещённости. В проекте ночника он образует делитель напряжения с резистором 10 kΩ; если поменять их местами, светодиод будет гореть на свету и гаснуть в темноте.
  1. Питание: светодиод ON горит, ничего не греется. Идём дальше.
  2. Загрузка: загрузка прошла без ошибок. Для уверенности временно замени в коде 50 на 2000 и загрузи; analogRead возвращает не больше 1023, поэтому условие всегда истинно и светодиод должен гореть постоянно.
  3. Подключение и светодиод L: пин 13 подключён ещё и к встроенному светодиоду L. Если с порогом 2000 L загорается, а внешний светодиод нет, код выполняется, и проблема на пути светодиода. Идёт ли длинная ножка светодиода к 13 через 330 Ω, а короткая — к GND?
  4. Ориентация и номинал деталей: светодиод не перевёрнут, но если рядом с ним стоит 10 kΩ вместо 330 Ω, он светится слишком слабо, чтобы это заметить. Различай эти два резистора по цветам.
  5. Код и датчик: если с порогом 2000 внешний светодиод загорается, верни 50. Теперь, чтобы увидеть реальные значения, загрузи в ту же схему код проекта Измерение освещённости с LDR: в нём то же подключение LDR, и он каждые полсекунды выводит A0 в монитор порта.
  6. Прочитай значения: допустим, без руки видно около 600, а если закрыть рукой — около 120. Значение никогда не опускается ниже 50, поэтому светодиод и не включается. Вернись к коду ночника и подними порог куда-нибудь в диапазон от 200 до 300.
  7. Заметь обратное поведение: если при закрывании значение растёт, а не падает, LDR и резистор 10 kΩ поменялись местами. Если значение случайно скачет, пока рука неподвижна, провод A0 не попал в строку, где соединяются LDR и резистор.

В этом примере неисправность нашли не новые знания, а порядок: сначала мы доказали, что сам светодиод может гореть, затем посмотрели, что на самом деле читает датчик. В приложении в разделе Если не получается на вкладке Разбор кода этого проекта уже есть пять таких признаков в виде пар «признак — решение»: внешний светодиод не загорается в темноте, светодиод горит на свету и гаснет в темноте, не загорается даже под рукой, горит постоянно или мерцает, а также ошибка загрузки. Раздел проекта Если не работает даёт общий чек-лист из 10 шагов, который начинается с питания и проходит через загрузку, номера пинов, макетную плату, перемычки, GND, светодиод и резистор. Как можно заметить, этот порядок почти совпадает с уровнями из начала статьи.

Помощь в приложении: где искать, если проект не работает

  • Если не работает: упорядоченный чек-лист на странице проекта, который начинается со слов «Если проект не работает, проверь шаги ниже». Он есть более чем в 170 проектах и открывается с Premium; в бесплатных проектах этот раздел тоже доступен с Premium. Если совсем непонятно, что сломалось, это то место, которое стоит пройти от начала до конца.
  • Разбор кода › Если не получается: пары «признак — решение», свои для кода и схемы конкретного проекта. В бесплатных проектах открыто всем, в проектах Premium — с Premium. Если признак удаётся описать одним предложением, загляни сюда первым делом. Весь раздел описан в статье Разбор кода.
  • Вернись к шагам «Собираем вместе»: в пошаговом режиме вернись к шагу 2. Собери схему и собери схему с нуля при отключённом кабеле USB; на шаге 3. Загрузи код ещё раз проверь плату и порт в меню «Инструменты» Arduino IDE. Режим запоминает, на каком шаге работа прервалась. Как он работает, рассказано в статье твой первый проект на Arduino.
  • Увеличь схему подключения: разведи пальцы, чтобы увеличить Схему, и сверяй своё подключение соединение за соединением; при желании сохрани её кнопкой Сохранить в галерею и отмечай проверенные провода. Так ловится большинство неисправностей 3-го уровня.
  • Задай правильный вопрос на форуме: если всё это испробовано, а проект так и не работает, создай тему в категории Вопрос в разделе Учёба › Форум. Укажи плату, полный код, соединения, ожидаемое и фактическое поведение и то, какие уровни уже проверены, и добавь чёткое фото схемы. Как это написать, рассказано в статье как задать вопрос на форуме.

Шпаргалка по признакам

ПризнакКакой уровень проверить первымПервый тестСтатья по теме
Ничего не происходит, светодиод ON тоже не горит1. ПитаниеПопробуй другой кабель USB и порт; поищи замыкание между 5V и GNDПитание Arduino от батарей
Код не загружается, ошибка avrdude или порта2. ЗагрузкаПлата и порт в меню «Инструменты»; кабель с передачей данныхКод не загружается в Arduino
Красные строки ошибок при компиляции5. КодПрочитай первую строку ошибки и перейди к строке с этим номеромОшибки компиляции
Светодиод горит, но очень тускло4. Номинал деталей, 5. КодЦвета резистора; есть ли pinMode(…, OUTPUT) в setup()?Что такое светодиод
Датчик всегда 0 или всегда 10233. ПодключениеVCC и GND датчика, строка сигнального провода, резистор делителяДелитель напряжения
Кнопка будто нажимается сама3. ПодключениеЕсть ли стягивающий резистор или используется INPUT_PULLUP?Как подключить кнопку
Сервопривод дрожит1. ПитаниеПитай сервопривод от отдельного источника 5 V и объедини GNDЧто такое сервопривод
Плата случайно перезагружается1. ПитаниеУбери мотор или реле и проверь; повторяется ли сообщение setup в мониторе порта?Arduino постоянно перезагружается, просадка питания ESP32 (brownout)
Мусорные символы в мониторе порта5. КодВыставь в мониторе порта ту же скорость, что в Serial.begin()Как пользоваться монитором порта

Для преподавателей: чек-лист диагностики из 8 пунктов

Допустим, в классе 24 ученика, 8 групп одновременно собирают схемы, и за первые 15 минут шесть групп поднимают руки со словами «не работает». Положи чек-лист ниже на стол каждой группе и с самого начала введи правило: прежде чем поднимать руку, пройти карточку сверху вниз и записать на обороте, на каком пункте всё застряло и что было изменено. Это освобождает твоё время и формирует у учеников привычку решать проблемы; а записи диагностики — ещё и свидетельство процесса, которое можно использовать при оценивании. Об организации групп в большом классе читай в статье урок Arduino в большом классе, а об оценке процесса — в статье критерии оценивания.

  1. Признак: что ожидалось и что происходит? Записать одним предложением.
  2. Питание: горит ли светодиод ON? Отключить USB: какая-нибудь деталь тёплая?
  3. Загрузка: завершилась ли загрузка без ошибок? Правильно ли выбраны плата и порт в меню «Инструменты»?
  4. Плата: мигает ли встроенный светодиод L после загрузки Blink?
  5. Подключение: увеличить схему и пересчитать каждый провод с обоих концов. Общая ли GND, на нужном ли пине и в нужной ли строке провода?
  6. Деталь: идёт ли длинная ножка светодиода к пину? Совпадают ли полосы резистора с номиналом из списка деталей? Правильно ли подключены VCC и GND на модуле?
  7. Код: совпадают ли номера пинов в коде со схемой? Какая контрольная точка появляется последней при выводе в монитор порта?
  8. Датчик и следующий шаг: имеет ли смысл значение датчика в мониторе порта и меняется ли оно при изменении условий? Если проблема не решена, заглянуть в «Если не получается» и «Если не работает», затем позвать преподавателя. Менять по одной вещи за раз и всё записывать.

Диагностика — это навык, и с каждой неисправностью она идёт быстрее: поиск, который в первом проекте занимает 20 минут, к пятому сокращается до 3 минут, потому что уровень начинаешь угадывать уже по признаку. В следующий раз, когда проект не заработает, открой этот порядок, прежде чем выдёргивать провода, и иди сверху вниз. Небольшие проекты вроде ночника из этой статьи идеально подходят для тренировки; в приложении BlueGrays у каждого из 60 бесплатных проектов есть схема, код и раздел «Разбор кода», так что при следующей неисправности уже будет понятно, куда смотреть.

Частые вопросы

Почему мой проект на Arduino не работает?

Самые частые причины по порядку: проблемы с питанием, код, который так и не попал в плату, отсутствие общей GND или провод на одну строку в стороне на макетной плате, перевёрнутый светодиод или неверный номинал резистора и неправильный номер пина в коде. Проверяй их в этом порядке, меняя по одной вещи за раз, и обычно неисправность находится за 10 минут.

Как понять, что Arduino сломалась?

Отключи всё, подключи плату одним кабелем USB и загрузи пример Blink. Если светодиод ON горит, загрузка завершается без ошибок и светодиод L мигает, плата, скорее всего, исправна, а проблема в схеме или в остальном коде. Если плата вообще не появляется как порт, сначала попробуй другой кабель с передачей данных и другой порт USB.

Почему код загружается в Arduino, но не работает?

Сначала проверь, что загрузка действительно завершилась; если есть строка с ошибкой, плата выполняет старый код. Если с загрузкой всё в порядке, сверь номера пинов в коде со схемой, проверь, что в setup() есть строки pinMode, и добавь Serial.println() в конец setup(), чтобы увидеть в мониторе порта, доходит ли программа до этого места.

Почему в мониторе порта мусорные символы?

Скорость монитора порта не совпадает со значением Serial.begin() в коде. Если в коде 9600, выставь в правом нижнем углу монитора порта тоже 9600. ESP32 отправляет загрузочные сообщения на скорости 115200 бод, поэтому несколько искажённых строк на 9600 — это нормально.

Как проверить схему Arduino без мультиметра?

Светодиоды ON и L на плате говорят о питании и самой плате, а значения analogRead, выведенные в монитор порта, показывают сигнал датчика. Замена подозрительного провода или светодиода на заведомо исправную деталь заменяет прозвонку. Номинал резистора можно прочитать по цветным полосам и проверить в утилите цветового кода.

Почему аналоговый датчик Arduino всегда показывает 0 или 1023?

Всегда 0 обычно значит, что сигнальная линия идёт на GND или на датчик не подано питание; всегда 1023 — что сигнальная линия подключена прямо к 5V или нет резистора делителя. Проверь VCC и GND датчика, то, что сигнальный провод стоит в нужной строке, а для деталей вроде LDR — что резистор 10 kΩ на месте.

Все проекты
Ночник на LDR
#12Новичок

Ночник на LDR

Маленький ночник, который сам включается, когда темнеет, и гаснет, когда наступает утро. Датчик освещённости измеряет, насколько светло в комнате, и Arduino включает светодиод, когда достаточно темно,

4.8(102)
205
Измерение освещённости с LDR
#11Новичок

Измерение освещённости с LDR

Хочешь увидеть яркость своей комнаты в виде числа? LDR — маленькая деталь, реагирующая на свет, — измеряет освещённость вокруг, а Arduino каждые полсекунды выводит значение на экран компьютера. Закрой

4.6(81)
139
Мигающий светодиод
#1Новичок

Мигающий светодиод

Самое первое «привет» в электронике: включение и выключение одного светодиода. Arduino включает и выключает светодиод через короткие промежутки, поэтому свет быстро мигает. Ты самым простым способом в

4.6(188)
1127
Управление светодиодом кнопкой (удержание)
#9Новичок

Управление светодиодом кнопкой (удержание)

Как дверной звонок: свет горит, пока ты нажимаешь, и гаснет, когда отпускаешь. Arduino всё время слушает кнопку; пока она нажата, светодиод горит, а как только ты убираешь палец, он гаснет. Эта просте

4.8(113)
229
Включение и выключение светодиода кнопкой (вкл/выкл)
#10Новичок

Включение и выключение светодиода кнопкой (вкл/выкл)

Нажми кнопку один раз — свет загорится, нажми ещё раз — погаснет, совсем как выключатель в твоей комнате. Arduino замечает каждое нажатие и переводит светодиод в противоположное состояние, выжидая кор

4.8(100)
167
Измерение расстояния HC-SR04 (вывод в порт)
#27Новичок

Измерение расстояния HC-SR04 (вывод в порт)

Датчик HC-SR04 работает совсем как летучая мышь, которая находит дорогу в темноте: он посылает звук, которого ты не слышишь, слушает эхо и измеряет, насколько далеко предмет перед ним. Arduino каждые

4.6(46)
71
Температура и влажность с DHT11
#55Средний

Температура и влажность с DHT11

Насколько тепло в твоей комнате и влажный ли воздух или сухой? Датчик DHT11 измеряет температуру и влажность, а Arduino выводит значения на двухстрочный LCD-экран и обновляет их каждые пару секунд. Ес

4.7(47)
73
Raspberry Pi Pico: управление внешним светодиодом (макетная плата)
#148Новичок

Raspberry Pi Pico: управление внешним светодиодом (макетная плата)

Следующий шаг после встроенного светодиода Pico: подключить внешний светодиод на макетной плате и управлять им через пин GP14. В этом проекте ты узнаешь, как использовать любой пин GPIO общего назначения у Pico как выход, какая полярность у светодиода (длинная ножка = анод/+, короткая = катод/–) и зачем нужен токоограничивающий резистор (220Ω). Без резистора через светодиод пойдёт слишком большой ток, и он может сгореть. Схема очень простая: Pico GP14 → резистор 220Ω → светодиод → GND.

4.5(2)
7