Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Robot de Detección Humana con Arduino Uno: Integración de Sensores Paso a Paso

Componentes y suministros

Componente Cantidad
Arduino UNO 1
Placa de desarrollo, Shield de control de motor 1
Motor micro-servo SG90 1
Motor DC, 12 V 4
Sensor ultrasónico HC-SR04 (genérico) 1
Sensor de temperatura y humedad DHT11 (4 pines) 1
Batería 9V (genérica) 1
Cables jumper (genéricos) 1
Sensor PIR, 7 m 1

Herramientas y máquinas necesarias

Aplicaciones y servicios en línea

Sobre el proyecto

Este sistema diseña un vehículo robótico móvil de rescate basado en Arduino para ayudar a tiempo a personas atrapadas en catástrofes naturales como desastres, terremotos, inundaciones, etc. Proporciona información oportuna y precisa sobre la situación dinámica de personas en zonas de desastre, como regiones subterráneas, a la sala de control, para que los equipos de rescate de expertos y médicos puedan ser enviados a la ubicación de las víctimas para tratamiento primario y traslado a lugares seguros u hospitales. Todo el proceso ocurre en pocos segundos, ya que el sistema está controlado por una unidad Arduino.

Los sensores PIR son sensores infrarrojos pasivos que detectan el movimiento de personas mediante cambios en los niveles de infrarrojo (calor) emitidos por los objetos circundantes. El cuerpo humano emite radiación térmica a una longitud de onda de aproximadamente 10 micras. Esta es recibida y manipulada por el sensor PIR para detectar seres humanos. Funciona a 5V DC. El movimiento humano se detecta comprobando cambios repentinos en los patrones IR circundantes.

El sensor de obstáculos detecta obstáculos y envía señales analógicas al Arduino. El Arduino está programado para guiar el robot automáticamente según el obstáculo detectado y enviar la información de personas detectadas al control remoto mediante tecnología Bluetooth. Los datos se reciben en la Estación Base (Centro de Control). Analizando los datos, el equipo de rescate puede tomar las medidas necesarias para rescatar a las personas atrapadas.

Robot de Detección Humana con Arduino Uno: Integración de Sensores Paso a Paso
Robot de Detección Humana con Arduino Uno: Integración de Sensores Paso a Paso

Código

#include <NewPing.h>
#include <AFMotor.h>
#include <Servo.h>

// Configuración de pines ultrasónicos
#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);
  
  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();
}

Esquemáticos

Este diagrama de bloques muestra la interconexión entre los sensores y la placa Arduino.

Robot de Detección Humana con Arduino Uno: Integración de Sensores Paso a Paso

Este diagrama de circuito muestra las configuraciones de conexión entre varios sensores con la placa Arduino Uno.

Robot de Detección Humana con Arduino Uno: Integración de Sensores Paso a Paso

Este diagrama de flujo muestra cómo funciona el sistema.

Robot de Detección Humana con Arduino Uno: Integración de Sensores Paso a Paso

Proceso de manufactura

  1. Integración de Microsoft Kinect con Raspberry Pi para Detección Humana en Tiempo Real en Robot Sonbi
  2. Muñeca interactiva "El Juego del Calamar" con Arduino UNO: Proyecto DIY
  3. Transferir datos de temperatura y humedad entre dos Arduinos usando Firebase
  4. Sistema de Asistencia RFID Fiable con Arduino y Python
  5. Construye un Sensor de Ritmo Cardíaco por Infrarrojos Fiable con Arduino: Guía Paso a Paso
  6. Vehículo Controlado por Android con Raspberry Pi, Arduino y Motor Shield: Guía Completa
  7. Construye un tarro inteligente IoT con ESP8266, Arduino y sensor ultrasónico: Monitorización en tiempo real
  8. Servidor Web Arduino Uno WiFi: Controla un LED desde el Navegador
  9. Sistema de monitorización de incendios forestales en tiempo real con alertas SMS
  10. Integración del Sensor de Pulso MAX30100 con Arduino: Guía Paso a Paso
  11. Guía Paso a Paso: Conectar Sensor de Humedad de Suelo YL-39/YL-69 a Arduino UNO