Урок 2. Маячок с нарастающей яркостью


В этом эксперименте мы задаем различные уровни яркости светодиода.

Список деталей для эксперимента

Для дополнительного задания

  • еще 1 светодиод
  • еще 1 резистор номиналом 220 Ом
  • еще 2 провода

Принципиальная схема

Урок 2. Маячок с нарастающей яркостью. Принципиальная схема

 

Схема на макетке

Урок 2. Маячок с нарастающей яркостью. Схема на макетке

 

Обратите внимание

Не любой порт Arduino поддерживает широтно-импульсную модуляцию, если вы хотите регулировать напряжение, вам подойдут пины, помеченные символом тильда «~». Для Arduino Uno это пины 3, 5, 6, 9, 10, 11

Скетч

  1.     // даём разумное имя для пина №9 со светодиодом
  2.     // (англ. Light Emitting Diode или просто «LED»)
  3.     // Так нам не нужно постоянно вспоминать куда он подключён
  4.     #define LED_PIN 9
  5.  
  6.     void setup()
  7.     {
  8.       // настраиваем пин со светодиодом в режим выхода,
  9.       // как и раньше
  10.       pinMode(LED_PIN, OUTPUT);
  11.     }
  12.  
  13.     void loop()
  14.     {
  15.       // выдаём неполное напряжение на светодиод
  16.       // (он же ШИМ-сигнал, он же PWM-сигнал).
  17.       // Микроконтроллер переводит число от 0 до 255 к напряжению
  18.       // от 0 до 5 В. Например, 85 — это 1/3 от 255,
  19.       // т.е. 1/3 от 5 В, т.е. 1,66 В.
  20.       analogWrite(LED_PIN, 85);
  21.       // держим такую яркость 250 миллисекунд
  22.       delay(250);
  23.  
  24.       // выдаём 170, т.е. 2/3 от 255, или иными словами — 3,33 В.
  25.       // Больше напряжение — выше яркость!
  26.       analogWrite(LED_PIN, 170);
  27.       delay(250);
  28.  
  29.       // все 5 В — полный накал!
  30.       analogWrite(LED_PIN, 255);
  31.       // ждём ещё немного перед тем, как начать всё заново
  32.       delay(250);
  33.     }

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

  • Идентификаторы переменных, констант, функций (в этом примере идентификатор LED_PIN) являются одним словом (т.е. нельзя создать идентификатор LED PIN).
  • Идентификаторы могут состоять из латинских букв, цифр и символов подчеркивания _. При этом идентификатор не может начинаться с цифры.

  1. PRINT       // верно
  2. PRINT_3D    // верно
  3. MY_PRINT_3D // верно
  4. _PRINT_3D   // верно
  5. 3D_PRINT    // ошибка
  6. ПЕЧАТЬ_3Д   // ошибка
  7. PRINT:3D    // ошибка
  • Регистр букв в идентификаторе имеет значение. Т.е. LED_PIN, LED_pin и led_pin с точки зрения компилятора — различные идентификаторы
  • Идентификаторы, создаваемые пользователем, не должны совпадать с предопределенными идентификаторами и стандартными конструкциями языка; если среда разработки подсветила введенный идентификтор каким-либо цветом, замените его на другой
  • Директива #define просто говорит компилятору заменить все вхождения заданного идентификатора на значение, заданное после пробела (здесь 9), эти директивы помещают в начало кода. В конце данной директивы точка с запятой ; не допустима
  • Названия идентификаторов всегда нужно делать осмысленными, чтобы при возвращении к ранее написанному коду вам было ясно, зачем нужен каждый из них
  • Также полезно снабжать код программы комментариями: в примерах мы видим однострочные комментарии, которые начинаются с двух прямых слэшей // и многострочные, заключённые между /* */

  1. // однострочный комментарий следует после двойного слеша до конца строки
  2. /* многострочный комментарий
  3.    помещается между парой слеш-звездочка и звездочка-слеш */
  • Функция analogWrite(pin, value) не возвращает никакого значения и принимает два параметра:
    pin — номер порта, на который мы отправляем сигнал
    value — значение скважности ШИМ, которое мы отправляем на порт. Он может принимать целочисленное значение от 0 до 255, где 0 — это 0%, а 255 — это 100%

Задания для самостоятельного решения

  1. Отключите питание, отключите светодиод от 9-го порта и подключите к 11-му. Измените программу так, чтобы схема снова заработала
  2. Измените код программы так, чтобы в течение секунды на светодиод последовательно подавалось усреднённое напряжение 0, 1, 2, 3, 4, 5 В
  3. Возьмите еще один светодиод, резистор на 220 Ом и соберите аналогичную схему на этой же макетке, подключив светодиод к пину номер 3 и другому входу GND, измените программу так, чтобы светодиоды мигали в противофазу: первый выключен, второй горит максимально ярко и до противоположного состояния
     
Источник: 

wiki.amperka.ru