본문으로 바로가기



직류 모터(DC Motor)


위 모터 : 일반적인 DC 모터

아래 모터 : RC카나 로봇등에서 많이 사용하는 모터(일반 모터에 케이스를 씌워놓은 형태)

모터는 교류모터(AC Motor)와 직류모터(DC Motor)가 있다. 교류모터는 가정용 전원에 주로 사용된다. 직류 모터는 +극과 -극으로 이루어진 모터로 외부의 고정된 부분에 영구자석을 배치하고 내부 회전체에 코일을 감아 구성한다. 회전체에 흐르는 전류의 방향을 전환함으로써 발생하는 자기장과 자석 자기장의 상호 반발력을 이용하여 회전력을 얻게 된다. 직류 모터는 또한 소음과 전력 소비가 낮고 속도제어가 세밀하게 가능하다. AC모터보다 수명이 짧고 힘이 약하기 때문에 단시간 사용에 적합하다.


모터드라이브(L298N 사용)



모터드라이브는 여러가지 종류가 있으며 우리가 실습에 사용할 모터 드라이브는 L298N을 사용할 것이다.

모터 드라이브를 사용하는 이유는 DC 모터는 핀이 2개 밖에 없으므로 S/W적으로 제어가 불가능하다. 그러므로 정역 제어(방향을 반대로 돌리는)를 하기 위해서 모터 드라이버를 사용한다. 우리가 사용할 L298N 모듈은 2개의 DC모터를 제어할 수 있으며 1개의 스텝모터까지 제어할 수 있다. 또한 PWM단자에 연결하면 아날로그 데이터를 이용하여 속도를 조절할 수 있다.

L298.pdf

데이터시트는 위 파일을 참고하면 된다.


실습 내용


l298n 모터 드라이버를 사용하여 모터를 앞뒤로 회전시켜 본다. (시리얼 모니터를 통하여 '1'을 입력하면 앞으로 '2'를 입력하면 뒤로, 이외의 값은 모터를 멈춘다.)


준비물


아두이노 보드, 브레드 보드, DC 모터 1개, L298N 모듈 1개, 암수 점퍼선 2개, 수수 점퍼선 4개, 모터가 약하게 회전할 경우에(9V 건전지도 준비)


회로도




소스 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
int in1 = 7;  //in1 7번 포트로 제어 (OUT1)
int in2 = 5;  //in2 5번 포트로 제어 (OUT2)
 
void setup() {
  pinMode(in1, OUTPUT); 
  pinMode(in2, OUTPUT); //각 포트 출력으로 사용
  Serial.begin(9600);  //시리얼모니터 사용
}
 
void loop() {
  if(Serial.available())  //시리얼모니터에서 데이터가 들어오면
  {
    char in_data;         // 입력된 데이터 저장을 위한 변수
    in_data = Serial.read();  //입력된 데이터 in_data에 저장
    if(in_data == '1')    //입력된 데이터가 '1'이라면
    {
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);   //앞으로 회전
    }
    else if(in_data == '2'//입력된 데이터가 '2'라면
    {
      digitalWrite(in1, LOW);
      digitalWrite(in2, HIGH);  //뒤로 회전 (어떤 방향으로 꽂았느냐에 따라서 방향 반대)
    }
    else  // 그 이외의 값에서는
    {
      digitalWrite(in1, LOW);
      digitalWrite(in2, LOW);  //회전 정지
    }
  }
}
cs

ex11_motor.ino


동작 영상