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

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

После сборки, нам необходимо загрузить прошивку в плату. Если вы подключали диоды по нашей схеме (на 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
- светодиоды и резисторы
- тактовая кнопка
- макетная плата
- коннекторы
- Поочередное включение светодиодов от Ардуино
- Включение светодиода от кнопки с Ардуино
- Мигание светодиодом от Ардуино (мигалка)
После сборки проекта, вы можете самостоятельно реализовать мигающий зеленый свет светофора в программе. Также проект можно улучшить усовершенствовать, заменив кнопку на ультразвуковой дальномер 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

Следующий пример воспроизводит работу светофоров на пешеходных переходах, где режим работы светофора изменяется нажатием кнопки. Для этого программе необходимо использовать цикл 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 своими руками. Пишем скетч используя функции

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

1. Светит только красный цвет нашего будущего светофора.
2. Не выключая красный сигнал светофора включаем желтый .
3. Выключаем красный и желтый включаем зеленый.
4. Выключаем зеленый сигнал светофора включаем желтый.
После чего цикл повторяем с красного сигнала светофора.
Для урока нам понадобится:
- Arduino UNO или Arduino Nano
- Плата макетная беспаечная
- Резисторы 220 ОМ
- Соединительные провода папа-папа
- Светодиоды 3 или 5 мм.
Подключим три LED к плате Arduino UNO . У нас получиться вот такая схема.

Скетч выглядит так
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
Если у вас чего то нет для выполнения данного урока, Вы можете посмотреть в каталоге. Там собранные комплектующими от проверенных продавцов по самым низким ценам.
Понравилась статья? Поделитесь ею с друзьями: