Светофор на Ардуино для начинающих

Светофор на Ардуино позволит вам лучше разобраться в среде программирования Arduino IDE и понять принцип работы цифровых пинов общего назначения платы.


Светофор на Ардуино для начинающих

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

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

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • цветные светодиоды и резисторы;
  • тактовая кнопка;
  • макетная плата;
  • провода «папа-папа», «папа-мама».

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

Схема светофора на Ардуино для начинающих
Схема светофора на Ардуино для начинающих

Счетч светофора Arduino для начинающих

// присваиваем имена для портов со светодиодами
#define RED1 2
#define ORG1 3
#define GRN1 4
#define RED2 6
#define ORG2 7
#define GRN2 8

// задержка между переключением светофора 3 сек
int pause = 3000;

void setup() {
   pinMode(RED1, OUTPUT);
   pinMode(ORG1, OUTPUT);
   pinMode(GRN1, OUTPUT);
   pinMode(RED2, OUTPUT);
   pinMode(ORG2, OUTPUT);
   pinMode(GRN2, OUTPUT);
}

void loop() {
  // первая фаза
   digitalWrite(RED1, HIGH);
   digitalWrite(ORG1, LOW);
   digitalWrite(GRN1, LOW);
   digitalWrite(RED2, LOW);
   digitalWrite(ORG2, LOW);
   digitalWrite(GRN2, HIGH);
   delay(pause);
  // вторая фаза
   digitalWrite(RED1, HIGH);
   digitalWrite(ORG1, HIGH);
   digitalWrite(GRN1, LOW);
   digitalWrite(RED2, LOW);
   digitalWrite(ORG2, HIGH);
   digitalWrite(GRN2, LOW);
   delay(pause);
  // третья фаза
   digitalWrite(RED1, LOW);
   digitalWrite(ORG1, LOW);
   digitalWrite(GRN1, HIGH);
   digitalWrite(RED2, HIGH);
   digitalWrite(ORG2, LOW);
   digitalWrite(GRN2, LOW);
   delay(pause);
  // четвертая фаза
   digitalWrite(RED1, LOW);
   digitalWrite(ORG1, HIGH);
   digitalWrite(GRN1, LOW);
   digitalWrite(RED2, HIGH);
   digitalWrite(ORG2, HIGH);
   digitalWrite(GRN2, LOW);
   delay(pause);
}

Пояснения к коду:

  1. для пинов со светодиодами заданы имена с помощью директивы #define;
  2. переключение светодиодов происходит каждые три секунды, интервал можно изменить, поменяв в программе значение переменной int pause = 3000;.

Светофор на Arduino Uno с кнопкой

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

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

Счетч для светофора на Ардуино с кнопкой

// присваиваем имена для портов со светодиодами
#define RED1 2
#define ORG1 3
#define GRN1 4
#define RED2 6
#define ORG2 7
#define GRN2 8
#define KNP 10

// задержка между переключением светофора 3 сек
int pause = 3000;

void setup() {
   pinMode(RED1, OUTPUT);
   pinMode(ORG1, OUTPUT);
   pinMode(GRN1, OUTPUT);
   pinMode(RED2, OUTPUT);
   pinMode(ORG2, OUTPUT);
   pinMode(GRN2, OUTPUT);
   pinMode(KNP, INPUT);
}

void loop() {
  // первая фаза
   digitalWrite(RED1, HIGH);
   digitalWrite(ORG1, LOW);
   digitalWrite(GRN1, LOW);
   digitalWrite(RED2, LOW);
   digitalWrite(ORG2, LOW);
   digitalWrite(GRN2, HIGH);
  // цикл while не начнется, пока не будет нажата кнопка
while (digitalRead(10) == LOW) {
      delay(pause);
     // вторая фаза
      digitalWrite(RED1, HIGH);
      digitalWrite(ORG1, HIGH);
      digitalWrite(GRN1, LOW);
      digitalWrite(RED2, LOW);
      digitalWrite(ORG2, HIGH);
      digitalWrite(GRN2, LOW);
      delay(pause);
     // третья фаза
      digitalWrite(RED1, LOW);
      digitalWrite(ORG1, LOW);
      digitalWrite(GRN1, HIGH);
      digitalWrite(RED2, HIGH);
      digitalWrite(ORG2, LOW);
      digitalWrite(GRN2, LOW);
      delay(pause);
     // четвертая фаза
      digitalWrite(RED1, LOW);
      digitalWrite(ORG1, HIGH);
      digitalWrite(GRN1, LOW);
      digitalWrite(RED2, HIGH);
      digitalWrite(ORG2, HIGH);
      digitalWrite(GRN2, LOW);
      delay(pause);
   }
}

Пояснения к коду:

  1. для пинов со светодиодами и для тактовой кнопки заданы имена;
  2. цикл while выполняется только при нажатой кнопке.

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

В следующем коде было добавлено мигание зеленого сигнала светофора, в остальном он ничем не отличается от первого скетча в этом обзоре. Для желающих сделать подобный проект, мы разместили все необходимые файлы в одном архиве здесь. По ссылке вы можете скачать чертеж перекрестка в формате CDR (Corel Draw) и 3D модель светофора в формате STL. Код для светофора Ардуино размещен далее.

Счетч для светофоров на Arduino Uno / Nano

// присваиваем имена для портов со светодиодами
#define RED1 2
#define ORG1 3
#define GRN1 4
#define RED2 6
#define ORG2 7
#define GRN2 8

// задержка между переключением светофора 3 сек
int pause = 3000;
int miganie = 500;

void setup() {
   pinMode(RED1, OUTPUT);
   pinMode(ORG1, OUTPUT);
   pinMode(GRN1, OUTPUT);
   pinMode(RED2, OUTPUT);
   pinMode(ORG2, OUTPUT);
   pinMode(GRN2, OUTPUT);
}

void loop() {
  // первая фаза
   digitalWrite(RED1, HIGH);
   digitalWrite(ORG1, LOW);
   digitalWrite(GRN1, LOW);
   digitalWrite(RED2, LOW);
   digitalWrite(ORG2, LOW);
   digitalWrite(GRN2, HIGH);
   delay(pause);
  // мигание зеленого сигнала
   digitalWrite(GRN2, LOW);
   delay(miganie);
   digitalWrite(GRN2, HIGH);
   delay(miganie);
   digitalWrite(GRN2, LOW);
   delay(miganie);
   digitalWrite(GRN2, HIGH);
   delay(miganie);
   digitalWrite(GRN2, LOW);
   delay(miganie);
   digitalWrite(GRN2, HIGH);
   delay(miganie);
  // вторая фаза
   digitalWrite(RED1, HIGH);
   digitalWrite(ORG1, HIGH);
   digitalWrite(GRN1, LOW);
   digitalWrite(RED2, LOW);
   digitalWrite(ORG2, HIGH);
   digitalWrite(GRN2, LOW);
   delay(pause);
  // третья фаза
   digitalWrite(RED1, LOW);
   digitalWrite(ORG1, LOW);
   digitalWrite(GRN1, HIGH);
   digitalWrite(RED2, HIGH);
   digitalWrite(ORG2, LOW);
   digitalWrite(GRN2, LOW);
   delay(pause);
  // мигание зеленого сигнала
   digitalWrite(GRN1, LOW);
   delay(miganie);
   digitalWrite(GRN1, HIGH);
   delay(miganie);
   digitalWrite(GRN1, LOW);
   delay(miganie);
   digitalWrite(GRN1, HIGH);
   delay(miganie);
   digitalWrite(GRN1, LOW);
   delay(miganie);
   digitalWrite(GRN1, HIGH);
   delay(miganie);
  // четвертая фаза
   digitalWrite(RED1, LOW);
   digitalWrite(ORG1, HIGH);
   digitalWrite(GRN1, LOW);
   digitalWrite(RED2, HIGH);
   digitalWrite(ORG2, HIGH);
   digitalWrite(GRN2, LOW);
   delay(pause);
}

Пояснения к коду:

  1. чтобы не усложнять код, светофоры подключены к плате парами;
  2. частота мигания зеленого сигнала меняется в переменной miganie;
  3. проект светофора можно усовершенствовать, заменив кнопку ультразвуковыми дальномерами hc-sr04 для Ардуино.
1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5,00 out of 5)
Загрузка...

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

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