아두이노 연재를 한동안 못 올렸네요. 이번에는 아두이노 연재 - 서보 모터 구동편입니다. 아두이노로 뭔가를 작업하는 분들이 많이 사용하는 모터입니다. 마이크로 서보모터라고 하는 작은 모터부터 다양하게 있습니다. 그러나 그 구동 방법은 비슷합니다.
- 아두이노 기초
- [아두이노 연재] 아두이노 시작하기
- 아두이노 기초
- [아두이노 연재] 초음파 센서 사용해보기
- 아두이노 기초
- [아두이노 연재] 서보 모터 사용하기
- 아두이노 기초
- [아두이노 연재] DC 모터 사용하기
- 아두이노 기초
- [아두이노 연재] 아두이노에서 일정 시간 간격을 만들어 사용하기
- 아두이노 기초
- [아두이노 연재] Firmata 사용하기
- 아두이노 기초
- [아두이노 연재] 블루투스 사용하기
구글 검색 결과인데요. 낮은 가격에서 다양하게 있습니다. 위 그림에서 보이듯이 서보모터의 생김새는 비슷비슷합니다.
오늘 우리가 다룰 서보모터입니다. 일반적인 모터로 가격은 몇 천원 수준입니다. 서보모터는 일반적으로는 약 180도 정도의 회전 각도를 가졌습니다. 당연히 그것만 있는 것은 아니지요. 또 다른 종류로는 무한턴이라고 해서, 속도 명령을 이수할 수 있는 모터들도 있습니다.
제일먼저 고민하는 것은 당연히 저 커넥터를 어떻게 연결할 건가.. 죠^^. 서보모터 하나 정도를 단지 구동하는 것은 아두이노의 전원 공급핀에서 사용해도 됩니다. 그 외에 다수의 서보모터나 좀 힘이 필요한 경우는 아무래도 외부 전원을 사용해 줘야죠. 아무튼 저렇게 색상을 가진 경우라면, 제일 위의 주황색은 신호선입니다. 이 번 글에서는 7번 핀에 연결합니다. 가운데 빨간선은 아두이노의 5V에, 제일 밑에 갈색선은 그라운드(GND, -)로 아두이노의 GND에 연결합니다.
이렇게 연결했습니다. 흠... 아까 이야기한 신호선은 7번핀에 연결했습니다.^^ 서보모터는 신호선에 PWM 파형을 인가해서 각도를 조절합니다.
출처 : https://www.servocity.com/how-does-a-servo-work
우리가 7번에 연결한 신호선에 50Hz의 PWM의 상승 구간이 1ms면 0도, 2ms면 180도가 위치 지령이 됩니다. 일일이 파형을 만들어 주어야겠지만, 아두이노에서는 Servo라는 라이브러리가 있습니다.
#include <Servo.h> Servo servo; void setup() { // put your setup code here, to run once: servo.attach(7); } void loop() { // put your main code here, to run repeatedly: servo.write(15); delay(1000); servo.write(170); delay(1000); }
이 코드는 servo를 include한 후에 7번핀이 서보모터에 연결되었음을 setup에서 설정해주고, write 명령을 통해 각도를 주면 됩니다. 이 과정에서 원래는 0도부터 180도가지 구동될 수 있다는 서보모터지만, 실제로는 제품별로 조금씩 못가는 곳이 있어서 테스트를 하게 됩니다. 지금 글에서 다루는 모터는 15도정도의 여유를 주어야 하네요. 위 코드를 실행하면 서보모터가 15도 위치에서 가서 1초간 대기, 다시 170도 위치에서 1초간 대기를 합니다.^^
#include <Servo.h> Servo servo; int t = 0; void setup() { // put your setup code here, to run once: Serial.begin(9600); servo.attach(7); } void loop() { // put your main code here, to run repeatedly: t += 1; float angle = 180*sin(t*PI/180); int angle_remap = map(angle, -180, 180, 15, 165); servo.write(angle_remap); Serial.println(angle_remap); delay(50); }
이번에는 살짝 응용했습니다. 부드럽게 180도를 회전하도록 하고싶은거죠. 반복해서^^. 그 방법 중 하나로 삼각함수(sin)를 동원했습니다. 위 코드처럼 짜면, -180도와 +180도의 결과가 나오니 map 함수를 이용해서 간단하게 -180, 180 구간의 값을 15도부터 165도까지로 변경하는 역할을 하는 것이 map 함수입니다.
이렇게 구동이 되는거죠. 저렴한 모터이기 때문에 약간의 소음과 비정상적 떨림이 있긴합니다.^^
'Hardware > Arduino and Friends' 카테고리의 다른 글
Arduino R4 WIFI 모델을 소개합니다. (4) | 2023.08.10 |
---|---|
Arduino Nano Sense 33 BLE 가속도, 자이로, 지자기 센서 사용해보기 (6) | 2020.12.30 |
아두이노 나노 Arduino Nano 33 BLE 세팅 (8) | 2020.10.24 |
[아두이노 연재] 초음파 센서 사용해보기 (14) | 2019.07.10 |
[아두이노 연재] 아두이노 GPIO 사용하기 - LED와 버튼 (22) | 2019.06.25 |
circuito.io 아두이노 주변 회로를 손쉽게 확인하기 (10) | 2019.06.21 |
[아두이노 연재] 아두이노 시작하기 (10) | 2019.06.17 |