Система безопасности на Arduino: обнаружение движения и тревога
Компоненты и материалы
| Arduino UNO | ×1 |
| Ультразвуковой датчик HC-SR04 | ×1 |
| Сервопривод Tower Pro MG996R | ×1 |
| Пьезоизлучатель (buzzer) | ×1 |
| Беспаечная макетная плата | ×1 |
| Провода Male/Female | ×1 комплект |
| Пластиковый корпус | ×1 |
Необходимые инструменты
- Нож (для подготовки корпуса)
Приложения и сервисы
- Arduino IDE
- Processing IDE — для визуализации радара
О проекте


Введение
Проект представляет собой систему безопасности на базе Arduino Uno с сервоприводом, ультразвуковым датчиком и пьезоизлучателем.
Ультразвуковой датчик обнаруживает объекты в зоне действия, активируя звуковую сигнализацию. Данные датчика также передаются в приложение на Processing, которое строит графическую карту (радар). Сервопривод вращает датчик для охвата большой площади (до 180°).
Проект простой и собирается за час.
Процедура подключения
- Trig датчика → пин 2 Arduino
- Echo датчика → пин 3 Arduino
- Vcc и GND датчика → 5V и GND Arduino
- Buzzer: «+» → пин 10, «-» → GND
- Сервопривод: черный/коричневый → GND, красный → 5V, желтый/оранжевый → пин 9
- Arduino 5V и GND → общие шины питания
После монтажа поместите схему в корпус.
Программный код
Код для Arduino (C/C++)
#include <Servo.h>
int tPin = 2;
int ePin = 3;
int buz = 10;
int d1, d2;
int i = 0;
int sdistance;
Servo myServo;
void setup() {
Serial.begin(9600);
pinMode(tPin, OUTPUT);
pinMode(ePin, INPUT);
pinMode(buz, OUTPUT);
myServo.attach(9);
}
void loop() {
// Сканирование 0° → 180°
for (i = 0; i <= 180; i += 10) {
myServo.write(i);
delay(30);
d2 = calculateDistance();
Serial.print(i);
Serial.print(",");
Serial.print(d2);
Serial.print(".");
}
// Сканирование 180° → 0°
for (i = 180; i > 0; i -= 10) {
myServo.write(i);
delay(30);
d2 = calculateDistance();
Serial.print(i);
Serial.print(",");
Serial.print(d2);
Serial.print(".");
}
}
int calculateDistance() {
digitalWrite(tPin, HIGH);
delayMicroseconds(10); // Исправлено: было delay(1000) — ошибка!
digitalWrite(tPin, LOW);
d1 = pulseIn(ePin, HIGH);
d2 = d1 * 0.0171821306; // Расстояние в см
if (d2 < 10) {
digitalWrite(buz, HIGH);
} else {
digitalWrite(buz, LOW);
}
return d2;
}
Примечание: В оригинальном коде была ошибка:delay(1000)вместоdelayMicroseconds(10)для триггера. Исправлено выше.
Код для Processing (Java) — визуализация радара
import processing.serial.*;
import java.awt.event.KeyEvent;
import java.io.IOException;
Serial myPort;
String angle = "", distance = "", data = "", noObject;
float pixsDistance;
int iAngle, iDistance;
int index1 = 0, index2 = 0;
PFont orcFont;
void setup() {
size(1366, 768); // *** ИЗМЕНИТЕ ПОД ВАШЕ РАЗРЕШЕНИЕ ЭКРАНА ***
smooth();
myPort = new Serial(this, "COM3", 9600); // Укажите свой COM-порт
myPort.bufferUntil('.');
}
void draw() {
fill(98, 245, 31);
noStroke();
fill(0, 4);
rect(0, 0, width, height - height * 0.065);
fill(98, 245, 31);
drawRadar();
drawLine();
drawObject();
drawText();
}
void serialEvent(Serial myPort) {
data = myPort.readStringUntil('.');
if (data == null) return;
data = data.substring(0, data.length() - 1);
index1 = data.indexOf(",");
angle = data.substring(0, index1);
distance = data.substring(index1 + 1, data.length());
iAngle = int(angle);
iDistance = int(distance);
}
void drawRadar() {
pushMatrix();
translate(width/2, height - height*0.074);
noFill();
strokeWeight(2);
stroke(98, 245, 31);
arc(0, 0, width - width*0.0625, width - width*0.0625, PI, TWO_PI);
arc(0, 0, width - width*0.27, width - width*0.27, PI, TWO_PI);
arc(0, 0, width - width*0.479, width - width*0.479, PI, TWO_PI);
arc(0, 0, width - width*0.687, width - width*0.687, PI, TWO_PI);
line(-width/2, 0, width/2, 0);
line(0, 0, (-width/2)*cos(radians(30)), (-width/2)*sin(radians(30)));
line(0, 0, (-width/2)*cos(radians(60)), (-width/2)*sin(radians(60)));
line(0, 0, (-width/2)*cos(radians(90)), (-width/2)*sin(radians(90)));
line(0, 0, (-width/2)*cos(radians(120)), (-width/2)*sin(radians(120)));
line(0, 0, (-width/2)*cos(radians(150)), (-width/2)*sin(radians(150)));
line((-width/2)*cos(radians(30)), 0, width/2, 0);
popMatrix();
}
void drawObject() {
pushMatrix();
translate(width/2, height - height*0.074);
strokeWeight(9);
stroke(255, 10, 10);
pixsDistance = iDistance * ((height - height*0.1666) * 0.025);
if (iDistance < 40) { // Ограничение диапазона 40 см
line(pixsDistance*cos(radians(iAngle)), -pixsDistance*sin(radians(iAngle)),
(width - width*0.505)*cos(radians(iAngle)), -(width - width*0.505)*sin(radians(iAngle)));
}
popMatrix();
}
void drawLine() {
pushMatrix();
strokeWeight(9);
stroke(30, 250, 60);
translate(width/2, height - height*0.074);
line(0, 0, (height - height*0.12)*cos(radians(iAngle)), -(height - height*0.12)*sin(radians(iAngle)));
popMatrix();
}
void drawText() {
pushMatrix();
if (iDistance > 40) noObject = "Out of Range";
else noObject = "In Range";
fill(0, 0, 0);
noStroke();
rect(0, height - height*0.0648, width, height);
fill(98, 245, 31);
textSize(25);
text("10cm", width - width*0.3854, height - height*0.0833);
text("20cm", width - width*0.281, height - height*0.0833);
text("30cm", width - width*0.177, height - height*0.0833);
text("40cm", width - width*0.0729, height - height*0.0833);
textSize(40);
text("Security Radar", width - width*0.875, height - height*0.0277);
text("Angle: " + iAngle + " ", width - width*0.48, height - height*0.0277);
text("Distance: ", width - width*0.26, height - height*0.0277);
if (iDistance < 40) text(" " + iDistance + " cm", width - width*0.225, height - height*0.0277);
// Подписи углов...
popMatrix();
}
Схемы

Производственный процесс
- TinyML-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse
- Создание игры в реальном времени на Arduino Nano с гироскопом MPU-6050 и OLED-дисплеем
- Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
- Строим Iron Man на Arduino: компоненты, сенсоры и пошаговый гайд
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
- Измерение расстояния в реальном времени: Ардуино-сонар с визуализацией в Processing
- MobBob: Самостоятельная сборка Arduino-робота под управлением Android-смартфона
- Сборка аудиореактивной настольной лампы на Arduino Nano
- NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10