본문 바로가기

메이킹/아두이노

서보 모터 제어하기(가변저항 이용)

반응형

오늘은 서보모터를 제어하는 방법에 대해 알아보겠습니다.

서보모터는 회전이 정해져 있어서 정확한 움직임이 필요한 경우에 사용하는 모터입니다. 서보라는 말 그대로 사용자의 명령에 따라 움직이는 모터로 사용자가 원하는 각도, 속도로 움직일 수 있다. 서보모터는 로봇, 드론, CCTV, 장난감 등 다양한 분야에서 광범위하게 쓰이고 있습니다.

 

여기서 사용하는 서보모터는 SG90이며 저렴하여 학습용으로 많이 사용되며 0~180도까지만 회전이 가능합니다.

준비물

- 아두이노 우노

- 서버모터 : SG90

서보모터 SG90

회로도

서보모터 연결하기

소스코드

#include<Servo.h> //Servo 라이브러리를 추가
Servo servo;      //Servo 클래스로 servo객체 생성
int value = 0;    // 각도를 조절할 변수 value
 
void setup() {
  servo.attach(7);     //맴버함수인 attach : 핀 설정
  Serial.begin(9600);  //시리얼 모니터 사용
}
 
void loop() {
  if(Serial.available()){      //시리얼 모니터에 데이터가 입력되면
    char in_data;             // 입력된 데이터를 담을 변수 in_data
    in_data = Serial.read();  //시리얼모니터로 입력된 데이터 in_data로 저장
    if(in_data == '1') {       //입력된 데이터가 1이라면
      servo.write(90);         //90도 회전
    }
    else {                     //그외의 데이터가 입력되면
     servo.write(0);         //각도를 0으로 초기화
  }
}

 

2) 가변저항으로 서보모터 조절하기

회로도

가변저항으로 서보모터 제어하기

 

소스코드

#include <Servo.h>

int servo_pin = 7;
int ang_init = 0;

Servo servo;

void setup() {
  Serial.begin(9600);
  servo.attach(servo_pin);
  servo.write(ang_init);
}

void loop() {
  int degree_in = analogRead(A0);
  int degree_val = map(degree_in,0,1024,0,180);
  servo.write(degree_val);
  Serial.println(degree_in);
}

 

Map 함수의 요소에는 바꾸고자 하는 변수명, 해당 변수의 범위, 바꾸고 싶은 범위를 각각 입력하면 됩니다.

 

즉, 위 코드 상에서는 'degree_in'이라는 입력 변수의 원래 범위가 0~1023인데, 이를 0~180의 범위로 변환시켜 'degree_val'이라는 변수에 부여하겠다는 의미를 지닙니다.

반응형