Файл: 2О19 4удк 53. 06Ббк 39. 5Аэроквантум тулкит. Александр Фоменко. 2е изд., перераб и доп. М. Фонд новых форм развития образования, 2019 154 с. Базовая серия Методический инструментарий наставника.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.11.2023
Просмотров: 137
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
117
Аэроквантум: тулкит функцией pinMode(), то для значения HIGH напряжение на со- ответствующем вход/выходе (pin) будет 5В (3.3В для 3.3V плат) и 0В (земля) для LOW.
Если вход/выход (pin) был установлен в режим вход (INPUT), то функция digitalWrite со значением HIGH будет активиро- вать внутренний 20K нагрузочный резистор. Подача LOW, в свою очередь, отключает этот резистор. Нагрузочного рези- стора достаточно, чтобы светодиод, подключенный к входу, светил тускло. Если вдруг светодиод работает, но очень туск- ло, возможно, необходимо установить режим выход (OUTPUT) функцией pinMode().
Замечание
Вход/выход 13 сложнее использовать как цифровой вход, т.к. он имеет встроенный в плату резистор и светодиод.
Если вы активируете еще внутренний нагрузочный резистор
20K, то напряжение на этом входе будет около 1.7В вместо ожидаемых 5В, т.к. светодиод и добавочный резистор снижают напряжение, т.е. вы всегда будете получать LOW. Если же вам все же необходимо использовать 13 вход/выход, то используй- те внешний нагрузочный резистор.
Синтаксис
digitalWrite(pin, value)
Параметры
• pin: номер вход/выхода(pin).
• value: значение HIGH или LOW.
Возвращаемое значение:
нет.
Пример
int ledPin = 13; // светодиод, подключенный к вход/выходу 13
void setup()
{
pinMode(ledPin, OUTPUT); // устанавливает режим работы
- выход
118
}
void loop()
{
digitalWrite(ledPin, HIGH); // включает светодиод delay(1000); // ждет секунду digitalWrite(ledPin, LOW); // выключает светодиод delay(1000); // ждет секунду
}
Примечание
Аналоговые входы (analog pins) могут быть использованы как цифровые вход/выходы (digital pins). Обращение к ним идет по номерам от 14 (для аналогового входа 0) до 19 (для аналогового входа 5).
Приведем пример программы изменения яркости светодиода.
Простой пример управления яркостью светодиода с помощью функции analogWrite(). AnalogWrite() использует широтно-им- пульсную модуляцию (ШИМ). Эффект изменения яркости до- стигается за счет очень быстрого повторяющегося переклю- чения напряжения на выходе с 0В на +5В (для некоторых плат стандартное напряжение +3.3В).
Необходимые компоненты:
• Контроллер Arduino.
• Макетная плата.
• Светодиод.
• Резистор 220 Ом.
Подключение
Подключаем анод (обычно длинная ножка) светодиода через резистор сопротивлением 220 Ом к выходу номер 9 (pin 9). Ка- тод (короткая ножка) подсоединяем напрямую к земле (Grd).
119
Аэроквантум: тулкит
Схема
Код
В секции setup() кода устанавливаем режим выхода для вход/
выхода 9 (pin 9).
Функция analogWrite(), которая циклически вызывается в теле скетча, принимает два аргумента: номер выхода и значение ширины импульса ШИМ в диапазоне от 0 до 255.
Для управления яркостью светодиода, его плавного зажигания
120
и плавного затухания мы будем изменять значение ширины им- пульса, передаваемого в функцию analogWrite(). При значении
0 светодиод выключен, при 255 светодиод светит на полную яркость. В приведенном ниже скетче ширина импульса задает- ся переменной brightness. Шаг изменения этого значения за- дан переменной fadeAmount.
Для плавного изменения яркости мы вводим задержку в конце главного цикла (тела) скетча — delay(30).
/*
Пример управления яркостью светодиода на выходе 9 кон- троллера Arduino функцией analogWrite().
*/
int brightness = 0; // устанавливаем начальное значение ярко- сти int fadeAmount = 5; // шаг приращения/убывания яркости void setup() {
// устанавливаем пин 9 в режим выхода pinMode(9, OUTPUT);
}
void loop() {
// устанавливаем значение широты импульса на выходе 9
// задавая яркость светодиода analogWrite(9, brightness);
// изменяем значение в переменной для яркости brightness = brightness + fadeAmount;
// при достижении крайних значений для яркости
// меняем знак переменной шага приращения/убывания ярко- сти if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
}
// делаем паузу для достижения плавного наращивания/убыва- ния яркости delay(30);
}
Теперь попробуем включать и выключать светодиод при помо- щи кнопки.
121
Аэроквантум: тулкит
В этом примере мы рассмотрим подключение кнопки к кон- троллеру Arduino. При нажатии кнопки мы будем зажигать встроенный светодиод. Большинство плат Arduino имеют встроенный SMT-светодиод, подключенный к выходу 13 (pin
13).
Необходимые компоненты:
• Контроллер Arduino.
• Тактовая кнопка.
• 10кОм резистор.
• Контактная макетная плата.
• Соединительные провода.
Подключение
Подключаем выход питания (5В) и землю (Grd) красным и чер- ным проводом соответственно к макетной плате. Обычно на ма- кетных платах для питания и земли используют крайние ряды контактов, как показано на рисунке. Третьим синим проводом мы присоединяем цифровой пин №2 контроллера Arduino к контакту тактовой кнопки. К этому же контакту, либо к контак- ту, постоянно соединенному с ней в 4-штырковом исполнении, подключаем подтягивающий резистор 10 кОм, который, в свою очередь, соединяем с землей. Другой выход кнопки соединяем с питанием 5В.
Когда тактовая кнопка не нажата, выход 2 подключен только к земле через подтягивающий резистор и на этом входе будет считываться LOW. А когда кнопка нажата, появляется контакт между входом 2 и питанием 5В и считываться будет HIGH.
122
Замечание
Чаще всего тактовые кнопки имеют по два контакта с каждой стороны так, как это показано на рисунке Подключение. При этом по форме кнопка почти квадратная. ВАЖНО не перепу- тать при подключении, какие контакты соединены, а какие за- мыкаются при нажатии. Лучше всего прозвонить кнопку, если не уверены.
Можно также подключить кнопку наоборот — через подтяги- вающий резистор к питанию и через кнопку к земле. Тогда с входа будет считываться HIGH, а при нажатии кнопки — LOW.
Если вход оставить неподключенным, то на входе будет считы- ваться HIGH или LOW случайным образом. Именно поэтому мы используем подтягивающий резистор, чтобы задать опре- деленное значение при ненажатой кнопке.
Схема
Кнопка
// задаем константы const int buttonPin = 2; // номер входа, подключенный к кнопке const int ledPin = 13; // номер выхода светодиода
// переменные int buttonState = 0; // переменная для хранения состояния кнопки void setup() {
123
Аэроквантум: тулкит
// инициализируем пин, подключенный к светодиоду, как вы- ход pinMode(ledPin, OUTPUT);
// инициализируем пин, подключенный к кнопке, как вход pinMode(buttonPin, INPUT);
}
void loop(){
// считываем значения с входа кнопки buttonState = digitalRead(buttonPin);
// проверяем, нажата ли кнопка
// если нажата, то buttonState будет HIGH:
if (buttonState == HIGH) {
// включаем светодиод digitalWrite(ledPin, HIGH);
}
else {
// выключаем светодиод digitalWrite(ledPin, LOW);
}
}
124
Руководство для обучающегося
Цель: собрать автоматическую систему управления световы- ми сигналами на плате Arduino.
Как это сделать
Классический пример системы автономного управления све- товыми сигналами — это светофор. Светофоры встречаются в обычной жизни каждый день. Сегодня мы поймем принцип их работы и сделаем свой управляемый перекрёсток с помощью платформы Arduino.
Экскурс в историю
Первый светофор был установлен 10 декабря 1868 года в
Лондоне возле здания Британского парламента. Его изобре- татель — Джон Пик Найт — был специалистом по железно- дорожным семафорам. Светофор управлялся вручную и имел две семафорные стрелки: поднятые горизонтально означали сигнал «стоп», а опущенные под углом в 45° — движение с осторожностью. В тёмное время суток использовался вра- щающийся газовый фонарь, с помощью которого подавались соответственно сигналы красного и зелёного цвета. Све- тофор использовался для облегчения перехода пешеходов через улицу, а его сигналы предназначались для транспорт- ных средств — пока пешеходы идут, транспортные средства должны стоять. 2 января 1869 года газовый фонарь светофора взорвался, ранив управлявшего светофором полицейского.
Первая автоматическая система светофоров (способная к пе- реключению без непосредственного участия человека) была разработана и запатентована в 1910 году Эрнстом Сиррином из Чикаго. Его светофор использовал неподсвеченные надпи- си Stop и Proceed.
Изобретателем первого электрического светофора считается
Лестер Вайр из Солт-Лейк-Сити (штат Юта, США). В 1912 году он разработал (но не запатентовал) светофор с двумя круглы- ми электрическими сигналами (красного и зелёного цвета).
5 августа 1914 года в Кливленде Американская светофорная компания установила на перекрёстке 105-й улицы и аве-
125
Аэроквантум: тулкит ню Эвклида четыре электрических светофора конструкции
Джеймса Хога. Они имели красный и зелёный сигнал и, пе- реключаясь, издавали звуковой сигнал. Система управлялась полицейским, сидящим в стеклянной будке на перекрёстке.
Светофоры задавали правила движения, аналогичные при- нятым в настоящее время в США: поворот направо осущест- влялся в любое время при отсутствии помех, а поворот нале- во — на зелёный сигнал вокруг центра перекрёстка.
В 1920 году трёхцветные светофоры с использованием жёлто- го сигнала были установлены в Детройте и Нью-Йорке. Авто- рами изобретений были соответственно Уильям Поттс (англ.
William Potts) и Джон Ф. Харрис (англ. John F. Harriss).
В Европе аналогичные светофоры были впервые установле- ны в 1922 году в Париже на пересечении Рю де Риволи (фр.
Rue de Rivoli) и Севастопольского бульвара (фр. Boulevard de Sebastopol) и в Гамбурге на площади Штефансплатц (нем.
Stephansplatz). В Англии — в 1927 году в городе Вулвергемпто- не (англ. Wolverhampton).
В СССР первый светофор установили 15 января 1930 года в
Ленинграде на пересечении проспектов 25 Октября и Воло- дарского (ныне Невского и Литейного проспектов). А первый светофор в Москве появился 30 декабря того же года на углу улиц Петровка и Кузнецкий Мост. До 1959 года красный и зелёный цвета были на местах, противоположных нынешним, затем СССР присоединился к Международной конвенции о дорожном движении и к Протоколу о дорожных знаках и сиг- налах. Несколько ранее произошла замена первоначального верхнего синего на верхний зелёный.
В связи с историей светофора часто упоминают имя амери- канского изобретателя Гаррета Моргана, запатентовавшего в 1923 году светофор оригинальной конструкции. Однако в историю он вошёл тем, что впервые в мире в патенте кроме технической конструкции указал назначение: «Назначение устройства — сделать очерёдность проезда перекрёстка неза- висимой от персоны, сидящей в автомобиле».
В середине 1990-х были изобретены зелёные светодиоды с
126
достаточной яркостью и чистотой цвета и начались экспери- менты со светодиодными светофорами. Саров стал первым городом, в котором светодиодные светофоры стали приме- няться массово.
Старт
Изобразите наилучший вариант функционирования пере- крёстка, с вашей точки зрения?
В чем сложность управления двумя светофорами одновре- менно?
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
Создание на базе Arduino двух светофоров для перекрестка
дороги
Светодиод — это полупроводниковый прибор, преобразу- ющий электрический ток непосредственно в световое из- лучение. Цветовые характеристики светодиодов зависят от
127
Аэроквантум: тулкит химического состава использованного в нем полупроводника.
Светодиод излучает в узкой части спектра. В нашем проекте создания светофора Arduino мы будем использовать светоди- оды трех цветов (зеленый, желтый, красный), соответствую- щих трем цветам светофора.
Светодиоды поляризованы, имеют значение, в каком направ- лении подключать их. Положительный вывод светодиода (бо- лее длинный) называется анодом, отрицательный называется катодом. Как и все диоды, светодиоды позволяют току течь только в одном направлении — от анода к катоду. Поскольку ток протекает от положительного к отрицательному, анод светодиода должен быть подключен к цифровому сигналу 5В, а катод должен быть подключен к земле.
Мы будем подключать светодиоды первого светофора к циф- ровым выводам D7, D8, D9, а светодиоды второго светофора
— к цифровым выводам D10, D11, D12 платы Arduino. Светоди- оды должны быть всегда соединены последовательно с рези- стором, который выступает в качестве ограничителя тока. Чем больше значение резистора, тем больше он ограничивает ток.
В этом эксперименте мы используем резистор номиналом 220
Ом.
Собираем схему, представленную на рисунке 1.
Рисунок 1. Схема соединений светодиодов
128
Теперь приступим к написанию скетча.
В первой части урока напишем скетч работы одного светофо- ра.
Мы знаем, что светофор работает следующим образом: неко- торое время горит зеленый свет (зеленый светодиод), затем мигает желтый при горящем зеленом, затем горит красный, затем мигает желтый при горящем красном и далее по кругу.
Время (в миллисекундах) горения зеленого, желтого и красно- го светодиодов и частоту мигания желтого светодиода зане- сем в константы:
#define TIME_GREEN 10000
#define TIME_RED 10000
#define TIME_YELLOW 3000
#define TIME_BLINK 300
Занесем в константы и выводы подключения светофора (в этом примере мы рассматриваем один светофор):
#define PIN_GREEN1 7
#define PIN _RED 9
#define PIN_YELLOW 8
Создадим и переменную blinkyellow (типа boolean), которую будем использовать для организации мигания желтого свето- диода (blinkyellow=true – светодиод «горит», blinkyellow=false
– светодиод «погашен»). Как вы уже знаете, цифровые выводы
Arduino могут работать как входы и как выходы. Режим работы цифрового вывода устанавливается командой pinMode(). В процедуре setup() настроим все выводы Arduino, к которым подключены светодиоды, как выводы и подадим на них значе- ние LOW (т.е. светодиоды выключим).
// настроить выводы Arduino как выходы pinMode(PIN_GREEN1, OUTPUT);
pinMode(PIN_YELLOW1, OUTPUT);
pinMode(PIN_RED1, OUTPUT);
// и потушить все светодиоды digitalWrite(PIN_GREEN1, LOW);
digitalWrite(PIN_YELLOW1, LOW);
digitalWrite(PIN_RED1, LOW);