Ülesanne 7 – Умный шлагбаум
Тема задания:
Умная система шлагбаума на Arduino
Создание автоматического шлагбаума, который реагирует на приближение автомобиля с помощью датчиков, открывается и закрывается автоматически, отображает статус и повышает безопасность парковки.
Используемые компоненты:
- Arduino Uno R3 — основная плата микроконтроллера
- HC-SR04 ультразвуковой датчик — для измерения расстояния и обнаружения приближающегося объекта (машины/руки)
- Сервомотор (SG90) — для открытия и закрытия шлагбаума
- Красный светодиод (LED) — индикация “шлагбаум закрыт / проезд запрещён”
- Зелёный светодиод (LED) — индикация “шлагбаум открыт / проезд разрешён”
- 2 × резистора 220 Ом — ограничение тока для светодиодов
- Макетная плата (breadboard) — для сборки схемы
- Провода соединительные (male-male) — для подключения компонентов
Цели проекта: Умная система шлагбаума
- Создать автоматизированную систему шлагбаума, которая открывается при приближении объекта (например, машины или руки).
- Измерять расстояние до объекта с помощью ультразвукового датчика (HC-SR04).
- Управлять сервомотором, обеспечивая открытие и закрытие шлагбаума в нужный момент.
- Отображать состояние системы с помощью светодиодов:
- зелёный — проезд разрешён,
- красный — проезд запрещён.
- Повысить безопасность и удобство управления доступом к ограниченной зоне (например, парковке или въезду).
- Развить навыки работы с Arduino, цифровыми и аналоговыми компонентами
| Компонент | Контакт | Arduino |
|---|---|---|
| HC-SR04 | VCC | 5V |
| GND | GND | |
| Trig | D9 | |
| Echo | D10 | |
| Servo | Signal (оранжевый) | D8 |
| VCC (красный) | 5V | |
| GND (чёрный) | GND | |
| RGB LED | R (анод через резистор) | 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);
}
