제조공정
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 |
| ||||
|
이전 튜토리얼에서 'pyserial' 모듈을 사용하여 Arduino와 Python 간에 통신하고 LED를 제어하는 방법을 공유했습니다. 아직 보지 못했다면 여기에서 확인하세요:COMMUNICATION BETWEEN ARDUINO &PYTHON!
물체의 색상을 감지하고 화면에서 추적하는 방법은 여기에서 확인하십시오:OPENCV 및 PYTHON을 사용한 색상 감지
이 튜토리얼에서는 Arduino와 Python을 사용하여 얼굴을 추적하고 카메라가 얼굴을 따르도록 하는 방법을 보여줍니다. 어렵게 들릴 수 있지만 그렇지 않습니다. Arduino와 Python에 대한 기본 지식만 있으면 됩니다.
그럼 시작하겠습니다...
1단계:필요한 것
요구 사항은 최소입니다. 여기에 필요한 모든 것의 일부 목록을 제공했습니다.
하드웨어 요구사항:
<울>소프트웨어 요구사항:
<울>모든 것이 수집되면 설치 단계로 이동할 수 있습니다...
2단계:Python 환경 설정
Python 설치:
그림> 그림>따라서 먼저 Python 2.7을 실행해야 합니다. 이를 수행하려면 먼저 python 2.7.14를 다운로드하고 설치하십시오. 제대로 설치되었는지 확인하려면 Goto:Windows 검색>> "IDLE" 입력>> Enter 키를 누릅니다. Python 셸이 나타납니다.
또는
검색에 'CMD'를 입력하고 Enter 키를 눌러 명령 프롬프트를 엽니다. CMD에서 >> python을 입력하고 Enter 키를 누릅니다. Python 인터페이스가 표시되어야 합니다.
CMD에서 오류가 표시되면 당황하지 마십시오. 아마도 환경 변수를 설정해야 할 것입니다. 이 튜토리얼은여기에서 따를 수 있습니다. 환경 변수를 설정합니다.
Python에서 'pyserial', 'OpenCV' 및 "numpy" 설치:
이 모듈을 설치하려면 pip install을 사용합니다.
먼저 CMD를 열고 다음 코드를 입력하십시오.-
>pip install serial
>pip install opencv-python
>pip install numpy
이 명령은 필요한 모듈을 설치합니다. 이제 코딩 부분으로 이동할 수 있습니다...
3단계:Python 스크립트
코드 작성을 시작하기 전에 모든 코드를 동일한 폴더에 저장해야 하므로 먼저 새 폴더를 만들어야 합니다. 따라서 새 폴더를 만들고 이름을 원하는 대로 지정합니다. 아래에서 'Haarcascade'를 다운로드하여 폴더에 붙여넣습니다.
이제 메모장을 열고 아래 스크립트를 작성하고 haarcascade와 같은 폴더에 'face.py'로 저장합니다. (아래 파일에서 제공한 코드를 다운로드할 수 있습니다.) :
#필요한 모든 모듈 가져오기
numpy를 np로 가져오기
시리얼 가져오기
시간 가져오기
시스템 가져오기
cv2 가져오기
#Setup arduino의 통신 경로('COM5' 대신 arduino가 연결된 포트를 입력)
arduino =serial.Serial('COM5', 9600)
time.sleep(2)
print("arduino에 연결되었습니다...")
#얼굴 감지를 위한 Haarcascade 가져오기
face_cascade =cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
#에서 비디오 스트림을 캡처하려면 webcam.
cap =cv2.VideoCapture(0)
#캡처된 이미지를 읽고 회색 이미지로 변환하고 얼굴을 찾습니다.
1:
ret, img =cap.read ()
cv2.resizeWindow('img', 500,500)
cv2.line(img,(500,250),(0,250),(0,255,0),1)
cv2.line( img,(250,0),(250,500),(0,255,0),1)
cv2.circle(img, (250, 250), 5, (255, 255, 255), -1)
회색 =cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces =face_cascade.detectMultiScale(gray, 1.3)
#얼굴을 감지하고 주위에 직사각형을 만듭니다.
면의 (x,y,w,h)에 대해:
cv2.rectangle(img,(x,y),(x+w,y+h),( 0,255,0),5)
roi_gray =회색[y:y+h, x:x+w]
roi_color =img[y:y+h, x:x+w]
arr ={y:y+h, x:x+w}
인쇄(arr)
인쇄('X:' +str(x))
인쇄( 'Y :'+str(y))
print('x+w :' +str(x+w))
print('y+h :' +str(y+h))
# 투자 수익의 중심(사각형)
xx =int(x+(x+h))/2
yy =int(y+(y+w))/2
인쇄 (xx)
print (yy)
center =(xx,yy)
# arduino에 데이터 보내기
print("사각형의 중심은 :", 가운데)
데이터 ="X{0:d}Y{1:d}Z".format(xx, yy)
print("출력 ='" +data+ "'")
arduino.write( data)
#스트림을 표시합니다.
cv2.imshow('img',img)
#실행을 종료하려면 'Esc' 키를 누르십시오.
k =cv2.waitKey(30) &0xff
k ==27인 경우:
중단
이 작업이 완료되면 Arduino용 코드 작성으로 이동합니다...
haarcascade_frontalface_default.xml face.py
4단계:Arduino 코드
파이썬 스크립트가 준비되면 서보를 제어하기 위해 arduino 스케치가 필요합니다. 아래 코드를 참고하여 아두이노 IDE에 붙여넣고 face.py, haarcascade와 같은 폴더에 'servo.ino'로 저장합니다. 코드를 업로드하고 다음 단계로 이동하여 연결하십시오.
(다운로드 가능한 파일은 아래와 같습니다.)
#include
서보 서보 버전; //수직 서보
서보 서보Hor; //수평 서보
int x;
int y;
int prevX;
int prevY;
void setup()
{
직렬 .begin(9600);
servoVer.attach(5); //수직 서보를 핀 5에 연결
servoHor.attach(6); //수평 서보를 핀 6에 연결
servoVer.write(90);
servoHor.write(90);
}
void Pos()
{
if(prevX !=x || prevY !=y)
{
int 서보X =map(x, 600, 0, 70, 179);
int 서보Y =map(y , 450, 0, 179, 95);
서보X =최소(서보X, 179);
서보X =최대(서보X, 70);
서보Y =최소(서보Y, 179);
서보Y =최대(서보Y, 95);
servoHor.write(servoX);
servoVer.write(servoY);
}
}
무효 루프()
{
if(Serial.available()> 0)
{
if(Serial.read() =='X')
{
x =Serial.parseInt();
if(Serial.read() =='Y')
{
y =Serial.parseInt();
Pos();
}
}
while(Serial.available()> 0)
{
Serial.read();
}
}
}
서보.이노
5단계:팬-틸트 메커니즘:-
Pan-Tilt에 쉽게 구할 수 있는 키트를 사용했습니다. 원하는 경우 나무/플라스틱 또는 3D 프린트를 사용하여 직접 만들 수 있습니다.
제가 사용한건 아주 저렴하고 조립도 쉽습니다. 그러나 그 방법에 대한 지침이 필요한 경우 여기에서 찾을 수 있습니다.
6단계:연결하기 그림>
회로는 매우 간단합니다. arduino에 두 개의 서보를 연결하기만 하면 됩니다.
<울>참고용으로 회로도를 확인하십시오.
7단계:테스트 <울>
네가 좋아하길 바래. 새로운 것을 배우십시오.
감사합니다!
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">#필요한 모든 모듈을 import numpy as npimport serialimport timeimport sysimport cv2#Setup arduino의 통신 경로('COM5' 대신 arduino가 연결된 포트를 입력) arduino =serial.Serial('COM5', 9600 ) time.sleep(2)print("arduino에 연결됨...")#얼굴 감지를 위한 Haarcascade 가져오기face_cascade =cv2.CascadeClassifier('haarcascade_frontalface_default.xml')#webcam.cap에서 비디오 스트림을 캡처하려면 =cv2.VideoCapture (0)#캡처된 이미지를 읽고 회색 이미지로 변환하고 facewhile 1:ret, img =cap.read() cv2.resizeWindow('img', 500,500) cv2.line(img,(500,250),(0,250) ),(0,255,0),1) cv2.line(img,(250,0),(250,500),(0,255,0),1) cv2.circle(img, (250, 250), 5, (255) , 255, 255), -1) 회색 =cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces =face_cascade.detectMultiScale(gray, 1.3)#얼굴을 감지하고 그 주위에 직사각형을 만듭니다. 면의 (x,y,w,h):cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),5) roi_gray =gray[y:y +h, x:x+w] roi_color =img[y:y+h, x:x+w] arr ={y:y+h, x:x+w} print (arr) print ('X :' +str(x)) 인쇄('Y :'+str(y)) 인쇄('x+w:' +str(x+w)) 인쇄('y+h:' +str(y+h)) # 투자수익의 중심(사각형) xx =int(x+(x+h))/2 yy =int(y+(y+w))/2 print(xx) print(yy) center =(xx,yy)# 보내기 arduino에 데이터를 출력합니다. ") arduino.write(data)#스트림을 표시합니다. cv2.imshow('img',img)#실행을 종료하려면 'Esc' 키를 누르세요. k =cv2.waitKey(30) &0xff if k ==27:break
#include섹션>서보 서보 버전; //수직 ServoServo servoHor; //수평 서보 x;int y;int prevX;int prevY;void setup(){ Serial.begin(9600); 서보 Ver.attach(5); //수직 서보를 핀 5에 연결합니다.servoHor.attach(6); //수평 서보를 6번 핀에 연결합니다. servoVer.write(90); ServoHor.write(90);} 무효 Pos(){ if(prevX !=x || prevY !=y) { int servoX =map(x, 600, 0, 70, 179); 정수 서보Y =맵(y, 450, 0, 179, 95); 서보X =최소(서보X, 179); 서보X =최대(서보X, 70); 서보Y =최소(서보Y, 179); 서보Y =최대(서보Y, 95); ServoHor.write(servoX); ServoVer.write(servoY); }} 무효 루프(){ if(Serial.available()> 0) { if(Serial.read() =='X') { x =Serial.parseInt(); if(Serial.read() =='Y') { y =Serial.parseInt(); 위치(); } } while(Serial.available()> 0) { Serial.read(); } }}
제조공정
구성품 및 소모품 닌텐도 쌍절곤 × 1 SparkFun 레벨 시프터 × 1 Arduino UNO × 1 이 프로젝트 정보 머리말 원래 이 게시물은 www.xarg.org에 게시되었습니다. Arduino와 함께 Wii Nunchuk 사용 우리는 모두 게임 패드를 손에 들고 성장했으며 문자 그대로 가능한 모든 응용 프로그램과 결합하는 데 이상적입니다. Nintendo의 위대한 발명품은 Wii U 리모컨의 저렴한 확장 기능인 Nunchuk입니다.
구성품 및 소모품 Arduino 윤 × 1 초음파 센서 × 1 서보(타워 프로 MG996R) × 1 점퍼 와이어(일반) × 10 앱 및 온라인 서비스 Arduino IDE MATLAB 이 프로젝트 정보 1단계:이론 이 프로젝트에서는 초음파 거리 센서를 사용하고 있습니다. 사람이 들을 수 없는 범위의 음파를 생성하고 이 음파가 장애물에 부딪치고 되돌아오는 데 필요한 시간을 계산하여 거