Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino Beveiligingssysteem: Slimme Bewegingsdetectie & Alarm

Onderdelen en Benodigdheden

Arduino UNO×1
Ultrasonische sensor HC-SR04×1
Servo (Tower Pro MG996R)×1
Buzzer (piezo)×1
Breadboard×1
Male/Female jumper wires×1 set
Plastic projectdoos×1

Benodigde Tools

  • Mes (voor gaten in de doos)

Apps en Online Diensten

Over dit Project

Arduino Beveiligingssysteem: Slimme Bewegingsdetectie & Alarm
Arduino Beveiligingssysteem: Slimme Bewegingsdetectie & Alarm

Inleiding

Dit project is een op Arduino gebaseerd beveiligingssysteem bestaande uit een Arduino Uno, een servomotor, een ultrasoon sensor en een piezo-buzzer.

De ultrasoon sensor detecteert een object binnen zijn bereik, wat de buzzer activeert. Deze sensordata wordt ook naar de Processing IDE gestuurd, die een grafische radar-achtige weergave genereert.

De servomotor roteert de ultrasoon sensor om een groot gebied af te dekken.

Dit is een redelijk simpel project dat binnen een uur gerealiseerd kan worden.

Bouwprocedure

  1. Verbinde de Trigger-pin van de sensor met pin 2 van de Arduino
  2. Verbinde de Echo-pin van de sensor met pin 3 van de Arduino
  3. Verbinde Vcc en GND van de sensor met respectievelijk voeding en ground
  4. Plaats de buzzer op het breadboard
  5. Verbinde de plus-kant van de buzzer met pin 10 van de Arduino en de min-kant met ground
  6. Verbind de zwarte en rode draad van de servo met ground en voeding
  7. Verbind de gele draad (signaal) van de servo met pin 9 van de Arduino
  8. Verbinde 5V en GND van de Arduino met voeding en ground

Na het voltooien van deze verbindingen, plaats de volledige schakeling in de doos zoals getoond in de afbeelding. Daarna is het tijd voor de code.

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() {
  // Servo draait van 0 naar 180 graden
  for (i = 0; i <= 180; i += 10) {
    myServo.write(i);
    delay(30);
    d2 = calculateDistance();
    Serial.print(i);
    Serial.print(",");
    Serial.print(d2);
    Serial.print(".");
  }

  // Servo draait terug van 180 naar 0 graden
  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); // Let op: origineel had delay(1000) wat fout is – 10µs is correct voor HC-SR04
  digitalWrite(tPin, LOW);
  d1 = pulseIn(ePin, HIGH);
  d2 = d1 * 0.0171821306; // omrekenen naar cm
  if (d2 < 10) {
    digitalWrite(buz, HIGH);
  } else {
    digitalWrite(buz, LOW);
  }
  return d2;
}

Processing Code (Java) – Radar Visualisatie

import processing.serial.*;
import java.awt.event.KeyEvent;
import java.io.IOException;

Serial myPort;
String angle = "";
String distance = "";
String data = "";
String noObject;
float pixsDistance;
int iAngle, iDistance;
int index1 = 0;
int index2 = 0;
PFont orcFont;

void setup() {
  size(1366, 768); // *** PAS DIT AAN AAN JE SCHERMRESOLUTIE ***
  smooth();
  myPort = new Serial(this, "COM3", 9600); // PAS COM-POORT AAN NAAR JE SITUATIE
  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);
  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) { // origineel had <10, maar 40 cm is logischer voor radar
    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("Arduino 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);
  }
  textSize(25);
  fill(98, 245, 60);
  // Hoeklabels tekenen...
  popMatrix();
}

Schema's

Arduino Beveiligingssysteem: Slimme Bewegingsdetectie & Alarm

Let op: In de originele code zat een fout: delay(1000) na het zetten van de trigger-pin HIGH. Dit moet delayMicroseconds(10) zijn voor correcte werking van de HC-SR04. De bovenstaande code is gecorrigeerd.

Productieproces

  1. TinyML Taaldetector met Edge Impulse op Arduino Nano 33 BLE Sense
  2. Bouw een real-time gyroscoop-spel met Arduino Nano & MPU-6050 sensor
  3. Arduino Digitale Dobbelsteen: Bouw Je Eigen LCD-willekeurige Getalgenerator
  4. Een Arduino Iron Man bouwen: onderdelen, sensoren en stapsgewijze handleiding
  5. Find Me: Slimme Item Locator met Arduino en Bluetooth
  6. DIY Arduino Luchtbevochtiger Controller met Relais – Veilige Hoogspanningsopstelling
  7. Realtime afstandsmeting met Arduino Sonar & Processing visualisatie
  8. MobBob: Bouw Je Eigen Arduino Robot, Naadloos Bestuurd via Android Smartphone
  9. Een audio-reactieve bureaulamp bouwen met Arduino Nano
  10. NeoPixel Matrix Pong op Arduino Nano: Bouw je eigen neon Pong-spel
  11. Bouw een Aangepaste Arduino Joystick Stuurwiel voor Gaming