초급 예제

누구나 쉽게 따라해볼 수 있는 쉬운 예제들입니다. 가볍게 도전~!

스크래치 x 오렌지보드-서보 모터

2016-01-18 11:35:48

개요

 

1) 서보모터란 무엇인가?

서보 (Servo)의 어원은 라틴어의 Servue로서 노예라는 의미를 가지고 있으며목표치에 대한 위치방위자세 등의 제어가 자동화되어 있는 장치 이름에 붙여지곤 합니다.

이와 같이 서보모터는 모터와 기어박스 그리고 제어회로로 구성되어있어특정 위치로 이동하거나특정한 수치(속도 등)만큼 가동시킬 때, 모터로 부터의 피드백을 통해 정확하게 제어할 수 있는 구조를 갖추고 있는 모터로 자동화 생산 시스템로봇장난감가전제품 등 광범위하게 쓰이고 있습니다.



 

2) 서보모터 사용방법

서보 모터는 일반 모터와 달리 회전 반경이 정해져 있습니다종류에 따라 다르지만 일반적으로 약 0~270도 범위의 회전각을 가집니다.

서보모터에는 3개의 단자가 있습니다검은색(또는 갈색), 붉은색황색(또는 주황색흰색)이며 붉은색 선은 +전원검은색 선은 -전원에 연결되어 서보모터에 전기를 공급하는 역할을 하며노란색 선은 서보모터의 동작을 제어하는 신호선입니다

서보모터의 회전 각도는 아래 그림과 같이 PWM (펄스폭변조방식으로 제어합니다.
 

 

 

부품 목록

 

NO

부품명

수량

상세설명

1

오렌지 보드

1

 

2

서보모터

1

SG90

3

스위치

1

 

4

브레드 보드

1

 

5

점퍼 케이블

7

 

부품명

오렌지 보드

서보모터

스위치

브레드 보드

점퍼 케이블

파트

 

 

 

하드웨어 making

 

브레드 보드

1. 오렌지보드의 5V핀을 브레드보드의 +버스에 연결합니다.

2. 오렌지보드의 GND핀을 브레드보드의 -버스에 연결합니다.

3. 서보 모터의 검은색(또는 갈색) 단자를 -버스에 연결합니다. 

4. 서보 모터의 붉은색 단자를 +버스에 연결합니다.

5. 서보 모터의 노란색(또는 흰색, 황색) 단자를 오렌지보드의 3번핀에 연결합니다. 

6. 스위치(버튼)의 한쪽 다리에 10KΩ 저항과 오렌지보드의 5번핀을 연결합니다.

7. 스위치(버튼)의 나머지 단자를 +버스에 연결합니다. 

8. 10KΩ 저항의 나머지 단자를 -버스에 연결합니다.

 

 

 

전자 회로도

 

 

스크래치 coding

 

엔트리와는 다르게 스크래치에서 서보 모터를 사용하기 위해서는 서보 모터를 제어할 핀(PWM 핀)을 설정해줘야 합니다. 

스크래치에서 아래 그림과 같은 블럭을 통해 핀을 서보 모터 제어를 위한 핀을 설정해 줄 수 있습니다

아두이노 스케치에서 Servo객체.attach(서보 모터를 사용할 핀)과 같은 기능을 하는 블럭입니다.

.

 

 

서보 모터의 각도를 제어하기 위해서는 아래와 같은 블럭을 사용하면 됩니다. 

블럭 안에 핀 번호와 제어할 각도를 입력하면 됩니다.

 

 

스크래치 coding 1

 

디짙털 5번 센서값(버튼)이 참(버튼이 눌림)이라면 서보 모터를 0도로 이동시키고, 

거짓(버튼이 눌리지 않음)이라면 서보 모터를 180도 이동시키게 됩니다.

#include <Servo.h>

//서보 모터를 사용하기 위한 Servo 객체를 생성합니다.
Servo myServo; 
//버튼을 5번핀에 연결합니다. 
int button = 5; 

void setup() {
        pinMode(button,INPUT);
        myServo.attach(3);
}

void loop() {
        //만약 버튼이 눌러졌다면
        if (digitalRead(button)) { 
            myServo.write(0); //0도로 이동합니다.
        }
        //만약 버튼이 눌러지지 않았다면
        else { 
                //180도로 이동합니다.
            myServo.write(180); 
          }
}

 

<서보 모터 제어하기 소스>

 

 

스크래치 coding 2

 

버튼을 사용해 조금 더 재밌게 서보 모터를 제어해 봅시다.

서보 모터의 각도에 해당하는 변수, angle을 만들어 줍니다. 

디지털 5번 센서값(버튼)이 참(버튼이 눌림)이라면 angle 값에 10울 더해줍니다. 

만약 angle의 값이 180보다 커지면 angle의 값은 0으로 초기화 됩니다.

즉 버튼을 누르면, angle에 10을 더해주고, angle의 값이 180가 넘으면 0으로 초기화됩니다.

따라서 버튼을 누르면 서보 모터가 180도를 향해 움직이고, 180도가 넘으면 다시 0도로 움직이게 됩니다.

#include <Servo.h>

// 버튼을 5번핀에 연결합니다.
int button=5;
// 서보 모터 제어를 위한 Servo 객체를 생성합니다.
Servo myservo;

//서보 모터의 각도에 해당하는 변수를 선언해주고, 값을 초기화 시켜줍니다.
int angle = 0; 
int limit = 180; 

void setup() {
        pinMode(button,INPUT);
        //myservo 객체 초기화
        myservo.attach(3); 
}

void loop() {
        //만약 버튼이 눌러졌다면
        if (digitalRead(button)) { 
                //각도를 10씩 증가해줍니다. 각도가 180이상이 되었다면 0으로 초기화합니다.
                angle = (angle + 10) % limit; 
                //angle 각도만큼 이동합니다.
                myservo.write(angle); 
                delay(100);
        }
}

 


<스위치로 서보 모터 제어하기 소스>

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

스크래치, 서보모터, 아두이노, 오렌지보드