Top.Mail.Ru
Электроника и программирование в симуляторе WokWi
Сайт для обучающихся и наставников образовательных организаций в рамках Национальной технологической олимпиады Junior
О чем этот сайт?
Сайт знакомит обучающихся и наставников с основами электроники и программирования в симуляторе WokWi — удобном инструменте для подготовки к олимпиаде НТО Junior без необходимости использовать физическое оборудование.
Что такое симулятор WokWi?
Wokwi — это онлайн-симулятор, в котором решаются задачи НТО Junior: он воссоздаёт работу микроконтроллеров, в частности Arduino Uno, позволяя собирать виртуальные схемы из модулей и запускать на них программы без реальной электроники.
Для работы понадобится
Для работы в симуляторе WokWi вам потребуется только компьютер или ноутбук с выходом в интернет
Интерфейс симулятора
Интерфейс симулятора лаконичен и очень прост и использовании. С левой стороны экрана находится область для написания программы на языке C++. На правой части находится область, где пользователь собирает электрическую схему. Зеленая кнопка, обозначенная на рисунке цифрой 1 при нажатии на нее запускает компиляцию (проверку) ранее написанной программы. Если компиляция проходит успешно, то программа начинает свою работу. Синяя кнопка со знаком "+" при нажатии раскрывает меню выбора компонентов, где доступен поиск по названию.
Простейшая схема
В данном блоке предлагается разобрать сборку и программирование простейшей схемы "подмигивающего" светодиода в симуляторе WokWi. Напишем программу, позволяющую светодиоду раз в секунду загораться. Понимание работы такой простой схемой является основой для понимания всего процесса программирования Arduino.
1. Сборка схемы
В окне для сборки схемы вам потребуется светодиод, резистор и макетная плата. Найти их можно нажав на синюю кнопку с символом "+". В строке поиска вбейте LED (светодиод), Resistor (резистор) и Half bredboard (макетная плата).
Соедините компоненты и микроконтроллер проводами
2. Программирование
Код на языке C++ для Arduino состоит из двух частей: void setup() и void loop ().
В рамках void setup () пользователь дает микроконтроллеру возможность поучаствовать в запуске системы. Именно туда мы записываем данные о состоянии пинов, переменных и прочее. Команды, записанные в void setup () выполняться только один раз при запуске системы.
Функция void loop() - это функция, куда пользователь должен поместить все команды, которые будут выполняться все время, пока включена плата. По сути это главная функция, точка входа в нашу программу. Arduino повторяет вызов этой функции миллионы раз в секунду.
Заполнение void setup()
Начнем программирование с заполнения void setup().
Как было написано выше, все команды, использованные внутри этой функции произойдут 1 раз при включении программы, поэтому единственная команда, которую мы запишем - это команда pinMode.
pinMode - команда определяющая режим работы любого пина. В скобках указывается требуемый для работы пин, через запятую указывается режим работы: INPUT (вход) или OUTPUT (выход). В данной схеме мы используем только один пин платы - 7 для светодиода. Светодиод также является выходом схемы, поэтому указываем режим работы OUTPUT.
Обратите внимание, что в конце каждой команды нужно ставить точку с запятой (;). Так программа отделяет разные команды друг от друга, без этого символа будут всплывать ошибки.
Заполнение void loop()
Заполнение void loop () начинаем с команды, определяющей состояние пина - digitalWrite.
С помощью этой команды можно подавать напряжение на определённый пин, тем самым включая нагрузку подключенную к нему. В скобках пишется сначала номер пина к которому подключается нагрузка, а после состояние, которые требуется получить - HIGH (высокий, подает 5В) или LOW(низкий, подает 0В). Таким образом, при подаче HIGH наш светодиод будет гореть, а если подать LOW - гаснуть.
Сейчас попробуйте запустить программу. Скорее всего вы не наблюдаете мерцание светодиода, это связано с тем, что встроенная задержка разных команд мала и неощутима для человеческого восприятия. Чтобы исправить это нужно добавить команду delay (задержка) между двумя командами, написанными в луп. В скобках delay указывается значение задержки в МИЛЛИСЕКУНДАХ. То есть, если вы хотите чтобы ваш светодиод мигал раз в секунду, вам нужно написать в скобках задержку 1000.
Готово, теперь при запуске программы, светодиод на макетной плате будет мигать.
Схема с использованием функции условия
В этом задании мы соберём в программе WokWi электрическую схему из кнопки и светодиода. Когда ты нажмёшь кнопку, светодиод загорится. Чтобы это заработало, нужно не только правильно соединить детали, но и написать простую программу для управления ими. Такие задачи часто встречаются на олимпиаде НТО Junior.
1. Сборка схемы
В окне для сборки схемы вам потребуется светодиод, 2 резистора, кнопка и макетная плата. Найти их можно нажав на синюю кнопку с символом "+". В строке поиска вбейте LED (светодиод), Resistor (резистор), PushButton 6mm (кнопка )и Half bredboard (макетная плата).
Соедините компоненты и микроконтроллер проводами
2. Программирование
Заполнение void setup()
Внутри void setup() по аналогии с предыдущей схемой будут указаны команды для определения режима работы пинов. Светодиод также будет работать в режиме OUTPUT, кнопка же будет работать в режиме входа (INPUT), так как в данном случае мы будем использовать кнопку в качестве компонента с которого считываем информацию.
Заполнение void loop()
Внутри void loop () мы будем использовать алгоритм условия: if... else (если... иначе). Этот алгоритм бесконечно проверяет условие, указанное в круглых скобках и если оно истинно, то происходит команда, указанная в фигурных скобках после if.

Команда, которая будет исполняться, если условие ложно указывается в фигурных скобках после else.

В качестве условия используем проверку: нажата кнопка или нет. Чтобы считать это используем команду digitalRead, в скобках указываем номер пина с которого хотим считать информацию о напряжении. Если кнопка будет нажата, то пин будет считывать высокий (HIGH) уровень напряжение, в ином случае LOW (низкое.)
Готово! Теперь при нажатии на кнопку светодиод будет загораться. Таким образом нам удалось освоить алгоритм условия в WokWi.
Схема с использованием функции счетчика
В этом задании мы изучим, как управлять яркостью светодиода — он будет не просто включаться и выключаться, а плавно разгораться, как будто кто-то медленно крутит ручку яркости. Для этого в симуляторе WokWi нужно собрать схему и написать программу, которая постепенно увеличивает свет. Такие задачи с плавным изменением яркости часто встречаются на олимпиаде НТО Junior.
1. Сборка схемы
В окне для сборки схемы вам потребуется светодиод, резистор, и макетная плата. Найти их можно нажав на синюю кнопку с символом "+". В строке поиска вбейте LED (светодиод), Resistor (резистор) и Half bredboard (макетная плата).

Соедините компоненты и плату проводами. В отличие от самой первой схемы светодиод требуется подключить не в цифровой пин 7, а в аналоговый А1
Главным отличием цифровых пинов от аналоговых является то, что если выходные данные на цифровых пинах имеют только 2 значения: HIGH (высокое напряжение - 5 В) и LOW (низкое напряжение - 0 В), то аналоговые пины могут считывать и выдавать значения от 0 до 255. Таким образом 5В напряжения могут дробиться на половину, треть и так далее. Соответственно с помощью аналоговых пинов мы можем более гибко подбирать требуемое напряжение для нагрузки.
2. Программирование
Заполнение void setup()
Внутри void setup() по аналогии с предыдущей схемой будут указаны команды для определения режима работы пинов. Светодиод также будет работать в режиме OUTPUT, но пин будет указан аналоговый - А1.
Заполнение void loop()
Внутри void loop() будет находится цикл for. Цикл for представляет из себя счетчик с переменной: к переменной будет прибавляться единица каждый круг, пока она не достигнет заданного значения. После этого выполнение цикла закончится. В рамках синтаксиса все условия задаются в круглых скобках. Сначала мы задаем переменную i равную 0 в начальный момент времени. Далее ставим условие в какой момент выполнение цикла закончится. А прибавление единицы к переменной каждую итерацию обеспечивается командой i++.

В самом цикле будет находится команда analogWrite, но вместо какого-то конкретного значения напряжения будет задана переменная i. Таким образом изменения переменной будет плавно увеличивать яркость светодиода.
Готово! Теперь при запуске программы светодиод будет постепенно включаться.
Что дальше?
Мы рассмотрели самые базовые команды и циклы, необходимые для успешного участия в олимпиаде НТО Junior. Чтобы углубить свои знания и улучшить подготовку вы можете самостоятельно изучить задачи, которые давались в предыдущие года. Успехов!
Вопросы для рефлексии
Уровень 1: Запоминание
  • Какие основные компоненты вы использовали в схемах на Wokwi?
  • Какие ключевые команды и структуры языка Arduino вы применили в своих программах?
  • Какие три основных типа задач вы реализовали?
  • Какие шаги нужно выполнить, чтобы запустить симуляцию в Wokwi?
Уровень 2: Понимание
  • Почему важно использовать резистор при подключении светодиода к Arduino? Что бы произошло без него?
  • Объясните, как работает функция delay() и почему она используется в цикле loop().
  • Как if-else позволяет управлять поведением устройства в зависимости от состояния?
Уровень 3: Применение
  • Как можно изменить программу мигания, чтобы LED мигал не постоянно, а только при нажатой кнопке?
  • Как использовать цикл for для создания эффекта "бегущей строки" со светодиодами?
  • Где еще в реальной жизни можно применить принципы, которые вы изучили?
  • Какие простые устройства или гаджеты можно собрать, используя те же компоненты и знания?
Уровень 4: Анализ
  • Что бы вы добавили или изменили в своей схеме или коде, чтобы сделать проект интереснее или функциональнее?
  • Какие преимущества и недостатки имеет работа в симуляторе Wokwi по сравнению с физическим Arduino?
  • Какие ошибки в коде или схеме вы могли допустить, и как их исправить?
Уровень 5: Синтез
  • Какие новые знания вам нужны, чтобы добавить звук, датчик температуры или дисплей к вашему проекту?
  • Как можно объединить все три типа задач (мигание, if-else, for) в один более сложный проект?
  • Как вы можете адаптировать эти базовые примеры для решения конкретной задачи, которая вас интересует?
  • Какие другие проекты на Arduino вы хотели бы попробовать после этого?
Уровень 6: Оценка
  • Порекомендовали бы Вы это устройство вашим друзьям и знакомым?
  • Чего вам не хватило в данном кейсе?
  • Как вы оцениваете качество материалов, использованных в кейсе?
  • Какие факторы могли бы улучшить восприятие данного устройства на рынке?
Авторы