뭐 오래전에 테스트했던 내용이었는데... 문득 다시 취미삼아 시작할까 하는 생각에 정리하다가 기초적인 내용이지만 블로그에 올리지 않았다는 것이 생각나서 정리해서 올립니다.^^. 아두이노로 간단하게 서보모터를 돌리는 건데요. 그냥 몇 도.. 뭐 이러면 심심하니까^^ 살짝 사인파 따라서 왔다갔다 시킬려고 합니다.%^^
일반적인 RC 서보모터 출처 : http://fos.cmb.ac.lk/esl/arduino-motor-shield/
이렇게 생긴 아이가 RC 서보모터입니다.^^. RC를 하거나 교육용 로봇을 만지는 분들은 꽤 잘 알고 있는 모양이지요^^ 아주 아주 구동하기 쉽기 때문에 많이들 사용합니다.
RC 서보모터의 구조 출처 : http://fos.cmb.ac.lk/esl/arduino-motor-shield/
내부적으로는 위와 같이 PWM 파형을 입력받아 적절한 회로를 거쳐 구동하도록 되는거죠...
RC 서보 모터의 실제 구성 출처 : http://fos.cmb.ac.lk/esl/arduino-motor-shield/
그 내부는 저렇게 생겼는데요. 모터에 엄청난 기어에 구동회로와 위치를 센싱하는 포텐셔미터까지... 딱 이렇게 구성된 것이 RC 서보 모터입니다.
RC 서보모터를 구동하는 입력 파형 출처 : http://fos.cmb.ac.lk/esl/arduino-motor-shield/
이 아이를 구동하는 방법은 전체적으로 20ms 주기의 파형을 만들고, 위 그림처럼 1.5ms의 ON 구간을 주면 중간... 0.5ms를 더하거나 빼면 좌추 90도로 회전하게 됩니다. 그러나~~~ 저런 파형조차 만들기 귀찮은 경우는 그냥 아두이노의 Servo 라이브러리를 사용하면 되겠습니다.^^
RC 서보모터와 아두이노의 연결 출처 : http://fos.cmb.ac.lk/esl/arduino-motor-shield/
아두이노와 RC 서보모터는 위 그림처럼 연결하면 됩니다. 전원과 PWM 파형이지요. 위 그림은 8번을 사용하지만.. 아래 예제에서는 9번을 사용합니다.^^
이제 제가 직접 구성한 거네요. 뭐 똑 같지만~~~^^ RC 서보모터의 갈색과 적색은 GND와 5V에 연결하고... 오랜지색(커넥션 후에 녹색)은 9번에 연결했습니다.
이제 심플한 연결 끝~~~^^
#include <Servo.h> Servo myservo; float desAngle; int startFlag = 0; float pi = 3.141592; float ts = 0.001*0.001; unsigned long tCount = 0; void setup() { // put your setup code here, to run once: Serial.begin(9600); myservo.attach(9); } float sineWave(float time, float freq, float amp, float phase, float bias) { return amp*sin(2*pi*freq*time + phase) + bias; } void loop() { // put your main code here, to run repeatedly: tCount = micros(); float t = (float)(tCount) * ts; if (Serial.available() > 0) { startFlag = Serial.parseInt(); } if (startFlag == 1) { float desAngle = sineWave(t, 0.1, 45*pi/180, 0, 90*pi/180)*180/pi; Serial.println(desAngle); myservo.write(desAngle); } }
모터를 한 가운데 두면 90도이기 때문에 90를 중심으로 +-45를 움직이도록 했으며, 한번 움직이는 주기는 0.1Hz 즉, 10초로 세팅을 했습니다. 이를 위해 [바로가기]에서 이야기한 micos()함수를 이용해서 시간을 측정하고, sineWave함수를 만들어 서보모터에 인가할 명령을 만들었습니다. 나머지는 뭐 아~주 쉽게 흘러갈 수 있도록 되어있네요. 아참.. 시작과 멈춤을 명령으로 줄려고 시리얼 모니터를 연결해서 1을 입력하면 모터가 구동되고, 아무거나 입력하면 멈추도록 되어있습니다.^^ 뭐 허접하지만.. 동영상하나 첨부하구요~~~^^
'Hardware > Arduino and Friends' 카테고리의 다른 글
아두이노에서 인터넷을 연결하기 위한 ESP8266 준비하기 (20) | 2018.02.07 |
---|---|
아두이노 모터 쉴드를 이용해서 DC 모터 구동해보기 (8) | 2016.01.29 |
아두이노 시리얼 플로터 (14) | 2016.01.27 |
갈릴레오 보드 / 아두이노에서 시간에 대해 미분 적분 수행하기 (28) | 2015.04.09 |
아두이노(Arduino)에서 타이머(timer) 이벤트 사용하기 (18) | 2014.09.10 |
FRITZING - 간편한 회로 작성에서 PCB, 혹은 알아보기 편한 브레드보드로 회로를 표현하는 무료 CAD (4) | 2013.11.01 |
아두이노의 STRING 클래스를 이용하여 NT-ARSv1의 데이터 받아보기 (12) | 2013.09.17 |