Arduino. Эксперимент 3. Светильник с управляемой яркостью

В этом эксперименте мы меняем яркость светодиода, вращая ручку переменного резистора. Прочтите перед выполнением:

 

СПИСОК ДЕТАЛЕЙ ДЛЯ ЭКСПЕРИМЕНТА

  • 1 плата Arduino Uno;

  • 1 беспаечная макетная плата;

  • 1 светодиод;

  • 1 резистор номиналом 220 Ом;

  • 6 проводов «папа-папа»;

  • 1 потенциометр.

 

ДЕТАЛИ ДЛЯ ДОПОЛНИТЕЛЬНОГО ЗАДАНИЯ

  • еще 1 светодиод;

  • еще 1 резистор номиналом 220 Ом;

  • еще 2 провода.

 

ПРИНЦИПИАЛЬНАЯ СХЕМА

 

СХЕМА НА МАКЕТНОЙ ПЛАТЕ

 

ОБРАТИТЕ ВНИМАНИЕ

  • Мы подключили «землю» светодиода и переменного резистора (потенциометра) к длинной рельсе «-» макетной платы, и уже ее соединили с входом GND микроконтроллера. Таким образом мы использовали меньше входов и от макетки к контроллеру тянется меньше проводов;
  • Подписи «+» и «-» на макетке не обязывают вас использовать их строго для питания, просто чаще всего они используются именно так и маркировка нам помогает;
  • Не важно, какая из крайних ножек потенциометра будет подключена к 5 В, а какая к GND, поменяется только направление, в котором нужно крутить ручку для увеличения напряжения. Запомните, что сигнал мы считываем со средней ножки;
  • Для считывания аналогового сигнала, принимающего широкий спектр значений, а не просто 0 или 1, как цифровой, подходят только порты, помеченные на плате как «ANALOG IN» и пронумерованные с префиксом A. Для Arduino Uno — это A0-A5.

 

СКЕТЧ

скачать скетч для Arduino IDE
// даём разумные имена для пинов со светодиодом
// и потенциометром (англ potentiometer или просто «pot»)
#define LED_PIN 9
#define POT_PIN A0
 
void setup()
{
 // пин со светодиодом — выход, как и раньше...
 pinMode(LED_PIN, OUTPUT);
 
 // ...а вот пин с потенциометром должен быть входом
 // (англ. «input»): мы хотим считывать напряжение,
 // выдаваемое им
 pinMode(POT_PIN, INPUT);
}
 
void loop()
{
 // заявляем, что далее мы будем использовать 2 переменные с
 // именами rotation и brightness, и что хранить в них будем
 // целые числа (англ. «integer», сокращённо просто «int»)
 int rotation, brightness; 
 
 // считываем в rotation напряжение с потенциометра:
 // микроконтроллер выдаст число от 0 до 1023
 // пропорциональное углу поворота ручки
 rotation = analogRead(POT_PIN);
 
 // в brightness записываем полученное ранее значение rotation
 // делённое на 4. Поскольку в переменных мы пожелали хранить
 // целые значения, дробная часть от деления будет отброшена.
 // В итоге мы получим целое число от 0 до 255
 brightness = rotation / 4;
 
 // выдаём результат на светодиод
 analogWrite(LED_PIN, brightness);
}

 

ПОЯСНЕНИЯ К КОДУ

  • С помощью директивы #define мы сказали компилятору заменять идентификатор POT_PIN на A0 — номер аналогового входа. Вы можете встретить код, где обращение к аналоговому порту будет по номеру без индекса A. Такой код будет работать, но во избежание путаницы с цифровыми портами используйте индекс;
  • Переменным принято давать названия, начинающиеся со строчной буквы;
  • Чтобы использовать переменную, необходимо ее объявить, что мы и делаем инструкцией:

int rotation, brightness;

 

  • Для объявления переменной необходимо указать ее тип, здесь — int (от англ. integer) — целочисленное значение в диапазоне от -32 768 до 32 767, с другими типами мы познакомимся позднее;
  • Переменные одного типа можно объявить в одной инструкции, перечислив их через запятую, что мы и сделали;
  • Функция analogRead(pinA) возвращает целочисленное значение в диапазоне от 0 до 1023, пропорциональное напряжению, поданному на аналоговый вход, номер которого мы передаем функции в качестве параметра pinA;
  • Обратите внимание, как мы получили значение, возвращенное функцией analogRead(): мы просто поместили его в переменную rotation с помощью оператора присваивания =, который записывает то, что находится справа от него в ту переменную, которая стоит слева;

 

ВОПРОСЫ ДЛЯ ПРОВЕРКИ СЕБЯ

  1. Можем ли мы при сборке схемы подключить светодиод и потенциометр напрямую к разным входам GND микроконтроллера?
  2. В какую сторону нужно крутить переменный резистор для увеличения яркости светодиода?
  3. Что будет, если стереть из программы строчку pinMode(LED_PIN, OUTPUT)? строчку pinMode(POT_PIN, INPUT)?
  4. Зачем мы делим значение, полученное с аналогового входа перед тем, как задать яркость светодиода? что будет, если этого не сделать?

 

ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОГО РЕШЕНИЯ

  1. Отключите питание платы, подключите к порту 5 еще один светодиод. Измените код таким образом, чтобы второй светодиод светился на 1/8 от яркости первого.

 

С оригиналом статьи вы можете ознакомиться на сайте Amperka.ru


ЭКСПЕРИМЕНТ 2 | ОГЛАВЛЕНИЕ | ЭКСПЕРИМЕНТ 4

Категория: Arduino | Добавил: Decay_Dance (23.02.2016)
Просмотров: 5269 | Теги: Делитель напряжения, основы схемотехники, регулирование яркости, Arduino, электричестсво, потенциометр | Рейтинг: 0.0/0