카테고리 없음

아두이노 서보모터 카메라 따라 움직이기

abc0123 2017. 10. 27. 16:53
반응형

 

앞에서 pixy 카메라와 아두이노의 연결까지 진행을 해봤는데 이제 카메라에서 받은 값을 이용해서 이런저런 프로그램을 만들어보자. 이 pixy 카메라는 인식한 색의 x, y 좌표를 아두이노에 전달하는데 그 값을 이용해서 서보모터의 방향을 물건을 따라서 돌게 하는 예제를 만들어보려 한다.

 

아래 영상과 같이 카메라 앞에서 물건이 움직이면 서보모터도 똑같은 방향으로 향하도록 하는 내용을 만들어보려는 것이다.

 

 

▲ 영상에서도 알 수 있듯이 이미 메커니즘과 결합을 해 놓은 상태인데 그 녀석이 없다고 가정하고 따로 서보모터를 하나 연결한 후 카메라에 보이는 물체의 방향대로 모터가 돌도록 하는 내용이다. 그리고 색의 설정은 노란색으로 했다.

 

 

이 예제를 만들어보기 위해서 준비 한건 아두이노, 서보모터, pixy 카메라 그리고 카메라가 설정한 색을 포착했을 때와 그렇지 않았을 때 각각의 상황을 알려줄 LED 두 개이다.

 

회로

 

▲ 회도는 다음과 같다. 디지털 7번과 8번은 물체를 탐지했을 때 알려주기 위해서 LED를 연결했으며 설정한 색을 찾을 때는 흰색을 그렇지 못했을 때는 노란색을 켜도록 할 것이다. 그리고 6번 핀에서는 서보모터로 값을 전달하도록 했으며 5V와 GND를 모터로 각각 연결을 해줬다. 이제 이것들을 제어할 프로그램을 작성해보자.

 

LED

 

바로 앞글에서 카메라와 아두이노를 연결하는 방법 및 서보모터를 사용하기 위한 준비 등은 정리를 했으니 참고하기로 하고 여기서는 바로 소스 코드를 살펴본다.

 

pixy

 

서보모터

 

소스코드

 

▲ 먼저 pixy와 서보모터를 사용하기 위해서 라이브러리를 추가한 후 include 해주고 각각의 객체를 인스턴스화 했다. 그리고 setup() 구간에서는 서보를 5번 핀에 할당했고 각각의 LED를 7번과 8번에 연결을 했다.

 

반복 구간

 

▲ 그리고 반복 구간에서는 blocks의 값과 X좌표의 값을 반환받아서 저장할 변수를 선언한 후 만약에 블록이 탐지가 된다면 반환받은 X좌표 값을 map() 함수를 이용해서 서보모터의 각도 0~180도의 값으로 변환을 시켜줬다. (참고로 pixy는 0~319의 X 좌표를 반환한다.) 그리고 그 상황을 체크해보기 위해서 8번 핀에 연결된 흰색 LED를 켜도록 했으며 블록을 탐지하지 못할 때는 7번 핀의 노란색을 켜도록 했다.

 

 

이제 이 코드를 아두이노에 업로드 한 후 지정한 색의 물건을 탐지했을 때와 그렇지 않았을 때 제대로 실행이 되는지 확인해보자.

 

 

▲ 이처럼 설정한 색의 물건을 탐지했을 때는 흰색 LED가 켜지면서 서보모터가 그 물건의 방향과 똑같이 움직이고 범위 내에 물건이 없을 때는 노란색 LED를 켜게 된다. 참고로 서보모터가 불안정하게 움직이는 이유는 설정한 색이 여러 개가 잡히기 때문이다. 맨 앞의 영상에서는 약간 어두운 곳에서 노란색을 설정해서 또렷하게 탐지를 하고 모터가 불안하지 않았는데 이번 영상에서는 조명을 켠 상태에서 테스트를 했더니 노란색이 여러 곳에서 포착이 되면서 모터가 조금 불안하게 움직였으니 참고하고....

 

이렇게 해서 아두이노에 연결된 카메라와 서보모터를 이용해서 설정한 물건의 방향대로 모터가 회전하는 예제를 만들어봤는데 이 예제는 응용할 부분이 아무 많을 거 같으니 잘 기록해 놨다가 다음에 참고하기 위해서 정리를 해봤다.

반응형