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

Câmera de Rastreamento Facial DIY Alimentada por Arduino UNO

Componentes e Materiais

ComponenteQuantidade
Arduino UNO1
Webcam1
Elástico1
Fonte de alimentação chaveada 9V 1A1
Servos MG-90s2
Plug jack 2.1*5.5mm1
Regulador Linear (7805)1
Parafusos auto-roscantes M2*10mm15
Clipe de papel1
Kit de fios 22 AWG1
Header de pinos1
LED 5 mm: Vermelho1
LED 5 mm: Verde1
LED 5 mm: Amarelo1
Resistor 220 ohm3
Tubo termorretrátil1

Ferramentas e Máquinas Necessárias

Aplicativos e Serviços Online

Sobre o Projeto

Há alguns meses, modelei e imprimi a cabeça de um colega para diversão. Pensei que seria engraçado levar a brincadeira adiante e construir um mecanismo para esta cabeça que detecta pessoas e continua olhando para elas enquanto se movem pela sala.

Lutei para tornar o mecanismo pequeno o suficiente para caber na minha impressão 3D, então, em vez de guardar o projeto em um armário para sempre, decidi fazer um modelo fácil de montar com software fácil de usar para todos aproveitarem e expandirem.

Como Funciona?

A câmera se move usando dois servos acionados por um Arduino Uno. A câmera é conectada a um computador onde um software tenta encontrar rostos nas imagens recebidas da câmera.

Se um rosto for encontrado, o software enviará uma mensagem ao Arduino para mover a câmera de forma a colocar o rosto detectado no centro da imagem.

Se nenhum rosto for encontrado, o software enviará uma mensagem ao Arduino para movê-lo para uma posição aleatória.

Tentei tornar o software bastante flexível com opções como:

Espero que isso torne fácil reutilizá-lo para outros propósitos.

Também adicionei 3 LEDs que mostram o estado da detecção: vermelho para nenhuma detecção, amarelo quando um rosto é detectado mas não no centro da imagem, e verde quando um rosto é detectado e está no centro da imagem.

Os LEDs por si só não são muito interessantes, mas deve ser fácil modificar o dispositivo para realizar uma ação útil em vez de apenas ligar e desligar algumas luzes.

A comunicação entre o Arduino e o software é feita através de comunicação serial (via USB).

O software de detecção facial foi escrito em Python. Deixei todos os arquivos Python no GitHub caso você queira dar uma olhada no código (aviso: provavelmente não é ótimo, estou aprendendo sozinho) ou reutilizá-los para seu próprio projeto.

Se Python não é sua praia, você também pode baixar a versão executável no meu site.

Se você quiser construir o seu próprio, confira os vídeos a seguir. Tentei torná-los o mais fáceis possível de seguir, espero ter feito um bom trabalho.

Tudo o que Você Precisa

Montagem

Fiação

Software e Configuração

Código

Código do Arduino

//Sketch baseado no trabalho feito por Robin2 no fórum do arduino
//mais info aqui
//https://forum.arduino.cc/index.php?topic=225329.msg1810764#msg1810764
#include 
Servo panServo;
Servo tiltServo;
byte redledPin = 2;
byte yellowledPin = 3;
byte greenledPin = 4;
const byte buffSize = 40;
char inputBuffer[buffSize];
const char startMarker = '<';
const char endMarker = '>';
byte bytesRecvd = 0;
boolean readInProgress = false;
boolean newDataFromPC = false;
float panServoAngle = 90.0;
float tiltServoAngle = 90.0;
int LED_state = 0;
void setup() {
  Serial.begin(115200);
  panServo.attach(8);
  tiltServo.attach(9);
  pinMode(redledPin, OUTPUT);
  pinMode(yellowledPin, OUTPUT);
  pinMode(greenledPin, OUTPUT);
  start_sequence();
  delay(200);
  Serial.println("");
}
void loop() {
  getDataFromPC();
  replyToPC();
  moveServo();
  setLED();
}
void getDataFromPC() {
  if(Serial.available() > 0) {
    char x = Serial.read();
    if (x == endMarker) {
      readInProgress = false;
      newDataFromPC = true;
      inputBuffer[bytesRecvd] = 0;
      processData();
    }
    if(readInProgress) {
      inputBuffer[bytesRecvd] = x;
      bytesRecvd ++;
      if (bytesRecvd == buffSize) {
        bytesRecvd = buffSize - 1;
      }
    }
    if (x == startMarker) {
      bytesRecvd = 0;
      readInProgress = true;
    }
  }
}
void processData() {
  char * strtokIndx;
  strtokIndx = strtok(inputBuffer,",");
  panServoAngle = atof(strtokIndx);
  strtokIndx = strtok(NULL,",");
  tiltServoAngle = atof(strtokIndx);
  strtokIndx = strtok(NULL, ",");
  LED_state = atoi(strtokIndx);
}
void replyToPC() {
  if (newDataFromPC) {
    newDataFromPC = false;
    Serial.print("<");
    Serial.print(panServo.read());
    Serial.print(",");
    Serial.print(tiltServo.read());
    Serial.println(">");
  }
}
void moveServo() {
  panServo.write(panServoAngle);
  tiltServo.write(tiltServoAngle);
}
void setLED() {
  if(LED_state == 2){
    digitalWrite(redledPin, LOW);
    digitalWrite(yellowledPin, HIGH);
    digitalWrite(greenledPin, LOW);
  } else if(LED_state == 1){
    digitalWrite(redledPin, LOW);
    digitalWrite(yellowledPin, LOW);
    digitalWrite(greenledPin, HIGH);
  } else if(LED_state == 0){
    digitalWrite(redledPin, HIGH);
    digitalWrite(yellowledPin, LOW);
    digitalWrite(greenledPin, LOW);
  } else if(LED_state == 3){
    digitalWrite(redledPin, HIGH);
    digitalWrite(yellowledPin, HIGH);
    digitalWrite(greenledPin, HIGH);
  } else{
    digitalWrite(redledPin, LOW);
    digitalWrite(yellowledPin, LOW);
    digitalWrite(greenledPin, LOW);
  }
}
void start_sequence() {
  panServo.write(90);
  tiltServo.write(90);
  delay(300);
  digitalWrite(redledPin, HIGH);
  delay(100);
  digitalWrite(redledPin, LOW);
  digitalWrite(yellowledPin, HIGH);
  delay(100);
  digitalWrite(yellowledPin, LOW);
  digitalWrite(greenledPin, HIGH);
  delay(100);
  digitalWrite(redledPin, LOW);
  digitalWrite(yellowledPin, LOW);
  digitalWrite(greenledPin, LOW);
  delay(100);
  digitalWrite(redledPin, HIGH);
  digitalWrite(yellowledPin, HIGH);
  digitalWrite(greenledPin, HIGH);
  delay(100);
  digitalWrite(redledPin, LOW);
  digitalWrite(yellowledPin, LOW);
  digitalWrite(greenledPin, LOW);
}

Software de Detecção Facial

Aqui está o repositório onde você pode encontrar os arquivos para o software de detecção facial. Você também pode encontrar uma versão executável no meu site. GitHub

Peças Personalizadas e Gabinetes

Todas as peças necessárias para construir a câmera de rastreamento facial mini. Você também pode encontrá-las aqui: Site do autor ou no Thingiverse.

Esquemáticos

Diagrama de conexões da câmera de rastreamento facial.

Processo de manufatura

  1. Rastreamento Facial Pan/Tilt em Tempo Real no Raspberry Pi – Guia Prático
  2. Cartão de Visita PCB 4×4 Jogo da Velha Personalizado – Guia de Design, Montagem e Código
  3. Sistema Multi-Posição de Sensores de Temperatura para Integração em Casa Inteligente
  4. Controlador DIY para Ferro de Solda 862D+ — Precisão e Confiabilidade
  5. MotionSense: Detecção Inteligente de Intrusão com Arduino e ESP8266
  6. Prevenção de Incêndio em Impressoras 3D: Sistema de Segurança com Sensor Inteligente
  7. Crie um Medidor IoT Web com Arduino, Yaler e IFTTT
  8. Levitação Magnética Repulsiva com Arduino: Circuito Simples e Guia DIY
  9. Robô Garra Controlado Remotamente para Manipulação de Precisão
  10. CoroFence Detector Térmico: Sensor PIR Avançado & Integração IoT