Управляет одним электродвигателем через драйвер L293D.
Направление вращения зависит от положения переключателя (кнопки).
Когда переключатель HIGH → мотор вращается в одну сторону.
Когда переключатель LOW → в противоположную.
Полный код с комментариями
// --- ПОДКЛЮЧЕНИЕ ПИНОВ ---
int switchPin = 2; // Вход с кнопки / тумблера (lüliti 1)
int motor1Pin1 = 3; // Пин 2 драйвера L293D (IN1)
int motor1Pin2 = 4; // Пин 7 драйвера L293D (IN2)
int enablePin = 9; // Пин 1 драйвера L293D (EN1)
// --- НАСТРОЙКА ---
void setup() {
// Вход — кнопка
pinMode(switchPin, INPUT);
// Выходы на драйвер
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(enablePin, OUTPUT);
// Включаем подачу питания на мотор через EN-пин
digitalWrite(enablePin, HIGH);
}
// --- ОСНОВНОЙ ЦИКЛ ---
void loop() {
// Если переключатель включён (логический HIGH)
if (digitalRead(switchPin) == HIGH) {
// Вращение в одном направлении
digitalWrite(motor1Pin1, LOW); // IN1 = LOW
digitalWrite(motor1Pin2, HIGH); // IN2 = HIGH
} else {
// Вращение в обратном направлении
digitalWrite(motor1Pin1, HIGH); // IN1 = HIGH
digitalWrite(motor1Pin2, LOW); // IN2 = LOW
}
}
📦 Подключение компонентов
🔌 L293D и мотор:
L293D Пин
Назначение
Куда подключить Arduino
1 (EN1)
Enable (мотор)
D9
2 (IN1)
Направление 1
D3
7 (IN2)
Направление 2
D4
3,6
К мотору
DC мотор (один вывод к 3, другой к 6)
4,5,12,13
GND
GND
8
+V для мотора
Отдельное питание (6–12V)
16
VCC (логика)
5V от Arduino
🔘 Переключатель (lüliti):
Один контакт — к D2
Другой — к GND
Подтяжка либо внешняя (10k), либо включить pinMode(..., INPUT_PULLUP).
✅ Что реализовано:
Управление мотором по направлению
Использование драйвера L293D
Переключение через цифровой вход
Ü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;
// RGB пины
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;
}
// Управление RGB LED
void setLEDColor(int r, int g, int b) {
analogWrite(redPin, r);
analogWrite(greenPin, g);
analogWrite(bluePin, b);
}