카테고리 없음

아두이노 스텝모터 모터드라이버 연결

abc0123 2017. 11. 2. 01:21
반응형

 

얼마 전 심심할 때 갖고 놀려고 구입한 아두이노 키트에는 총 세 개의 모터가 들어 있었는데 일반 DC 모터와 서보, 그리고 스텝모터이다. 그동안 서보모터는 자주 갖고 놀았는데 오늘은 아두이노 스텝모터를 만져보려고 한다.

 

스텝모터는 내가 원하는 대로 회전의 각도와 속도를 제어할 수 있는 모터인데 가변저항을 이용해서 그 속도를 제어해보려고 한다.

 

 

▲ 영상처럼 가변저항을 돌려서 아날로그 값을 올리면 모터의 속도를 올리고 반대로 가변저항의 값을 줄이면 회전 속도를 줄이는 예제를 만들어보려는 것이다.

 

 

이 예제를 만들어보기 위해서는 당연히 스텝모터가 있어야 하고 모터 드라이버와 가변저항 및 점퍼 케이블이 필요하다.

 

스텝모터

 

▲ 이게 스텝모터인데 오늘 처음 만져본다.

 

모터드라이버

 

▲ 그리고 '모터 드라이버'인데 아두이노에서 4개의 디지털 신호와 5V의 전류와 GND 값을 받아서 스텝 모터를 제어하는 역할을 한다.

 

디지털핀

 

▲ 아두이노 보드의 8~11핀에서 모터 드라이버에 디지털 신호를 보내도록 했으며...

 

아날로그

 

▲ 가변저항의 아날로그 데이터는 [A5] 핀에서 받도록 했다.

 

회로

 

▲ 빵 판 작은 걸 이용해서 가변저항을 연결을 했으며 모터 드라이버를 연결하기 위해서 핀들을 연결한 모습이다. 이제 모터 드라이버를 연결하자.

 

가변저항

 

▼ 그리고 마지막으로 스텝모터를 연결한다.

 

회도로

 

회로가 완성됐으니 코딩을 해볼 텐데.. 아날로그(A5)에서 받은 값을 디지털 신호로 매핑을 한 후 그 값을 스텝모터로 보내서 회전의 속도를 제어해보자.

 

 

코딩

 

먼저 스텝모터의 라이브러리를 사용하기 위해서 <Stepper.h>를 #include 했으며 모터의 초기 회전 각도 값으로 사용할 상수 a를 선언했다. 참고로 1024는 180도이고 2048이 360도 회전 값이다. 그리고 Stepper를 인스턴스화 하면서 인자로 초기 회전 각도 값과 모터에 연결한 디지털 핀 번호를 넣어주고 있는 모습이다. 이때 핀 번호의 순서가 바뀌면 제대로 작동하지 않는다.

 

아직 모터의 작동 원리까지는 공부하지 않아서 핀번호가 바뀌면 왜 안 되는지는 정확히 모르겠지만 이 의문을 해결하기 위해서 더 깊게 공부를 할 수 있으니 위안을 삼으며 나중에 따로 정리하기로 하고...

 

반복 구간(loop)에서는 int b 변수를 선언한 후 아날로그 A5에서 받은 값을 저장하고 있다. 그리고 map() 함수를 이용해서 0부터 1023사이의 값으로 들어오는 아날로그 값을 0부터 35까지 변환하도록 하고 있는데 0~35는 스텝모터의 1분당 회전수이다. 즉, 값이 커질수록 회전 속도가 빨라지게 되는데 내가 갖고 있는 녀석은 35이상 올리면 탈조현상이 일어나서 거기까지만 회전하도록 했다. 그렇게 변환된 값이 0보다 크다면 모터의 회전속도를 그 값으로 하도록 하고 있는 모습이다.

 

이렇게 해서 아두이노 스텝모터를 만져봤는데 이 녀석도 활용 범위가 넓을 거 같으니 잘 정리해놓고 나중에 응용해보기로 하자.

반응형