Макет светофора на 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 здесь не совсем оправдано, и явно излишне, но просто было использовано, то, что было в наличии.

Впрочем, это дает возможность выполнить светофорный узел на лампах, питающихся от электросети и подключить их к этим транзисторам, при условии питания ламп от постоянным пульсирующим током (через диодный выпрямитель).

Схема контроллера для макета светофора на ARDUINO UNO

Рис. 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.

Литература:

  1. Каравкин В. «Ёлочная гирлянда на ARDUINO UNO как средство от боязни микроконтроллеров», РК-11-2016.
  2. Каравкин В. «Ёлочный автомат на 12 гирлянд на ARDUINO UNO. РК-11-2017.

1 734 На микроконтроллерах
светофор arduino avr микроконтроллер микроконтроллер
Оставить комментарий:

cashback