DC모터란?
DC모터는 직류(DC: Direct Current)를 전원으로 동작하는 전기모터로 직류모터라고도 합니다.
외부의 고정된 부분 (고정자)에 영구자석을 배치하고 내부의 회전체에 코일을 사용하여 구성합니다.
회전체 (회전자/전기자)에 흐르는 전류의 방향을 전환함으로써 발생하는 자기장과 자석 자기장의 상호 반발력을 이용하여 회전력을 얻습니다.
DC모터는 다른 구동장치에 비해 가볍고 구조가 간단하여 선풍기, 냉장고 등 가전제품부터 전기자동차, 고속 열차 등 운송수단까지 광범위하게 사용되고 있습니다.
DC모터 사용방법
DC모터는 2개의 연결할 수 있는 케이블이 있으며 각 선은 +극와 -극에 연결합니다.
DC모터는 양방향으로 동작하기 때문에 어떤 선을 어느 극성에 연결할지 크게 신경을 쓰지 않아도 됩니다. 연결된 전류의 방향에 따라 DC모터의 회전 방향이 변경됩니다.
모터의 회전속도는 코일에 흐르는 전류와 비례하며, DC모터의 구동전압을 크게 줄수록 회전속도 또한 빨라집니다.
DC모터 빠르게 돌다 갑자기 멈출 시에는 역전류가 발생할 수 있습니다. 역전류란 반대 방향으로 흐르는 전류를 말하며, 큰 전위차를 만들기 때문에 오렌지보드를 포함한 전자부품에 손상을 줄 수 있습니다. 따라서 전류를 한쪽 방향으로 흐르게 하는 다이오드를 연결하여 DC모터의 역전류를 방지합니다.
부품 목록
NO |
부품명 |
수량 |
상세설명 |
1 |
오렌지 보드 |
1 |
|
2 |
DC모터 |
1 |
|
3 |
스위치 |
1 |
|
4 |
330Ω 저항 |
1 |
|
5 |
다이오드 |
1 |
|
6 |
트랜지스터 |
1 |
|
7 |
브레드 보드 |
1 |
|
8 |
점퍼 케이블 |
9 |
|
부품명 |
오렌지 보드 |
DC모터 |
스위치 |
330Ω 저항 |
파트 |
|
|
|
|
|
다이오드 |
트랜지스터 |
브레드 보드 |
점퍼 케이블 |
파트 |
|
|
|
|
하드웨어 making
1. 오렌지보드의
5V핀을 브레드보드의
+버스에 연결합니다.
2. 오렌지보드의 GND핀을 브레드보드의 - 버스에 연결합니다.
3. DC모터의 커넥터를 세로 방향으로 연결합니다
4. 트랜지스터의 평평한 면이 오렌지보드를 향하게하여 세로로 꽂습니다.
5. 트랜지스터의 가운데 단자 (Base)에 330Ω 저항을 연결합니다.
6. 다이오드를 DC모터 상단 커넥터에 연결합니다. 다이오드 띠가 아래를 향하게 합니다.
7. 스위치를 그림과 같이 양쪽 IC영역에 걸치게 꽂습니다.
8. 트랜지스터의 첫번째 단자 (Emitter)를 - 버스에 연결합니다.
9. 저항이 연결된 트랜지스터의 2번째 단자 (Base)를 오렌지보드 3번핀에 연결합니다.
10. 트랜지스터의 세번째 단자 (Collector)를 DC모터의 상단 커넥터에 연결합니다.
11. DC모터의 하단 커넥터를 +버스에 연결합니다.
12. 스위치의 왼쪽 하단 단자를 오렌지보드 6번핀에 연결합니다.
13. 스위치의 오른쪽 상단 단자를 - 버스에 연결합니다.
소프트웨어 coding
-
/*
-
제목 : DC모터 돌리기
-
내용 : 스위치를 누를때마다 DC모터가 회전하도록 해봅시다.
-
*/
-
-
// DC모터를 3번 핀으로 설정하고, 스위치의 핀을 6번으로 설정합니다.
-
int motor = 3;
-
int sw = 6;
-
-
// DC모터의 회전 속도를 정의합니다.
-
// 디저털 핀으로 0~255 범위의 값으로 DB모터의 속도를 제어할 수 있습니다.
-
// 모터가 제대로 동작하지 않는다면, speed 값을 상향조정합니다. (예 200)
-
int speed = 127;
-
-
// 실행시 가장 먼저 호출되는 함수이며, 최초 1회만 실행됩니다.
-
// 변수를 선언하거나 초기화를 위한 코드를 포함합니다.
-
void setup() {
-
//스위치가 연결되는 핀은 PULL-UP회로로 사용합니다.
-
pinMode(sw, INPUT_PULLUP);
-
}
-
-
// setup() 함수가 호출된 이후, 호출되는 함수입니다.
-
// 블록 안의 코드를 무한히 반복 실행합니다.
-
void loop() {
-
// 스위치가 눌렸다면
-
if (digitalRead(sw) == LOW) {
-
// DC모터가 연결된 핀으로, 지정된 speed로 회전하도록 설정합니다.
-
// 본 예제에서 사용된 127이란 값은, 디지털 핀으로 출력 할 수 있는 최대값 255의 절반에 해당되므로,
-
// DC모터가 5V 전류로 낼 수 있는 최대 회전 속도의 절반으로 해석 할 수 있습니다.
-
// 이는 디지털로 아날로그 신호를 보내는 펄스 폭 모듈레이션(PWM)에서 duty-cycle이 50%인 것으로 설정됩니다.
-
// 오렌지보드 디지털 핀의 PWM 주파수를 약 500Hz로 가정하면, 1초에 255번만 HIGH 신호를 보내는 것과 같습니다.
-
analogWrite(motor, speed);
-
}
-
-
// 스위치가 연결된 핀의 로직레벨이 HIGH라면,
-
// 스위치가 열려있는 상태(누르지 않은 상태) 이므로, 아래의 블록을 실행합니다.
-
else {
-
// DC모터가 연결된 핀으로, duty-cycle을 0%로 설정하여 DC모터를 멈추게 합니다.
-
analogWrite(motor, 0);
-
}
-
}
analogWrite()와 PWM
아두이노는 컴퓨터의 CPU와 같은 MCU를 가지고 있으며 전기로 동작하는 디지털도구로 볼 수 있습니다.
때문에 모든 값은 디지털신호인 0과 1로 출력되는 것이 일반적이지만 이렇게 되면 모든 동작은 ON/OFF로 밖에 구분되지 못합니다.
디지털로 출력되는 신호를 자연스럽게 올라가고 내려가는(속도가 증가하고 내려가는) 동작으로 출력하기 위해서는 아날로그의 신호가 필요한데, 이때 아두이노에서는 아날로그 신호를 만들기 위해서 PWM(Pulse Width Modulation)기법을 사용하게 되며 PWM을 통해 디지털 신호를 아날로그신호와 같이 사용이 가능합니다.
<구형파의 주기 중 HIGH신호가 차지하는 비율로 아날로그 신호를 만든다>
PWM은 사진과 같이 1과 0이 되는 비율을 조절하여 아날로그 신호를 만들게 되며, 이것은 전체 시간에서 HIGH가 차지하는 비율로 아날로그 값을 출력합니다.
가령 1초의 주기를 가지는 파형에서 0.5초는 HIGH신호, 나머지 0.5초는 LOW신호를 주게되면 전체 전압의 절반을 출력하게 되며,
1초의 주기에서 0.2초는 HIGH신호, 0.8초는 LOW신호를 주면 20%의 전압을 출력하는 것과 같습니다.
analogWrite()에 들어가는 값의 크기는 최소 0부터 최대 255까지이며 그 안에서 수치 조절이 가능합니다.
PWM핀은 아두이노 내에서 ~(tilt)표시로 체크되며 디지털 3, 5, 6, 9, 10, 11번 핀이 PWM핀으로 사용 가능합니다.
※ PWM으로 analogWrite()를 사용하는 핀은 pinMode()를 통해 OUTPUT을 할 필요가 없습니다.
예를 들어 3번핀에서 analogWrite()를 사용할 경우 pinMode(3,OUTPUT)을 따로 선언하지 않아도 동작합니다.
코드 실행
위 코드에서는 모터의 속도를 127로 제한했기 때문에 DC모터는 최대 속도의 절반속도로 동작합니다.
PWM신호를 사용하기 때문에 PWM핀 중 하나인 디지털 3번 핀을 사용하며, 버튼이 눌렸을 경우 동작하며 눌리지 않을 경우 동작하지 않습니다.
만약 모터의 동작전압이 높을 경우 127로는 동작하지 않을 수 있으니 그 때는 speed에 255의 신호를 주어 사용해보세요.