ABOUT ME

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

Today
Yesterday
Total
  • 아두이노 레시피 : 모터드라이버 사용하기 - 기초편
    아두이노 레시피 2025. 2. 22. 18:41

    # Recipe 6. 모터드라이버 / L298N (기초 편)

    모터드라이버(L298N)를 이용한 아두이노 자동차

    안녕하세요~ 아두이노 셰프입니다. 여러 학년을 대상으로 아두이노를 가르쳐봤었는데, 어린 학생들일수록 움직이는 뭔가를 좋아하더라고요ㅎㅎ 이 때문인지 초등학교에서는 ‘아두이노 자동차’가 제일 인기 있었어요. 아두이노는 그 자체로 모터를 동작시킬 수 없어서 따로 드라이버 회로를 필요로 해요. 모델로는 L298N과 L293D가 제일 대표적인데요. 오늘은 L298N 모터 드라이버를 알아볼게요!

    (언젠가 멋진 블루투스 자동차를 만들어 보자고요!!)

    오늘의 재료 Ingredient


    <메인 재료>

    모터 드라이버 (모델명 : L298N)

    <그 외 재료>

    아두이노 우노

    암-수 점퍼케이블(4개)

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

    DC모터 2개 (종류는 상관없어요)

    외부전원

    (저는 12V 전원어댑터를 사용했지만, 9V건전지로도 충분히 가능해요)


    메이킹 방법 Steps

    Step 1. 선 연결하기 Wiring

    a. 드라이버의 IN1은 아두이노의 D7번 핀에,

    b. 드라이버의 IN2는 아두이노의 D6번 핀에,

    c. 드라이버의 IN3는 아두이노의 D5번 핀에,

    d. 드라이버의 IN4는 아두이노의 D4번 핀에 연결해 주세요.

    e. 외부전원의 + 는 드라이버의 12V(터미널블록)에,

    f. 외부전원의 - 는 드라이버의 GND(터미널블록)에,

    g. 아두이노의 5V는 드라이버의 5V(터미널블록)에,

    h. 아두이노의 GND는 드라이버의 GND(터미널블록)에 같이 연결해 주세요.

    주의! 모터드라이버를 구매했을 때 ENA, ENB에 점퍼캡이 써져 있을 거예요. 얘네들 제거하지 마세요ㅎㅎ

    - - - - - - - - - -

    Step 2. 아두이노 코드 Code review

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

    // 모터 A는 7번핀과 6번핀으로 제어할 거에요.
    int in1 = 7; //7번핀을 in1이라고 부를게요.(in1이라는 변수를 만들고 7이라는 값을 부여합니다.)
    int in2 = 6; //6번핀을 in2라고 부를게요.
    
    // 모터 B는 5번핀과 4번핀으로 제어할 거에요.
    int in3 = 5;//5번핀을 in3라고 부를게요.
    int in4 = 4;//4번핀을 in4라고 부를게요.
    
    void setup() { //여기있는 코드는 한번만 실행됩니다.
      //모터를 제어할 수 있게 모든 핀들을 OUTPUT모드로 설정할게요.
      pinMode(in1, OUTPUT);
      pinMode(in2, OUTPUT);
      pinMode(in3, OUTPUT);
      pinMode(in4, OUTPUT);
      
      //먼저 모든 모터를 정지하겠습니다.(초기화)
      digitalWrite(in1, LOW);
      digitalWrite(in2, LOW);
      digitalWrite(in3, LOW);
      digitalWrite(in4, LOW);
    }
    
    void loop() {//setup()을 다 실행하고 나면 여기있는 코드가 무한히 반복실행됩니다.
      // 이렇게하면 자동차가 회전할거에요.
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      digitalWrite(in3, HIGH);
      digitalWrite(in4, LOW);
      delay(4000);
      // 반대방향으로 회전해볼까요?
      digitalWrite(in1, LOW);
      digitalWrite(in2, HIGH);
      digitalWrite(in3, LOW);
      digitalWrite(in4, HIGH);
      delay(4000);
      // 이제 앞으로 가보죠.
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      digitalWrite(in3, LOW);
      digitalWrite(in4, HIGH);
      delay(4000);
      // "오라이~ 오라이~ ㅋㅋ" 이젠 뒤로 갈게요.
      digitalWrite(in1, LOW);
      digitalWrite(in2, HIGH);
      digitalWrite(in3, HIGH);
      digitalWrite(in4, LOW);
      delay(4000);
      //자 다 했으니까. 멈춰보죠.
      digitalWrite(in1, LOW);
      digitalWrite(in2, LOW);
      digitalWrite(in3, LOW);
      digitalWrite(in4, LOW);
      delay(4000);
    }

     

    Step 3. 동작시키기 Working

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

    ● 시리얼 모니터를 열어주세요.(값이 표시될 거예요.)

    ● 손으로 센서 위를 가려보기도 하고, 위에 빛을 비춰보면서 값이 어떻게 바뀌는지 확인해 보세요.


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


    과학으로 양념하기” Seasoning

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

    - - - - - - - - - -

    드라이버에 대하여

    과학원리

    축하드려요!

    이제 아두이노로 모터를 자유롭게 제어하실 수 있게 됐네요.

    근데 살짝 궁금하지 않으세요?

    “왜 아두이노만으로는 모터를 제어할 수 없을까?”

    아두이노는 기본적으로 5V의 전압으로 움직여져요.

    물론 12V까지 전원공급을 받을 수 있지만

    그 12V도 5V로 변환해서 사용한답니다.

    그리고 아두이노의 I/O핀 한 개가

    출력할 수 있는 전류량은

    작 40mA정도밖에 안 돼요..

    센서는 충분히 동작시킬 수 있지만,

    모터를 비롯한 대부분의 엑추에이터(구동장치)들은

    큰 전류와 전압을 요구해요. (조금 어려운 말로 ‘부하가 크다’라고 합니다.)

    그래서 5V, 40mA 이상을 요구하는 모터를 제어하기 위해서

    모터드라이버와 외부전원을 사용한답니다.

    동작원리

    그럼 어떻게 L298N 드라이버는

    외부전원으로 모터를 제어할 수 있는 걸까요?

    혹시 이전에 릴레이 스위치 기억하세요?

    고작 5V로 직류부터 교류전기까지

    자유롭게 제어하는 스위치잖아요.

    이 L298N 칩에는 이러한 스위치가 4개가 들어있어요.

    'H-브리지'라는 구조를 사용하는데요.

    자세히 몰라도 돼요.ㅋㅋㅋ

    밑에 그림 보면 바로 이해가 될걸요?

     

    아두이노로 각각의 스위치를 열고 닫는 거예요.

    그래서 4개의 컨트롤핀을 필요로 했던 겁니다. ㅎㅎ

    - - - - - - - - - -

    코드의 동작 알고리즘

    오늘은 알고리즘보다는 코드를 설명해 드릴게요.

    알고리즘은

    “정회 전, 반회전, 앞으로 뒤로. 이를 5초 간격으로 하라”

    밖에 없잖아요ㅋㅋ

    간단한 질문 해볼게요.

    배터리로 DC모터를 돌리려고 할 때,

    어떻게 돌리실 거예요?

    당연히 +,-극을 모터에 연결하시겠죠?

    그럼 반대로 회전시키려면요?

    연결한 +,-극의 위치를 바꾸실 거예요.

    축하합니다.

    방금 코드원리를 모두 이해하셨어요.ㅋㅋ

    모터 A는 IN1, IN2로 제어하고요.

    모터 B는 IN3, IN4로 제어합니다.

    이 IN들을 극이라고 생각하면 돼요.

    아두이노 덕분에 언제든

    + 혹은 -로 바꿀 수 있는 극이지요.

    모터 A를 회전시키고 싶으면

    IN1을 +, IN2를 -로 하면 되겠죠?

    반대로 회전하려면 서로를 바꾸면 되고요.

    모터 B도 마찬가지예요.

    이렇게 극성을 조작함으로서

    원하는 동작(앞으로, 뒤로, 정회 전, 반회전)을

    만들 수 있어요.

    모터에 (-, -) 혹은 (+,+)를 연결하면 어떻게 될까요?

    당연히 회전하지 않겠죠?

    전류가 흐르지 않으니까요.

    그렇게 IN핀들을 제어하면

    당연히 모터들도 멈추게 된답니다.

    이런 원리 덕분에 digitalWrite 하나만으로도

    충분히 드라이버를 동작시킬 수 있답니다.

    혹시나 궁금한 분들을 위해서 얘기하자면

    ENA와 ENB는 각 모터의 속도를 제어하는 핀이에요.

    전류의 세기에 따라 속도를 조절할 수 있어요.

    우리는 속도를 조절할 것은 아니어서

    점퍼캡을 이용해 5V(최대세기)에 고정해서 최대속도로 미리 지정한 거랍니다.

    나중에 이 드라이버로 프로젝트를 하게 되면 그때 다뤄보도록 하죠^^

    - - - - - - - - - -

     

    모듈요약 카드

    이름 : 모터드라이버 모듈 (L298N)

    설명 : 외부전원을 이용해 다양한 모터를 제어하게 해주는 드라이버모듈이다.

    모듈의 구성 : 모터를 제어하는 4개의 IN핀과 속도를 제어하는 ENA, ENB핀, 모터를 연결하는 OUT단자들과 외부전원 단자가 있다.

     

Designed by Tistory.