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
- Multiusos, destornillador
- Soldador (genérico)
- Flux de soldar
- Hilo de soldar, sin plomo
- Pistola de pegamento caliente (genérica)
Aplicaciones y servicios en línea
- Arduino IDE
- Microsoft Windows 10
- App Android Control Center
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.
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.
Este diagrama de circuito muestra las configuraciones de conexión entre varios sensores con la placa Arduino Uno.
Este diagrama de flujo muestra cómo funciona el sistema.
Proceso de manufactura
- Integración de Microsoft Kinect con Raspberry Pi para Detección Humana en Tiempo Real en Robot Sonbi
- Muñeca interactiva "El Juego del Calamar" con Arduino UNO: Proyecto DIY
- Transferir datos de temperatura y humedad entre dos Arduinos usando Firebase
- Sistema de Asistencia RFID Fiable con Arduino y Python
- Construye un Sensor de Ritmo Cardíaco por Infrarrojos Fiable con Arduino: Guía Paso a Paso
- Vehículo Controlado por Android con Raspberry Pi, Arduino y Motor Shield: Guía Completa
- Construye un tarro inteligente IoT con ESP8266, Arduino y sensor ultrasónico: Monitorización en tiempo real
- Servidor Web Arduino Uno WiFi: Controla un LED desde el Navegador
- Sistema de monitorización de incendios forestales en tiempo real con alertas SMS
- Integración del Sensor de Pulso MAX30100 con Arduino: Guía Paso a Paso
- Guía Paso a Paso: Conectar Sensor de Humedad de Suelo YL-39/YL-69 a Arduino UNO