아두이노를 활용해 회전, 이동 등의 움직임을 나타낼 수 있을까?
서보모터에 대해 알아보도록 합시다.
01. 서보모터란 무엇인가?
서보모터는 전기로 회전을 만들어주는 장치입니다. 전기신호를 이용해 120도, 180도 360도 정해진 각도로 원하는 만큼 조절할 수 있는 모터입니다.
모터마다 회전 범위가 정해져 있기 때문에 어떤 각도까지 움직이는 제품인지 확인하고 구매해야 합니다.
로봇 팔의 관절, RC카의 앞바퀴 방향 조정 등 움직임을 만들어내는 부품으로 서보는 Servo 라이브러리를 이용하여 제어합니다.
02. 서보모터 회로 구성하기
서보모터 케이블은 오른쪽과 같이 연결합니다. 색깔별 연결단자를 정확하게 확인하고 연결하기
바랍니다.
출처: 코코아팹 교육자료
03. 서보모터에 사용되는 함수 알아보기
Servo.attach
Servo.attach란 핀을 Servo 변수에 붙이는 함수이다
Servo.attach(pin); pin에는 서보 모터가 붙은 핀 번호를 적는다.
Servo.write
Servo.write란 핀을 서보 모터에 각도 값을 써 넣는 함수이다.
Servo.write(angle); angle에는 서보 모터에 쓸 각도 값, 0~180도를 적는다.
04. 예제 적용으로 서보모터 각도 조절해보기
예제1) 서보 모터의 각도를 0도, 90도, 180도로 조절해봅시다.
01
02
03
04
05
06
07
08
09
#include <Servo.h>
Servo myservo;
void setup() {
myservo.attach(9);
myservo.write(0);
delay(3000);
myservo.write(90);
delay(3000);
myservo.write(180);
}
void loop() {
}
01: Servo 관련 함수 사용 위해 Servo.h 헤더 파일 포함
02: 서보제어를 위해 Servo 클래스인 myservo 객체를 생성
03~09: setup 함수를 정의한다.
04: servo 함수에 attach함수를 호출하여 9번 핀을 연결
05:servo 객체에 write 함수를 호출하여 서보 모터를 0도 회전 시킨다.
06:3초간 대기
07:servo 객체에 write 함수를 호출하여 서보 모터를 90도 회전 시킨다.
08:3초간 대기
09:servo 객체에 write 함수를 호출하여 서보 모터를 180도 회전 시킨다.
예제2) 서보 모터의 각도를 0도, 180도로 조절해봅시다. (서보가 0도와 180도를 2초 주기로 3회 회전합니다.)
01
02
03
04
05
06
07
08
09
10
11
12
13
#include<Servo.h>
const int servoPin=9;
Servo myservo;
void setup() {
myservo.attach(servoPin);
myservo.write(0);
delay(1000);
for(int cnt=0;cnt<=2;cnt++){
myservo.write(0);
delay(1000);
myservo.write(180);
delay(1000);
}
myservo.detach();
}
void loop() {
}
01: Servo 관련 함수 사용 위해 Servo.h 헤더 포함
02: servoPin 상수에 9번 핀을 할당합니다.
03: 서보제어를 위해 Servo 클래스인 servo 객체를 생성합니다.
04~13: setup 함수를 정의한다.
05: myservo 함수에 attach함수를 호출하여 servoPin 핀을 연결
06: myservo 객체에 write 함수를 호출하여 서보 모터를 0도 회전 시킨다.
07: 서보가 회전하는데 필요한 시간 1초 기다린다.
08: cnt 변수값을 0부터 2까지 1씩 증가시켜가면서 중괄호 안쪽의 동작 수행
09: servo 객체에 write함수를 호출하여 서보 모터의 각도를 0도로 설정
10: 서보가 회전하는데 필요한 시간 1초 기다린다.
11: servo 객체에 write함수를 호출하여 서보 모터의 각도를 180도로 설정
12: 서보가 회전하는데 필요한 시간 1초 기다린다.
13: servo 객체에 detach 함수를 호출하여 SERVO 핀의 연결을 해제
예제3) 서보 모터의 각도를 0도, 180도로 조절해봅시다. (서보가 3.2초동안 0도와 180도를 회전한 후 0도로 다시 돌아옵니다)
01
02
03
04
05
06
07
08
09
10
11
#include <Servo.h>
const int servoPin=9;
Servo myservo;
void setup(){
myservo.attach(servoPin);
myservo.write(0);
delay(1000);
for(int angle=0;angle<=180;angle++){
myservo.write(angle);
delay(30);
}
myservo.detach();
}
void loop() {
}
01: Servo 관련 함수 사용 위해 Servo.h 헤더 파일 포함
02: servoPin 상수에 9번 핀을 할당
03: 서보제어를 위해 Servo 클래스인 myservo 객체를 생성
04~11: setup 함수를 정의한다.
05: myservo 함수에 attach함수를 호출하여 servoPin 핀을 연결
06:myservo 객체에 write 함수를 호출하여 서보 모터를 0도 회전 시킨다.
07: 서보가 회전하는데 필요한 시간 1초 기다린다.
cnt 변수값을 0부터 180까지 1씩 증가시켜가면서 중괄호 안쪽의 동작 수행
myservo 객체에 write함수를 호출하여 서보 모터의 각도를 0도로 설정
서보가 회전하는데 필요한 시간 30밀리초 기다린다.
servo 객체에 detach 함수를 호출하여 servoPin의 연결을 해제
예제4) 서보 모터의 각도를 0도 기준점으로 맞춰봅시다.
01
02
03
04
05
06
07
08
09
10
#include <Servo.h>
Servo myservo;
void setup() {
myservo.attach(9);
myservo.write(180);
delay(3000);
myservo.write(90);
delay(3000);
myservo.write(0);
}
void loop() {
}
01: Servo 관련 함수 사용 위해 Servo.h 헤더 파일 포함
02: 서보제어를 위해 Servo 클래스인 myservo 객체를 생성
03~09: setup 함수를 정의한다.
04: servo 함수에 attach함수를 호출하여 9번 핀을 연결
05:servo 객체에 write 함수를 호출하여 서보 모터를 180도로 회전 시킨다.
06:3초 기다린다.
07:servo 객체에 write 함수를 호출하여 서보 모터를 90도로 회전 시킨다.
08:3초 기다린다
09:servo 객체에 write 함수를 호출하여 서보 모터를 0도로 회전 시킨다.
10~: loop 함수를 정의한다.