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

DIY Gezichtsvolgende Camera Aangedreven door Arduino UNO

Onderdelen en Benodigdheden

  • OnderdeelAantal
    Arduino UNO1
    Webcam (USB)1
    Rubberen band1
    9V 1A Schakelende Netvoeding1
    MG-90S Servomotoren2
    2.1×5.5mm DC jack stekker1
    Lineaire Spanningsregelaar (7805)1
    M2×10mm Zelfsnijgende Schroeven15
    Gepinde draad (paperclip)1
    Hook-up Wire Kit, 22 AWG1
    Pin header1
    5mm LED: Rood1
    5mm LED: Groen1
    5mm LED: Geel1
    Weerstand 220 Ω3
    Krimpkous1

    Benodigde Tools en Machines

    • Draadstripper & Knijptang (18-10 AWG)
    • Puntige tang
    • Solderbout
    • Multimeter
    • Schroevendraaier
    • 3D-printer

    Apps en Online Services

    • Microsoft Windows 10 (voor face detection software)

    Over dit Project

    De maker modeleerde en 3D-printte een collega's hoofd voor de grap, en besloot er een mechanisme aan toe te voegen dat mensen detecteert en blijft kijken terwijl ze door de kamer bewegen.

    Hoe Werkt Het?

    De camera beweegt met twee servomotoren aangedreven door een Arduino Uno. De webcam is aangesloten op een computer waar Python-software gezichten detecteert in de videostroom.

    • Wordt een gezicht gedetecteerd? De software stuurt coördinaten naar de Arduino om de camera te centreren op het gezicht.
    • Geen gezicht? De camera beweegt naar een willekeurige positie.

    De software biedt flexibiliteit: instelbare servo-bereiken, inverseerbare rotatie, en handmatige controle. Drie LED's tonen de detectiestatus: Rood = geen detectie, Geel = gezicht gedetecteerd maar niet gecentreerd, Groen = gezicht gecentreerd. Communicatie verloopt via seriële USB-verbinding.

    De face detection software is geschreven in Python. Broncode beschikbaar op GitHub. Er is ook een uitvoerbaar bestand beschikbaar op de website van de maker.

    Bouwhandleiding

    Beschikbare video's (Engels):

    1. Alles wat je nodig hebt
    2. Montage
    3. Bedrading
    4. Software en Setup

    Code

    Arduino Code (C/C++)

    // Gebaseerd op werk van Robin2 (Arduino Forum)
    #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 = 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() {
      switch(LED_state) {
        case 2: // Geel - gedetecteerd, niet gecentreerd
          digitalWrite(redledPin, LOW);
          digitalWrite(yellowledPin, HIGH);
          digitalWrite(greenledPin, LOW);
          break;
        case 1: // Groen - gecentreerd
          digitalWrite(redledPin, LOW);
          digitalWrite(yellowledPin, LOW);
          digitalWrite(greenledPin, HIGH);
          break;
        case 0: // Rood - geen detectie
          digitalWrite(redledPin, HIGH);
          digitalWrite(yellowledPin, LOW);
          digitalWrite(greenledPin, LOW);
          break;
        case 3: // Alle aan
          digitalWrite(redledPin, HIGH);
          digitalWrite(yellowledPin, HIGH);
          digitalWrite(greenledPin, HIGH);
          break;
        default:
          digitalWrite(redledPin, LOW);
          digitalWrite(yellowledPin, LOW);
          digitalWrite(greenledPin, LOW);
      }
    }
    
    void start_sequence() {
      panServo.write(90);
      tiltServo.write(90);
      delay(300);
      // LED test sequentie
      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);
    }
    

    Face Detection Software (Python)

    Broncode en uitvoerbaar bestand: GitHub Repository en Website

    Aangepaste Onderdelen (3D Print)

    Alle benodigde 3D-print bestanden (STL) beschikbaar op Thingiverse en de website van de maker.

    Schema

    Elektrisch schema beschikbaar als afbeelding (pinout voor servos, LEDs, spanningsregelaar, en Arduino).

    Productieproces

    1. Real-time Pan/Tilt gezichtsvolging op een Raspberry Pi – Praktische Gids
    2. Aangepaste 4×4 Boter-Kaas-Eieren Visitekaartje PCB – Ontwerp, Bouw en Code Handleiding
    3. Meerpositie-temperatuursensorsysteem voor slimme thuisintegratie
    4. DIY Soldeerbout-controller voor 862D+ — Precisie & Betrouwbaarheid
    5. MotionSense: Slimme inbraakdetectie met Arduino en ESP8266
    6. 3D-Printer Brandpreventie: Slimme Sensor Veiligheidssysteem
    7. Web-IoT Meter Bouwen met Arduino, Yaler en IFTTT
    8. Arduino-gebaseerde Afstotende Magnetische Levitatie: Eenvoudige Schakeling & DIY Handleiding
    9. Geavanceerde Remote-gecontrolleerde Gripper Robot voor Precisiehantering
    10. High-Performance Arduino Weerballon Datalogger
    11. CoroFence Thermische Detector: Geavanceerde PIR-sensor & IoT-integratie