Arduino Uno Gebaseerde Mensendetectie Robot: Stap-voor-stap Sensorintegratie
Onderdelen en benodigdheden
| Arduino UNO | × | 1 |
| Motor Control Shield (Development Board) | × | 1 |
| SG90 Micro-servomotor | × | 1 |
| DC-motor, 12V | × | 4 |
| Ultrasonische sensor - HC-SR04 (generiek) | × | 1 |
| DHT11 Temperatuur- & Vochtigheidsensor (4 pins) | × | 1 |
| 9V-batterij (generiek) | × | 1 |
| Jumper wires (generiek) | × | 1 |
| PIR-sensor, 7m | × | 1 |
Benodigde tools en machines
- Multitool, schroevendraaier
- Soldeerbout (generiek)
- Soldeervloeistof, solderen
- Soldeerdraad, loodvrij
- Lijmpistool (generiek)
Apps en online diensten
- Arduino IDE
- Microsoft Windows 10
- Control Center Android App
Over dit project
Dit systeem ontwerpt een mobiel reddingsrobot-voertuig op basis van Arduino om mensen te helpen die vastzitten in natuurrampen zoals aardbevingen, overstromingen, etc. Het geeft tijdig en nauwkeurig de dynamische situatie van mensen in rampgebieden weer (zoals in ondergrondse gebieden) naar de controlepost, zodat reddingsteams van experts en artsen naar de locatie van de slachtoffers kunnen worden gestuurd voor eerste hulp en naar een veilige plek of het ziekenhuis. Het hele proces verloopt binnen enkele seconden omdat het systeem wordt bestuurd door een Arduino-unit.
PIR-sensoren zijn passieve infraroodsensoren die beweging van mensen detecteren met behulp van veranderingen in de infrarood (warmte) niveaus die door omringende objecten worden uitgezonden. Het menselijk lichaam straalt thermische straling uit op een golflengte van ongeveer 10 micron. Deze wordt ontvangen en verwerkt door de PIR-sensor om mensen te detecteren. Het werkt op 5V DC. De beweging van een mens kan worden gedetecteerd door te controleren op een plotselinge verandering in de omringende IR-patronen.
De obstakelsensor detecteert obstakels en stuurt analoge signalen naar de Arduino. De Arduino is geprogrammeerd om de robot automatisch te sturen afhankelijk van het gedetecteerde obstakel en om de menselijke informatie naar de externe controleplaats te sturen via Bluetooth-technologie. De data wordt ontvangen in de basistatie (Control Center). Door de data te analyseren kan het reddingsteam de noodzakelijke stappen ondernemen om vastzittende mensen te redden.
Code
Human Detection.ino (Arduino)
#include <NewPing.h>
#include <AFMotor.h>
#include <Servo.h>
// Ultrasonische Pin Configuratie
#define TRIG_PIN A0
#define ECHO_PIN A1
#define MAX_DISTANCE 400
#define MAX_SPEED 255
#define MAX_SPEED_OFFSET -8
#define COLL_DIST 20
#define TURN_DIST COLL_DIST + 10
#define ACT_TIME 250
int calibrationTime = 30;
long unsigned int lowIn;
long unsigned int pause = 5000;
boolean lockLow = true;
boolean takeLowTime;
int pirPin = A3;
int ledPin = A2;
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DCMotor motorR(1, MOTOR12_1KHZ);
AF_DCMotor motorL(4, MOTOR12_1KHZ);
Servo myservo;
String motorSet = "";
int curDist = 0, pos, speedSet = 0;
void setup() {
Serial.begin(9600);
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(pirPin, LOW);
// Sensor kalibratie
Serial.print("calibrating sensor ");
for (int i = 0; i < calibrationTime; i++) {
Serial.print(".");
delay(1000);
}
Serial.println(" done");
Serial.println("SENSOR ACTIVE");
delay(50);
myservo.attach(9);
myservo.write(90);
delay(2000);
motorSet = "FORWARD";
moveForward();
}
void loop() {
checkPath();
if (digitalRead(pirPin) == HIGH) {
digitalWrite(ledPin, HIGH);
if (lockLow) {
lockLow = false;
Serial.println("---");
Serial.print("motion detected at ");
Serial.print(millis() / 1000);
Serial.println(" sec");
delay(50);
}
takeLowTime = true;
}
if (digitalRead(pirPin) == LOW) {
digitalWrite(ledPin, LOW);
if (takeLowTime) {
lowIn = millis();
takeLowTime = false;
}
if (!lockLow && millis() - lowIn > pause) {
lockLow = true;
Serial.print("motion ended at ");
Serial.print((millis() - pause) / 1000);
Serial.println(" sec");
delay(50);
}
}
}
void checkPath() {
int curLeft = 0, curRight = 0, curFront = 0;
curDist = 0;
checkForward();
myservo.write(135);
delay(100);
for (pos = 135; pos >= 45; pos -= 45) {
myservo.write(pos);
delay(170);
curDist = readPing();
if (curDist < COLL_DIST) {
checkCourse();
break;
}
if (curDist < TURN_DIST) {
changePath();
}
}
}
int readPing() {
int cm = 0;
while (cm < 2) {
int uS = sonar.ping();
cm = uS / US_ROUNDTRIP_CM;
}
return cm;
}
void checkForward() {
if (motorSet == "FORWARD") {
motorR.run(FORWARD);
motorL.run(FORWARD);
}
}
void changePath() {
if (pos < 90) veerLeft();
if (pos > 90) veerRight();
}
void veerRight() {
motorR.run(BACKWARD);
motorL.run(FORWARD);
delay(ACT_TIME);
motorR.run(FORWARD);
motorL.run(FORWARD);
motorSet = "FORWARD";
}
void veerLeft() {
motorL.run(BACKWARD);
motorR.run(FORWARD);
delay(ACT_TIME);
motorL.run(FORWARD);
motorR.run(FORWARD);
motorSet = "FORWARD";
}
void checkCourse() {
moveBackward();
delay(ACT_TIME);
moveStop();
setCourse();
}
void setCourse() {
if (pos < 90) turnRight();
if (pos > 90) turnLeft();
}
void moveBackward() {
motorSet = "BACKWARD";
motorR.run(BACKWARD);
motorL.run(BACKWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet += 2) {
motorL.setSpeed(speedSet);
motorR.setSpeed(speedSet + MAX_SPEED_OFFSET);
delay(5);
}
}
void moveForward() {
motorSet = "FORWARD";
checkForward();
for (speedSet = 0; speedSet < MAX_SPEED; speedSet += 2) {
motorL.setSpeed(speedSet);
motorR.setSpeed(speedSet + MAX_SPEED_OFFSET);
delay(4);
}
}
void moveStop() {
motorR.run(RELEASE);
motorL.run(RELEASE);
}
void turnRight() {
motorSet = "RIGHT";
motorR.run(FORWARD);
motorL.run(BACKWARD);
delay(ACT_TIME);
motorSet = "FORWARD";
checkForward();
}
void turnLeft() {
motorSet = "LEFT";
motorR.run(BACKWARD);
motorL.run(FORWARD);
delay(ACT_TIME);
motorSet = "FORWARD";
checkForward();
}
Schema's
Blokdiagram: interfacing tussen sensoren en Arduino-board
Schakelschema: verbindingen tussen sensoren en Arduino Uno
Stroomdiagram: werking van het systeem
Productieproces
- Microsoft Kinect Integreren met Raspberry Pi voor Realtime Mensendetectie op de Sonbi-robot
- Bouw een Squid Game-thema Interactieve Pop met Arduino UNO – DIY Project
- Temperatuur- en vochtigheidsdata overdragen tussen twee Arduinos via Firebase
- Betrouwbaar Arduino RFID Aanwezigheidssysteem Aangedreven door Python
- Bouw een betrouwbare infrarode hartslagsensor met Arduino: stapsgewijze handleiding
- Bouw een Android-bestuurd extern voertuig met Raspberry Pi Motor Shield
- Bouw een Slimme IoT Pot met ESP8266, Arduino & Ultrasonische Sensor – Real-time Monitoring
- Arduino Uno WiFi Webserver: LED aan/uit schakelen via browser
- Real-time Bosbrandbewakingssysteem met SMS-alarmen
- MAX30100 hartslagsensor integreren met Arduino: Stapsgewijze handleiding
- Stapsgewijze handleiding: YL-39/YL-69 bodemvochtigheidsensor aan Arduino UNO koppelen