Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на июнь 2024 г.

Похожие статьи:


Реклама ⓘ

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

Предлагается подробное описание изготовления действующей модели светофора для четырёхстороннего перекрёстка на микроконтроллере.

Есть немало подобных конструкций, но думаю, представленная конструкция является наиболее оптимальной и простой.

Порядок работы настоящего светофора следующий: Для одного направления горит «зелёный» свет, при этом для другого горит «красный». По истечении примерно 30 секунд, «зелёный» начинает моргать (обычно 3 раза), при этом «красный» продолжает гореть. Далее, вместо зелёного зажигается «жёлтый», а вместе с продолжающим гореть «красным», дополнительно зажигается «жёлтый». Через 2-4 секунды, на первом направлении зажигается «красный», а на другом «зелёный». Далее цикл повторяется. Кроме того, существует «ночной» режим, когда для обоих направлений мигает «жёлтый» свет. Для наглядности, можно нарисовать таблицу:

В таблице чёрный кружок соответствует включённому сигналу, а белый кружок обозначает мигающий сигнал. Буквы обозначают цвет, а цифры порядковый номер. Слева одно направление, справа другое. Нижняя, 7 строка, обозначает «ночной» режим работы светофора.

Анализируя работу устройства, мы видим, что «жёлтый» свет включается одновременно на обоих направлениях, то есть может управляться одним общим выводом. Поэтому для работы устройства нам будет достаточно 5 управляющих цепей. Для этого подойдёт самый простой микроконтроллер с одним неполным портом, например ATTINI13.

У этого МК, кроме выводов питания и ножки “RESET”, как раз имеются 5 необходимых нам выводов.

Для начала начертим принципиальную схему светофора. В качестве ламп будем использовать яркие светодиоды соответствующих цветов. Так как светодиоды нельзя напрямую подключать к микроконтроллеру, понадобятся гасящие резисторы с номиналом 470 ом, по числу светодиодов.

Так как светофор должен висеть над перекрёстком, и должен быть виден с четырёх направлений, количество светодиодов удвоится, т. е. понадобятся  12 светодиодов и 12 резисторов.

Для питания будет использоваться литиевый элемент (например, 18650), включённый последовательно с любым подходящим выключателем. Для стабильной работы, параллельно питанию МК, подключен электролитический конденсатор С1.

Теперь, когда схема составлена, нужно написать программу для микроконтроллера. Программу будем создавать на языке С в среде Atmel Studio 6.2 Это бесплатная и весьма удобная программа для работы с МК семейства avr, к которому и относится, выбранный нами микроконтроллер Attini13 .

Итак, программа скачена и установлена. Нужный микроконтроллер выбран. Создадим функцию предварительной настройки, и назовём её «preset». В теле этой функции будет две строки:

Настраиваем порт B (кроме 5 бита) на выход: DDRB=0b011111;

На  выводах порта (кроме 5 бита) установим логический 0 : PORTB=0b100000;

Далее сделаем так: При включении питания, светофор, пускай отработает, например, 5 циклов. После окончания 5  цикла, пускай включится «ночной режим» который будет мигать, например, 10 раз. После этого опять включится нормальный режим, отработает 5  циклов, затем «ночной режим», и т. д.  пока включено питание.

Запишем первую строку основного цикла: PORTB=0b001001; Как видно, значение «1», присвоено нулевому и третьему биту порта. Это значит, что будут гореть красные светодиоды слева (нулевой бит, 5 нога), и зелёные светодиоды справа (3 бит 2 нога). В следующей строке зададим время, в течение которого будут гореть данные сигналы светофора: _delay_ms(5000);

Теперь нужно, не меняя состояния остальных сигналов, трижды мигнуть правыми зелёными светодиодами. Сделать это можно по-разному, но мы создадим функцию для мигания правыми зелёными светодиодами: Дадим имя этой функции migz1.

Для того, чтобы мигал только лишь правый зелёный, а состояние остальных битов не менялось, используем побитовые операции: Сначала выключим правые зелёные светодиоды: PORTB&=~(1<<3); Выдерживаем паузу, _delay_ms(300); Включаем правые зелёные светодиоды: PORTB|=(1<<3); Выдерживаем паузу, _delay_ms(300); выключим правые зелёные светодиоды: PORTB&=~(1<<3); Так как данную операцию нужно повторить трижды, создадим цикл: int i;

for (i=1; i<=3;i++) команды, привязанные к этому циклу, будут трижды выполняться.

Далее нужно зажечь жёлтые сигналы и красные слева. Запишем строку: PORTB=0b000011; Выдерживаем паузу, _delay_ms(1000); Затем включаем справа красный, а слева зелёный: PORTB=0b010100; Выдерживаем нужную паузу, _delay_ms(5000);

Теперь нужно трижды помигать левыми зелёными светодиодами. Для этого создадим функцию, и назовём её migz2. Функция аналогична предыдущей, с той лишь разницей, что будем управлять не третьим, а вторым битом (вместо 3 пишем 2). Далее зажигаем жёлтые светодиоды и красные справа: PORTB=0b010010; Выдерживаем паузу, _delay_ms(1000);

Теперь, согласно первоначальному плану, создадим цикл, который будет выполнять написанную нами программу 5 раз: int i;

for (i=1; i<=5;i++).

Осталось написать функцию «ночного режима». Назовём её migj

Запишем PORTB=0b000010; Это означает, что будут гореть жёлтые светодиоды, подключенные к 1 биту (6 нога микроконтроллера). Выдерживаем паузу, _delay_ms(300); Выключаем светодиоды: PORTB=0b000000; Кстати, можно написать эту команду в шестнадцатеричной форме: PORTB=0x00; Выдерживаем паузу, _delay_ms(300); Создаём цикл для десятитикратного повторения: int i;

for (i=1; i<=10;i++).

Для того, что бы программа работала, пока включено питание, создадим бесконечный цикл while(1).

Полный вид программы:

Очень удобно посмотреть работу программы в симуляторе «Proteus», чтобы выбрать наиболее наглядные интервалы работы модели светофора.

Для прошивки использован USB программатор и программа avrdudeprog33. Фьюзы микроконтроллера не меняются и остаются по умолчанию.

Файлы с проектом и файл Proteus (версия 8.10), а так же видео, работы светофора прилагаются.

Конструктивно светофор сделан из четырёх прямоугольных пластин фольгированного стеклотекстолита, размером 15х45 мм. В пластинах просверлены отверстия диаметром 0,8 мм для установки светодиодов. С внешней стороны отверстия, в которые вставляются аноды светодиодов, раззенкованы, что бы исключить их замыкание на корпус. На каждой из пластин, смонтированы  светодиоды. Катоды всех светодиодов соединены с корпусом, а к аноду каждого светодиода припаян провод, идущий к плате микроконтроллера. Все 13 проводов продеты в терм усадочную трубку.

В плату впаяна панелька, для установки микроконтроллера в DIP корпусе и электролитический конденсатор. Все резисторы в плату впаяны вертикально только одним концом. К второму концу резисторов припаяны провода идущие к светодиодам. Размеры платы 25х25 мм. Все отверстия просверлены сверлом 0,8 мм, а дорожки прорезаны резаком, сделанным из сломанного ножовочного полотна

После припайки проводов, пластины с помощью отрезков ножек светодиодов, соединяются пайкой. На каждый светодиод надевается отрезок чёрной терм усадки.

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 1
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 1 чел.

Комментарии (10) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
-3
avi50 #
Быть может я чего-то не допонимаю , но считаю , что сейчас нужно заниматься более ответственными задачами.
Ответить
+3

[Автор]
avtohirurg #
Что бы заниматься: "более ответственными задачами", неплохо сначала научиться справляться с простыми задачами. "Более ответственную задачу" выложу в следующей статье.
Ответить
0
VIT13 #
Неплохой проект! Можно ли его повторить на Attiny 45 без изменений? А также как задать время между переключениями? А также можно ли для прошивки МК с этой программой применить программатор на обычной ардуине?
Ответить
+1

[Автор]
avtohirurg #
Главное требование, это наличие 5 свободных выводов. Поэтому думаю, что можно. Время переключения задаётся оператором _delay_ms(1000); где вместо 1000, можно поставить нужное число (в миллисекундах). На Ардуине конечно можно, но проще и дешевле на Attine13.
Ответить
0
AMatroskin #
Довольно интересно. Особо ценно наличие объяснения логики работы.
Ответить
0
sathv #
Вопрос немного не по теме. Не попадалась ли Вам оболочка с ATtiny13A в перечне контроллеров? Я только сегодня пытался добавлять его в ini файл AVRDUDPROG33-не узнает. Или какая-нибудь наводящая на след информация?
Ответить
0
Shida #
Вот если бы Вы дополнили свой светофор зелёным пешеходным человечком и установили бы ещё табло отсчёта времени, то вашему светофору не было бы цены!
Ответить
0

[Автор]
avtohirurg #
Задача была сделать простую и понятную конструкцию, с минимальными затратами.
Ответить
0
Shida #
Но всё же респект вам и уважуха!
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
Набор 4WD Kit Bluetooth Регулятор мощности 2 кВт
вверх