Mootor

Назначение кода

  • Управляет одним электродвигателем через драйвер 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)Направление 1D3
7 (IN2)Направление 2D4
3,6К моторуDC мотор (один вывод к 3, другой к 6)
4,5,12,13GNDGND
8+V для мотораОтдельное питание (6–12V)
16VCC (логика)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) — для подключения компонентов

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

  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;

// 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);
}