ABOUT ME

어린아이부터 전문쉐프까지. 모두를 위한 주방처럼, 코딩 배우는 모든 이들을 위한 부엌입니다.

Today
Yesterday
Total
  • 아두이노 레시피 : 서보모터 사용하기 - 기초편
    아두이노 레시피 2025. 2. 22. 10:24

    # Recipe 4. 서보모터(SG90) 기초 편

    서보모터와 3D프린터로 만든 로봇팔 by LittleBots Instructables

    안녕하세요~ 아두이노 셰프입니다. 다양한 아두이노 프로젝트들이 있지만, 학생들에게 인기 있는 프로젝트는 ‘로봇팔’인 것 같아요. 아마도 '결과가 눈에 잘 보이고, 비교적 쉽게 구현이 가능해서'라고 생각이 듭니다.(그냥 보기에도 멋지지 않나요?ㅋ) 저도 생각해 보니 첫 아두이노 프로젝트는 서보모터로 만든 간단한 로봇팔이었네요.ㅎㅎ 실제 산업용 로봇팔 관절에는 주로 스텝모터, BLDC 모터를 사용하지만, 프로젝트로는 서보모터도 손색이 없죠. 언젠가 첫 로봇 팔을 만드는 날을 기대하며 첫 단추인 ‘서보모터’를 직접 사용해 볼까요?

    오늘의 재료 Ingredient


     

    <메인 재료>

    서보모터 (모델명 : SG90)

    <그 외 재료>

    아두이노 우노

    수-수 점퍼케이블(3개)


    메이킹 방법 Steps

    Step 1. 선 연결하기 Wiring

    a. 서보모터의 GND(갈색선)는 아두이노의 GND로

    b. 서보모터의 VCC(빨간색)는 아두이노의 5V로

    c. 서보모터의 CONTROL핀(노란색)은 아두이노의 7번 핀으로 연결해 주세요.

    - - - - - - - - - -

    Step 2. 아두이노 코드 Code review

    여러분의 요리가 훨씬 간편해질 수 있도록, 숙성이 필요한 코드는 언제나 제가 준비할게요ㅎㅎ

    #include <Servo.h> //서보모터를 사용하게 해주는 코드모음(라이브러리)을 가져왔어요
    
    #define servoPin 7 //앞으로 D7번을 servoPin이라고 부를게요.
    
    Servo servo; //가져온 라이브러리를 사용하기위해 servo라는 이름의 Servo클래스를 생성하는건데, 몰라도 좋아요.
    //지금은 그냥 원래 Servo라고 써야 하는데 편하게 servo로 이름 바꾸는 거라고 생각할게요.
    
    void setup() {
        servo.attach(servoPin); //서보의 컨트롤핀을 servoPin으로 설정합니다.
    }
    
    void loop() {
        servo.write(90); //서보모터를 90도 움직일게요.
    }

     

    Step 3. 동작시키기 Working

    ● 코드를 아두이노 우노에 업로드해 주세요.(업로드 완료 후에도 USB선은 뽑지 않고 유지합니다.)

    ● 업로드된 순간, 여러분이 설정한 각도로 모터가 움직일 거예요.

    ● servo.write(각도)에서 여러분이 원하는 각도를 넣어보고, 다시 업로드해 보세요.

    (뭔가 좀 아쉽나요? 그래도 사실 이게 서보모터 조작의 거의 전부라고 해도 무방해요. 다음번에 서보모터를 다양하게 활용하는 레시피를 들고 올게요ㅎㅎ 여러분, 서보모터 자체는 이렇게 쉬운 거랍니다!!)


    오늘의 레시피는 여기까지입니다~ 더 깊은 맛을 원하시는 분은 아래 과학시즈닝을 참고해 주세요!


    과학으로 양념하기” Seasoning

    센서에 대한 과학적 원리와 세부내용으로 레시피에 더 깊은 맛을 넣어봅시다.

    - - - - - - - - - -

    서보모터에 대하여

    과학원리

    냉장고가 어떻게 일정온도를 유지하는지 아시나요?

    냉장고의 냉각장치는 분명 영하이하로 떨어질 거고,

    계속 작동시키면 온도도 같이 낮아질 텐데

    어떻게 시원한 온도를 유지하는 걸까요?

    여기에는 ‘피드백’이라는 개념이 들어가요.

    말 그대로, 주고(feed) 받는(back) 거지요.

    냉장고가 냉각장치를 작동시키면,

    냉장고 안의 있는 온도계가 냉각장치에게 현재 온도를 알려줘요.

    그래서 설정한 온도 이하로

    내려가지 않도록 냉각장치를 조절하는 겁니다.

    냉각장치가 센서 덕분에

    언제 멈추면 좋을지 아는 거예요.

    이거 약간, 부모님이 주차하실 때랑 비슷하지 않나요?

    아빠가 주차하실 때, 엄마가 내려서

    “오라이 오라이” 하면서 아빠한테 알려주지요?ㅋㅋㅋ

    이게 바로 피드백이에요.

    동작원리

    서버모터도 이처럼 피드백 회로가 들어가요.

    <서보모터의 피드백 회로>

    서보모터를 보면 중간에 가변저항이 있는데요.

    모터축에 가변저항이 연결되어 있어요. 그래서

    모터가 돌아가면 가변저항이 돌면서 저항값이 바뀌는데,

    이걸로 현재 각도가 몇인지 알 수 있는 거예요.

    <서보모터 구조> 'Pot'이 가변저항이에요

    만약 아두이노가 “90도로 회전해”라는 명령을 내리면,

    모터회로는 일단 모터를 계속 회전시킬 거예요.

    회전하는 동안 가변저항은 모터회로에게

    “너 지금 각도는 몇이야”라고 알려주지요.

    그러다가 가변저항이 알려주는 값이 90도가 되면,

    아두이노한테 받은 명령대로 멈추게 됩니다.

    이게 서보모터 동작하는 원리예요. (조금 어렵나요?ㅎㅎ)

    앞으로 이 간단한 서보모터가 어떻게 어려워지는 보시게 될 거예요ㅋㅋㅋ

    서보모터 움직이는 건 쉬워요.

    다만, '어떻게' 조종하고 움직일 거냐에 따라서 코드의 난이도가 결정된답니다~

    - - - - - - - - - -

    코드의 동작 알고리즘

    알고리즘은 쉬운 말로 ‘진행절차’라고 할 수 있습니다.

    코드가 어떻게 동작되는지 알아볼까요?

    우리는 서보모터에게 각도만 알려주면 돼요.

    그래서 서보의 wrtie란 함수에

    각도만 적어주면 나머지는 서보모터 알아서 한답니다.

    "컨트롤핀을 지정한다."→"각도를 알려준다."

    이 정도가 되겠네요.

    #include <Servo.h>는 서보를 움직이기 위해 필요한 코드들의 모음인, 라이브러리를 가져오는 명령이에요.

    라이브러리는 기초를 벗어나기 위해서 꼭 필요한 개념이니까, 다음에 자세하게 다룰게요!

    - - - - - - - - - -

     

    엑추에이터 요약 카드

    이름 : 서버모터

    설명 : 회전만 하는 일반모터와 달리, 원하는 각도로 모터축을 움직이고 고정시킬 수 있는 모터이다. 지정해 준 각도로 모터가 움직인다.

    센서의 구성 : VCC(5V), GND, 컨트롤핀으로 구성된다.

Designed by Tistory.