Как сделать светофор на ардуино
Перейти к содержимому

Как сделать светофор на ардуино

  • автор:

Мастер — класс по робототехнике «Светофор на Arduino»

Всем привет! Мы бы хотели рассказать вам о том, как сделать светофор из светодиодов с помощью платы Arduino!
Для сборки нам понадобится:
— 3 светодиода
— 3 резистора (1000 Ом)
— макетная плата
— плата Arduino Nano
— 4 провода «Папа-Папа»
— провод Usb — miniUSB

Светофор на Ардуино схема

Для начала, нам потребуется подключить светодиоды к плате Arduino Nano, например, по следующей схеме:

В реальной жизни, подключение выглядит так:

Светофор на Arduino

После сборки, нам необходимо загрузить прошивку в плату. Если вы подключали диоды по нашей схеме (на 11, 12 и 13 пины), то можете собрать и загрузить код, представленный на изображении (или скачать готовую прошивку для RobotON Studio).

Общий принцип программы следующий: сначала загорается красный светодиод (на 3 секунды), затем в дополнение к нему загорается желтый светодиод (горят вместе 2 секунды), затем красный и желтый гаснут и загорается зеленый светодиод (на 3 секунды), затем зеленый моргает 3 раза (с периодом 0,3 секуны). После этого, выполнение программы начинается сначала.

На этом мастер-класс закончен, теперь можно самостоятельно регулировать движение подвижных роботов по квартире:)

Цветомузыка и светофор

Продолжим наши опыты со светодиодами и усложним схему, добавив пару разноцветных светодиодов. У нас будут три светодиода: красный, синий и зелёный. Схема будет выглядеть так.

Схема с тремя светодиодами

Собираем в следующем порядке. Берем три одинаковых резистора и вставляем их ножки в выводы 10, 11 и 12 на плате. Другие ножки резисторов вставляем в отверстия на макетной плате, например, в A11, A12, A13. Далее берём три светодиода и вставляем длинные ножки в отверстия E11, E12, E13. Короткие ножки светодиодов необходимо разместить вдоль одной линии (F13, G13, H13). Завершает конструкцию перемычка, которая вставляется в отверстие I13 и соединяется с выводом GND на плате Arduino UNO.

Код для цветомузыки

Напишем простенький алгоритм мигания светодиодов. Сначала по очереди загораются все светодиоды, а потом они все одновременно гаснут.

 int redPin = 10; // красный светодиод на выводе 10 int greenPin = 11; // зелёный светодиод на выводе 11 int bluePin = 12; // синий светодиод на выводе 12 void setup() // запускается один раз при старте скетча < pinMode(redPin, OUTPUT); // вывод 10 в режиме вывода pinMode(greenPin, OUTPUT); // вывод 11 в режиме вывода pinMode(bluePin, OUTPUT); // вывод 12 в режиме вывода >void loop() // повторяется постоянно < digitalWrite(redPin, HIGH); // включаем красный светодиод delay(1000); // делаем паузу на 1 секунду digitalWrite(greenPin, HIGH); // включаем зелёный светодиод delay(1000); // делаем паузу digitalWrite(bluePin, HIGH); // включаем синий светодиод delay(1000); // снова пауза // выключаем все светодиоды одновременно digitalWrite(redPin, LOW); digitalWrite(greenPin, LOW); digitalWrite(bluePin, LOW); delay(500); // пауза на полсекунды >

Запустите пример и убедитесь, что все работает правильно. Для улучшения результата склейте бумажный кубик и наденьте его на светодиоды. У вас получится полупрозрачная конструкция, которая будет напоминать цветомузыку.

При подготовке урока использовались материалы с сайта Arduino Tutorial — Lesson 3 — Breadboards and LEDs.

Светофор

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

Для начала определимся, что будем использовать выводы Arduino под номерами 8, 10 и 12. Вставляем в них провода. Вторые концы проводов вставляем в макетную плату. Затем на соседних местах сажаем резисторы. После них опять на соседних местах сажаем светодиоды. Далее на одной линии от короткой ножки вставляем новые провода и соединяем их с синей рельсой. И, наконец, берём ещё один провод, который будет выходит из синей рельсы и входить в вывод GND.

Смотрим как работает схема. Из вывода 8 выходит ток, проходит через резистор, далее проходит через красный светодиод, потом по проводу попадает на минус и через провод уходит в землю. Цепь замкнута. Остальные два участка цепи с светодиодами работает таким же образом.

Теперь напишем код. Напишем код построчно, имея перед глазами предыдущие примеры.

 /* Светофор - мигаем светодиодами по очереди, как в реальности */ int redLed = 8; int yellowLed = 10; int greenLed = 12; void setup() < // initialize the digital pin as an output. pinMode(redLed, OUTPUT); pinMode(yellowLed, OUTPUT); pinMode(greenLed, OUTPUT); >void loop() < digitalWrite(redLed, HIGH); // включаем красный цвет delay(3000); // красный цвет горит три секунды digitalWrite(redLed, LOW); // выключаем красный цвет delay(500); // на полсекунды // Повторяем три раза включение/выключение для мигания по полсекунды digitalWrite(redLed, HIGH); delay(500); digitalWrite(redLed, LOW); delay(500); digitalWrite(redLed, HIGH); delay(500); digitalWrite(redLed, LOW); delay(500); digitalWrite(redLed, HIGH); delay(500); digitalWrite(redLed, LOW); // Аналогично для жёлтого цвета digitalWrite(yellowLed, HIGH); delay(1500); digitalWrite(yellowLed, LOW); delay(500); digitalWrite(yellowLed, HIGH); delay(500); digitalWrite(yellowLed, LOW); delay(500); digitalWrite(yellowLed, HIGH); delay(500); digitalWrite(yellowLed, LOW); delay(500); digitalWrite(yellowLed, HIGH); delay(500); digitalWrite(yellowLed, LOW); // Аналогично для зелёного цвета digitalWrite(greenLed, HIGH); delay(3000); digitalWrite(greenLed, LOW); delay(500); digitalWrite(greenLed, HIGH); delay(500); digitalWrite(greenLed, LOW); delay(500); digitalWrite(greenLed, HIGH); delay(500); digitalWrite(greenLed, LOW); delay(500); digitalWrite(greenLed, HIGH); delay(500); digitalWrite(greenLed, LOW); >

Некоторые команды утомительно набирать снова и снова. Нам повезло, что светодиоды мигают по три раза. А если по 50 раз? Некоторые участки кода можно заменить циклами for:

 /* Светофор - мигаем светодиодами по очереди, как в реальности */ int redLed = 8; int yellowLed = 10; int greenLed = 12; void setup() < pinMode(redLed, OUTPUT); pinMode(yellowLed, OUTPUT); pinMode(greenLed, OUTPUT); >void loop() < digitalWrite(redLed, HIGH); // включаем красный цвет delay(3000); // красный цвет горит три секунды digitalWrite(redLed, LOW); // выключаем красный цвет delay(500); // на полсекунды // Повторяем три раза включение/выключение для мигания по полсекунды for(int i = 0; i < 3; i++)< digitalWrite(redLed, HIGH); delay(500); digitalWrite(redLed, LOW); delay(500); >// Аналогично для желтого цвета digitalWrite(yellowLed, HIGH); delay(1500); digitalWrite(yellowLed, LOW); delay(500); for(int i = 0; i < 3; i++)< digitalWrite(yellowLed, HIGH); delay(500); digitalWrite(yellowLed, LOW); delay(500); >// Аналогично для зелёного цвета digitalWrite(greenLed, HIGH); delay(3000); digitalWrite(greenLed, LOW); delay(500); for(int i = 0; i < 3; i++)< digitalWrite(greenLed, HIGH); delay(500); digitalWrite(greenLed, LOW); delay(500); >> 

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

 /* Светофор - мигаем светодиодами по очереди, как в реальности */ int redLed = 8; int yellowLed = 10; int greenLed = 12; // the setup routine runs once when you press reset: void setup() < // initialize the digital pin as an output. pinMode(redLed, OUTPUT); pinMode(yellowLed, OUTPUT); pinMode(greenLed, OUTPUT); >// the loop routine runs over and over again forever: void loop() < digitalWrite(redLed, HIGH); // включаем красный цвет delay(3000); // красный цвет горит три секунды digitalWrite(redLed, LOW); // выключаем красный цвет delay(500); // на полсекунды // Повторяем три раза включени/выключение для мигания по полсекунды blink(redLed); // Аналогично для желтого цвета digitalWrite(yellowLed, HIGH); delay(1500); digitalWrite(yellowLed, LOW); delay(500); blink(yellowLed); // Аналогично для зелёного цвета digitalWrite(greenLed, HIGH); delay(3000); digitalWrite(greenLed, LOW); delay(500); blink(greenLed); >void blink(int led) < for(int i = 0; i < 3; i++)< digitalWrite(led, HIGH); delay(500); digitalWrite(led, LOW); delay(500); >> 

Если нужно что-то изменить в программе, то достаточно в нашей функции указать число миганий, новые продолжительности работы и т.д. Всё в этом месте. Чем больше гибкости, тем удобнее работать над проектом.

Как сделать светофор на Ардуино с кнопкой

Как сделать светофор на Ардуино с кнопкой

Сделать светофор на Ардуино с кнопкой — это отличное упражнение по изучению Arduino для начинающих. Проект позволит лучше понять среду программирования Arduino IDE и принцип работы цифровых выводов общего назначения. Рассмотрим схему сборки простого светофора на Arduino Uno с использованием макетной платы (breadboard) и представим простой проект, который можно использовать в начале своего обучения.

Необходимые компоненты:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • светодиоды и резисторы
  • тактовая кнопка
  • макетная плата
  • коннекторы
  1. Поочередное включение светодиодов от Ардуино
  2. Включение светодиода от кнопки с Ардуино
  3. Мигание светодиодом от Ардуино (мигалка)

После сборки проекта, вы можете самостоятельно реализовать мигающий зеленый свет светофора в программе. Также проект можно улучшить усовершенствовать, заменив кнопку на ультразвуковой дальномер hc-sr04. Пины с подключенными светодиодами названы с помощью директивы define, а интервал включения света можно изменить, изменив значение переменной int pause = 3000; в представленной программе.

Схема светофора на Ардуино Уно или Нано

Схема светофора на Ардуино Уно или Нано

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

Скетч для светофора со светодиодами на Arduino

#define RED1 2 #define ORANGE1 3 #define GREEN1 4 #define RED2 9 #define ORANGE2 10 #define GREEN2 11 int pause = 3000; void setup() < pinMode(RED1, OUTPUT); pinMode(ORANGE1, OUTPUT); pinMode(GREEN1, OUTPUT); pinMode(RED2, OUTPUT); pinMode(ORANGE2, OUTPUT); pinMode(GREEN2, OUTPUT); >void loop()

Как сделать светофор с кнопкой на Arduino

Как сделать светофор с кнопкой на Arduino

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

Скетч для светофора с кнопкой на Arduino Uno

#define RED1 2 #define ORANGE1 3 #define GREEN1 4 #define RED2 9 #define ORANGE2 10 #define GREEN2 11 #define BOUTON 7 int pause = 3000; void setup() < pinMode(RED1, OUTPUT); pinMode(ORANGE1, OUTPUT); pinMode(GREEN1, OUTPUT); pinMode(RED2, OUTPUT); pinMode(ORANGE2, OUTPUT); pinMode(GREEN2, OUTPUT); pinMode(BOUTON, INPUT); >void loop() < digitalWrite(RED1, HIGH); digitalWrite(ORANGE1, LOW); digitalWrite(GREEN1, LOW); digitalWrite(RED2, LOW); digitalWrite(ORANGE2, LOW); digitalWrite(GREEN2, HIGH); while (digitalRead(BOUTON) == HIGH) < digitalWrite(RED1, HIGH); digitalWrite(ORANGE1, HIGH); digitalWrite(GREEN1, LOW); digitalWrite(RED2, LOW); digitalWrite(ORANGE2, HIGH); digitalWrite(GREEN2, LOW); delay(pause); digitalWrite(RED1, LOW); digitalWrite(ORANGE1, LOW); digitalWrite(GREEN1, HIGH); digitalWrite(RED2, HIGH); digitalWrite(ORANGE2, LOW); digitalWrite(GREEN2, LOW); delay(pause); digitalWrite(RED1, LOW); digitalWrite(ORANGE1, HIGH); digitalWrite(GREEN1, LOW); digitalWrite(RED2, HIGH); digitalWrite(ORANGE2, HIGH); digitalWrite(GREEN2, LOW); delay(pause); >>

Заключение. В программе цикл while будет выполняться только при нажатии кнопки. Всем портам со светодиодами и пину с кнопкой присвоены имена с помощью команды #define . Сейчас вы можете реализовать мигающий зеленый свет светофора в программе самостоятельно или еще больше усовершенствовать проект с мигающим светофором, заменив тактовую кнопку на датчик hc-sr04 ультразвукового дальномера Ардуино.

Урок 7 — Светофор на Arduino своими руками. Пишем скетч используя функции

.Урок 7 - Светофор на Arduino своими руками. Пишем скетч используя функции

В данном уроке сделаем самый простой светофор из трех светодиодов . Работать он должен вот по такой схеме.

Работа светофора

1. Светит только красный цвет нашего будущего светофора.

2. Не выключая красный сигнал светофора включаем желтый .

3. Выключаем красный и желтый включаем зеленый.

4. Выключаем зеленый сигнал светофора включаем желтый.

После чего цикл повторяем с красного сигнала светофора.

Для урока нам понадобится:

  • Arduino UNO или Arduino Nano
  • Плата макетная беспаечная
  • Резисторы 220 ОМ
  • Соединительные провода папа-папа
  • Светодиоды 3 или 5 мм.

Подключим три LED к плате Arduino UNO . У нас получиться вот такая схема.

Светофор на ардуино своими руками

Принципиальная схема подключения светофора на Arduino

Скетч выглядит так

int led_red = 2; // пин подключения 2 int led_yellow = 3; // пин подключения 3 int led_green = 4; // пин подключения 4 void setup() < pinMode(led_red, OUTPUT); pinMode(led_yellow, OUTPUT); pinMode(led_green, OUTPUT); >void loop() < digitalWrite(led_red, HIGH); delay(10000); // Ждем digitalWrite(led_yellow, HIGH); delay(2000);// Ждем digitalWrite(led_green, HIGH); digitalWrite(led_red, LOW); digitalWrite(led_yellow, LOW); delay(10000);// Ждем digitalWrite(led_yellow, HIGH); digitalWrite(led_green, LOW); delay(2000);// Ждем digitalWrite(led_yellow, LOW); >

Для управления светодиодами используем функции digitalWrite().

Давайте заменим стандартную функции digitalWrite() на свою функцию Led().

void Led (uint8_t pin, byte status)

Функция принимает две переменные pin — пин светодиода и status — состояние светодиода HIGH или LOW.

В итоге получим вот такой скетч

int led_red = 2; // пин подключения 2 int led_yellow = 3; // пин подключения 3 int led_green = 4; // пин подключения 4 void setup() < pinMode(led_red, OUTPUT); pinMode(led_yellow, OUTPUT); pinMode(led_green, OUTPUT); >void loop() < Led (led_red, HIGH); delay(10000); // Ждем Led (led_yellow, HIGH); delay(2000);// Ждем Led (led_green, HIGH); Led (led_red, LOW); Led (led_yellow, LOW); delay(10000);// Ждем Led (led_yellow, HIGH); Led (led_green, LOW); delay(2000);// Ждем Led (led_yellow, LOW); >void Led (uint8_t pin, byte status)

Как видно по скетчу код стал больше, а функции используют для уменьшения объема кода и упрощения логики. Но мы на этом простом примере посмотрели что такое функция и как передавать переменные в функции в среде разработки arduino IDE.

Понятие что такое функции и как их объявлять пригодиться нам в следующем уроке.

Ест вопросы смотрите видео там подробно описываю программу светофора на Arduino.

Следующий урок: Светофор из 3 светодиодов для машин и 2 для пешеходов на Arduino

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

Понравилась статья? Поделитесь ею с друзьями:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *