• напряжение представляет собой разность электрических потенциалов между двумя точками;

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

- 46 -

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

• по аналогии сопротивление является отверстием для протекания тока. Когда вода (ток) течет через узкую трубу, за одинаковое количество времени проходит меньшее количество, чем через широкую трубу. Узкая труба эквивалентна большему сопротивлению, потому что вода будет течь медленнее. Широкая труба эквивалентна малому сопротивлению, потому что вода (ток) может течь быстрее.

Закон Ома определяется следующим образом:

U = I·R, где U - напряжение в вольтах; I - ток в амперах; R - сопротивление в омах.

В электрической цепи каждый компонент обладает некоторым сопротивлением, что снижает напряжение. Закон Ома очень удобен для подбора значения резистора, подкточаемого последовательно со светодиодом. Светодиоды характеризуются определенной величиной падения напряжения и заданным значением рабочего тока. Чем больше ток через светодиод (не превышая максимально допустимого), тем ярче он светится. Для наиболее распространенных светодиодов максимальный ток равен 20 мА. Типовое значение падения напряжения для светодиода составляет около 2 в.

Рассмотрим схему, изображенную на рис. 2.3, и применим закон Ома для подбора резистора R1.

Рис. 2.3. Схема включения светодиода

Предположим, что LED 1 - стандартный светодиод с прямым током 20 мА и падением напряжения 2 В. Напряжение питания 5 В должно перераспределиться между светодиодом и резистором. Поскольку доля светодиода составляет 2 В, оставшиеся 3 В должны быть приложены к резистору. Зная максимальное значение прямого тока через светодиод (20 мА), можно найти номинал резистора:

R = U/I= 3/0,02 = 150 Ом.

Таким образом, при сопротивлении резистора 150 Ом через него и светодиод протекает ток 20 мА. По мере увеличения сопротивления ток будет уменьшаться.

Резистор 220 Ом обеспечивает достаточную яркость свечения светодиода, к тому же этот номинал очень распространен.

Еще одно важное соотношение - формула для расчета мощности, которая показывает, сколько ватт рассеивается на каждом компоненте. Увеличение мощности рас

- 47 -

сеивания связано с ростом тепловыделения прибора. Для каждого компонента, как правило, задается максимально допустимая мощность. Максимальная мощность резистора в нашем примере равна 0,125 Вт. Формула для расчета мощности выглядит следующим образом:

Р = U·I, где Р - мощность, Вт; U- напряжение, В; I - сила тока, А.

Для резистора из схемы на рис. 2.3 при падении напряжения 3 В и силе тока 20 мА мощность равна

Р = 3·0,02 = 0,06 Вт.

Поскольку 60 мВт< 0,125 Вт = 125 мВт, следовательно, данный резистор не перегреется.

2.4. Программирование цифровых выводов


По умолчанию все внешние контакты Arduino сконфигурированы как входы. Если необходимо использовать контакт Arduino как выход, нужно его переконфигурировать, подав соответствующую команду микроконтроллеру.

Каждая программа для Arduino должна включать две обязательные функции:

setup() И loop().

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

Для начала напишем простую программу, которая при запуске сконфигурирует контакт 9 как выход. В программе будут еще две функции: pinMode() - для конфигурации контакта и digitalWrite() - для установки значения HIGH (5 В) на этом контакте (листинг 2.1 ).

Листинг 2.1. Пример конфигурации

const int LED=9; // Константа - номер контакта светодиода


void setup()

{

pinMode (LED, OUTPUT); // Конфигурируем контакт светодиода как выход

digitalWrite(LED, HIGH); // Устанавливаем значение HIGH на выходе

}

void loop()

{

// В цикле ничего не выполняем

}

Соберите схему, как показано на рис. 2.2, и загрузите код листинга 2.1 в плату Arduino. Обратите внимание, что в этой программе я использовал оператор ини

- 48 -

циализации константы перед определением значения контакта Arduino. Обычно для хранения значений, которые могут изменяться во время выполнения программы, предназначены переменные. Поставив оператор const до объявления переменной, вы говорите компилятору, что это переменная "только для чтения" и она не будет изменяться во время выполнения программы. Всем экземплярам переменной LED в программе будет присвоено значение 9. В виде констант рекомендуется определять значения, которые не будут меняться при выполнении программы. Далее в некоторых примерах этой главы встретится иная ситуация: значения, которые могут изменяться при выполнении программы.

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

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

2.5. Использование цикла


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

Листинг 2.2. Изменение частоты мигания светодиода

const int LED=9; // Константа - номер контакта светодиода


void setup()

{

pinMode (LED, OUTPUT); // Конфигурируем контакт светодиода как выход

}

void loop()

{

for (int i=100; i<=1000; i=i+100)

{

digitalWrite(LED, HIGH);

delay(i);

digitalWrite(LED, LOW);

delay(i);

}

}

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

- 49 -

Оператор for всегда содержит три выражения, разделенные точкой с запятой:

• первое выражение присваивает начальное значение переменной-счетчику цикла.

В нашем примере переменная i получает начальное значение 100;

• второе выражение указывает, когда цикл должен остановиться. Операторы в теле цикла будут выполняться снова и снова, пока условие истинно. Запись <= означает меньше или равно. Таким образом, этот цикл будет выполняться тех пор, пока переменная i меньше или равна 1000;