Модель светофора.

  • Печать

traffic lightАвтоматический регулировщик дорожного движения под названием светофор, давно стал привычным объектом на городских улицах. Простой алгоритм работы и визуальная наглядность работы данного устройства обусловили его частое использование в качестве объекта моделирования в разнообразных программных приложениях. Возможна реализация модели светофора и с помощью микроконтроллера. Учитывая простоту объекта, в качестве такового может быть использована микросхема PIC12F629.

Алгоритм работы.

Работа светофора может быть реализована с помощью двух режимов. Рабочий режим содержит последовательное переключение красного, желтого и зеленого цветов. Для большей реалистичности необходимо предусмотреть наложение красного и желтого цветов перед переключением на зеленый, а также мигающий зеленый в конце его свечения. Второй режим – дежурный. Его особенностью является постоянное мигание желтого цвета. Переключение между режимами происходит после нажатия на кнопку.

Алгоритм работы светофора
Алгоритм работы светофора

Принципиальная схема.

Принципиальная электрическая схема модели светофора содержит минимум радиодеталей. Основу схемы составляет микроконтроллер PIC12F629. К трем его выводам, через токоограничивающие сопротивления присоединены светодиоды L813, производства Kingbright, красного, желтого и зеленого свечения. Вход GP3 микроконтроллера использован для переключения режима работы модели с помощью кнопки. Для обеспечения удобства программирования, предусмотрен ISP-разъем, позволяющий работать с программатором PicKit2.

Модель светофора. Принципиальная схема.
Модель светофора. Принципиальная схема.

 

Конструкция.

Печатная плата светофора создавалась для простого повторения студентами и начинающими радиолюбителями. Поэтому используются только элементы штыревого монтажа. Плата имеет размеры и ориентирована на ЛУТ технологию.

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

Печатная плата Готовая модель
Печатная плата Готовая модель

Управляющая программа.

Управляющая программа написана на языке mikroPascal. Переключение режимов работы происходит через прерывание от порта ввода/вывода. Рабочий и дежурный циклы реализованы простейшим способом – переключением соответствующих линий с программной задержкой между операциями. 

Программа светофора

program svetofor;

var Rez    :byte;              //Режим

    Red    : sbit at GPIO.B4;  //Красный цвет

    Yellow : sbit at GPIO.B5;  //Желтый цвет

    Green  : sbit at GPIO.B2;  //Зеленый цвет

    Button : sbit at GPIO.B3;  //Кнопка

procedure interrupt//Прерывание по нажатию кнопки

begin

  delay_ms(100);            //Защита от дребезга

  if Button then

    begin

      if Rez=1 then Rez:=0 else Rez:=1; //Переключение режима

    end;

  ClearBIT(INTCON,GPIF);   //Сброс флага прерывания по кнопке

end;

{ Main program }

begin

  {Настройка прерывания}

  iocb   :=%00001000;

  INTCON :=%10001000;

  {Настройка порта в\в}

  CMCON  :=7;

  trisio :=0;

  gpio   :=0;

  Rez:=0;   //Режим 0

{Бесконечный цикл}

  while 1 do

    begin

      if Rez=1 then  {Режим Мигающий желтый}

        begin

          delay_ms(500);

          Yellow:=1;

          delay_ms(500);

          Yellow:=0;

        end;

      if Rez=0 then  {Рабочий режим}

        begin

        //Красный

          Red:=1;

          delay_ms(3000);

          Yellow:=1;

        //Желтый

          delay_ms(2000);

          Red:=0;

          Yellow:=0;

        //Зеленый

          Green:=1;

          delay_ms(3000);

          Green:=0;

        //Мигание зеленого

          delay_ms(500);

          Green:=1;

          delay_ms(500);

          Green:=0;

          delay_ms(500);

          Green:=1;

          delay_ms(500);

          Green:=0;

          delay_ms(500);

          Green:=1;

          delay_ms(500);

          Green:=0;

        //Желтый

          Yellow:=1;

          delay_ms(2000);

          Yellow:=0;

        end;

    end;

end.

Еще по теме:

Термометр с линейной шкалой