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 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

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.

Arduino Uno Gebaseerde Mensendetectie Robot: Stap-voor-stap Sensorintegratie
Arduino Uno Gebaseerde Mensendetectie Robot: Stap-voor-stap Sensorintegratie

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

  1. Microsoft Kinect Integreren met Raspberry Pi voor Realtime Mensendetectie op de Sonbi-robot
  2. Bouw een Squid Game-thema Interactieve Pop met Arduino UNO – DIY Project
  3. Temperatuur- en vochtigheidsdata overdragen tussen twee Arduinos via Firebase
  4. Betrouwbaar Arduino RFID Aanwezigheidssysteem Aangedreven door Python
  5. Bouw een betrouwbare infrarode hartslagsensor met Arduino: stapsgewijze handleiding
  6. Bouw een Android-bestuurd extern voertuig met Raspberry Pi Motor Shield
  7. Bouw een Slimme IoT Pot met ESP8266, Arduino & Ultrasonische Sensor – Real-time Monitoring
  8. Arduino Uno WiFi Webserver: LED aan/uit schakelen via browser
  9. Real-time Bosbrandbewakingssysteem met SMS-alarmen
  10. MAX30100 hartslagsensor integreren met Arduino: Stapsgewijze handleiding
  11. Stapsgewijze handleiding: YL-39/YL-69 bodemvochtigheidsensor aan Arduino UNO koppelen