Освой программирование играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Arduino Uno: Breadboard и затухание светодиода

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

Светодиод

Светодиод

Несколько слов о светодиоде. На английском языке слово светодиод переводится как LED, что является сокращением от Light Emitting Diode. Из самого названия видно, что данный полупроводниковый прибор даёт свет. Слово диод широко используется в радиотехнике и означает радиодеталь, которая проводит ток в одном направлении. Следовательно, необходимо всегда правильно устанавливать светодиод в своих схемах, иначе получите неподвижного робота или нелетающего вертолёта. Встроенный светодиод уже правильно припаян к плате Arduino (скажем спасибо). А как же нам правильно определять плюс и минус у внешних светодиодов?

Открою страшную тайну. Если вы возьмете светодиоды в руки и посмотрите внимательно на них, то увидите, что ножки у них разной длины. Это не заводской брак, как можно было подумать. На самом деле длинная ножка светодиода является плюсом, а короткая - минусом (катод). Чтобы вам было легче запомнить, представьте себе, что знак + состоит из двух палочек, а знак - только из одной, следовательно, две палочки образуют более длинную ножку. Логично? А чтобы запомнить, что катод является отрицательным, то запомните по мнемотехнике - слова "катод" и "короткий" начинаются на одну букву. Теперь по цепочке: короткий-значит минус-значит катод, вы быстро сообразите. Не благодарите.

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

Из первого примера с встроенным диодом мы помним, что он использует вывод под номером 13. На плате есть свободный вывод с этим номером, который находится рядом с выводом GND. Берём светодиод и вставляем в эти выводы. Не забываем, что короткую ножку вставляем в GND, а длинную в вывод 13. У вывода 13 уже установлен резистор, поэтому светодиод не сгорит.

LED

Запускаем снова программу Blink. Теперь будут мигать два светодиода: встроенный и наш. Красота!

Breadboard

Но таким способом много не соберёшь. Для сложных схем требуется больше места. В таких случаях соединяют отдельные компоненты схемы с помощью проводом. Для лучшего соединения провода желательно использовать пайку. Мы не умеем паять, да и муторно это. Ведь если схема сложная и мы где-то сделали ошибку, то придется все заново отпаивать и припаивать.

Специально для этих целей была придумана макетная плата Breadboard. Когда я впервые взял ее в руки, то растерялся. Интуитивно-понятным интерфейсом здесь и не пахло. Множество дырочек, красные и синие полосочки, буковки, циферки... Радиолюбители на форумах говорят, что это примитивная штука, не требующая объяснений. Но, когда впервые сталкиваешься с таким предметом, то так не думаешь. Чтобы ненароком не сжечь свою плату, мне пришлось просмотреть множество картинок и видео и просто повторять один в один показываемые примеры. Чуть позже я разобрался с этой штуковиной. Вы тоже поймете, что к чему.

Breadboard

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

На моей доске доступно 830 контактов. Четыре рельсы по бокам предназначены для подключения питания и земли. Между ними — 126 групп соединённых между собой контактов. Схематично доску можно представить так (взято у Амперки):

Схема Breadboard

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

Первая схема

Давайте соберем нашу первую схему на Breadboard. Нам понадобятся плата Arduino, Breadboard, светодиод, резистор и перемычки (или провода). Начнем с Breadboard. Вставляем в него светодиод следующим образом - длинную ножку вставляем в одно из отверстий, например, A5, а короткую ножку в отверстие синей рельсы, т.е. минус.

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

Далее необходимо соединить Breadboard с платой Arduino. Располагаем их рядышком и соединяем их с помощью перемычек. Первая перемычка вставляется так - на Breadboard ножка перемычки вставляется в свободное отверстие красной рельсы, а вторая ножка втыкается на Arduino в порт вывода с меткой 5V. Вторую перемычку ставим так - первая ножка вставляется на Breadboard в отверстие синей рельсы, а вторая ножка вставляется на Arduino в порт вывода с меткой GND (на плате несколько меток GND, подойдёт любой).

Подключаем плату к компьютеру. Если все сделано правильно, то светодиод должен загореться. Ура, получилось!

Учимся читать схему

Посмотрим, что мы сделали. Мы последовательно соединили светодиод с резистором к источнику питания на 5 Вольт. По этой схеме ток течет из вывода с меткой 5V, далее проходит через резистор, потом через светодиод и попадает в вывод с меткой GND.

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

Каждый электронный компонент имеет свой графический символ. Например, для резистора используется следующий символ (используется в США, в России и Европе используется другой символ):

Символ резистора

Как видите, символ резистора симметричен, как и сам компонент.

Светодиод обозначается символом:

Символ светодиода

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

Плюс (слева) и минус (справа) питания также имеют символы:

Попробуем соединить все описанные детали вместе, чтобы изобразить нашу цепь.

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

Усложняем схему

Мы создали примитивную схему, которой нельзя управлять. Ток течёт через резистор и светодиод, минуя порты ввода/вывода. Признаться, я сам не сразу понял в чем дело, когда решил запустить пример с затуханием светодиода на этой схеме.

Изменим схему следующим образом. Сейчас у нас резистор соединяется с выводом 5V. Давайте соединим его теперь с выводом 13. Вытащим ножку резистора из вывода 5V и вставим его в отверстие на Breadboard таким образом, чтобы оно находилось на одной линии с другой ножкой резистора. Далее соединяем перемычкой вывод 13 на Arduino и соседнее отверстие рядом с ножкой резистора. Светодиод оставляем на месте.

На схеме это будет выглядеть следующим образом.

Откройте предыдущую программу с миганием встроенного светодиода и запустите ее. У вас теперь будут мигать два светодиода одновременно, так как они оба использует выход 13.

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

Если открыть предыдущую программу с миганием светодиода и заменить номер вывода с 13 на 12, то у нас будет мигать наш установленный светодиод вместо встроенного.

Fade - затухание светодиода

Мигание светодиода мне быстро надоело, и я решил попробовать другой пример, который поставляется с программой Arduino. На этот раз я выбрал пример Fade (File→Examples→1.Basics→Fade), который позволяет делать плавное затухание светодиода.

Запустив скетч на плате, я не увидел плавного затухания. В моем случае светодиод продолжал мигать странным образом. Расстроившись, я стал читать ответы на форумах и случайно перечитал ответ на свой вопрос. Там я заметил ремарку, на которую не обратил внимание в первый раз. Оказывается, нужно было соединяться с выводом, который помечен символом тильды (~). На Arduino UNO вывод 12 тильдой не был отмечен. Я быстро перекинул перемычку на вывод с меткой 10 и все заработало.

Разбор кода

Теперь рассмотрим код для затухания. Он совсем несложный.


/*
 Затухание
 
 Пример показывает, как управлять затуханием светодиода на выводе 10,
 используя функцию analogWrite()

*/
 
int led = 10;           // вывод 10 с символом ~
int brightness = 0;    // начальная яркость светодиода
int fadeAmount = 5;    // величина изменения яркости светодиода

void setup()  { 
  // используем вывод 10 для операции вывода
  pinMode(led, OUTPUT);
} 

void loop()  { 
  // устанавливаем яркость у светодиода у вывода 10
  analogWrite(led, brightness);    

  // изменяем яркость в цикле, прибавляя заданную величину
  brightness = brightness + fadeAmount;

  // меняем порядок затухания на обратный при достижении минимальной или максимальной яркости 
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ; 
  }     
  // делаем небольшую паузу для лучшего эффекта    
  delay(30);                            
}

Мигалка

Усложним макет. Возьмём ещё один светодиод другого цвета (у меня получилось красный и синий), резистор и соберём аналогичную схему на этой же макетной плате, подключив новый светодиод к выводу номер 3 и другому входу GND (ищите у другого края платы).

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

У меня получился следующий код.


/*
 Мигалка
*/

int led_9 = 9; // вывод 9
int led_3 = 3; // вывод 3
int brightness = 0;    // минимальный цвет
int fadeAmount = 5;    // величина прироста

void setup()  { 
  // два вывода на выход
  pinMode(led_9, OUTPUT);
  pinMode(led_3, OUTPUT);
} 

void loop()  { 
  // у первого вывода минимальное значение,  у второго - максимальное
  analogWrite(led_9, brightness); 
  analogWrite(led_3, 255 - brightness);  

  // остальной код без изменений
  // change the brightness for next time through the loop:
  brightness = brightness + fadeAmount;

  // reverse the direction of the fading at the ends of the fade: 
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ; 
  }     
  
  // wait for 30 milliseconds to see the dimming effect    
  delay(30);                            
}

Запустив проект, мы получим два светодиода, мигающих поочерёдно. Напомнило мне мигалку. Осталось подключить сирену. Надо запомнить этот урок и реализовать недостающую функциональность.

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

Реклама