Ардуино и светодиоды

Как подключить светодиод к Arduino

В этом простом примере показано, как с помощью платформы Arduino заставить мигать светодиод. Для начала мы соберем простую схему на макетной плате, подключив светодиод к цифровому выходу микроконтроллера Ардуино (входы и выходы на плате еще называют Pin). Загрузив скетч (так называют программу для Ардуино), вы поймете, как пользоваться и работать с платой Arduino UNO.

Фото. Устройство светодиода и резистора в разрезе

Светодиоды — это полупроводниковые элементы, которые служат для индикации и освещения. Они имеют полярность (+ и —) и чувствуют направление движения постоянного тока. Если подключить светодиод неправильно, то постоянный ток не пройдет и прибор не засветится. Кроме того, светодиод может выйти из строя при неправильном подключении. Анод (длинная ножка светодиода) подключается к плюсу.

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

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

Быстрая сборка схем на макетной плате

Для надёжной сборки устройств создаются печатные платы, на что уходит много времени. Для быстрой сборки электрических схем без пайки используют макетную плату (breadboard). Под слоем пластика на макетной плате находятся медные пластины-рельсы (дорожки), выложенные по простому принципу (смотри фото). Дорожки служат для создания контакта между радиоэлементами и проводами.

Одну и ту же схему можно собрать разными способами

Соберите схему подключения светодиода к Arduino, как на фото ниже

Длинная ножка светодиода — анод, она всегда подключается к плюсу

Для чего светодиод включают к Ардуино с резистором? Дело в том, что в светодиоде стоит кристалл который боится больших токов. Резистор призван ограничивать силу тока (Амперы), чтобы светодиод не перегорел. Большой ток губителен для светодиода, меньший ток (благодаря подключению резистора) обеспечивает длительную работу. Чтобы подключить светодиод к Ардуино без резистора, используйте 13 порт.

Подключите плату Arduino к компьютеру при помощи USB провода

Кабель с разъемами USB-A и USB-B для подключения принтера

Если у вас не установлена программа Arduino IDE, то скачайте последнюю версию на официальном сайте www.arduino.cc. С помощью USB кабеля производится запись программ, также плата получает питание от компьютера. Если требуется автономная работа электронного устройства, то плату можно запитать от батарейки или блока питания на 7-12 В. При подаче питания на плате загорится светодиод индикации.

Откройте программу Arduino IDE и проверьте подключение платы

Убедитесь, что программа определила ваш тип платы Ардуино

Шаг 1. Зайдите в основном меню «Инструменты -> Плата». Если плата Arduino определилась неправильно, то выберите необходимый тип, например, Arduino Uno.

Шаг 2. Установите порт (кроме COM1) подключения в меню «Инструменты -> Порт», так как при подключении Ардуино к ПК создается виртуальный COM-порт.

Убедитесь, что программа определила порт подключения Ардуино

Скетч мигающий светодиод Ардуино

void setup() // процедура setup { pinMode(13, OUTPUT); // объявляем пин 13 как выход } void loop() // процедура loop { digitalWrite(13, HIGH); // зажигаем светодиод delay(1000); // ждем 1 секунду digitalWrite(13, LOW); // выключаем светодиод delay(1000); // ждем 1 секунду }

Скопируйте код под фото и вставьте свой первый скетч в программу

Скопируйте код и вставьте скетч в программу Arduino IDE

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

Загрузите скетч в Arduino, нажав на кнопку «Вгрузить» (смотри фото)

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

Перед загрузкой программы, потребуется сохранить скетч

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

  1. процедура setup выполняется при запуске микроконтроллера один раз. Используется для конфигурации портов микроконтроллера и других настроек;
  2. после выполнения setup запускается процедура loop, которая выполняется в бесконечном цикле. Это мы используем, чтобы светодиод мигал постоянно;
  3. процедуры setup и loop должны присутствовать в любой программе (скетче), даже если вам не нужно ничего выполнять в них — пусть они будут пустые, просто не пишите ничего между фигурными скобками.

Загрузка примера “Blink” (мигание) в Arduino IDE

При подключении новой платы к персональному компьютеру, обратите внимание, что светодиод начинает мигать, так как все платы от производителей поступают с уже “залитым” скетчем “Blink”.

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

Пришло время проверить Ваше подключение и запрограммировать плату.

В оболочке Arduino IDE существует большая коллекция скетчей, которые уже готовы к использованию. Среди них находится и пример, который заставляет мигать “L” светодиод.

Откройте пример “Blink”, который находится в пункте меню File – Examples – 01.Basics

После открытия, расширьте окно оболочки Arduino IDE, чтобы Вы могли весь скетч в одно окне.

Скетчи из примеров, включенные в Arduino IDE предусматривают режим “только чтение” (“read only”). То есть, загрузить их на плату Вы сможете, но после изменения кода, Вы не сможете их сохранить в том же файле.

Мы будем изменять скетч, так что в первую очередь Вам необходимо сохранить собственную копию, которую Вы сможете изменять.

Из меню “File” выберите опцию “Сохранить как” (“Save As..”) и сохраните скетч под подходящим Вам названием, например, “MyBlink”.

Вы сохранили копию скетча “Blink” в Вашей библиотеке. Теперь открыть этот файл Вы можете в любой момент, перейдя по вкладке File – Scetchbook.

Загрузка примера “Blink” (мигание) на плату

Подключите свою плату Arduino к компьютеру с помощью USB и проверьте тип платы (“Board type”) и серийный порт (“Serial Port”), по которому она подключена.

Текущие настройки отображаются внизу окна оболочки Arduino IDE

Кликните на кнопку “Загрузить” (“Upload”)

Во время загрузки в нижней части окна IDE появятся ползунок загрузки и сообщения. Вначале появляется фраза “Компилирование” (“Compiling scetch..”), что означает процесс конвертирования Вашего скетча в формат, подходящий для загрузки на плату Arduino.

Дальше статус сменится на “Загрузка” (“Uploading”). В этот момент светодиоды на плате начнут мигать, так как начнется перенос скетча в микропроцессор.

В конце статус сменится на ”Загрузка завершена” (“Done uploading”). В сообщении, которое появится в текстовой строке отобразится информация о том, что загруженный скетч занимает 1,084 байта из 32,256 доступных.

Иногда при компиляции у Вас может возникнуть подобная ошибка:

Причин может быть несколько: Вы не подключили плату к компьютеру; Вы не установили необходимые драйвера; Вы выбрали некорректный серийный порт.

Если же загрузка прошла корректно, плата Arduino перезагрузится и “L” светодиод начнет мигать.

Пояснения к скетчу “Blink”

Ниже представлен код скетча “Blink”.

/*

Turns on an LED on for one second, then off for one second, repeatedly.

This example code is in the public domain.

*/

// 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

}

Первое, на что стоит обратить внимание: в данном скетче множество “комментариев”. Обратите внимание, что комментарии не являются инструкцией по работе программы. Это исключительно пояснения отдельных функций и задач, которые выполняются на определенном этапе кода. Это не обязательная часть кода. Все между символами /* и */ в верхней части скетча – это комментарии, в которых описаны задачи программы. Так же есть комментарии, которые ограничиваются одной строкой. Они начинаются с символов // и заканчиваются по умолчанию в конце строки. Первая важная, по сути, часть данного кода это строка:

int led = 13;

В комментариях над строкой указано, что мы присваиваем имя пину, к которому подключен светодиод. На большинстве плат Arduino это будет 13 пин. Дальше используется функция “Setup”. Опять-таки, в комментариях указано, что функция срабатывает после нажатия кнопки “reset”. Также эта функция срабатывает, когда плата перезагрузится по каким-либо другим причинам. Например, подача питания или после загрузки скетча.

// the setup routine runs once when you press reset:

void setup() {

// initialize the digital pin as an output.

pinMode(led, OUTPUT);

}

Каждый скетч Arduino обязан включать в себя функцию “setup” и часть, в которую вы можете добавлять собственные инструкции, заключенные между { }. В нашем примере в функции присутствует только одна команда, в которой указано, что пин, который мы используем, настраивается на “вывод” (“Output”). Также обязательным для любого скетча является функция цикла “Loop”. В отличие от функции “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

}

В теле функции “Loop” светодиод включается (HIGH), данное значение задерживается на 1000 миллисекунд (1 секунда), светодиод отключается (LOW) и остается выключенным на 1 секунду, после чего цикл повторится.

Arduino UNO урок 3 — Тайминг

Обратимся к первому уроку, где мы управляли LED. Между включением и выключением которого была секундная задержка.

В используемой там программе (см. код ниже) был один очень большой недостаток. Для выдержки паузы между вкл/выкл LED в 1 сек. нами была использована функция delay(). В это время контроллер не может выполнять другие команды в главной функции loop()

/* Мигание LED * ———— * * Включает и выключает светодиод (LED) подсоединенный * к выходу 13, с интервалом в 2 секунды * */ int ledPin = 13; // LED подсоединен к выводу 13 void setup() { pinMode(ledPin, OUTPUT); // устанавливаем вывод 13 как выход } void loop() { digitalWrite(ledPin, HIGH); // включаем LED delay(1000); // пауза 1 секунда digitalWrite(ledPin, LOW); // выключаем LED delay(1000); // пауза 1 секунда }

Первое, что мы сделаем, это внесем небольшие корректировки в функцию loop(). Чтобы сделать код более компактным и изящным, заменим 2 пары строчек на одну пару. Вместо установки значения в HIGH, а затем обратно в LOW, мы получим текущее значение ledPin и проинвертируем его. Т.е. если оно было HIGH, то станет LOW и наоборот.

void loop() { digitalWrite(ledPin, !digitalRead(ledPin)); // включаем/выключаем LED delay(1000); // задержка 1 сек. }

Отлично! Теперь мы усовершенствуем функцию delay(). Взамен, мы будем использовать функцию millis(). Данная функция возвращает количество миллисекунд, прошедшее с момента запуска текущей программы. Функция переполнится (вернется в нуль) приблизительно через 50 суток работы программы.

Альтернативной функцией является micros(), которая возвращает количество микросекунд, прошедшее с момента запуска текущей программы. Функция переполнится (вернется в нуль) приблизительно через 70 минут работы программы.

В нашем уроке мы будем использовать функцию millis():

/* Мигание LED Версия 2 * ———————— * Включает и выключает светодиод (LED) подсоединенный * к выходу 13, с интервалом в 2 секунды используя функцию millis() * */ int ledPin = 13; // LED подсоединен к выводу 13 unsigned long currentTime; unsigned long loopTime; void setup() { pinMode(ledPin, OUTPUT); // устанавливаем вывод 13 как выход currentTime = millis(); // считываем время, прошедшее с момента запуска программы loopTime = currentTime; } void loop() { currentTime = millis(); // считываем время, прошедшее с момента запуска программы if(currentTime >= (loopTime + 1000)){ // сравниваем текущий таймер с переменной loopTime + 1 секунда digitalWrite(ledPin, !digitalRead(ledPin)); // включаем/выключаем LED loopTime = currentTime; // в loopTime записываем новое значение } // Здесь могут быть другие команды }

В данном примере мы ввели две дополнительные переменные currentTime и loopTime. В функции setup() обе переменные имеют одно и тоже значение. В функции loop(), переменная currentTime каждый раз обновляется в цикле. Когда currentTime больше чем loopTime на 1 секунду (loopTime + 1000), то LED меняет свое состояние, а переменной loopTime присваивается текущее значение currentTime.

Обратите внимание, что в данном примере мы не использовали функцию delay() и процессор может выполнять другие операции.

Оригинал статьи на английском языке (перевод Колтыков А.В. для сайта cxem.net)

Оригинал статьи

Теги:

  • Arduino
  • Перевод