История светофора и создание робота-светофора на Arduino

Светофоры — неотъемлемая часть нашей повседневной жизни, регулирующая движение на дорогах и обеспечивающая безопасность. Но задумывались ли вы, как появилось это устройство и как оно эволюционировало от древних сигналов до современных «умных» систем? В этом уроке мы не только познакомимся с увлекательной историей светофора, но и соберём его действующую модель на основе платформы Arduino, что станет практическим шагом в изучении робототехники и программирования.

От древних регулировщиков до электрических сигналов

Идея регулирования движения уходит корнями в глубокую древность. Ещё в Вавилоне времён царя Хаммурапи существовали правила, запрещавшие загромождать проезды. Для управления потоками повозок в тёмное время суток использовались рабы-регулировщики с коромыслом, на концах которого горели фитили в тыквах. Благодаря специальным добавкам одно пламя было красным, другое — зелёным, что позволяло подавать сигналы «стоп» и «двигаться».

Первый в истории светофор появился в Лондоне в 1868 году. Его создатель, инженер Джон Пик Найт, разработал устройство с двумя стрелками для дневного времени и газовыми фонарями (красным и зелёным) для ночи. Горизонтальная стрелка означала «стоп», а поднятая под углом 45 градусов — «движение с осторожностью».

Электрическая эра и появление трёх цветов

С широким распространением электричества в начале XX века светофоры стали более совершенными. В 1912 году американец Лестер Вайр создал первый электрический светофор с двумя лампами (красной и зелёной).

В 1914 году в Кливленде появилась система из четырёх электрических светофоров, которые не только светились, но и издавали звуковые сигналы. Управлял ими полицейский из стеклянной будки. Трёхцветные светофоры (красный, жёлтый, зелёный) впервые начали работать в 1920 году на улицах Нью-Йорка и Детройта благодаря изобретениям Джона Ф. Харриса и Уильяма Поттса. В СССР первый светофор был установлен в Ленинграде 15 января 1930 года.

Современные «умные» светофоры и робототехника

Сегодня светофоры — это сложные компьютерные системы, способные адаптироваться к дорожной ситуации. Оснащённые датчиками и процессорами, они самостоятельно анализируют трафик и выбирают оптимальный режим работы, по сути являясь автономными роботами. Именно эту идею мы возьмём за основу нашего практического занятия.

КРАСНЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ!

На прошлом уроке вы научились подключать один мигающий светодиод к Arduino и загружать простейшую программу. Теперь задача усложняется: нужно заставить работать три светодиода, имитируя цикл светофора. На схеме показано, как правильно подключить светодиоды к плате. Ниже приведён готовый скетч (программа) для реализации следующего алгоритма: зелёный горит 5 секунд, затем мигает 4 раза, после чего включается жёлтый на 2 секунды, и, наконец, красный горит 5 секунд. Цикл повторяется бесконечно.

Скетч программы:

int RED=13;
int YELLOW=6;
int GREEN=4;

void setup(){
pinMode(RED, OUTPUT);
pinMode(YELLOW, OUTPUT);
pinMode(GREEN, OUTPUT);
}

void loop(){
digitalWrite(GREEN, HIGH);
delay(5000);
for(int i=0; i<=4; i=i+1){
digitalWrite(GREEN, HIGH);
delay(1000);
digitalWrite(GREEN, LOW);
delay(1000);
}
digitalWrite(YELLOW, HIGH);
delay(2000);
digitalWrite(YELLOW, LOW);
digitalWrite(RED, HIGH);
delay(5000);
digitalWrite(RED, LOW);
}

Разбираем программу: переменные и циклы

Первые три строки (int RED=13; и т.д.) — это объявление переменных. Переменная — это именованная ячейка памяти микроконтроллера, в которой хранятся данные. В нашем случае мы создали переменные RED, YELLOW и GREEN типа int (целое число) и присвоили им номера пинов, к которым подключены соответствующие светодиоды. Это удобно: не нужно запоминать номера, можно обращаться к светодиодам по имени.

В процедуре setup() с помощью функции pinMode() мы настраиваем указанные пины на режим вывода (OUTPUT), так как плата будет подавать на них напряжение.

Основная логика работы находится в loop(). Для реализации мигания зелёного светодиода 4 раза используется новый элемент — цикл for. Это цикл со счётчиком, который позволяет компактно описать повторяющиеся действия. Его структура: for(инициализация; условие; инкремент) { ... }. В нашем скетче переменная-счётчик i увеличивается на 1 каждую итерацию, и цикл выполняется, пока i не станет больше 4. Таким образом, блок команд внутри цикла (включить/выключить зелёный светодиод с задержкой) выполнится 5 раз, что даёт 4 полных мигания (поскольку начальное состояние — светодиод уже горит). Использование цикла делает программу короче и эффективнее, чем прописывание одних и тех же действий несколько раз подряд.

После завершения цикла программа включает жёлтый, а затем красный светодиод на заданное время, после чего цикл loop() начинается заново.

Загрузите эту программу на плату Arduino, подключённую к компьютеру, и ваш простейший робот-светофор готов к работе! Этот проект наглядно демонстрирует основы программирования микроконтроллеров — ключевой навык в робототехнике.

Повторение пройденного

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

void setup(){
pinMode(12, OUTPUT);
pinMode(8, OUTPUT);
}

void loop(){
digitalWrite(12, HIGH);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(12, LOW);
digitalWrite(8, HIGH);
delay(1000);
}

Антон ЛОМОНОСОВ, Азизжон УЛЬМАСОВ, Сергей МОТИН