아두이노 dc모터 회전 - adu-ino dcmoteo hoejeon

홈UNO[솔다/기초다지기] 아두이노로 DC모터 양방향 제어하기

8/29/2019

아두이노 dc모터 회전 - adu-ino dcmoteo hoejeon


안녕하세요

디바이스마트의 슈퍼빌런 솔다입니다

오늘은 디바이스마트에서 제일로 잘나가는

DC모터와 DC모터 드라이버를 사용하여

정방향 역방향 회전을 조절할 수 있는 실습을 해보도록 하겠습니다

아두이노 dc모터 회전 - adu-ino dcmoteo hoejeon

-

준비물

아두이노 dc모터 회전 - adu-ino dcmoteo hoejeon

사진에는 없지만 파워서플라이나 배터리 등 모터용 전원과

모터드라이버 모듈에 달린 터미널 사용을 위한 작은 일자드라이버

이렇게 필요하답니다

아두이노 dc모터 회전 - adu-ino dcmoteo hoejeon

모터한쪽면을 보시면 이렇게 작은 동판조각이 두개 있는데요

여기를 통해 모터와 모터드라이버가 연결됩니다

아두이노 dc모터 회전 - adu-ino dcmoteo hoejeon

납땜은 번거로우니 악어클립 점퍼와이어로 저 부분을 찝어줍니다

아두이노 dc모터 회전 - adu-ino dcmoteo hoejeon

끝부분은 모터드라이버에 저 부분(OUT2)에 연결해줍니다

극성이 없기때문에 아무데나 꽂으셔도 됩니다

모터의 어느쪽이 꽂히느냐에 따라 회전 방향이 바뀔수는 있지만

회전 방향은 프로그램으로도 수정 가능합니다

아두이노 dc모터 회전 - adu-ino dcmoteo hoejeon

전체적인 연결 모습

아직까지는 복잡하지 않고 쉽죠?

벌써 어려우시다면 지금 포기하시는걸 추천드립니다

밑으로 가면 좀 복잡해져요(꿀팁)

아두이노 dc모터 회전 - adu-ino dcmoteo hoejeon

모터드라이버의 전원을 브레드보드 전원 라인에 꽂아줍니다

아두이노 dc모터 회전 - adu-ino dcmoteo hoejeon

아두이노의 디지털핀을 보시면

(~)이런 물결표시가 된 핀이 있는데

이 핀이 PWM 출력이 가능한 핀입니다

이번에는 5번 6번핀을 쓰기로 했습니다

아두이노 5번핀을 드라이버 IN1에

아두이노 6번핀을 드라이버 IN2에 연결해주세요

아두이노 dc모터 회전 - adu-ino dcmoteo hoejeon

GND 레벨을 맞춰주기 위해 브레드보드 전원라인에

아두이노의 GND를 접지시켜줍니다

모듈이랑 아두이노가 별도의 전원을 사용할 때

종종 통신이 안되거나 값이 읽어지지 않을 수 있는데

GND를 서로 연결해주면 해결되는 경우가 많습니다

혹시나 안될수도 있으니 미리 연결해줍니다

아두이노 dc모터 회전 - adu-ino dcmoteo hoejeon

가변저항을 브레드보드에 꽂고 양 끝 핀에 전원을 연결합니다

한쪽에는 5V 다른 한쪽에는 GND를 연결해주시면 됩니다

가변저항 핀이 두꺼워서 브레드보드에 잘 안꽂히길래

잘 꽂히도록 핀헤더를 추가하고

가변저항 조절 여부 확인 편하시도록 노브도 끼웠습니다

아두이노 dc모터 회전 - adu-ino dcmoteo hoejeon

가변저항의 가운데 핀을 A0에 연결해줍니다

아두이노 dc모터 회전 - adu-ino dcmoteo hoejeon

파워서플라이로 9V를 공급해줍시다

파워서플라이에 연결된 악어클립에 점퍼와이어를 물려줬습니다

파워서플라이 위에 조그만 발 보이시나요?

아두이노 dc모터 회전 - adu-ino dcmoteo hoejeon

그렇습니다 제 포켓몬 이브이입니다(TMI)

아두이노 dc모터 회전 - adu-ino dcmoteo hoejeon

파워서플라이에서 나온 9V를 브레드보드의 전원라인에 연결해주시면

배선은 완료되었습니다

아두이노 dc모터 회전 - adu-ino dcmoteo hoejeon

테스트할때 모터가 도망가지 않도록 바이스로 고정했습니다

-

배선은 다 끝났으니 코딩할 순서입니다

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

#define MOTOR_A1 5

#define MOTOR_A2 6

void setup() 

  Serial.begin(9600);

  pinMode(A0,INPUT);

  pinMode(MOTOR_A1,OUTPUT);

  pinMode(MOTOR_A2,OUTPUT);

void loop() 

{

  unsignedint vr = map(analogRead(A0) , 0, 1023, 0, 511);

  if(vr <256)

  {

    analogWrite(MOTOR_A1, 255-vr);

    analogWrite(MOTOR_A2, 0);

    Serial.print("front - ");

    Serial.println(255-vr);

  }

  else

  {

    analogWrite(MOTOR_A1, 0);

    analogWrite(MOTOR_A2, vr-256);

    Serial.print("back - ");

    Serial.println(vr-256);

  }

  delay(10);

}

Colored by Color Scripter

번거로우니 그냥 복사합시다ㅎㅎ

짧고 간결하죠?

해당 프로그램의 동작이 어떻게 되느냐 하면,

가변저항이 정 가운데 있을때는 모터가 멈춰있습니다

가변저항을 한쪽으로 돌리면 모터도 같은 방향으로 회전합니다

가변저항을 더 많이 돌릴수록 모터가 더 빠르게 회전합니다

가변저항을 반대쪽으로 돌리면 모터도 그쪽 방향으로 회전합니다

역시 가변저항을 더 많이 돌릴수록 모터가 더 빠르게 회전합니다

시리얼모니터에 현재 회전 방향과 속도를 띄우도록 작성했는데

시리얼 모니터에 나오는 값은 RPM값은 아니고 PWM 출력값입니다

-

백문이 불여일견

글로 설명하는것도 재미가 없으니 작동 영상 보시겠습니다

가변저항을 왼쪽으로 돌리니까 왼쪽으로 돌고

오른쪽으로 돌리니까 오른쪽으로 돕니다

아니라구요?

아닌게 아닙니다 동영상의 분당 프레임때문에

FHD 화질 기준 1분에 60회 보다 빠르게 회전하게 되면

반대방향으로 도는것처럼 보입니다

이미 알고 계셨다구요?

알겠습니다 ㅇ_<👉

아두이노 dc모터 회전 - adu-ino dcmoteo hoejeon

-

오늘은 아두이노로 DC모터 방향을 제어하는 시간을 가져봤는데요

DC모터는 기초중에 기초기 때문에 한번 다뤄봤습니다

설명이 더 자세하면 좋겠지만

너무 많은 정보는 지루해질 수 있으니

이만 포스팅 마치도록 하겠습니다

아두이노 dc모터 회전 - adu-ino dcmoteo hoejeon