Mootor

Ülesanne 7 – Умный шлагбаум

Тема задания:

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


Используемые компоненты:

  • Arduino Uno R3 — основная плата микроконтроллера
  • HC-SR04 ультразвуковой датчик — для измерения расстояния и обнаружения приближающегося объекта (машины/руки)
  • Сервомотор (SG90) — для открытия и закрытия шлагбаума
  • Красный светодиод (LED) — индикация “шлагбаум закрыт / проезд запрещён”
  • Зелёный светодиод (LED) — индикация “шлагбаум открыт / проезд разрешён”
  • 2 × резистора 220 Ом — ограничение тока для светодиодов
  • Макетная плата (breadboard) — для сборки схемы
  • Провода соединительные (male-male) — для подключения компонентов

Цели проекта: Умная система шлагбаума

  1. Создать автоматизированную систему шлагбаума, которая открывается при приближении объекта (например, машины или руки).
  2. Измерять расстояние до объекта с помощью ультразвукового датчика (HC-SR04).
  3. Управлять сервомотором, обеспечивая открытие и закрытие шлагбаума в нужный момент.
  4. Отображать состояние системы с помощью светодиодов:
    • зелёный — проезд разрешён,
    • красный — проезд запрещён.
  5. Повысить безопасность и удобство управления доступом к ограниченной зоне (например, парковке или въезду).
  6. Развить навыки работы с Arduino, цифровыми и аналоговыми компонентами
КомпонентКонтактArduino
HC-SR04VCC5V
GNDGND
TrigD9
EchoD10
ServoSignal (оранжевый)D8
VCC (красный)5V
GND (чёрный)GND
RGB LEDR (анод через резистор)A0
G (анод через резистор)A1
B (анод через резистор)*A2
Общий катодGND
#include <Servo.h>
 
const int trigPin = 9;
const int echoPin = 10;
const int servoPin = 8;
 
const int redPin = A0;
const int greenPin = A1;
const int bluePin = A2;
 
const int openAngle = 90;
const int closeAngle = 0;
 
const int distanceThreshold = 15;
 
Servo tollServo;
 
void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
 
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
 
  tollServo.attach(servoPin);
  tollServo.write(closeAngle);
 
  Serial.begin(9600);
}
 
void loop() {
  int distance = readDistance();
 
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");
 
  if (distance > 0 && distance < distanceThreshold) {
    // Объект обнаружен — открыть шлагбаум
    tollServo.write(openAngle);
    setLEDColor(0, 255, 0);
    delay(3000);
    tollServo.write(closeAngle);
    setLEDColor(255, 0, 0);
  } else {
    tollServo.write(closeAngle);
    setLEDColor(255, 0, 0);
  }
 
  delay(500);
}
 
int readDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
 
  long duration = pulseIn(echoPin, HIGH);
  int distance = duration * 0.034 / 2;
  return distance;
}
 
void setLEDColor(int r, int g, int b) {
  analogWrite(redPin, r);
  analogWrite(greenPin, g);
  analogWrite(bluePin, b);
}