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 или звук при обнаружении объекта.
- Интерактивная линейка — показывает расстояние на дисплее в реальном времени.
- Бесконтактный выключатель — включение света/звука, если провести рукой перед датчиком.
- Тест на реакцию — игроку нужно отдёрнуть руку вовремя до срабатывания сигнала.
Умный дом
- Датчик уровня воды в баке — измеряет расстояние до поверхности воды.
- Счётчик посещений — фиксирует вход и выход людей в комнату или помещение.
- Автоматический смеситель — включает воду, когда руки поднесены к раковине.
- Умный мусорный контейнер — крышка открывается при приближении.
- Детектор движения в коридоре — активирует свет или сигнал при обнаружении объекта.
Автомобильные проекты
- Парковочный ассистент — измеряет расстояние до стены и подаёт звуковой сигнал.
- Система “мертвых зон” — отслеживает приближение объектов сбоку автомобиля.
- Измеритель расстояния до препятствия — выводит данные на дисплей.
- Багажник с автосенсором — открывается при поднесении ноги под бампер.
- Умный гараж — автоматически останавливает ворота, если объект слишком близко.
Робототехника и мехатроника
- Обход препятствий — робот поворачивает, если впереди обнаружен объект.
- Автономная навигация — расчёт расстояния до стен для построения маршрута.
- Слежение за объектом — робот едет за движущимся человеком или предметом.
- Измерение ширины коридора — для маневрирования и позиционирования.
- Карта помещения — используется в связке с сервоприводом для сканирования по углу.
Арт и инсталляции
- Интерактивная скульптура — реагирует движением, светом или звуком на приближение зрителя.
- Музейная инсталляция — запускает голос/звук/видео при приближении посетителя.
- Музыкальный интерактив — изменение тона звука в зависимости от расстояния.
- Световой эффект присутствия — подсветка включается только при приближении.
- Сенсорная картина — активирует анимацию при приближении руки.
Научные и лабораторные приборы
- Контроль уровня жидкости — в колбах, резервуарах, ёмкостях.
- Стенд по физике — демонстрация отражения ультразвуковых волн.
- Определение скорости движения — по изменению расстояния за время.
- Бесконтактный триггер — запуск таймера или измерения без прикосновения.
- Лабораторный охранник — подаёт сигнал, если кто-то приближается к установке.