Ардуино эмулятор tinkercad: мигаем светодиодом

Мигание светодиода на Ардуино Нано, Уно

Мигание встроенным светодиодом Ардуино ► это один из первых примеров скетчей, для начинающих программировать микроконтроллер Arduino Uno или Arduino Nano.

Мигание светодиодом Ардуино, встроенного в плату — один из первых примеров скетчей, для начинающих изучать программирование микроконтроллера Arduino Uno или Arduino Nano. Разберем несколько примеров — мигание встроенным светодиодом, мигание без delay, мигание несколькими светодиодами. Прочитав статью до конца, вы поймете, как управлять миганием светодиодов, подключенных к Ардуино.

Мигание светодиодом на Ардуино Нано, Уно

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • светодиоды и резисторы;
  • макетная плата;
  • провода «папа-папа».

Платы данного семейства имеют встроенный светодиод на плате, подключенный к пину 13 через резистор. Этот светодиод мигает при включении или перезагрузке микроконтроллера. Можно с помощью программы управлять включением и выключением (миганием) светодиодом, который «висит» на 13 пине Arduino Uno и Nano. При этом не потребуется даже собирать на макетной плате электрическую схему.

Мигание встроенным светодиодом на плате

Для первого примера не потребуется собирать принципиальную схему. Код программы, используется из примера «Подключение светодиода к Ардуино». Встроенный светодиод подключается через резистор, поэтому к 13 пину можно подключать внешний светодиод без резистора. Это самый простой скетч, с которого начинают знакомство с Ардуино, скопируйте код и загрузите его в микроконтроллер через Arduino IDE.

Скетч. Мигание встроенным светодиодом Ардуино

Пояснения к коду:

  1. delay(); останавливает программу на заданное количество микросекунд;
  2. данный код подойдет к плате Arduino Nano и Arduino Mega.

Мигание светодиода на Ардуино без delay

В коде используется функция millis, которая возвращает количество миллисекунд с момента начала программы. Благодаря этой функции можно организовать многозадачность микроконтроллера. В отличии от функции delay(); , программа не останавливает выполнение команд в скетче, а считает когда пройдет заданное количество миллисекунд и может выполнять параллельные задачи.

Схема для мигания светодиодом на Ардуино без delay

Скетч. Мигание светодиода на Arduino Uno без delay

Пояснения к коду:

  1. каждые 500 миллисекунд состояние переменной boolean меняется на противоположное с помощью команды ledState=!ledState .

Мигание двух светодиодов на Ардуино Уно

Для следующего примера потребуется собрать схему на макетной плате из двух светодиодов, как изображено на картинке ниже. Более сложная программа с мигающими светодиодами — это светофор на Ардуино, где уже необходимо регулировать включение и выключение трех светодиодов и больше. После сборки электрической схемы загрузите следующий код в микроконтроллер.

Мигание несколькими светодиодами на Ардуино одновременно

Circuits.io – для начинающих

В последнее время в среде ардуинщиков стала набирать популярность программа Circuits от группы разработчиков из Autodesk. Она представляет собой онлайн-конструктор электронных схем, в том числе и на Arduino. Кстати, очень похожа на более популярное программное обеспечение под названием Fritzing . Однако там отсутствует возможность эмуляции – то есть просмотр того, как работает ваша собранная схема. Таким образом по функционалу и удобству выбор пал на circuits.io

Давайте подробнее окунемся в эту программу.

Переходим на официальный сайт софта https://assets.circuits.io/

Далее в правом верхнем углу находим кнопку входа и регистрации – выполняем эти процессы

Какие полезные функции имеет данное веб-приложение?

1) Вы можете составить собственную схему, спроектировав ее так, как нужно именно Вам.

2) Вы можете добавить собственные компоненты в приложения и таким образом использовать в своих схемам собственные наработки.

3) Можно добавить или написать библиотеку для работы с модулями

4) Эмуляция схема, когда ее можно запустить и посмотреть на результат в режиме онлайн – вы экономите время на постоянной сборке разных схем и всегда имеете право на ошибку, если что-то подключили неправильно.

А самое главное, что вам не нужно использовать Arduino IDE. Вы просто пишите код, собираете схему и проверяете все ли работает. Далее устраняете ошибки. Зато уже в реальности все будет построено первого раза! Просто фантастика:) Кстати, это слово в некотором смысле есть даже в названии программы.

Итак, зайдем на домашнюю страницу.

В левой колонке мы можем выбрать раздел приложения, который нам нужен.

Electronics Lab – она же электронная лаборатория, где можно собрать и проверить на работоспособность вашу схему.

PCB Design – возможность спроектировать собственную схему или добавить новые компоненты.

Library Manager – добавление и использование различных библиотек в открытом доступе.

Также на сайте приложения существуют обучающие видео для новичков.

У команды разработчиков есть свой канал на платформе YouTube и свой собственный блог, где всегда можно найти актуальную информацию о приложении.

Однако есть один нюанс, в котором можно запутаться. Многие видео по работе с сайтом были выпущены 1-2 года назад. С недавних пор в circuits произошли небольшие изменения о которых они написали в своем блоге

Суть в том, что с 2 июня 2017 года лаборатория электроники объединилась с Tinkercad – инструментом 3D дизайна и теперь весь функционал находится по адресу: https://123dapp.com/circuits

Сам же Tinkercad , который был выпущен еще в 2011 году, обладает большим функционалом и известен многим, как бесплатный и удобный помощник в создании собственных объемных моделей и отправке их на печать.

Выполните вход на этот сайт через данные, по которым регистрировались в circuit (для входа используется единая учетная запись autodesk)

Далее вам откроется окно обучения, но оно больше имеет направленность на 3D технологии, чем на Arduino.

Поэтому мы пропускаем обучение и заходим в личный кабинет (нажимай на него в верхнем правом углу).

В окне личного кабинете заходим в раздел circuits и создаем новый проект.

Поздравляю! Теперь у вас есть все необходимое для создания собственных схем и интересных проектов. Итак. В верхней панели лаборатории можно заметить такие разделы, как редактор программного кода для вашей схемы, каталог компонентов для добавления, а также кнопка старта симуляции работы вашего проекта.

Знаю, буду очень банален. Но давайте в качестве показательного примера соберем небольшую схему на Arduino с использованием кода Blink (мигание светодиода). Для этого будем находить нужные нам компоненты (плата Arduino, макетная плата, светодиод, резистор и провода) и перетаскивать курсором мыши. Также при добавлении компонента в схему, вы можете дать ему имя (особенно это важно делать, когда у вас несколько одинаковых элементов в схеме).

Еще в верхней панели слева есть такие функции, как поворот компонента в схеме на небольшой угол, удаление объекта, сохранение и кнопки управления историей изменений (например, отменить последнее действие – осуществить возврат).

Соединительные провода рисуются сами от руки. Для каждого провода можно задать не только имя, но и цвет.

Схема у меня получилась следующая:

Далее загрузим код. Я отключил функцию Block и написал скетч для мигания светодиода с небольшой частотой.

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

Подобными действиями можно составлять и другие схемы.

На этом у меня все. Надеюсь, данная статья была вам полезна, а сама программа сможет упростить вам работу с Arduino.

Мигаем светодиодом с помощью Ардуино эмулятора Tinkercad

Сегодня мы продолжаем тему Ардуино эмуляторов. Постараемся научиться мигать светодиодом с использованием цифрового выхода Ардуино. Если вы новичок в Arduino – этот урок очень подойдет вам для начала работы с платой. Мы подключим светодиод к Arduino Uno и составим простую программу для включения и выключения светодиода.

Самое главное отличие этого урока от других – вы сможете реализовать его с помощью эмулятора Ардуино Tinkercad. Ардуино эмуляторы очень популярные программы и приложения, которые позволяют создавать проекты и их тестировать виртуально, до того как вам понадобится покупать комплектующие.

Для наших читателей мы приводили большой список программ симуляторов Ардуино с подробным описанием каждой. С помощью эмулятора Tinkercad вы можете создать свою собственную схему и проверить её работоспособность. Просто нажмите «Начать симуляцию» после того как всё соедините. Вы можете использовать эмулятор в любое время, чтобы проверять свои схемы. Tinkercad Circuits – бесплатная браузерная программа, которая позволяет создавать и моделировать схемы. Она идеально подходит для обучения и создания прототипов.

Что нужно для эмулятора

Для того, чтобы воспользоваться программой Ардуино эмулятора – вам нужно зарегистрироваться на сайте tinkercad.com. Далее мы должны выбрать компоненты:

Имя Количество Компонент
U1 1 Arduino Uno R3 (Ардуино Уно)
R1 1 220 ohm Resistor (Резистор 220 Ом)
D1 1 Red LED (Красный светодиод)

Если вы параллельно с эмулятором делаете проект с вашей физической Arduino Uno (или совместимой) платой, вам также понадобится USB-кабель и компьютер с бесплатным программным обеспечением Arduino IDE (или плагином для веб-редактора) и, при необходимости, одним светодиодом.

Шаг 1: Цепь светодиодного резистора

Начинаем работу с эмулятором Ардуино с цепи светодиода и резистора.

Ножки светодиода соединены с двумя контактами на Arduino: земля и пин 13. Компонент между светодиодом и выводом 13 резистор, который помогает ограничить ток, чтобы светодиод не загорелся сам. Без этого вы эмуляторе получите предупреждение о том, что светодиод может вскоре сгореть. Не имеет значения, идет ли резистор до или после светодиода в цепи. Цветовые полосы идентифицируют значение резистора и для схемы проекта подойдут от 100 до 1000 Ом.

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

  • Положительная нога, называемая анодом, обычно имеет более длинную ногу и подключается к питанию, в данном случае с выходного вывода Arduino.
  • Отрицательная нога, называемая катодом, с более короткой ножкой, соединяется с землей.

На панели компонентов эмулятор Ардуино Tinkercad перетащите резистор и светодиод на рабочую область. Измените значение резистора, отрегулировав его на 220 Ом в инспекторе компонентов, который появляется, когда выбран резистор.

Вернитесь на панель компонентов, найдите и перенесите плату Arduino Uno. Кликните один раз, чтобы подключить провод к компоненту или пину и нажмите еще раз, чтобы подключить другой конец. Подключите резистор к любой стороне светодиода. Если вы подключили резистор к аноду светодиода (положительный, более длинный), подключите другую ногу резистора к цифровому выходу 13 Arduino. Если вы подключили резистор к катоду светодиода (отрицательная, более короткая нога), подключите другую ногу резистора к земле Arduino (GND). Создайте еще одно соединение между незакрепленной ножкой светодиода и контактом 13 или заземлением, в зависимости от того, что еще не подключено.

Если у вас есть физическая плата Arduino Uno (или совместимая), вы можете подключить светодиод непосредственно к контакту 13 (положительный, более длинный анод) и заземлить (отрицательный, более короткий катод), потому что контакт 13 фактически имеет встроенный резистор именно для таких тестов.

Шаг 2: Простой код с блоками

В эмуляторе Ардуино Tinkercad вы можете легко программировать свои проекты с помощью блоков. Давайте рассмотрим простой код, управляющий миганием, открыв редактор кода (кнопка с надписью «Код»). Вы можете изменить размер редактора кода, щелкнув и перетащив левый край окна. Смотрите анимированный рисунок выше.

Код начинается с двух серых блоков комментариев, которые являются просто заметками для людей. Первый синий выходной блок устанавливает встроенный светодиод как HIGH, который является способом Arduino для описания «включено». Эта выходная команда активирует сигнал 5 В на все, что связано с указанным выводом. Далее – желтый командный блок, который ждет одну секунду, достаточно просто. Таким образом, программа приостановится, пока светодиод горит в течение одной секунды. Затем после следующего комментария идет синий выходной блок, который установит светодиод обратно в LOW или «выключен», за которым следует вторая пауза в секунду.

Попробуйте настроить этот код, изменив время ожидания и нажав «Начать симуляцию». Вы можете даже добавить дополнительные выходы и блоки паузы, чтобы создать более длинные мигающие варианты работы.

Вы заметили, что на плате мигает маленький светодиод? Этот встроенный светодиод также подключен к контакту 13 и предназначен для использования в целях тестирования без необходимости подключения каких-либо внешних компонентов. У него даже есть свой собственный крошечный резистор, припаянный непосредственно к поверхности платы.

Готовы создать свой собственный проект? Выберите Arduino, которую вы добавили на рабочую область (или выберите её в раскрывающемся меню в редакторе кода), и начните перетаскивание блоков кода, чтобы создать свою собственную программу мигающего светодиода.

Шаг 3: Объяснение кода

Давайте теперь поговорим о коде при работе Ардуино эмулятора.

Когда редактор кода открыт в эмуляторе, вы можете щелкнуть выпадающее меню слева и выбрать «Блоки + Текст» (Blocks + Text), чтобы открыть код Arduino, сгенерированный блоками кода. Все дополнительные символы являются частью синтаксиса Arduino, но не пугайтесь! Требуется время, чтобы научиться писать правильный код с нуля. Здесь мы рассмотрим каждую часть, и вы всегда можете использовать блоки для сравнения и повышения своего уровня.

Мы не знаем какой версией вы пользуетесь, поэтому код мы оставим таким, какой был у нас.

Этот первый раздел представляет собой комментарий блока заголовка, описывающий, что делает программа. Блочные комментарии открываются так /* и закрываются так */.

Далее приведена настройка кода, которая помогает настроить то, что потребуется вашей программе позже. Она запускается один раз и содержит все что нужно внутри своих фигурных скобок <>. В нашем проекте нужно настраивает вывод 13 в качестве выхода, который подготавливает плату для отправки сигналов на нее, а не приема.

Основная часть программы находится внутри цикла, обозначенного другим набором фигурных скобок <>. Эта часть кода будет выполняться повторно до тех пор пока на плате есть питание. Текст, следующий за двойными косыми чертами, также является комментарием, чтобы облегчить понимание программы.

Больше полезного о программировании Ардуино вы найдете в нашей статье “Ардуино язык программирования”.

Используемая команда вывода называется digitalWrite(), которая является функцией, которая устанавливает или выдает значение HIGH или LOW. Чтобы приостановить программу мы будем использовать функцию delay(), которая занимает несколько миллисекунд (1000 мс = 1 с).

Шаг 4: Использование настроек для начинающих

Это схема, которую, как мы думаем, вы захотите использовать часто, сохранена в разделе для начинающих (Blink Circuit Starter) эмулятора Ардуино.

Взять эту схему и код в любое время можно используя раздел “стартер” для начинающих, доступный на панели компонентов в выпадающем меню

Starters → Arduino

Для более продвинутой версии этого кода Arduino можно посмотреть вариант “Blink Without Delay” (Моргание без задержки), который использует текущее время для отслеживания интервалов мигания вместо delay();.

Шаг 5: Программируем реальную Ардуино

На этом мы заканчиваем работу с эмулятором Ардуино и можно переходить к работе с реальной платой, чтобы понять весь процесс создания проекта.

Чтобы запрограммировать вашу реальную Arduino Uno, скопируйте код из окна программы и вставьте его в пустой скетч Arduino или нажмите кнопку загрузки и откройте полученный файл, используя Arduino IDE.

Этот начальный пример также доступен непосредственно в программном обеспечении Arduino в разделе:

File → Examples → 01. Basics → Blink
Файл → Примеры → 01. Основы → Мигание

Подключите USB-кабель и выберите плату и порт в меню «Инструменты» программного обеспечения.

Загрузите код и посмотрите как начнет мигать светодиод, что аналогично проекту, который вы создали ранее в Ардуино эмуляторе. Для более глубокого изучения и программирования физической платы Arduino Uno вы можете познакомиться с нашими уроками на сайте.

Усложняем проекты

Поэкспериментируйте с этой эмуляцией Ардуино, добавив больше блоков для создания мигающих светодиодов. А сможете ли вы создать программу, которая будет выдавать сообщения с использованием кода Морзе?

Теперь, когда вы знаете, как мигать светодиодом, используя цифровой выход Arduino, вы готовы попробовать другие упражнения Arduino, которые используют функцию digitalWrite (). Попробуйте использовать макет, чтобы добавить больше светодиодов и дополнительный код для управления ими.

Ардуино эмулятор tinkercad: мигаем светодиодом

Вот и закончился базовый курс уроков программирования Arduino. Мы с вами изучили самые базовые понятия, вспомнили (или изучили) часть школьной программы по информатике, изучили большую часть синтаксиса и инструментов языка C++, и вроде бы весь набор Ардуино-функций, который предлагает нам платформа. Подчеркну – мы изучили C++ и функции Ардуино, потому что никакого “языка Arduino” нет, это ложное понятие. Arduino программируется на C или ассемблере, а платформа предоставляет нам всего лишь несколько десятков удобных функций для работы с микроконтроллером, именно функций, а не язык. Теперь перед нами чистый лист блокнота Arduino IDE и желание творить и программировать, давайте попробуем!

Структура программы

Прежде, чем переходить к реальным задачам, нужно поговорить о некоторых фундаментальных вещах. Микроконтроллер, как мы обсуждали в самом начале пути, это комплексное устройство, состоящее из вычислительного ядра, постоянной и оперативной памяти и различных периферийных устройств (таймеры/счётчики, АЦП и проч.). Обработкой нашего с вами кода занимается именно ядро микроконтроллера, оно раздаёт команды остальным “железкам”, которые в дальнейшем могут работать самостоятельно. Ядро выполняет различные команды, подгоняемое тактовым генератором: на большинстве плат Arduino стоит генератор с частотой 16 МГц. Каждый толчок тактового генератора заставляет вычислительное ядро выполнить следующую команду, таким образом Ардуино выполняет 16 миллионов операций в секунду. Много ли это? Для большинства задач более чем достаточно, главное использовать эту скорость с умом.

Зачем я об этом рассказываю: микроконтроллер может выполнить только одну задачу в один момент времени, так как у него только одно вычислительное ядро, поэтому реальной “многозадачности” нет и быть не может, но за счёт большой скорости выполнения ядро может выполнять задачи по очереди, и для человека это будет казаться многозадачностью, ведь что для нас “раз Миссисипи“, для микроконтроллера – 16 миллионов действий!

Основной парадигмой работы с микроконтроллером является так называемый суперцикл, то есть главный цикл программы, который выполняется сверху вниз (если смотреть на код) и начинает с самого начала, когда доходит до конца, и так далее. В Arduino IDE нашим суперциклом является loop(). В главном цикле мы можем опрашивать датчики, управлять внешними устройствами, выводить данные на дисплеи, производить вычисления и всё такое, но в любом случае эти действия будут происходить друг за другом, последовательно.

Помимо цикла у нас есть прерывания, которые позволяют реализовать некую “поточность” выполнения задач, особенно в тех ситуациях, когда важна скорость работы. Прерывание позволяет остановить выполнение основного цикла в любом его месте, отвлечься на выполнение некоторого блока кода, и после успешного его завершения вернуться к основному циклу и продолжить работу. Некоторые задачи можно решить только на прерываниях, не написав ни одной строчки в цикл loop()! Мы с вами изучали аппаратные прерывания, позволяющие прерваться при замыкании контактов. Такие прерывания являются внешними, то есть их провоцируют внешние факторы (человек нажал на кнопку, сработал датчик, и т.д.). Также у микроконтроллера есть внутренние прерывания, которые вызываются периферией микроконтроллера, и этих прерываний может быть не один десяток!

Одним из таких прерываний является прерывание таймера: по умолчанию Arduino IDE настраивает один из таймеров на счёт реального времени, благодаря этому у нас работают такие функции как millis() и micros(). Именно эти функции являются готовым инструментом для тайм-менеджмента нашего кода.

Многозадачность?

Большинство примеров к различным модулям/датчикам используют задержку delay() в качестве “торможения” программы, например для вывода данных с датчика в последовательный порт. Именно такие примеры портят восприятие новичка, и он тоже начинает использовать задержки. А на задержках далеко не уедешь!

Давайте вспомним конструкцию таймера на millis() из урока о функциях времени: у нас есть переменная, которая хранит время прошлого “срабатывания” таймера. Мы вычитаем это время из текущего времени, эта разница постоянно увеличивается, и по условию мы можем поймать тот момент, когда пройдёт нужное нам время. Будем учиться избавляться от delay()! Начнём с простого: классический blink:

Программа полностью останавливается на команде delay(), ждёт указанное время, а затем продолжает выполнение. Чем это плохо? (А вы ещё спрашиваете?) Во время этой остановки мы ничего не можем делать в цикле loop, например не сможем опрашивать датчик 10 раз в секунду: задержка не позволит коду пойти дальше. Можно использовать прерывания (например – таймера), но о них мы поговорим в продвинутых уроках. Сейчас давайте избавимся от задержки в самом простом скетче.

Первым делом внесём такую оптимизацию: сократим код вдвое и избавимся от одной задержки, используя флаг:

Хитрый ход, запомните его! Такой алгоритм позволяет переключать состояние при каждом вызове. Сейчас наш код всё ещё заторможен задержкой в 1 секунду, давайте от неё избавимся:

Что здесь происходит: цикл loop() выполняется несколько сотен тысяч раз в секунду, как ему и положено, потому что мы убрали задержку. Каждую свою итерацию мы проверяем, не настало ли время переключить светодиод, не прошла ли секунда? При помощи этой конструкции и создаётся нужная многозадачность, которой хватит для 99% всех мыслимых проектов, ведь таких “таймеров” можно создать очень много!

Данный код всё ещё мигает светодиодом раз в секунду, но помимо этого он с разными промежутками времени отправляет сообщения в последовательный порт. Если открыть его, можно увидеть следующий текст:

Это означает, что у нас спокойно работают 4 таймера с разным периодом срабатывания, работают “параллельно”, обеспечивая нам многозадачность: мы можем выводить данные на дисплей раз в секунду, и заодно опрашивать датчик 10 раз в секунду и усреднять его показания. Хороший пример для первого проекта! Давайте соберём простенькие метео-часы.

Как соединить несколько скетчей?

Сила Arduino как конструктора заключается в том, что абсолютно по любой железке вы сможете найти в Гугле подробное описание, библиотеку, схему подключения и пример работы: полностью готовый набор для интеграции в свой проект! Вернёмся к нашим метео-часам и попробуем “собрать” такой проект из скетчей-примеров, ведь именно для этого примеры и нужны! Нам понадобится:

  • Arduino NANO
  • Дисплей. Пусть будет LCD1602 с переходником на i2c
  • Модуль реального времени, возьмём DS3231
  • Термометр ds18b20

Начинаем гуглить информацию по подключению и примеру для каждой железки:

Из уроков из Гугла мы узнаём такую важную информацию, как схемы подключения: дисплей и часы подключаются к шине i2c, а датчик ds18b20 можно подключить в любой другой пин. Схема нашего проекта:

Качаем библиотеки для наших модулей и устанавливаем. Библиотеку дисплея нам дают прямо в статье: https://iarduino.ru/file/134.html, библиотеку для часов по своему опыту советую RTClib (та, что в статье – не очень удобная). В статье про датчик температуры нам рассказали про библиотеку DallasTemperature.h, ссылку – не дали. Ну чтож, поищем сами “DallasTemperature.h”, найдём по первой ссылке. Для неё нужна ещё библиотека OneWire, ссылку на неё дали в статье про термометр. Итого у нас должны быть установлены 4 библиотеки.

Сейчас наша цель – найти рабочие примеры для каждой железки, убедиться в их работоспособности и выделить для себя минимальный набор кода для управления модулем, это бывает непросто – в статьях бывают ошибки и просто нерабочий код: эти статьи чаще всего являются копипастой от людей, далёких от темы. Я взял пример работы с дисплеем из статьи, а вот часы и термометр пришлось смотреть в примерах библиотеки. Немного причешем примеры, оставим только нужные нам функции получения значений или вывода, я оставил всё что мне нужно в setup():

Источники:

http://amperkot.ru/blog/circuits/

http://arduinoplus.ru/arduino-emulyator/

http://alexgyver.ru/lessons/how-to-sketch/

http://xn--18-6kcdusowgbt1a4b.xn--p1ai/%D0%B0%D1%80%D0%B4%D1%83%D0%B8%D0%BD%D0%BE-%D0%BD%D0%B0%D0%BD%D0%BE/

Ссылка на основную публикацию