산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

얼굴 추적 카메라

구성품 및 소모품

Arduino UNO
× 1
웹캠
× 1
고무 밴드
× 1
9V 1A 스위칭 벽 전원 공급 장치
× 1
MG-90s 서보
× 2
2.1*5.5mm 잭 플러그
× 1
선형 조정기(7805)
× 1
M2*10mm 셀프 태핑 나사
× 15
종이 클립
× 1
후크업 와이어 키트, 22AWG
× 1
핀 헤더
× 1
5mm LED:빨간색
× 1
5mm LED:녹색
× 1
5mm LED:노란색
× 1
저항 220옴
× 3
열수축 튜브
× 1

필요한 도구 및 기계

와이어 스트리퍼 및 절단기, 18-10 AWG / 0.75-4mm² 용량 전선
플라이어, 긴 코
납땜 인두(일반)
멀티미터
스크루드라이버
3D 프린터(일반)

앱 및 온라인 서비스

Microsoft Windows 10

이 프로젝트 정보


몇 달 전에 재미삼아 동료의 머리를 모델링하고 인쇄했습니다. 농담을 던지고 사람을 감지하고 그들이 방을 돌아다니는 동안 계속 쳐다볼 수 있는 이 머리에 대한 메커니즘을 구축하는 것이 재미있을 것이라고 생각했습니다.

나는 메커니즘을 3D 프린트에 맞도록 충분히 작게 만들기 위해 애썼습니다. 그래서 프로젝트를 찬장에 영원히 잠그고 잊어버리는 대신 모든 사람이 즐기고 구축할 수 있는 사용하기 쉬운 소프트웨어로 쉽게 조립할 수 있는 모델을 만들기로 결정했습니다. .

..............https://www.littlefrenchkev.com/face-tracking-camera-mini ..................

어떻게 작동합니까?

카메라는 Arduino Uno로 구동되는 두 개의 서보를 사용하여 움직입니다. 카메라는 소프트웨어가 카메라에서 수신한 이미지에서 얼굴을 찾는 컴퓨터에 연결되어 있습니다.

얼굴이 발견되면 소프트웨어는 이미지 중앙에 감지된 얼굴을 가져오기 위해 카메라를 움직이도록 Arduino에 메시지를 보냅니다.

얼굴이 발견되지 않으면 소프트웨어는 Arduino에 메시지를 보내 임의의 위치로 이동하도록 합니다.

다음과 같은 옵션을 사용하여 소프트웨어를 매우 유연하게 만들려고 했습니다.

<울>
  • 수정 가능한 서보 범위
  • 서보 회전 반전 가능성
  • 수동 제어
  • 이를 통해 다른 용도로 쉽게 재사용할 수 있기를 바랍니다.

    또한 감지 상태를 나타내는 3개의 LED를 추가했습니다. 감지되지 않은 경우 빨간색, 얼굴이 감지되었지만 이미지 중앙에 있지 않은 경우 노란색, 얼굴이 감지되고 이미지 중앙에 있을 때 녹색으로 표시됩니다.

    LED 자체는 그다지 흥미롭지 않지만 몇 개의 조명을 켜고 끄는 대신 유용한 작업을 수행하도록 장치를 쉽게 수정할 수 있어야 합니다.

    Arduino와 소프트웨어 간의 통신은 USB를 통한 직렬 통신을 통해 이루어집니다.

    얼굴 감지 소프트웨어는 Python으로 작성되었습니다. 코드를 보거나(경고:좋지 않을 수 있습니다. 스스로 학습 중입니다) 또는 자신의 프로젝트에 재사용할 수 있도록 모든 Python 파일을 GitHub에 남겨두었습니다.

    Python이 마음에 들지 않으면 내 웹사이트에서 실행 가능한 버전을 다운로드할 수도 있습니다.

    나만의 빌드를 만들고 싶다면 다음 동영상을 확인하세요. 최대한 쉽게 따라할 수 있도록 노력했습니다. 잘 했으면 좋겠습니다.

    필요한 모든 것

    어셈블리

    배선

    소프트웨어 및 설정


    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • Arduino 코드
  • Arduino 코드C/C++
    이것은 arduino 포럼에서 Robin2가 수행한 작업을 기반으로 arduino
    //Sketch에 업로드될 코드입니다//자세한 정보는 여기//https://forum.arduino.cc/index.php?topic=225329.msg1810764#msg1810764#include 서보 팬서보;서보 틸트서보; 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; 부울 readInProgress =false, 부울 newDataFromPC =false, float panServoAngle =90.0, float tiltServoAngle =90.0, int LED_state =0;//8=============Dvoid setup() { Serial.begin(115200); panServo.attach(8); 틸트서보.attach(9); 핀모드(빨간핀, 출력); 핀모드(노란색 핀, 출력); 핀모드(초록핀, 출력); //무브서보(); start_sequence(); 지연(200); Serial.println("<하스타 라 비스타 베이비>"); // 컴퓨터에 메시지 보내기}//8=============Dvoid loop() { getDataFromPC(); 답장PC(); moveServo(); setLED();}//8=============Dvoid getDataFromPC() { // PC에서 데이터를 받아 inputBuffer에 저장 if(Serial.available()> 0) { char x =직렬.read(); //시리얼에서 char 읽기 if (x ==endMarker) { //끝 마커 찾기 readInProgress =false; // 발견되면 진행 중인 읽기를 true로 설정합니다(버퍼에 새 바이트 추가를 중지함) newDataFromPC =true; // arduino에 새 데이터를 사용할 수 있음을 알립니다. inputBuffer[bytesRecvd] =0; //입력 버퍼 지우기 processData(); // 버퍼의 데이터 처리 } if(readInProgress) { inputBuffer[bytesRecvd] =x; // 바이트열로 입력 버퍼 채우기 bytesRecvd ++; //인덱스 증가 if (bytesRecvd ==buffSize) { //버퍼가 가득 찼을 때 bytesRecvd =buffSize - 1; // 종료 마커를 위한 공간 유지 } } if (x ==startMarker) { // 시작 메이커 찾기 bytesRecvd =0; // 발견되면 수신된 바이트를 0으로 설정 readInProgress =true; // 진행 중인 읽기 설정 true } }}//8=============Dvoid processData() // 데이터 유형 "" { char * strtokIndx; // 이것은 strtok()에 의해 인덱스로 사용됩니다. strtokIndx =strtok(inputBuffer,","); // 첫 번째 부분을 얻습니다. panServoAngle =atof(strtokIndx); // 이 부분을 float로 변환 strtokIndx =strtok(NULL,","); // 두 번째 부분을 가져옵니다(이전 호출이 중단된 위치에서 계속됨).tiltServoAngle =atof(strtokIndx); // 이 부분을 float로 변환 strtokIndx =strtok(NULL, ","); // 마지막 부분 가져오기 LED_state =atoi(strtokIndx); // 이 부분을 정수로 변환(문자열을 정수로)}//8=============Dvoid replyToPC() { if (newDataFromPC) { newDataFromPC =false; Serial.print("<"); Serial.print(panServo.read()); Serial.print(","); Serial.print(tiltServo.read()); Serial.println(">"); }}//8============Dvoid moveServo() { panServo.write(panServoAngle); tiltServo.write(tiltServoAngle);} 무효 setLED(){ if(LED_state ==2){ digitalWrite(redledPin, LOW); digitalWrite(노란색 핀, 높음); digitalWrite(greenledPin, LOW); } else if(LED_state ==1){ digitalWrite(redledPin, LOW); digitalWrite(노란색 핀, LOW); digitalWrite(greenledPin, HIGH); } else if(LED_state ==0){ digitalWrite(redledPin, HIGH); digitalWrite(노란색 핀, LOW); digitalWrite(greenledPin, LOW); } else if(LED_state ==3){ digitalWrite(redledPin, HIGH); digitalWrite(노란색 핀, 높음); digitalWrite(greenledPin, HIGH); } else{ digitalWrite(redledPin, LOW); digitalWrite(노란색 핀, LOW); digitalWrite(greenledPin, LOW); } }//8=============D 무효 start_sequence() { panServo.write(90); 틸트서보.쓰기(90); 지연(300); digitalWrite(redledPin, HIGH); 지연(100); digitalWrite(redledPin, LOW); digitalWrite(노란색 핀, 높음); 지연(100); digitalWrite(노란색 핀, LOW); digitalWrite(greenledPin, HIGH); 지연(100); digitalWrite(redledPin, LOW); digitalWrite(노란색 핀, LOW); digitalWrite(greenledPin, LOW); 지연(100); digitalWrite(redledPin, HIGH); digitalWrite(노란색 핀, 높음); digitalWrite(greenledPin, HIGH); 지연(100); digitalWrite(redledPin, LOW); digitalWrite(노란색 핀, LOW); digitalWrite(greenledPin, LOW); }
    얼굴 감지 소프트웨어
    다음은 얼굴 감지 소프트웨어의 파일을 찾을 수 있는 저장소입니다. 내 웹사이트에서 실행 버전도 찾을 수 있습니다. https://github.com/LittleFrenchKev/face_tracking_camera

    맞춤형 부품 및 인클로저

    얼굴 추적 카메라 부품
    얼굴 추적 카메라 미니를 만드는 데 필요한 모든 부품. https://www.littlefrenchkev.com/downloadCAD 파일(thingiverse.com )에서 찾을 수도 있습니다.

    회로도


    제조공정

    1. 라즈베리 파이로 팬/틸트 얼굴 추적
    2. 박하 사탕 발가락 게임 방문 카드
    3. 다중 온도 센서
    4. 862D+용 DIY 납땜 인두 제어
    5. 모션센스
    6. 3D 프린터 화재 안전
    7. Arduino, Yaler 및 IFTTT가 포함된 IoT 게이지
    8. Arduino 반발 전자기 부상
    9. 원격 제어 그리퍼 봇
    10. CoroFence - 열 감지기🖖