Автоматическая дверь на Arduino с ультразвуковым датчиком HC-SR04
Компоненты и материалы
| Название | Количество |
|---|---|
| Arduino UNO | 1 |
| Ультразвуковой датчик HC-SR04 | 1 |
| DC-мотор 12V (с редуктором) | 1 |
| Motor Shield L293D | 1 |
| LCD 16x2 (RGB backlight, Adafruit) | 1 |
| Пьезо-зуммер | 1 |
| Провода-перемычки | 1 набор |
Программное обеспечение
- Arduino IDE
О проекте
Мехатронная система автоматического открывания и закрывания двери. Ультразвуковой датчик HC-SR04 обнаруживает приближение человека (дистанция ≤ 5 см), Arduino управляет DC-мотором через Motor Shield L293D (движение створки по шестерёнке зубчатая рака — зубчатое колесо), LCD показывает состояние, зуммер звучит пока дверь открыта.
Принцип работы HC-SR04
- Импульс 10 мкс на Trig запускает 8 циклов 40 кГц
- Echo выдаёт HIGH, пока не вернётся отражённый сигнал
- Расстояние = (время HIGH × 340 м/с) / 2
Почему нужен Motor Shield
Arduino выдаёт 5V и ограниченный ток. Прямое подключение мотора может сжечь контроллер. L293D работает как усилитель: мотор питается от 9–12 В, управление — логическими уровнями Arduino.
Скетч (Arduino)
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 8, 9, 1);
const int trigPin = 7;
const int echoPin = 4;
const int mt_En_Pin1 = 2; // Enable мотора
const int mt_IN1_Pin2 = 3; // IN1
const int mt_IN2_Pin3 = 6; // IN2
int buzz = 10;
long duration;
int distance;
void setup() {
lcd.begin(16, 2);
lcd.print("WELCOME");
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(mt_En_Pin1, OUTPUT);
pinMode(mt_IN1_Pin2, OUTPUT);
pinMode(mt_IN2_Pin3, OUTPUT);
pinMode(buzz, OUTPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
if (distance <= 5) {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(mt_En_Pin1, HIGH);
analogWrite(mt_IN1_Pin2, 50); // открыть
analogWrite(mt_IN2_Pin3, 0);
delay(2000);
analogWrite(mt_IN1_Pin2, 0);
analogWrite(mt_IN2_Pin3, 0);
delay(1000);
tone(buzz, 1000); delay(1000);
tone(buzz, 1000); delay(1000);
noTone(buzz);
delay(3000);
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Please Enter");
delay(1000);
analogWrite(mt_IN1_Pin2, 0); // закрыть
analogWrite(mt_IN2_Pin3, 50);
delay(3000);
} else {
digitalWrite(13, LOW);
digitalWrite(mt_En_Pin1, LOW);
analogWrite(mt_IN1_Pin2, 50);
analogWrite(mt_IN2_Pin3, 0);
}
}
Схемы и фото сборки
Производственный процесс
- Создание универсального ИК-пульта на Arduino: пошаговое руководство
- Строим Iron Man на Arduino: компоненты, сенсоры и пошаговый гайд
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- Создание настраиваемой «бьющейся» клавиши на Arduino: пошаговое руководство
- Интерактивный LED-дисплей в двери с PIR-датчиком — новогоднее приветствие на Arduino
- Измерение массы Земли с Arduino: пошаговое руководство по DIY
- Бесконтактный автоматический открыватель двери с измерением температуры
- Своё рулевое управление (джойстик) для игр на Arduino
- Генерация музыкальных тонов на Arduino: полный спектр 88 клавиш пианино
- Цифровой компас в реальном времени на Arduino и Processing