Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Robô de Detecção Humana Baseado em Arduino Uno: Integração de Sensores Passo a Passo

Componentes e Materiais

Ferramentas Necessárias

Aplicativos e Serviços Online

Sobre o Projeto

Este sistema projeta um veículo robótico móvel de resgate baseado em Arduino para ajudar pessoas presas em calamidades naturais como desastres, terremotos, inundações, etc. Reflete de forma oportuna e precisa a situação dinâmica de humanos em regiões de desastre, como áreas subterrâneas, para a sala de controle, permitindo que equipes de resgate de especialistas e médicos sejam enviadas ao local da vítima para tratamento primário e encaminhamento a local seguro ou hospital. Todo o processo ocorre em poucos segundos, controlado pela unidade Arduino.

Sensores PIR são sensores infravermelhos passivos que detectam movimento de pessoas através de mudanças nos níveis de infravermelho (calor) emitidos por objetos ao redor. O corpo humano emite radiação térmica em comprimento de onda de cerca de 10 mícrons, recebida e processada pelo sensor PIR para detectar seres humanos. Opera a 5V DC. O movimento é detectado verificando mudança súbita nos padrões IR ao redor.

Sensor de obstáculo detecta obstáculos e envia sinais analógicos ao Arduino. O Arduino é programado para guiar o robô automaticamente dependendo do obstáculo detectado e enviar informações de seres humanos à base remota via tecnologia Bluetooth. Os dados são recebidos na Estação Base (Centro de Controle). Analisando os dados, a equipe de resgate pode tomar medidas necessárias para resgatar humanos presos.

Robô de Detecção Humana Baseado em Arduino Uno: Integração de Sensores Passo a Passo
Robô de Detecção Humana Baseado em Arduino Uno: Integração de Sensores Passo a Passo

Código

Human Detection.ino (Arduino)
#include <NewPing.h>
// #include <AFMotor.h> // Baixe a biblioteca abaixo
#include <Servo.h>

// Configuração Pinos Ultrassônico
#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); // Motor #1, 1kHz PWM
AF_DCMotor motorL(4, MOTOR12_1KHZ); // Motor #2, 1kHz PWM
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

Imagens disponíveis no projeto original.

Processo de manufatura

  1. Integrando Microsoft Kinect com Raspberry Pi para Detecção Humana em Tempo Real no Robô Sonbi
  2. Construa uma Boneca Interativa Temática de Round 6 com Arduino UNO – Projeto DIY
  3. Transferência de Dados de Temperatura e Umidade entre Dois Arduinos via Firebase
  4. Sistema de Presença RFID Confiável com Arduino e Python
  5. Construa um Sensor de Batimento Cardíaco Infravermelho Confiável com Arduino: Guia Passo a Passo
  6. Veículo Remoto Controlado por Android com Raspberry Pi e Motor Shield
  7. Construa um Pote Inteligente IoT com ESP8266, Arduino e Sensor Ultrassônico – Monitoramento em Tempo Real
  8. Servidor Web Arduino Uno WiFi: Controle LED via Navegador
  9. Sistema de Monitoramento de Incêndio Florestal em Tempo Real com Alertas SMS
  10. Integrando Sensor de Pulso MAX30100 com Arduino: Guia Passo a Passo