#2 Эксперимент “Светофор”
В наше время, большая часть перекрёстков городских, а иногда и загородных дорог, оборудована светофорами. Сфетофоры нужны для того, чтобы участники дорожного движения, такие как водители различных транспортных средств и пешеходы могли точно определить очерёдность своего движения. Сигналы светофора разучиваются детьми ещё в раннем возрасте. Невозможно, наверное, найти такого человека, который бы не знал обозначения сигналов этого полезного устройства.
На этом занятии мы соберём действующую модель пары светофоров: транспортного и пешеходного, и заставим их действовать в паре, написав для этих светофоров алгоритм их работы.
Перед выполнением эксперимента прочтите:
СБОРКА УСТРОЙСТВА НА МАКЕТНОЙ ПЛАТЕ
Нам понадобятся следующие компоненты:
- Arduino Uno;
- USB-кабель для подключения к компьютеру;
- Беспаечная макетная плата;
- 5 светодиодов (2 зелёных, 2 красных, 1 жёлтый);
- 5 резисторов номиналом 220 Ом;
- 1 резистор номиналом 10 кОм;
- 1 тактовая кнопка;
- 11 соединительных проводов разных цветов.
Соберите устройство по следующей схеме:
Схема устройства на макетной плате |
Принципиальная схема устройства |
Обратите внимание: в нашем эксперименте мы будем использовать модели траспортного и пешеходного светофоров. Транспортный светофор имеет 3 сигнала: зелёный, жёлтый и красный. Пешеходный – 2 сигнала: зелёный и красный. Для управления светофорами будет использоваться тактовая кнопка;Обратите внимание:
- Справа, на макетной плате, мы замкнули рельсы с подключёнными питанием и “землёй”. Теперь, чтобы подключить все светодиоды, нам не нужно задействовать дополнительные соединительные провода, мы замыкаем их на землю с помощью резисторов. Точно также мы соединяем с “землёй” и питанием нашу тактовую кнопку. В будущем, заведите привычку соединять рельсы питания и “земли” таким образом в начале каждого нашего эксперимента, это сильно упростит сборку схемы;
- Помните: длинная нога светодиода подключается к питанию (+), а короткая – к “земле” (-), в нашем случае, все длинные ноги светодиодов подключены к управляющим пинам. Для того, чтобы не запутаться в схеме, ниже приведена таблица с порядком подключения светодиодов и кнопки к пинам Arduino:
Светодиод на схеме | Управляющий пин |
Транспортный светофор (зелёный) | 8 пин |
Транспортный светофор (жёлтый) | 9 пин |
Транспортный светофор (красный) | 10 пин |
Пешеходный светофор (зелёный) | 11 пин |
Пешеходный светофор (красный) | 12 пин |
Кнопка | 2 пин |
- Резисторы, подключённые последовательно со светодиодами имеют номинал в 220 Ом, т.к. такой номинал будет оптимальным для работы светодиода при напряжении в 5 В;
- Для того, чтобы избавиться от наведённых помех на тактовой кнопке, мы подключили её по схеме со стягивающим резистором. В роли стягивающего резистора, выступает резистор номиналом 10 кОм;
- Цвет соединительных проводов не играет никакой роли, но для того, чтобы не запутаться в собранной схеме, рекомендуется подключать питание красными проводами, а землю – чёрными или синими проводами. Цвет проводов для передачи сигнала от пинов Arduino можете подобрать на свой вкус.
ПРОГРАММИРОВАНИЕ
Наше устройство представляет собой 2 светофора: транспортный и пешеходный, которые работают в паре. В то время ,как на транспортном светофоре горит разрешающий (зелёный) сигнал, пешеходный светофор должен показывать запрещающий (красный) сигнал. Если пешеход хочет перейти на другую сторону улицы, то он должен подойти к светофору и нажать специальную кнопку. После этого, зелёный сигнал транспортного светофора сменится мигающим зелёным сигналом, затем жёлтым, который будет гореть в течение 3 секунд, а затем запрещающим (красным). Одновременно с красным сигналом транспортного светофора, на пешеходном светофоре гаснет запрещающий (красный) и загорается разрешающий (зелёный) сигнал, и пешеходы могут начать движение. Спустя некоторое время, зелёный сигнал пешеходного светофора начинает мигать, предупреждая о том, что скоро пешеходам загорится красный сигнал. Затем, на пешеходном светофоре зажигается красный сигнал, и одновременно с ним зажигается жёлтый сигнал транспортного светофора. Жёлтый сигнал горит в течении 3-х секунд и сменяется разрешающим (зелёным) сигналом транспортного светофора.
Такую схему переключения сигналов светофоров вы можете наблюдать и на улицах своего города. Для того, чтобы упростить задачу по написанию нужного алгоритма, мы немного упростим схему работы светофоров. Распишем её по пунктам:
- По умолчанию, на транспортном светофоре всегда горит зелёный сигнал (pin D8, HIGH), а на пешеходном светофоре – красный сигнал (pin D12, HIGH);
- При нажатии на кнопку:
- на транспортном светофоре гаснет зелёный сигнал (pin D8, LOW),
- затем зажигается мигающий жёлтый сигнал (pin D9, HIGH – пауза 500 мс – pin D9, LOW – пауза 500 мс),
- затем зажигается красный сигнал (pin D10, HIGH),
- одновременно с этим на пешеходном светофоре гаснет красный сигнал (pin D12, LOW) и зажигается зелёный (pin D11, HIGH);
- Далее наступает пауза, для того, чтобы пешеходы успели пересечь проезжую часть (для тестирования системы выберем не очень длинную паузу, например в 3 секунды (3000 мс));
- По окончании паузы, алгоритм запускается в обратном направлении:
- на транспортном светофоре гаснет красный сигнал (pin D10, LOW),
- затем зажигается мигающий жёлтый сигнал (pin D9, HIGH – пауза 500 мс – pin D9, LOW – пауза 500 мс),
- затем зажигается зелёный сигнал (pin D8, HIGH),
- одновременно с этим на пешеходном светофоре гаснет зелёный сигнал сигнал (pin D11, LOW) и зажигается красный (pin D12, HIGH);
- Светофор продолжает работать в штатном режиме.
Давайте теперь перенесём эту схему в среду Arduino IDE и с помощью ArduBlock составим алгоритм работы наших светофоров.
Запустите Arduino IDE, в меню выберите [Инструменты] ⇒ [ArduBlock].
Вытяните на рабочую область блок [Программа] из раздела [Управление]:
В раздел [Установка] нашей программы поместим 2 блока [уст. цифровой порт] для 8 и 12 пинов. Зададим им параметр [HIGH] для того, чтобы зажечь красный светодиод пешеходного светофора и зелёный светодиод транспортного светофора:
Теперь светофор работает в штатном режиме. Для того, чтобы заставить его изменить алгоритм работы при нажатии на кнопку, нам следует как-то обработать сигнал, который придёт с кнопки на 2-й пин Arduino. При нажатии на кнопку, контакты внутри неё замыкаются и на 2-й пин начинает поступать высокий сигнал [HIGH] с пина питания. Мы должны заставить программу проверять – есть ли высокий сигнал на 2-м пине. В случае, если такой сигнал присутствует, программа должна начать выполнять алгоритм, отвечающий за переключение режимов работы светофора. Для выполнения такой проверки, воспользуемся блоком [если] из раздела [Управление]. Вставим этот блок в раздел [цикл] нашей программы:
Теперь нам нужно сформулировать наше условие, при выполнении которого, программа должна начать исполнять нужный алгоритм. Это условие будет звучать так: если на 2-м пине, сигнал равен высокому сигналу, то… Т.е. мы должны сравнить сигнал на 2-м пине с сигналом HIGH, если они совпадут, то программа начнёт выполнение алгоритма. Для формулировки этого условия, нам понадобятся сразу несколько блоков из разделов [Проверки], [Порты], [Переменные/константы]:
Найдите и добавьте эти блоки на рабочую область самостоятельно. Из этих блоков нам нужно сформировать единый блок и вставить его в блок [если]:
Всё, что нам осталось – записать алгоритм поведения светофоров после того, как кнопка будет нажата и вставить его в раздел [то] блока [если]. Для начала, выключим зелёный сигнал транспортного светофора:
Далее, нам следует 3 раза моргнуть жёлтым сигналом с задержками в 500 мс (0,5 секунды). Для того, чтобы трижды не копировать одинаковые команды, воспользуемся блоком [повтор] из раздела [Управление]. Данный блок позволяет повторить одну или несколько команд нужное нам число раз:
Зададим количество повторений, равное 3-м. В разделе [Команды] запишем команды включения и выключения жёлтого светодиода, а так же команду ожидания (задержки), длительность которой выставим на 500 мс:
Вставим получившийся блок в нашу программу:
Теперь нам нужно погасить красный светодиод пешеходного светофора и зажечь зелёный светодиод пешеходного светофора и красный светодиод транспортного светофора. После этого, добавим паузу в 3000 мс (3 секунды):
В заключении, нам нужно пустить наш алгоритм в обратном порядке: потушить красный светодиод транспортного светофора, помигать жёлтым, а затем зажечь зелёный светодиод транспортного светофора, одновременно с этим погасив зелёный светодиод пешеходного светофора и заменив его горящим красным светодиодом. На этом, наша программа будет готова:
Если вы внимательно изучили все предыдущие инструкции, то без труда разберётесь в оставшейся части программы. Когда ваш алгоритм будет готов, загрузите его в Arduino. Наш алгоритм должен работать следующим образом:
|
ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОГО ВЫПОЛНЕНИЯ
Задание 1:
Исправьте программу таким образом, чтобы время, отведённое пешеходам для преодоления проезжей части, увеличилось до 12 секунд.
Задание 2*:
На данный момент наша программа работает не совсем правильно: наш пешеходный и транспортный светофоры не оповещают пешеходов и автомобилистов о скором окончании зелёного сигнала. Исправьте программу таким образом, чтобы она работала по следующей (правильной) схеме:
- По умолчанию, на транспортном светофоре всегда горит зелёный сигнал (pin D8, HIGH), а на пешеходном светофоре – красный сигнал (pin D12, HIGH);
- При нажатии на кнопку:
- на транспортном светофоре, зелёный сигнал начинает мигать (pin D8, LOW – пауза 500 мс – pin D8, HIGH – пауза 500 мс),
- затем на 3 секунды зажигается жёлтый сигнал (pin D9, HIGH),
- после того, как жёлтый сигнал гаснет (pin D9, LOW), зажигается красный сигнал (pin D10, HIGH),
- одновременно с этим на пешеходном светофоре гаснет красный сигнал (pin D12, LOW) и зажигается зелёный (pin D11, HIGH);
- Далее наступает пауза, для того, чтобы пешеходы успели пересечь проезжую часть (для тестирования системы выберем не очень длинную паузу, например в 3 секунды (3000 мс));
- По окончании паузы, алгоритм запускается в обратном направлении:
- зелёный сигнал пешеходного светофора начинает мигать (pin D11, LOW – пауза 500 мс – pin D11, HIGH – пауза 500 мс),
- затем, зелёный сигнал пешеходного светофора гаснет окончательно (pin D11, LOW) и пешеходам зажигается красный сигнал (pin D12, HIGH),
- на транспортном светофоре, в дополнение к красному сигналу, на 3 секунды загорается жёлтый (pin D9, HIGH),
- наконец, красный и жёлтый сигналы гаснут (pin D10, LOW) (pin D9, LOW),
- и автомобилям зажигается зелёный сигнал (pin D8, HIGH);
- Светофор продолжает работать в штатном режиме.
|
Задание 3*:
Зачастую, светофоры на некоторых перекрёстках оборудуют дополнительной секцией, позволяющей автомобилистам поворачивать направо, даже если горит красный сигнал транспортного светофора. Эта секция выглядит как зелёная стрелка, указывающая направо. Когда транспортный светофор показывает зелёный сигнал, эта секция просто горит, но когда сигнал меняется на красный – начинает мигать, и мигает она до тех пор, пока автомобилям снова не загорится зелёный сигнал. Мигающий свет означает, что водитель, хоть и может поворачивать направо, но перед этим должен уступить дорогу всем пешеходам, переходящим проезжую часть и всем автомобилям, которые двигаются с других направлений. Понаблюдайте за работой такой дополнительной секции на перекрёстках своего города и добавьте её к своему светодиодному светофору, подсоединив дополнительный зелёный резистор.
Для того, чтобы получить сертификат, подтверждающий успешное прохождение курса – выполняйте тесты в конце занятий. | Пройти проверочный тест |
2 Комментария
не могу пройти тест
Спасибо, тест исправил, теперь он работает!