Выбрать главу

Рассмотрим схему, изображенную на рис. 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.