Работа 1

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


Для этого нам понадобятся:

  • Adruino Uno (Материнская плата)
  • Breadroad Mini (Макетная плата)
  • Resistor (Резистор 220 Ω)
  • LED (Светодиод)
  • Jumper wires (Соединительные провода)

link

Соединив всё мы имеем такую схему, в которой синяя лампочка, соединенная с платой через Pin — 10. Один цикл составляет 0.5с, из которых период включения и выключения лампочки составляет по 0.25с.

Работа 2

Ознакомившись с базовым функционалом перейдем к более интересной задаче, а именно создание светофора.

Для этого нам потребуется:
Resistor (Резистор 220 Ω) — 5 штук.
LED (Светодиод) — 5 штук.

https://www.tinkercad.com/things/5VpFW4pxPJ5-valguspfore?sharecode=WOBqdJ9QJVd3_qLnDCLkgzRclRNskKGyWCtI2GQ8Y74link

Используемый код:

int tsikl = 0;     
bool Day = true;

void setup()
{
  // pinMode() määrab töörežim

  pinMode(13, OUTPUT);// Red
  pinMode(12, OUTPUT);// Yellow
  pinMode(11, OUTPUT);// Green
  
  // пешеход
  pinMode(5, OUTPUT); // Red (пешеход) 
  pinMode(2, OUTPUT); // Green (пешеход)
}
void loop() {
  if (Day) {
    daylight();
    tsikl++;
    if (tsikl >= 4) {
      tsikl = 0;
      Day = false; // Night Switch
    }
  } else {
    nightlight();
    tsikl++;
    if (tsikl >= 3) {
      tsikl = 0;
      Day = true; // Day Switch
    }
  }
}
void daylight()
  { //Red Light
  digitalWrite(13, HIGH);   // RED for cars
  digitalWrite(2, HIGH);    // Зелёный для пешеходов
  delay(4000);              // 
  digitalWrite(13, HIGH);
  digitalWrite(12, HIGH);
  delay(1000);

  // Blinking GREEN light
  for (int i = 0; i < 3; i++) {
    digitalWrite(2, LOW); // Vilgub 3 korda
    delay(300);
    digitalWrite(2, HIGH);
    delay(200);
  }

  // Turning off
  digitalWrite(13, LOW);    // CARS
  digitalWrite(12, LOW);
  digitalWrite(2, LOW);     // ПЕШЕХОДЫ
  delay(200);
 
  //Green light
  digitalWrite(11, HIGH);   // Green light turns in
  digitalWrite(5, HIGH);
  delay(3000);              // Ootab 10* sek  
  
  
  digitalWrite(11, LOW);    // Lülitamine enne kollast
  delay(400); 
  digitalWrite(11, HIGH);   
  delay(400); 
  digitalWrite(11, LOW);
  delay(400); 
  digitalWrite(11, HIGH);
  delay(400);
  digitalWrite(11, LOW);
  delay(400); 
  
  
  //Yellow Light 
  digitalWrite(12, HIGH);   // Yellow light turns in
  delay(2000);              // Ootab 2 sek    digitalWrite(12, LOW);
  digitalWrite(5, LOW);
}
void nightlight() {
  // Night mode?
  for (int i = 0; i < 4; i++) {
    digitalWrite(13, LOW);
    digitalWrite(11, LOW);
    digitalWrite(5, LOW);
    digitalWrite(2, LOW);
    digitalWrite(12, HIGH);
    delay(1200);
    digitalWrite(12, LOW);
    delay(700);
  } 
}       

Принцип работы:

  1. Переключение режимов
    • 4× дневной цикл → ночь
    • 3× ночной цикл → день
  2. Днём (daylight()):
    • Красный (машины) + зелёный (пешеходы) — 4 с
    • Жёлтый (машины) добавляется к красному — 1 с
    • Мигающий зелёный (пешеходы) 3× (300 мс выкл + 200 мс вкл)
    • Пауза все отключены — 200 мс
    • Зелёный (машины) + красный (пешеходы) — 3 с
    • Мигание зелёного (машины) 2× (400 мс вкл/400 мс выкл)
    • Жёлтый (машины) — 2 с
  3. Ночью (nightlight()):
    • Жёлтый (машины) мигает 4× (1,2 с вкл + 0,7 с выкл)
    • Остальные лампы всегда выключены.

После каждого вызова функция увеличивает tsikl; по достижении порога происходит смена режима.