Arduino.ru
В этом примере показано как с помощью контроллера Arduino заставить мигать светодиод.
Необходимые компоненты
- контроллер Arduino
- светодиод
- резистор 220 Ом
Подключение
Мы подключаем резистор сопротивлением 220 Ом к выходу номер 13 (pin 13), к резистору в свою очередь подключаем анод (обычно длинная ножка) светодиода. Катод подсоединяем к земле (Grd). Затем подключаем контроллер через USB кабель к компьютеру и загружаем приведенный ниже код на котроллер Arduino.
Большинство плат Arduino имеют встроенный SMT (Surface-mount techology)светодиод, подключенный к выходу 13. Если вы запустите код на таких платах без подключения внешниего светодиода, то вы должны увидеть мигание встроенного светодиода на плате.

Схема

Код
В коде мы первой строк задаем режим выхода для вход/выхода (pin) 13:
В основном цикле (loop) программы зажигаем светодиод:
На выходе 13 появляется напряжение 5 В. Светодиод зажигается. Затем мы выключаем светодиод:
Изменив напряжение на выходе на 0 вольт, мы выключили светодиод. Для того чтобы человеческий глаз успевал замечать переключение светодиода введем задержку с помощью функции delay() .
/* Зажигаем светодиод на одну секунду, затем выключаем его на одну секунду в цикле. */ void setup() < // Инициализируем цифровой вход/выход в режиме выхода. // Выход 13 на большинстве плат Arduino подключен к светодиоду на плате. pinMode(13, OUTPUT); >void loop() < digitalWrite(13, HIGH); // зажигаем светодиод delay(1000); // ждем секунду digitalWrite(13, LOW); // выключаем светодиод delay(1000); // ждем секунду >
Смотрите также
Как помигать светодиодом arduino
Arduino в г. Харьков. Доставка
в любой город Украины

(050) 6666-833 Леонид

(097) 96-77-668 Леонид
Работаем: понедельник — воскресенье
Все товары с активной кнопкой
КУПИТЬ есть в наличии.
Все цены актуальные.
- Вы здесь:
- Главная
- Уроки по arduino
- Урок по arduino 2 — мигающий светодиод
Урок по arduino 2 — мигающий светодиод
Мигание светодиодом на 13-м выходе платы arduino — один из базовых экспериментов. Данный опыт вам пригодиться для индикации разных процессов в вашей будущей программе с помощью встроенного светодиода arduino.
Для этого эксперимента нам понадобится
Для урока нам понадобится :
Копируем нижеприведенный текст в IDE arduino.
int ledPin = 13; // Задаем номер 13 как интерфейса (входа) для светодиода
void setup ()
pinMode (ledPin, OUTPUT); // Указываем интерфейс как выход
>
void loop ()
digitalWrite (ledPin, HIGH); // включаем светодиод на плате
delay (1000); // Задаем задержку 1 секунду
digitalWrite (ledPin, LOW); // выключаем светодиод на плате
delay (1000); // Задаем задержку 1 секунду
>
То же самое но с загрузкой через браузер
Логика работы программы ясна из комментариев к коду. После ее загрузки мы увидим мигающий светодиод на плате, одну секунду он горит, одну не горит. Как правило данный код производитель по умолчанию прошивает в плату для контроля ее работоспособности.
Мигаем светодиодом
Будем постепенно знакомиться с основами программирования, платой и другими полезными вещами. Это позволит избежать стресса от потока новой информации.
Хотя я немного разбираюсь в программировании, сегодня притворюсь, что никогда не слышал о языках программирования и постараюсь максимально доходчиво показать, как новичок осваивает новую для себя деятельность.
Во-первых, нам придётся писать примеры на C++-подобном языке. Поэтому можете похвастаться перед знакомыми, что пишите программы на C++. Во-вторых, он очень упрощённый, и вам не нужно бояться его.
01.Basics: Blink
Второй пример будет немного сложнее, ведь придётся подключать плату к компьютеру. Но есть и хорошая новость — нам не понадобятся дополнительные прибамбасы в виде проводов, датчиков, светодиодов, кнопок. Дело в том, что на плате уже есть один маленький встроенный светодиод, вот мы его и включим.
Запускаем скетч File | Examples | 1.Basics | Blink (Файл | Примеры | 1.Basics | Blink). У вас загрузится готовый пример с кодом. С его помощью мы можем увидеть, что плата работает.

Выбираем нашу плату — в меню Tools | Board (Сервис | Плата) должна быть отмечена Arduino Uno (как правило по умолчанию она уже отмечена). У вас может быть другая плата. Естественно, вы должны уже подключить плату к компьютеру через USB-порт для загрузки скетча в микроконтроллер.
Теперь нужно выбрать последовательный порт. Опять идём в меню Tools | Serial Port (Сервис | Последовательный порт) и выбираем нужный порт (обычно это COM3 или COM4).
Теперь нам необходимо загрузить открытый пример Blink на микроконтроллер. Просто щёлкните на кнопкуUpload (Загрузить) и внимательно смотрите на плату. Вы увидите, что светодиоды, помеченные как RX и TX будут мигать. После успешной загрузки примера в контроллер, в строке состояния среды разработки появится надпись Done uploading (Загрузка выполнена).
Ещё ниже в области консоли будет выведено сообщение:
Sketch uses 930 bytes (2%) of program storage space. Maximum is 32256 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 2039 bytes for local variables. Maximum is 2048 bytes.
В сообщение выводится информацию об используемой памяти. Программа настолько проста, что почти ничего не потребляет (0% оперативной памяти и 2% постоянной памяти).
Через несколько секунд после загрузки, вы можете увидеть, что светодиод, помеченный на плате как 13 (L), будет мигать оранжевым цветом. Поздравляю, вы успешно установили среду разработки и запустили свою первую программу!
Обращу внимание, что в комментариях к коду написано, что листинг менялся несколько раз. Так выглядел код в предыдущий раз.
// Pin 13 has an LED connected on most Arduino boards. // give it a name: int led = 13; // the setup routine runs once when you press reset: void setup() < // initialize the digital pin as an output. pinMode(led, OUTPUT); >// the loop routine runs over and over again forever: void loop() < digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second >
Сравните с текущей версией.
// the setup function runs once when you press reset or power the board void setup() < // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); >// the loop function runs over and over again forever void loop() < digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second >
Теперь вместо создания отдельной переменной led используется встроенная константа LED_BUILTIN. Это удобно, так как в разных платах используются разные значения для встроенного светодиода и таким образом программа получилась универсальной.
Возвращаемся к первой программе BareMinimum. Откройте скетч и сделайте сначала первую вещь — нажмите на кнопку Verify (первый значок с галочкой). Среда разработки переводит ваш код в машинный код, т.е. компилирует. Если в вашем коде есть ошибка, то компилятор выведет сообщение. Это полезно, чтобы не тратить зря время на загрузку заведомо неработающей программы. Давайте сознательно сделаем ошибку — напишем код в функции setup().
void setup() < // put your setup code here, to run once: int cat = "Я люблю котиков"; >
С точки зрения кошатника, здесь всё написано правильно. Предложение написано без ошибок, есть даже точка с запятой в конце строки — всё как положено.
Проверим. Нажимаем кнопку Verify и видим сообщения с красным текстом. Его текст приводить не буду, сами убедитесь. Если программа с ошибкой, то нет смысла её загружать на плату. Даже если вы очень упрямый и всё-равно нажмёте кнопку Upload, то получите ту же ошибку. Иными словами, Upload сначала самостоятельно выполняет операцию Verify и при отсутствии ошибки загружает скетч.
Разбор примера
Мы запустили программу, чтобы помигать светодиодом. Но делали это неосознанно, повторяя шаг за шагом описываемые действия. В дальнейшем вам придётся самому писать код, а значит пора ознакомится с основами программирования.
Изучим код шаг за шагом.
В функции setup() мы видим три строчки:
// the setup function runs once when you press reset or power the board void setup() < // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); >
Приблизительный перевод комментариев, которые используется в функции setup() можно перевести как:
// инициализируем цифровой порт как вывод
Дальше следует сам код, который делает операцию, описанную в комментариях. Обратите внимание, что команда завершается точкой с запятой:
pinMode(LED_BUILTIN, OUTPUT);
В старых версиях код был немного другим:
// очень старый вариант pinMode(13, OUTPUT); // обновлённый вариант pinMode(led, OUTPUT);
Разработчики позже написали более грамотный код, вынеся число 13 в отдельную переменную led.
// Pin 13 has an LED connected on most Arduino boards. // give it a name: int led = 13;
Комментарий можно перевести как:
// Порт 13 в большинстве плат Arduino соединён со светодиодом
Сейчас код обновили, и вместо переменной led используют константу LED_BUILTIN. Такой подход удобен, так как не все платы Arduino имеют встроенный светодиод на порту 13. Если у вас две разные платы и одна из них имеет нестандартный номер, то вам не придётся переписывать пример под каждую плату. Например, у плат MKR1000 встроенный светодиод находится на порту 6.
Нам встретилась новая функция pinMode(), которая устанавливает режим для портов. Функция состоит из двух параметров. В первом параметре указывается порт, с которым мы собираемся работать. Во втором параметре мы сообщаем, как должен работать указанный порт: работать на выход (OUTPUT) или вход (INPUT). В нашем примере, вывод под номером 13 (или другой порт, используемый встроенным светодиодом) должен выводить информацию (посылать сигнал), то есть давать указание мигать светодиоду.
Мы определили в функции setup() необходимые данные для начала работы и теперь можем приступить к непосредственной реализации задачи в функции loop().
// Старый вариант // the loop routine runs over and over again forever: void loop() < digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second >// Современный вариант // the loop function runs over and over again forever void loop() < digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second >
Здесь мы видим уже четыре строчки кода. Первая строчка включает светодиод при помощи функции digitalWrite(). В первом параметре мы указываем номер порта, с которым собираемся работать, а во второй указываем константу HIGH. Забегая вперёд, могу сказать что константа HIGH равна 1, и можно было написать digitalWrite(13, 1). Но такая запись не очень удобна, так мельтешение цифр в большом проекте затрудняет чтение кода. А здесь вы сразу видите, что на порту под номером 13 включается светодиод.
Далее идёт команда, отвечающая за паузу — delay(), которая имеет один параметр — количество времени в миллисекундах. В нашем примере мы сделали паузу в одну секунду (1000 миллисекунд = 1 секунда).
Следом идёт уже знакомая нам функция digitalWrite(), но уже с параметром LOW, который выключает светодиод (значение константы LOW равно 0).
И последняя строчка снова делает паузу в одну секунду.
Посмотрим, как работает программа. Когда мы загружаем программу в микроконтроллер, то Arduino активирует порт 13 в режиме выхода (функция setup()), а затем начинает последовательно выполнять четыре строчки из функции loop(): включает диод-пауза-выключает диод-пауза. Когда эти четыре строчки будут выполнены, то они снова будут вызваны и будут повторяться до тех пор, пока мы не выдернем кабель.
Немного о паузе. Теоретически можно убрать вызов функции delay() и программа будет работать. Проблема в другом — контроллер работает с частотой 16 миллионов герц (герц — одно колебание в секунду; если команда длится один такт, вывод переключается 16 миллионов раз в секунду, соответственно, состояние вывода меняется каждые 0,0000000625 секунды), человеческий глаз не способен увидеть реакцию светодиода. Необходимо немного увеличить интервал между двумя командами включения и выключения светодиода.
Что мы можем изменить в данной программе? По большому счету ничего — мы можем установить только собственные значения пауз. Поэкспериментируйте с этим. Другие изменения результата не принесут — нет смысла, например, сейчас использовать другой порт или использовать режим INPUT.
Добавляем свой светодиод (+светодиод)
Мы научились мигать встроенным светодиодом. Но на самом деле у вас не будет возможность пользоваться встроенными компонентами, а придётся самостоятельно собирать нужную конструкцию и взаимодействовать с ней. Поэтому нам понадобится отдельный светодиод, который и будет у нас и мигать, и затухать, и кашу варить (насчёт последнего я, пожалуй, погорячился). Можно использовать любой светодиод — красный, зелёный, синий.

Напомню, что диод проводит ток в одном направлении. Следовательно, необходимо всегда правильно устанавливать светодиод в своих схемах. Встроенный светодиод уже правильно припаян к плате Arduino (скажем спасибо разработчикам).
В светодиодах короткую ножку («минус») светодиода нужно соединять с землёй (GND). Светодиод не рассчитан на большой ток. Чтобы не повредить светодиод, используйте с ним резистор. Он позволяет уменьшить силу тока. В противном случае светодиод прослужит недолго или просто сгорит. Полярность резисторов не важна. Сам резистор можно подключать как до светодиода, так и после него. Я привык сначала ставить резистор, а потом светодиод по направлению от источника питания к земле.
Из первого примера с встроенным светодиодом мы помним, что он использует вывод под номером 13 (на большинстве плат). На плате есть свободный вывод с этим номером, который находится рядом с выводом GND. Берём светодиод и вставляем в эти выводы. Не забываем, что короткую ножку вставляем в GND, а длинную в вывод 13. У вывода 13 уже установлен резистор, поэтому светодиод не сгорит.

Запускаем снова программу Blink. Теперь будут мигать два светодиода: встроенный и наш. Красота!
Вернёмся к светодиодам. Как правило, в цепи идёт слишком большой ток для светодиодов. Чтобы уменьшить силу тока, используют токопонижающие резисторы (сопротивления). У светодиодов есть важные характеристики: ток питания и напряжение падения (Forward voltage). Невероятно, но факт — светодиоды разных цветов используют разные значения напряжения падения. Максимальный ток для светодиодов колеблется в районе 20 миллиампер. Для вычисления значения сопротивления используют формулу: из напряжения питания вычитаем напряжение падения и результат делим на силу тока в светодиоде в амперах. В документации обычно рекомендуют использовать резистор от 220 ohm до 1K ohm. На практике, можно использовать и 100 ом. Если поставите меньше, то будет риск спалить светодиод. При выполнении опытов с несколькими светодиодами вы можете установить разные резисторы, чтобы увидеть разницу.
На следующем уроке мы поближе познакомимся с цифровыми выводами и попробуем изменять программы под свои нужды.
Мигание светодиодом Ардуино

Мигание светодиодом Ардуино, встроенного в плату — один из первых примеров скетчей, для начинающих изучать программирование микроконтроллера Arduino Uno или Arduino Nano. Разберем несколько примеров — мигание встроенным светодиодом, мигание без delay, мигание несколькими светодиодами. Прочитав статью до конца, вы поймете, как управлять миганием светодиодов, подключенных к Ардуино.
Мигание светодиодом на Ардуино Уно, Нано
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- светодиоды и резисторы;
- макетная плата;
- провода «папа-папа».
Платы данного семейства имеют встроенный светодиод на плате, подключенный к пину 13 через резистор. Этот светодиод мигает при включении или перезагрузке микроконтроллера. Можно с помощью программы управлять включением и выключением (миганием) светодиодом, который «висит» на 13 пине Arduino Uno и Nano. При этом не потребуется даже собирать на макетной плате электрическую схему.
Мигание встроенным светодиодом на плате
Для первого примера не потребуется собирать принципиальную схему. Код программы, используется из примера «Подключение светодиода к Ардуино». Встроенный светодиод подключается через резистор, поэтому к 13 пину можно подключать внешний светодиод без резистора. Это самый простой скетч, с которого начинают знакомство с Ардуино, скопируйте код и загрузите его в микроконтроллер через Arduino IDE.
Скетч. Мигание светодиодом Ардуино на плате
void setup() < pinMode(13, OUTPUT); // объявляем пин 13 как выход > void loop() < digitalWrite(13, HIGH); // зажигаем светодиод delay(1000); // ждем 1 секунду digitalWrite(13, LOW); // выключаем светодиод delay(1000); // ждем 1 секунду >
Пояснения к коду:
- delay(); останавливает программу на заданное количество микросекунд;
- данный код подойдет к плате Arduino Nano и Arduino Mega.
Мигание светодиода на Ардуино без delay
В коде используется функция millis, которая возвращает количество миллисекунд с момента начала программы. Благодаря этой функции можно организовать многозадачность микроконтроллера. В отличии от функции delay(); , программа не останавливает выполнение команд в скетче, а считает когда пройдет заданное количество миллисекунд и может выполнять параллельные задачи.

Скетч. Мигающий светодиод Ардуино без delay
unsigned long currentTime; // переменная времени boolean ledState = 0; // переменная состояния светодиода void setup() < pinMode(10, OUTPUT); // объявляем пин 10, как выход > void loop() < if (millis() - currentTime > 500) // проверяем сколько прошло миллисекунд < currentTime = millis(); ledState=!ledState; // меняем состояние светодиода на противоположное digitalWrite(10, ledState); > >
Пояснения к коду:
- каждые 500 миллисекунд состояние переменной boolean меняется на противоположное с помощью команды ledState=!ledState .
Мигание двух светодиодов на Ардуино
Для следующего примера потребуется собрать схему на макетной плате из двух светодиодов, как изображено на картинке ниже. Более сложная программа с мигающими светодиодами — это светофор на Ардуино, где уже необходимо регулировать включение и выключение трех светодиодов и больше. После сборки электрической схемы загрузите следующий код в микроконтроллер.

Скетч. Мигание несколькими светодиодами одновременно
void setup() < pinMode(12, OUTPUT); // объявляем пин 12 как выход pinMode(10, OUTPUT); // объявляем пин 10 как выход > void loop() < digitalWrite(12, HIGH); // зажигаем светодиод digitalWrite(10, LOW); // выключаем светодиод delay(1000); // ждем 1 секунду digitalWrite(12, LOW); // выключаем светодиод digitalWrite(10, HIGH); // зажигаем светодиод delay(1000); // ждем 1 секунду >
Пояснения к коду:
- включение/выключение светодиодов происходит поочередно;
- одновременное включение можно сделать, поменяв местами строчки в коде.
Заключение. В этом обзоре мы рассмотрели, как сделать мигающий светодиод на Arduino Nano или Uno. Заставить светодиод мигать можно с помощью задержки delay или через millis. Если у вас остались вопросы по данной теме, то можете их смело оставлять в комментариях к этой записи. Мы постараемся ответить на все вопросы по мере поступления. Желаем успехов в освоении программирования Arduino.