Макет светофора на ARDUINO UNO, схема и описание
Этот макет светофорного управления движения на перекрестке можно использовать в различных играх по изучению правил дорожного движения.
Он может быть сделан как в миниатюрном, настольном варианте для передвижения по нему игрушечных моделей машин и кукол-пешеходов, так и в варианте для детского парка или школьного двора, для передвижения по нему велосипедов, или педальных автомобилей.
Макет изображает четырехсторонний перекресток со светофорами без дополнительных секций, но с секциями для пешеходов. На рисунке 1 показана схема этого макета.
Буквами и цифрами на ней обозначены цвета и номера светофоров. Например «К1» -Красный 1-го светофора, а «37» - Зеленый седьмого светофора.
Широкими стрелками показаны направления светофоров. А буквами «КП» и «ЗП» соответственно, Красный пешеходный и Зеленый пешеходный.
Рис. 1. Макет изображает четырехсторонний перекресток со светофорами.
Светофор работает по простому циклическому алгоритму. Начинается цикл с состояния, когда во все четыре стороны движения горит красный свет, а для всех направлений пешеходного движения включен зеленый свет.
Затем включается красный свет для всех пешеходных направлений движения, и зеленый для первого автомобильного направления и красный для второго.
Затем, наоборот, и снова к пешеходному переходу во всех направлениях. Все переключения происходят через желтый свет. Время для каждого состояния движения установлено по 10 секунд. Для желтого света -1 секунда. Но при необходимости в программу очень легко внести изменения и задать любые временные интервалы, какие угодно.
Принципиальная схема
Схема светофорного узла показана на рисунке 2. Это светодиодный узел для настольного макета. Он состоит из 40 светодиодов, расположенных, соответственно, по пять в каждом из светофоров.
На схеме обозначены не только позиционные обозначения светодиодов (HL1-HL40), но и их конкретное расположение в конкретном светофоре.
Рис. 2. Схема светофорного узла на светодиодах.
Например, «КЗ» возле светодиода HL1 значит, что это красный светодиод, расположенный в 3-м светофоре (согласно схеме на рис.1), а, например, «35» возле HL40 значит, что это зеленый светодиод из 5-го светофора (согласно схеме на рис.1).
Схема узла управления показана рисунке 3. Узел управления сделан на основе микроконтроллерной платы ARDUINO UNO. Схема предназначена для управления 8-ю цепями светофорного узла, схема которого показана рисунке 2. Для управления выбраны порты D2, D3, D4, D5, D6, D7, D8, D9.
Логические уровни с этих портов поступают на электронные ключи на ключевых полевых транзисторах VT1-VT8. При логической единице на соответствующем порту платы, открывается соответствующий транзистор, и подает ток на соответствующую цепь питания светодиодов светофорного узла.
Применение высоковольтных транзисторов типа BUZ90A здесь не совсем оправдано, и явно излишне, но просто было использовано, то, что было в наличии.
Впрочем, это дает возможность выполнить светофорный узел на лампах, питающихся от электросети и подключить их к этим транзисторам, при условии питания ламп от постоянным пульсирующим током (через диодный выпрямитель).
Рис. 3. Схема контроллера для макета светофора на ARDUINO UNO.
Резисторы R1-R8, совместно с диодами VD1-VD8 устраняют кратковременные перегрузки портов по току из-за импульсов тока на заряд / разряд емкостей затворов полевых транзисторов, и ограничивают выбросы напряжения на самих затворах транзисторов.
Программа для МК
Программа относительно проста. И при наличии персонального компьютера и программного обеспечения для ARDUINO UNO на её основе можно создавать любые, какие угодно порядки переключения светофоров.
А так же, изменять временные интервалы как угодно. Здесь приводится простая программа, реализующая вышеизложенный алгоритм работы светофора.
Итак, программа:
/*
Svetofor
*/
// задание выходов
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
}
// рабочий цикл
void loop() {
digilalWrite(2, HIGH); // горит K1,K2,K5,K6
digitalWrite(3, LOW); // не гор. Ж1,Ж2,Ж5,Ж6
digitalWrite(4, LOW); // не гор. 31,32,35,36
digitalWrite(5, HIGH); // горит КЗ,K4,K7,K8
digitalWrite(6, LOW); // не гор. ЖЗ.Ж4. Ж7.Ж8
digitalWrite(7, LOW); // не гор. 33,34,37,38
digitalWrite(8, LOW); // не горят все КП
digitalWrite(9, HIGH); // горят все ЗП
delay(10000); // время шага 10 сек.
digitalWrite(2, HIGH); // горит К1.К2.К5,К6
digitalWrite(3, HIGH); // горит Ж1,Ж2,Ж5,Ж6
digitalWrite(4, LOW); // не гор. 31,32,35,36
digitalWrite(5, HIGH); // горит КЗ,К4.К7.К8
digitalWrite(6, LOW); // не гор. ЖЗ,Ж4,Ж7,Ж8
digitalWrite(7, LOW); // не гор. 33,34,37,38
digitalWrite(8, HIGH); // горит все КП
digitalWrite(9, LOW); // не горят все ЗП
delay(1000); / /время шага 1 сек.
digitalWhte(2, LOW); // не гор. К1,К2,К5,К6
digitalWrite(3, LOW); // не гор. Ж1,Ж2,Ж5,Ж6
digitalWrite(4, HIGH); // горит 31,32,35,36
digitalWrite(5, HIGH); // горит КЗ,К4.К7.К8
digitalWrite(6, LOW); // не гор. ЖЗ,Ж4,Ж7,Ж8
digitalWrite(7, LOW); // не гор. 33,34,37,38
digitalWrite(8, HIGH); // горит все КП
digitalWrite(9, LOW); // не горят все ЗП
delay(10000); // время шага 10 сек.
digitalWrite(2, LOW); // не гор. К1,К2,К5,К6
digitalWrite(3, HIGH); // горит Ж1,Ж2,Ж5,Ж6
digitalWrite(4, HIGH); // горит 31,32,35,36
digitalWrite(5, HIGH); // горит КЗ,К4.К7.К8
digitalWrite(6, HIGH); // горит ЖЗ,Ж4,Ж7,Ж8
digilalWrite(7, LOW); // не гор. 33,34,37,38
digitalWrite(8, HIGH); // горит все КП
digitalWrite(9, LOW); // не горят все ЗП
delay)1000); // время шага 1 сек.
digitalWrite(2, HIGH); // горит К1.К2.К5,К6
digitalWrite(3, LOW); // не гор. Ж1,Ж2,Ж5,Ж6
digitalWrite(4, LOW); // не гор. 31,32,35,36
digitalWrite(5, LOW); // не гор. КЗ,К4,К7,К8
digitalWrite(6, LOW); // не гор. ЖЗ,Ж4,Ж7,Ж8
digitalWrite(7, HIGH); // горит 33,34,37,38
digitalWrite(8, HIGH); // горит все КП
digitalWrite(9, LOW); // не горят все ЗП
delay(10000); // время шага 10 сек.
digitalWrite(2, HIGH); //горит К1,К2,К5,К6
digitalWrite(3, LOW); // не гор. Ж1,Ж2,Ж5,Ж6
digitalWrite(4, LOW); //не горит 31,32,35,36
digitalWrite(5, LOW); // не горит КЗ,К4,К7,К8
digitalWrite(6, HIGH); // горит ЖЗ,Ж4,Ж7,Ж8
digitalWrite(7, HIGH); // горит 33,34,37,38
digitalWrite(8, HIGH); // горит все КП
digitalWrite(9, LOW); // не горят все ЗП
delay(1000); // время шага 1 сек.
}
Таким образом, в каждый шаг записываем состояния цепей групп светодиодов светофорного блока (LOW - не горит, HIGH - горит). Затем указываем длительность (время) шага (1000 = 1 сек или 10000 = 10 секунд). Затем следующий шаг.
В комментариях (после знака «//») указано какие именно светодиоды конкретного светофора на этом шаге горят, а какие не горят, согласно схеме макета светофора по рисунку 1.
Как уже сказано, шагов может быть сколько угодно. И время можно задавать любой величины, например, на каких-то шагах можно задать время 40 секунд (delay (40000)).
Каравкин В. РК-01-2019.
Литература:
- Каравкин В. «Ёлочная гирлянда на ARDUINO UNO как средство от боязни микроконтроллеров», РК-11-2016.
- Каравкин В. «Ёлочный автомат на 12 гирлянд на ARDUINO UNO. РК-11-2017.
- Цифровой вольтметр и амперметр для зарядного устройства (Arduino UNO, 1602A)
- Цифровая шкала для КВ приемника (Arduino UNO, 1602А)
- Интегральные стабилизаторы для микроконтроллеров, схемы
- Подсистема начального сброса в микроконтроллерах
