Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Система безопасности на Arduino: обнаружение движения и тревога

Компоненты и материалы

Arduino UNO×1
Ультразвуковой датчик HC-SR04×1
Сервопривод Tower Pro MG996R×1
Пьезоизлучатель (buzzer)×1
Беспаечная макетная плата×1
Провода Male/Female×1 комплект
Пластиковый корпус×1

Необходимые инструменты

Приложения и сервисы

О проекте

Система безопасности на Arduino: обнаружение движения и тревога
Система безопасности на Arduino: обнаружение движения и тревога

Введение

Проект представляет собой систему безопасности на базе Arduino Uno с сервоприводом, ультразвуковым датчиком и пьезоизлучателем.

Ультразвуковой датчик обнаруживает объекты в зоне действия, активируя звуковую сигнализацию. Данные датчика также передаются в приложение на Processing, которое строит графическую карту (радар). Сервопривод вращает датчик для охвата большой площади (до 180°).

Проект простой и собирается за час.

Процедура подключения

После монтажа поместите схему в корпус.

Программный код

Код для 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();
}

Схемы

Система безопасности на Arduino: обнаружение движения и тревога

Производственный процесс

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