PRJ-01Новичок15 миндеталей: 3Есть в симуляторе

Blink: ваш первый скетч

Заставьте модуль светодиода и встроенный светодиод L платы Uno мигать по очереди каждые полсекунды. Ваш первый скетч — в симуляторе и на настоящей плате.

Что делает робот

Два светодиода горят по очереди: пока модуль светодиода на D2 включён, светодиод L на D13 выключен, и каждые полсекунды они переключаются.

Видеона YouTube

Blink — классический первый скетч. Два светодиода горят по очереди: красный модуль светодиода на пине D2 и маленький светодиод L на пине D13, встроенный прямо в плату Uno. Пока один горит, другой погашен, а каждые полсекунды они меняются. Вы узнаете, как устроен скетч, как Uno переключает свои пины и как подключить модуль и загрузить код. Это проект для начинающих, на него уйдёт около 15 минут.

Что понадобится

Детали для этого проекта

Для симулятора больше ничего не нужно. На столе симулятора Uno получает питание от USB-порта ноутбука — так же, как настоящая плата Uno, подключённая к компьютеру. Для реальной сборки понадобится ещё компьютер с Arduino IDE — это бесплатная программа с сайта arduino.cc. Посмотрите также стартовый набор в Маркете.

Как это работает

Пины Uno: цифровые D0–D13 сверху, питание (5V, GND) и аналоговые A0–A5 снизу, гнездо USB и светодиод L на D13.

Каждый цифровой пин Uno работает как выключатель, которым управляет ваш скетч. Когда скетч переводит пин в HIGH, пин выдаёт 5 В. Когда скетч переводит пин в LOW, пин выдаёт 0 В — то же самое, что на GND.

Модуль светодиода — это маленькая плата с красным светодиодом и резистором 220 Ом. Когда на D2 HIGH, ток идёт от D2 через резистор и светодиод, выходит через пин «-» модуля и возвращается на GND платы Uno. Такой замкнутый путь и есть электрическая цепь. Без провода к GND пути нет, и светодиод не горит.

Резистор ограничивает ток. На красном светодиоде падает около 2 В, значит, на резисторе остаётся около 3 В. Если разделить 3 В на 220 Ом, получится примерно 14 мА. Это намного меньше 20 мА, которые пин Uno может безопасно отдавать.

Светодиод L уже стоит на плате Uno и подключён к D13, поэтому никакие провода ему не нужны.

Вот что делают два пина в течение одной секунды:

Время D2: модуль светодиода D13: светодиод L
0–500 мс HIGH: горит LOW: не горит
500–1000 мс LOW: не горит HIGH: горит
После 1000 мс всё повторяется всё повторяется

Так продолжается, пока у Uno есть питание.

Сборка

1. Соберите проект в симуляторе

Корпус этому проекту не нужен: Uno и модуль светодиода стоят рядом на столе, а Uno работает от USB ноутбука.

В реальной сборке: положите плату Uno на стол так, чтобы под ней не было ничего металлического. Металл может замкнуть между собой контакты на нижней стороне платы.

2. Подключите модуль светодиода

ОткудаКудаЗачем
Uno GNDМодуль светодиода GNDЗемля
Uno D2Модуль светодиода SHIGH зажигает светодиод

Хватит двух проводов: от S к D2 и от «-» к GND. У Uno несколько пинов GND. Внутри платы они все соединены, поэтому подойдёт любой.

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

3. Проверьте скетч

Откройте «Код». Он работает как Arduino IDE. Вставьте скетч Blink с этой страницы (кнопка «Копировать» над кодом скопирует его) и нажмите «Проверить». Скетч скомпилируется: текст на C++ превратится в машинный код для ATmega328P — микросхемы на плате Uno. Симулятор использует те же инструменты компиляции, что и настоящая Arduino IDE. Если в коде есть ошибка, появится сообщение с номером строки, где она находится.

В реальной сборке: запустите Arduino IDE, создайте новый скетч и вставьте в него код с этой страницы. Кнопка «Копировать» над кодом скопирует его за вас. Выберите плату «Arduino Uno» и нажмите «Проверить».

4. Загрузите и понаблюдайте

Нажмите «Загрузить». Скетч попадёт в Uno и сразу запустится. Теперь модуль светодиода и светодиод L загораются по очереди каждые полсекунды.

В реальной сборке: подключите Uno к компьютеру USB-кабелем. У Uno R3 квадратное гнездо USB-B — такое же, как у принтеров. В IDE выберите порт, на котором появилась плата, и нажмите «Загрузить». Пока скетч передаётся, маленькие светодиоды TX и RX на плате мерцают, а затем начинается мигание. Скетч остаётся в памяти Uno даже без питания. Когда Uno снова получит питание, скетч сам запустится заново.

5. Измените скетч

Замените обе строки delay(500) на delay(100) и снова загрузите скетч. Теперь светодиоды меняются в пять раз быстрее. Затем переставьте провод S с D2 на D3 и измените LED_MODULE с 2 на 3. Провод и число в скетче всегда должны совпадать. Если они не совпадают, светодиод не горит.

Код

Blink.ino
// Blink: the LED module on D2 and the Uno's own "L" LED on D13 take turns.
// Wiring: LED module S -> D2, LED module - (GND) -> GND.

const byte LED_MODULE = 2;   // the module's S pin
const byte LED_BOARD = 13;   // the L LED soldered on the Uno

void setup() {
  pinMode(LED_MODULE, OUTPUT);  // pins start as inputs: make these two outputs
  pinMode(LED_BOARD, OUTPUT);
}

void loop() {
  digitalWrite(LED_MODULE, HIGH);  // 5 V on D2: the module's LED lights
  digitalWrite(LED_BOARD, LOW);    // 0 V on D13: the L LED goes dark
  delay(500);                      // wait half a second
  digitalWrite(LED_MODULE, LOW);
  digitalWrite(LED_BOARD, HIGH);
  delay(500);
}

Имена для пинов

const byte LED_MODULE = 2;   // the module's S pin
const byte LED_BOARD = 13;   // the L LED soldered on the Uno

Эти две строки дают имена номерам пинов. const означает, что значение не меняется, пока работает скетч. byte — это целое число от 0 до 255, для номера пина этого достаточно. Остальная часть скетча использует имена. Поэтому, если вы переставите провод, нужно будет поменять одно число здесь — и больше ничего.

setup(): выполняется один раз

setup() выполняется один раз, когда Uno запускается. Сначала все пины — входы, которые умеют только «слушать». pinMode(LED_MODULE, OUTPUT) превращает D2 в выход, который может выдавать 5 В или 0 В. Следующая строка делает то же самое для D13.

loop(): выполняется бесконечно

После setup() Uno выполняет loop() снова и снова, пока есть питание. Вот первая половина этой функции:

  digitalWrite(LED_MODULE, HIGH);  // 5 V on D2: the module's LED lights
  digitalWrite(LED_BOARD, LOW);    // 0 V on D13: the L LED goes dark
  delay(500);                      // wait half a second

digitalWrite() переводит пин в HIGH (5 В) или в LOW (0 В). delay(500) заставляет Uno ждать 500 миллисекунд. Миллисекунда — это одна тысячная секунды. Вторая половина loop() делает наоборот: D2 в LOW, D13 в HIGH и ещё 500 мс ожидания. Затем loop() снова начинается с самого начала.

Цена delay()

Пока delay() ждёт, Uno больше ничего не делает. Для Blink это нормально. Но робот должен одновременно ехать, измерять и принимать решения, и останавливаться, чтобы подождать, он не может. Как мигать без delay(), показано в уроке про millis() и состояния.

Если что-то не работает

  • В симуляторе ничего не мигает. Нажмите «Загрузить», а не только «Проверить». Кнопка «Проверить» только компилирует скетч. Кнопка «Загрузить» отправляет его на плату.
  • При проверке появляется ошибка. Посмотрите на номер строки в сообщении. Частая причина — пропущенная ; или перепутанные заглавные и строчные буквы: digitalwrite — не то же самое, что digitalWrite. Чтобы начать заново, скопируйте исходный скетч кнопкой «Копировать».
  • Светодиод L мигает, а модуль не горит. Проверьте, что S подключён к D2, а пин «-» — к GND. Если эти два провода перепутаны, ток не может пройти через светодиод в таком направлении, и он не загорается. Проверьте также, что LED_MODULE совпадает с пином, который вы использовали.
  • Светодиод модуля светится очень слабо. Пин всё ещё работает как вход. Проверьте, что в setup() есть pinMode(LED_MODULE, OUTPUT).
  • IDE не показывает порт Uno (в реальной сборке). Отключите кабель, подключите его снова и посмотрите, какой порт появился. Попробуйте другой USB-кабель: некоторые кабели передают только питание. В части копий Uno стоит USB-микросхема CH340, и некоторым компьютерам для неё нужен драйвер.
  • Загрузка не проходит с сообщением «programmer is not responding» (в реальной сборке). Это значит «программатор не отвечает». Проверьте, что выбрана плата Arduino Uno и правильный порт. Отсоедините все провода от D0 и D1: через эти пины идут данные USB.

Что дальше

Теперь вы умеете переключать пин из скетча. Точно так же робот управляет своими огнями и драйвером моторов.

Сделайте лучше

  1. Сделайте короткую вспышку: модуль светодиода горит 100 мс, а потом 900 мс не горит.
  2. Пусть оба светодиода мигают одновременно, а не по очереди.
  3. Передайте SOS азбукой Морзе: три короткие вспышки, три длинные и снова три короткие.