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


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
- Verbinde de Trigger-pin van de sensor met pin 2 van de Arduino
- Verbinde de Echo-pin van de sensor met pin 3 van de Arduino
- Verbinde Vcc en GND van de sensor met respectievelijk voeding en ground
- Plaats de buzzer op het breadboard
- Verbinde de plus-kant van de buzzer met pin 10 van de Arduino en de min-kant met ground
- Verbind de zwarte en rode draad van de servo met ground en voeding
- Verbind de gele draad (signaal) van de servo met pin 9 van de Arduino
- 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

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