Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Arduino-Sicherheitssystem: Intelligente Bewegungserkennung & Alarm

Komponenten und Zubehör

Arduino UNO × 1
Ultraschallsensor HC-SR04 (generisch) × 1
Servo (Tower Pro MG996R) × 1
Summer (Piezo-Buzzer) × 1
Steckbrett (Breadboard) × 1
Male/Female Jumper-Kabel × 1
Kunststoffgehäuse × 1

Benötigte Werkzeuge

Apps und Online-Dienste

Über dieses Projekt

Arduino-Sicherheitssystem: Intelligente Bewegungserkennung & Alarm
Arduino-Sicherheitssystem: Intelligente Bewegungserkennung & Alarm

Einführung

Dieses Projekt ist ein Arduino-basiertes Sicherheitssystem bestehend aus einem Arduino Uno, einem Servomotor, einem Ultraschallsensor und einem piezoelektrischen Summer.

Der Ultraschallsensor erfasst Objekte in seinem Erfassungsbereich und aktiviert den Summer. Die Sensordaten werden zusätzlich an die Processing IDE gesendet, die eine grafische Radar-Anzeige erstellt.

Der Servomotor dreht den Ultraschallsensor, um einen großen Bereich abzudecken (180° Schwenkbereich).

Dies ist ein relativ einfaches Projekt, das in etwa einer Stunde umsetzbar ist.

Verkabelung

Nach Abschluss der Verkabelung wird die gesamte Schaltung im Gehäuse untergebracht (siehe Abbildung). Dann folgt die Programmierung.

Code

Arduino Code (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() {
  // Vorwärts-Sweep 0° bis 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(".");
  }
  
  // Rückwärts-Sweep 180° bis 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);  // Korrigiert: 10 µs statt 1000 ms
  digitalWrite(tPin, LOW);
  d1 = pulseIn(ePin, HIGH);
  d2 = d1 * 0.0171821306;  // Umrechnung in cm
  
  if (d2 < 10) {
    digitalWrite(buz, HIGH);
  } else {
    digitalWrite(buz, LOW);
  }
  return d2;
}

Processing Code (Java) – Radar-Visualisierung

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); // *** AN IHRE BILDSCHIRMAUFLÖSUNG ANPASSEN ***
  smooth();
  myPort = new Serial(this, "COM3", 9600); // COM-Port anpassen!
  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('.');
  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);
  
  // Bogen-Linien
  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);
  
  // Winkel-Linien
  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) { // Reichweite auf 40 cm begrenzt
    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("2cm", width - width * 0.3854, height - height * 0.0833);
  text("4cm", width - width * 0.281, height - height * 0.0833);
  text("6cm", width - width * 0.177, height - height * 0.0833);
  text("10cm", width - width * 0.0729, height - height * 0.0833);
  textSize(40);
  text("Akshay6766", 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);
  
  textSize(25);
  fill(98, 245, 60);
  
  // Winkel-Beschriftungen
  translate((width - width * 0.4994) + width / 2 * cos(radians(30)), (height - height * 0.0907) - width / 2 * sin(radians(30)));
  rotate(-radians(-60)); text("30", 0, 0); resetMatrix();
  
  translate((width - width * 0.503) + width / 2 * cos(radians(60)), (height - height * 0.0888) - width / 2 * sin(radians(60)));
  rotate(-radians(-30)); text("60", 0, 0); resetMatrix();
  
  translate((width - width * 0.507) + width / 2 * cos(radians(90)), (height - height * 0.0833) - width / 2 * sin(radians(90)));
  rotate(radians(0)); text("90", 0, 0); resetMatrix();
  
  translate(width - width * 0.513 + width / 2 * cos(radians(120)), (height - height * 0.07129) - width / 2 * sin(radians(120)));
  rotate(radians(-30)); text("120", 0, 0); resetMatrix();
  
  translate((width - width * 0.5104) + width / 2 * cos(radians(150)), (height - height * 0.0574) - width / 2 * sin(radians(150)));
  rotate(radians(-60)); text("150", 0, 0);
  popMatrix();
}

Schaltplan

Arduino-Sicherheitssystem: Intelligente Bewegungserkennung & Alarm

Herstellungsprozess

  1. TinyML Spracherkennung mit Edge Impulse auf Arduino Nano 33 BLE Sense
  2. Echtzeit-Gyroskop-Spiel mit Arduino Nano & MPU-6050
  3. Arduino Digitaler Würfel: LCD-Würfel mit Zufallszahlen (1–6)
  4. Arduino Iron Man bauen: Komponenten, Sensoren & Schritt-für-Schritt-Anleitung
  5. Find Me: Smarter Gegenstands-Finder mit Arduino und Bluetooth
  6. DIY Arduino Luftbefeuchter-Steuerung mit Relais – Sichere Hochspannungs-Installation
  7. Echtzeit-Entfernungsmessung mit Arduino Sonar & Processing-Visualisierung
  8. MobBob: Eigenen Arduino-Roboter bauen, per Android-Smartphone steuern
  9. Audio-reaktive Schreibtischlampe mit Arduino Nano bauen
  10. NeoPixel-Matrix Pong auf Arduino Nano: Neon-Pong selbst bauen