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




Эксперимент 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.

Скетч

p030_pot_light.ino

// даём разумные имена для пинов со светодиодом

// и потенциометром (англ 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 от яркости первого

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-03-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: