Mootor ja kaugusemõõtmise andur

Katse 7.1 – Mootori kasutamine

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

  • Arudiono Uno 1шт
  • Плата 1 шт
  • L293D või SN754410 драйвер двигателя постоянного тока 1 шт
  • Выключатель 2шт
  • Резистор 10 kOm 2шт
  • Потенционометр 1шт
  • Провода 22шт

Схема соединения:

Код:

int switchPin = 2; // lüliti 1 
int switchPin2 = 1; // lüliti 2 
int potPin = A0; // potentsiomeeter 
int motor1Pin1 = 4; // viik 2 (L293D) 
int motor1Pin2 = 3; // viik 7 (L293D) 
int enablePin = 9; // viik 1(L293D) 

 void setup() { 

 // sisendid 
 pinMode(switchPin, INPUT); 
 pinMode(switchPin2, INPUT); 

 //väljundid 
 pinMode(motor1Pin1, OUTPUT); 
 pinMode(motor1Pin2, OUTPUT); 
 pinMode(enablePin, OUTPUT); 
} 

 void loop() { 

 //mootori kiirus 
 int motorSpeed = analogRead(potPin); 

 //aktiveeri mootor 
 if (digitalRead(switchPin2) == HIGH)
{ 
 analogWrite(enablePin, motorSpeed); 
 } 
else 
{ analogWrite(enablePin, 0); } 

 // kui lüliti on HIGH, siis liiguta mootorit ühes suunas: 
 if (digitalRead(switchPin) == HIGH)
{
 digitalWrite(motor1Pin1, LOW); // viik 2 (L293D) LOW 
 digitalWrite(motor1Pin2, HIGH); // viik 7 (L293D) HIGH 
 } 
 // kui lüliti on LOW, siis liiguta mootorit teises suunas: 
 else 
{ 
 digitalWrite(motor1Pin1, HIGH); // viik 2 (L293D) HIGH 
 digitalWrite(motor1Pin2, LOW); // viik 7 (L293D) LOW 
 } 
}

Пояснение кода:

  • int switchPin = 2;
    • int — означает целое число (integer по-английски).
    • switchPin — имя переменной. Это как ярлык для числа. Здесь — номер пина (вывода) на Arduino, куда подключён переключатель 1.
    • = — оператор присваивания. То есть мы говорим: “switchPin теперь равен 2”.
    • 2 — номер пина на Arduino, к которому физически подключена кнопка или переключатель.
    • ; — точка с запятой — обязательна в конце каждой инструкции.
  • void setup() {
    • void — означает, что функция ничего не возвращает (не даёт результат обратно).
    • setup() — имя функции. Это начальная настройка, вызывается один раз при старте Arduino.
    • { — начало блока кода.
  • pinMode(switchPin, INPUT);
    • pinMode() — встроенная команда Arduino. Она говорит: “Установи режим работы пина”.
    • switchPin — имя переменной (а в ней у нас 2, значит — пин 2).
    • INPUT — означает, что этот пин вход. Мы с него читаем данные (например, кнопку нажали или нет).
  • void loop() {
    • loop() — функция, которая выполняется бесконечно. Это главный цикл программы Arduino.
    • Всё, что внутри — повторяется снова и снова.
  • int motorSpeed = analogRead(potPin);
    • int motorSpeed — создаём переменную motorSpeed, чтобы в ней хранить скорость мотора.
    • analogRead(potPin) — считывает аналоговое значение (от 0 до 1023) с пина A0 (где у нас крутилка).
  • if (digitalRead(switchPin2) == HIGH)
    • if — условие: “если”.
    • digitalRead(switchPin2) — считываем, есть ли сигнал (вкл/выкл) на пине 1 (наша вторая кнопка).
    • == HIGH — спрашиваем: “а кнопка включена?” (нажата = HIGH, не нажата = LOW).
  • analogWrite(enablePin, motorSpeed);
    • analogWrite(enablePin, motorSpeed); — посылаем сигнал с определённой скоростью на enablePin, то есть включаем мотор.

Ülesanne 7.2 Parking

Описание работы:

Автоматически открывать шлагбаум (серво-мотор) при приближении объекта (например, машины), подавать свет и звуковой сигнал, а затем закрывать шлагбаум. Управление происходит с помощью ультразвукового датчика, светодиода, зуммера и сервомотора.

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

  • Arudiono Uno 1шт
  • Плата 1 шт
  • Ультразвуковой HC-SR04 1 шт
  • Сервопривод (SG90) 1шт
  • Резистор 220 Om 1шт
  • Светодиод 1шт
  • Зуммер 1шт
  • Провода 11шт

Схема соединения:

Код:

#include <Servo.h>
 
const int trigPin = 11;
const int echoPin = 12;
const int servoPin = 5;
const int ledPin = 10;
const int buzzerPin = 9;
 
Servo gateServo;
bool gateOpen = false;
 
void setup() {
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
 
  gateServo.attach(servoPin);
  gateServo.write(0); // Закрытое положение
}
 
void loop() {
  long duration;
  int distance;
 
  // Ультразвуковой импульс
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
 
  duration = pulseIn(echoPin, HIGH, 25000); // максимум 25 мс ожидания
  distance = duration * 0.034 / 2;
 
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");
 
  // Машина близко и шлагбаум ещё не открыт
  if (distance > 0 && distance < 7 && !gateOpen) {
    gateOpen = true;
 
    // Короткий двойной пик на активном зуммере
    digitalWrite(buzzerPin, HIGH); delay(100);
    digitalWrite(buzzerPin, LOW);  delay(150);
    digitalWrite(buzzerPin, HIGH); delay(100);
    digitalWrite(buzzerPin, LOW);
 
    digitalWrite(ledPin, HIGH);     // Свет включён
    gateServo.write(90);            // Шлагбаум поднимается
    delay(3000);                    // Пауза
    gateServo.write(0);             // Шлагбаум опускается
    digitalWrite(ledPin, LOW);      // Свет выключен
  }
 
  // Сброс, если машина уехала
  if (distance >= 10) {
    gateOpen = false;
  }
 
  delay(250); // Пауза
}

Пояснение кода:

#include <Servo.h>

Подключаем библиотеку для работы с сервоприводом

const int trigPin = 11;
const int echoPin = 12;
const int servoPin = 5;
const int ledPin = 10;
const int buzzerPin = 9;

Назначаем, за какими пинами будет закреплено железо:

  • trigPin и echoPin — ультразвуковой датчик расстояния.
  • servoPin — серво-мотор (отвечает за шлагбаум).
  • ledPin — светодиод (чтобы мигать).
  • buzzerPin — пищалка-зуммер (звук).
void setup() {
  Serial.begin(9600);

Запускаем последовательный порт для вывода данных в монитор порта на компьютере (скорость — 9600 бод).

  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);

Устанавливаем режим работы пинов:

  • trigPin — выход (OUTPUT), чтобы посылать сигнал.
  • echoPin — вход (INPUT), чтобы принимать сигнал.
  • ledPin и buzzerPin — выходы.
  gateServo.attach(servoPin);
  gateServo.write(0); // Закрытое положение
}
  • Подключаем сервомотор к соответствующему пину.
  • Устанавливаем угол 0° — это закрытое положение шлагбаума.
  long duration;
  int distance;

Объявляем переменные для хранения длительности сигнала (duration) и расстояния до объекта (distance).

  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

Чтобы запустить ультразвуковой сигнал, подаём короткий импульс длительностью 10 микросекунд. Сначала устанавливаем LOW, затем HIGH, потом снова LOW. Это активирует сенсор.

  duration = pulseIn(echoPin, HIGH, 25000);
  distance = duration * 0.034 / 2;
  • pulseIn измеряет, сколько микросекунд пин echoPin находился в состоянии HIGH — это длительность “отскока” сигнала.
  • Расчёт расстояния: скорость звука ≈ 0.034 см/мкс, делим на 2, так как сигнал проходит до объекта и обратно.
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");

Показываем расстояние до объекта в сантиметрах для отладки или наблюдения.

 if (distance > 0 && distance < 7 && !gateOpen) {

Если расстояние меньше 7 см и шлагбаум ещё закрыт, выполняем следующие действия:

gateOpen = true;

Устанавливаем флаг: шлагбаум теперь открыт.

    digitalWrite(buzzerPin, HIGH); delay(100);
    digitalWrite(buzzerPin, LOW);  delay(150);
    digitalWrite(buzzerPin, HIGH); delay(100);
    digitalWrite(buzzerPin, LOW);

Зуммер подаёт двойной звуковой сигнал (короткие пикающие звуки).

    digitalWrite(ledPin, HIGH);     // Включение светодиода
    gateServo.write(90);            // Поднимаем шлагбаум (угол 90°)
    delay(3000);                    // Ожидание (машина проезжает)
    gateServo.write(0);             // Опускаем шлагбаум
    digitalWrite(ledPin, LOW);      // Выключаем свет

Поднимаем шлагбаум, ждём 3 секунды, опускаем, выключаем свет.

  if (distance >= 10) {
    gateOpen = false;
  }

Если расстояние больше или равно 10 см — сбрасываем флаг, чтобы система могла снова отреагировать на новый объект.

delay(250);

Пауза 250 мс между циклами. Это снижает нагрузку на систему и исключает «дребезг» датчика.

Процесс работы:

Программа реализует автоматическую систему управления шлагбаумом с использованием ультразвукового датчика расстояния, сервопривода, светового и звукового сигнала. Алгоритм работы строится следующим образом:

Инициализация компонентов

  • При запуске программы (setup()):
    • Устанавливаются режимы работы пинов: вход/выход.
    • Серводвигатель подключается к соответствующему пину и переводится в закрытое положение (угол 0°).
    • Запускается последовательная связь для отладки (монитор порта).

Периодическое измерение расстояния

  • В основном цикле (loop()):
    • Генерируется короткий ультразвуковой импульс (10 мкс) через пин trigPin.
    • Ультразвуковой сигнал отражается от объекта и принимается пином echoPin.
    • Функция pulseIn() измеряет длительность отражённого сигнала.
    • Расстояние до объекта вычисляется на основе времени полёта сигнала.

Обработка ситуации приближения объекта

  • Если расстояние составляет менее 7 см и шлагбаум ещё закрыт:
    • Переменная gateOpen устанавливается в true.
    • Зуммер подаёт двойной короткий звуковой сигнал (вкл/выкл).
    • Включается светодиод.
    • Шлагбаум поднимается (угол 90°).
    • Пауза 3 секунды (время на проезд).
    • Шлагбаум опускается обратно (угол 0°).
    • Светодиод выключается.

Сброс флага состояния

  • Если расстояние до объекта становится 10 см и более:
    • Система сбрасывает переменную gateOpen в false, позволяя снова сработать при новом приближении.

Задержка между циклами

  • В конце каждого цикла осуществляется пауза в 250 миллисекунд, что снижает нагрузку на контроллер и стабилизирует работу системы.

Видео:


Применение ультразвукового датчика в разных проектах:

Учебные и хобби-проекты

  • Измеритель расстояния — отображает расстояние до ближайшего объекта на экране.
  • Сигнализация приближения — включает LED или звук при обнаружении объекта.
  • Интерактивная линейка — показывает расстояние на дисплее в реальном времени.
  • Бесконтактный выключатель — включение света/звука, если провести рукой перед датчиком.
  • Тест на реакцию — игроку нужно отдёрнуть руку вовремя до срабатывания сигнала.

Умный дом

  • Датчик уровня воды в баке — измеряет расстояние до поверхности воды.
  • Счётчик посещений — фиксирует вход и выход людей в комнату или помещение.
  • Автоматический смеситель — включает воду, когда руки поднесены к раковине.
  • Умный мусорный контейнер — крышка открывается при приближении.
  • Детектор движения в коридоре — активирует свет или сигнал при обнаружении объекта.

Автомобильные проекты

  • Парковочный ассистент — измеряет расстояние до стены и подаёт звуковой сигнал.
  • Система “мертвых зон” — отслеживает приближение объектов сбоку автомобиля.
  • Измеритель расстояния до препятствия — выводит данные на дисплей.
  • Багажник с автосенсором — открывается при поднесении ноги под бампер.
  • Умный гараж — автоматически останавливает ворота, если объект слишком близко.

Робототехника и мехатроника

  • Обход препятствий — робот поворачивает, если впереди обнаружен объект.
  • Автономная навигация — расчёт расстояния до стен для построения маршрута.
  • Слежение за объектом — робот едет за движущимся человеком или предметом.
  • Измерение ширины коридора — для маневрирования и позиционирования.
  • Карта помещения — используется в связке с сервоприводом для сканирования по углу.

Арт и инсталляции

  • Интерактивная скульптура — реагирует движением, светом или звуком на приближение зрителя.
  • Музейная инсталляция — запускает голос/звук/видео при приближении посетителя.
  • Музыкальный интерактив — изменение тона звука в зависимости от расстояния.
  • Световой эффект присутствия — подсветка включается только при приближении.
  • Сенсорная картина — активирует анимацию при приближении руки.

Научные и лабораторные приборы

  • Контроль уровня жидкости — в колбах, резервуарах, ёмкостях.
  • Стенд по физике — демонстрация отражения ультразвуковых волн.
  • Определение скорости движения — по изменению расстояния за время.
  • Бесконтактный триггер — запуск таймера или измерения без прикосновения.
  • Лабораторный охранник — подаёт сигнал, если кто-то приближается к установке.