메인
home
소프트웨어
home

Arduino

서보모터 제어

서보모터를 한번 제어해보자.
먼저 틴커캐드라는 사이트에서 회로를 구상해보고 테스트를 해보자.
틴커캐드에 접속해서 로그인을 하면
이런 화면이 뜬다. 여기서 회로를 눌러서 회로 구상을 해볼꺼다.
틴커캐드에 들어와서 회로를 눌러 들어왔다.
필요한 회로 부품들을 연결할 수 있고, 코드를 직접 입력해서 서보모터를 테스트 할 수도 있다.
Servo servo;서보모터를 사용하기 위해서 어떤 변수로 이 서보모터를 사용할지 정하는거다.
servo.attach(5);서보모터를 몇번핀에서 사용하는지 설정해주는거다.
servo.write(180);서보모터의 각도를 설정해주는거다.
밑에 코드는 2개의 서보모터가 서로 반대 방향으로 회전하는 코드다.
실행하게 되면 이런식으로 코드에 대해서 모터가 어떤식으로 움직이는지 알 수 있다.
0은 정방향 180은 역방향이라고 생각하면 쉽다.

회전

아두이노 트래킹 제작

이번엔 사이트에서 구상해보는게 아닌 아두이노 보드를 사용해서 코드를 실행해보자.
먼저 아두이노 프로그램을 실행해주자.
앞으로 동작은 이 프로그램에서 코드를 입력해서 실행시켜야 한다.
일단 테스트를 위해서 각 부품들을 조립해준다.
ai0.kr 사이트에서 필요한 코드를 가져와준다.
코드를 가져와주고 업로드를 눌러서 코드를 아두이노에 넣어준다.
그리고 시리얼 모니터를 열어서 코드가 작동하는지 입력해본다.
[W A S D]로 각도를 바꿔주는 코드인데 이게 잘 작동하는지 확인해본다.
밑에 영상은 코드를 실행한 영상이다.
문제 없이 잘 작동하는 모습이다.

모터 제어 코드

LED 사용하기

아두이노에서 레이저 포인터를 사용해보자.
일단 레이저 포인터를 연결해보자.
pinMode(10, OUTPUT); 을 사용해서 레이저 포인터를 10번핀에 지정해주었다.
그리고 digitalWrite(10, 1);digitalWrite(10, 0); 사이에 delay(100); 를 넣어서 레이저 포인터가 깜박이도록 해주었다.
그리고 업로드를 눌러서 아두이노로 보내주면
레이저 포인터가 깜박인다.
아래는 작동 영상이다.

레이저 포인터 제어하기

저번에 만들었던 서보모터에 레이저 포인터를 달아서 ON/OFF 를 만들어보자.
else if(input == 'q') //입력값이 q일 경우 LED ON/OFF { led = !led; digitalWrite(10, led);
Arduino
복사
일단 코드를 몇줄 추가해주자.
이번엔 참 또는 거짓으로 이루어진 bool 함수를 사용해서 Q 버튼 하나로 on/off 를 제어해볼꺼다.
bool led = LOW; 를 추가로 입력해주고 pinMode(10, OUTPUT); 핀 모드도 잊지말고 적어주자.
사실 그저 LED를 켜고 끄는거라 이게 끝이다.
아래는 작동 영상이다.

얼굴 트래킹

이번엔 얼굴 트래킹을 해보자.
import cv2 print(cv2.__version__) def 얼굴찾기(웹캠화면, 검출분류기, 이미지스케일, 최대검출갯수) : 웹캠복사 = 웹캠화면.copy() 흑백이미지 = cv2.cvtColor(웹캠복사, cv2.COLOR_BGR2GRAY) 검출된얼굴들 = 검출분류기.detectMultiScale(흑백이미지, 이미지스케일, 최대검출갯수) #검출된 얼굴들 -> (x, y, w, h) 값으로 출력 얼굴출력 = [] 선두께 = 2 선색깔 = (255, 0, 255) for (x,y,w,h) in 검출된얼굴들 : cv2.rectangle(웹캠복사, (x, y), (x+w, y+h), 선색깔, 선두께) 얼굴출력.append([[x,y,w,h], w*h]) 얼굴출력 = sorted(얼굴출력, key = lambda x:x[1], reverse = True) return 웹캠복사, 얼굴출력 def main(): 프레임너비 = 640 프레임높이 = 480 검출분류기 = cv2.CascadeClassifier("haarcascade_frontalface_default.xml") 캡쳐 = cv2.VideoCapture(0) while True : _, 웹캠화면 = 캡쳐.read() 웹캠화면 = cv2.resize(웹캠화면, (프레임너비, 프레임높이)) 웹캠복사, 얼굴출력 = 얼굴찾기(웹캠화면, 검출분류기, 1.1, 4) cv2.imshow("결과창", 웹캠복사) if cv2.waitKey(1) == ord('q') : break if __name__ == "__main__" : main()
Arduino
복사
이 코드를 사용해볼껀데 바로 실행하면 에러가 뜰것이다.
이런 에러가 뜨게 되는데
그 이유는 haarcascade_frontalface_default.xml 라는 파일이 없기 때문이다.
그래서 우리는 이 파일을 따로 다운해서 넣어줘야 한다.
깃허브에서 opencv를 다운받고
필요한 파일을 꺼내서 넣어주자.
넣어주고 다시 실행해보면
이런식으로 얼굴 인식이 잘 된다.
이제 얼굴 트래킹까지 했으니 트래킹에 맞춰서 레이저 포인터도 따라가도록 해보자.