아두이노2016. 4. 16. 21:26

예전에 HC-06 블루투스 모듈을 아두이노에서 컨트롤 하는 방법과 L298N DC 모터 드라이버 모듈을 컨트롤 하는 방법을 알아본적이 있습니다. 이 두개를 적절히 조합하면 스마트폰 블루투스 콘트롤 앱을 통해서 무선으로 조종되는 자동차를 만들 수 있습니다. 물론 이외에도 외부전원이 필수적으로 필요한데 외부전원은 건전지 홀더를 이용해 AA 건전지 4개를 직렬로 연결하여 6V를 공급해 주었습니다. 그리고 2개의 바퀴가 달린 DC 기어 모터, 앞바퀴를 대체할 캐스터 바퀴 (베어링이 달려있어 방향전환이 자유로운 바퀴) 를 사용하였습니다. 몸체는 무엇으로 할까 고민하다가 하드보드지를 잘라서 이용하였습니다. 모터 등 부품의 부착은 양면 테이프 (차량에 내비게이션 등을 붙이는) 를 이용했습니다.


■ 참고 글

▶ [아두이노] 블루투스 모듈(HC-06) 사용하기 (설정, 문자열 전송, LED ON/OFF)

▶ [아두이노] DC 모터의 제어(모터드라이버 L298N) 1편



허접하지만 기능구현이 목적이므로 위와 같이 하드보드지에 부품들을 붙여서 케이블로 배선을 했습니다. 보기엔 저래도 잘 움직입니다. ^^


사용한 건전지 홀더에는 자체적으로 스위치가 달려있어 따로 스위치가 필요가 없어서 편리하더군요.


뒷 부분 입니다. 두 개의 모터가 정회전, 역회전, 정지를 하면서 전진, 후진, 좌/우 회전을 구현합니다.


앞바퀴로 쓰인 캐스터 바퀴 입니다. 360도 자유자재로 돌아갑니다.


연결

각각 부품의 연결은 다음과 같이 했습니다. 자세히 보고 싶은 분은 fritzing 파일을 다운받아서 보세요. 



■ 블루투스 자동차 fritzing 파일

Bluetooth_Car.fzz


빨간선은 전원연결 + 이며 까만선은 GND ( - ) 입니다.

블루투스 모듈의 TX 는 D2, RX는 D3 에 연결했습니다.

모터 드라이버 모듈의 IN1 은 D7 에 연결하였고 차례대로 IN2 는 D6 에, IN3 는 D5, IN4 는 D4 에 연결 했습니다.


만약 소스는 문제가 없는데 모터가 원하는 방향과 거꾸로 돌아간다면 모터 드라이버 모듈에 연결된 모터의 배선을 서로 바꿔보세요. 그럼 원하는 방향으로 돌아갈 겁니다.



소스

소스는 위에서 말한 블루투스 모듈, 모터 드라이버 모듈을 다룰 줄 안다면 별것 없습니다. 블루투스에서 수신된 값을 아두이노에서 처리해서 로직대로 모터 드라이버를 구동하면 됩니다.


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <SoftwareSerial.h> //시리얼 통신 라이브러리 호출
 
//모터 PIN 설정
#define LEFT_A1 4 //왼쪽 바퀴
#define LEFT_B1 5 //왼쪽 바퀴
#define RIGHT_A2 6 //오른쪽 바퀴
#define RIGHT_B2 7 //오른쪽 바퀴
 
//블루투스 PIN 설정
#define BLUE_TX 2 //블루투스 TX
#define BLUE_RX 3 //블루투스 RX
 
SoftwareSerial mySerial(BLUE_TX, BLUE_RX);  //시리얼 통신을 위한 객체선언
char value; //블루투스에서 받는 값
 
void setup() {
  Serial.begin(9600);   //시리얼모니터 
  mySerial.begin(9600); //블루투스 시리얼 개방
 
  pinMode(LEFT_A1, OUTPUT);
  pinMode(RIGHT_A2, OUTPUT);
  pinMode(LEFT_B1, OUTPUT);
  pinMode(RIGHT_B2, OUTPUT);  
  
  Serial.println("Arduino Bluetooth Car is ready to start");
}
 
void loop() {
  while(mySerial.available())  //mySerial에 전송된 값이 있으면
  {
     value = mySerial.read(); //전송값 읽음
     Serial.print(value);
     
     if(value == 'l'){            //좌회전(강)
       Serial.println("left");
       left();
     }else if(value == 'r'){      //우회전(강)
       Serial.println("right");
       right();
     }else if(value == 'f'){      //전진
       Serial.println("forward");
       forward();
     }else if(value == 'b'){      //후진
       Serial.println("backward");
       backward();
     }else if(value == 'w'){      //우회전(약)
       Serial.println("slow right");
       sRight();
     }else if(value == 'q'){      //좌회전(약)
       Serial.println("slow left");
       sLeft();       
     }else if(value == 's'){      //정지
       Serial.println("stop");    
       stop(); 
     }
  }
  
}
 
// 자동차 움직임 정의 Function 들
void forward(){
  digitalWrite(LEFT_A1, HIGH);
  digitalWrite(LEFT_B1, LOW);
  digitalWrite(RIGHT_A2, HIGH);
  digitalWrite(RIGHT_B2, LOW);
}
void backward(){
  digitalWrite(LEFT_A1, LOW);
  digitalWrite(LEFT_B1, HIGH);
  digitalWrite(RIGHT_A2, LOW);
  digitalWrite(RIGHT_B2, HIGH);
}
void left(){
  digitalWrite(LEFT_A1, LOW);
  digitalWrite(LEFT_B1, HIGH);
  digitalWrite(RIGHT_A2, HIGH);
  digitalWrite(RIGHT_B2, LOW);
}
void right(){
  digitalWrite(LEFT_A1, HIGH);
  digitalWrite(LEFT_B1, LOW);
  digitalWrite(RIGHT_A2, LOW);
  digitalWrite(RIGHT_B2, HIGH);
}
void sLeft(){
  digitalWrite(LEFT_A1, LOW);
  digitalWrite(LEFT_B1, LOW);
  digitalWrite(RIGHT_A2, HIGH);
  digitalWrite(RIGHT_B2, LOW);
}
void sRight(){
  digitalWrite(LEFT_A1, HIGH);
  digitalWrite(LEFT_B1, LOW);
  digitalWrite(RIGHT_A2, LOW);
  digitalWrite(RIGHT_B2, LOW);
}
void stop(){
  digitalWrite(LEFT_A1, LOW);
  digitalWrite(LEFT_B1, LOW);
  digitalWrite(RIGHT_A2, LOW);
  digitalWrite(RIGHT_B2, LOW);
}
 
cs


소스를 업로드 하고 스마트폰으로 컨트롤 하기 위한 앱을 다운로드 받아야 합니다. 블루투스를 통해 텍스트를 전송할 수만 있다면 어떤 앱이든 상관이 없습니다.


저는 'Bluetooth Controller' 라는 앱을 사용했습니다. 이 앱은 총 9개의 버튼을 지원하며 각각의 버튼의 이름 및 전송될 값을 정의할 수 있어서 편리하더군요.


▶ 블루투스 컨트롤 앱 : https://play.google.com/store/apps/details?id=apps.BT



위와 같이 각각의 버튼을 정의해 주었습니다. 사용 전 위의 '장치검색' 버튼을 눌러서 블루투스 연결을 미리 해줘야 합니다.


설정화면 입니다. 좌측은 버튼의 이름이고 우측은 블루투스를 통해 보낼 문자 입니다. 이 문자에 따라 아두이노가 모터 드라이버를 컨트롤 합니다.




움직이는 모습을 찍어 보았습니다. 잘 움직이네요. 



※ 추가사항 (2016.04.19) : 아무래도 6V 전원으로는 부족하네요. 조금 가지고 놀아서 건전지 전압이 낮아지니 자꾸 블루투스가 끊기네요. 그래서 9V 건전지를 추가로 아두이노 전원단자에 꼽아주니 정상작동 합니다.

9V 아두이노 전원공급용 커넥터




▶추가내용(2016.08.12) : 위 내용 중 잘못된 내용이 있어서 바로 잡습니다. L298N 의 5V 단자는 전원 입력이 아니라 5V 출력 단자 입니다. 고로 위의 Fritzing 회로도 중 모터 드라이버에 연결한 아두이노 5V 전원은 필요가 없습니다. 전원은 외부전원을 충분하게 공급해주고 모터 드라이버 5V 출력을 아두이노의 VIN 에 연결해서 아두이노의 전원으로 사용하는 것이 가장 바람직하다고 생각 됩니다. http://deneb21.tistory.com/277 참고

반응형
Posted by 대네브 (deneb)

댓글을 달아 주세요

  1. 차윤제

    여기에 다음에 소개해주신 초음파센서를 이용하여 만들어보고 싶은데 블루투스로 조종하다가 장애물이 20 cm로 가까워지면 우회전하게 만들수 없나요?

    2016.05.30 23:18 [ ADDR : EDIT/ DEL : REPLY ]
    • http://deneb21.tistory.com/313 이 글을 보시면 정답이 있습니다. 장애물 감지 블루투스 자동차 입니다.

      2016.05.31 00:02 신고 [ ADDR : EDIT/ DEL ]
  2. 차윤제

    읽어 봤는데 이글과 다음 글을 합쳐서 못만들겠더라구요 블루투스를 사용하여 조종중에 장애물을 만나면 우회전을 하도록 하고싶은데 혹시 도와주실수 있으신가요?

    2016.05.31 01:24 [ ADDR : EDIT/ DEL : REPLY ]
  3. 송샬

    글 잘 보았습니다..
    다른 외국사이트들을 전전하다 여기까지 들어오게 되었는데
    L298N 모터보드를 알맞게 연결했는데도 불구하고 블루투스 시그널이 모터보드로 들어가는 것은 보이는데
    이후 모터 작동이 안되네요..
    어떤 모터를 써도 안되는것을 보아선... 모터보드이상일 확률이 큰 것일까요?ㅠㅠ
    http://deneb21.tistory.com/277
    글에서 컨트롤 스케치를 업로드 해도 안돌아갑니다..ㅠㅠ
    모터는 이상없는것을 확인했구요...

    2017.02.23 01:12 [ ADDR : EDIT/ DEL : REPLY ]
    • 블루투스 연결전에
      모터 드라이버만 테스트 해 보세요.
      http://deneb21.tistory.com/277
      http://deneb21.tistory.com/281
      이거 해서 안되면 보드가 진짜 이상이 있는건지도...

      아.. 벌써 해보셨군요.
      그럼 모터드라이버를 의심할 수 밖에 없네요.
      아두이노도 괜찮지요? PWM 신호도 잘 나오구요?

      2017.02.23 01:18 신고 [ ADDR : EDIT/ DEL ]
  4. 송샬

    역시 모터보드 문제였습니다./..ㅋㅋㅋ 답변감사합니다

    근데 블루투스 모듈연결이 원래 이렇게 불안정한가요??

    한번누르면연결이 끊어지네요....ㅠㅠ 전압이 불안정해서 그런가ㅣ.....ㅠㅠㅠㅠ

    2017.03.10 22:38 [ ADDR : EDIT/ DEL : REPLY ]
    • 네 충분한 전력이 공급되지 않아서 그럴겁니다. 저도 그랬었거든요

      2017.03.10 23:12 신고 [ ADDR : EDIT/ DEL ]
  5. 대네브님의 코드를 사용했는데요 ㅠㅠ ( #define BLUE_RX 3 //블루투스 RX) 부분에 macro names must be identifiers 라는 오류가 뜹니다. 왜일까요?? ㅠㅠㅜ

    2017.06.04 13:52 [ ADDR : EDIT/ DEL : REPLY ]
  6. 아두파일럿

    Q1. 안녕하세요? 저도 블루투스 무선자동차를 제작하려고 합니다. 위의 글에서 [자세히 보고 싶은 분은 fritzing 파일을 다운받아서 보세요.] 밑에 있는 그림대로 회로도를 제작하면 되는 건가요?
    Q2. 캐스터 바퀴와 모터는 어디서 구매하셨나요?

    2017.07.16 00:07 [ ADDR : EDIT/ DEL : REPLY ]
    • q1. 그렇습니다. 기본 회로도 입니다
      q2. 네이버 쇼핑 같은데 검색하면 다 나옵니다. kit로 나오는 제품들도 있습니다

      2017.07.16 04:43 신고 [ ADDR : EDIT/ DEL ]
  7. 비밀댓글입니다

    2017.08.27 02:16 [ ADDR : EDIT/ DEL : REPLY ]
    • 구성요소를 각각 테스트 해 보세요. 블투모듈, 모터드라이버 등을 따로 테스트해서 잘 되는지 확인해 보세요.

      2017.08.28 21:58 신고 [ ADDR : EDIT/ DEL ]
  8. 비밀댓글입니다

    2017.11.01 15:51 [ ADDR : EDIT/ DEL : REPLY ]
    • Q1. 그렇다면 대네브님이 쓰신 블루투스모듈과 모터드라이버 모듈 다루는 법을 그대로 적용하면 아두이노랑 연결해서 쓸 수 있을까요?

      - 저의 글에서 작동하는거 보셨잖아요...^^;;
      단, 어떤 기능을 만드실 것인지에 따라 당연히 코딩은 달라지겠죠.


      Q2. 무선조종 자동차 바탕으로 무선조종 청소기를 만드려고 하는데 쿨러펜도 모터드라이버 모듈에 연결하여 사용할 수 있을까요?

      - DC모터면 가능 합니다.


      Q3. 쿨러까지 장착할 생각인데 외부전원 9V면 충분할까요?

      - 그건 당연히 제가 알 수 없습니다. 모터마다 전력이 다르기 때문에 청소기님이 답을 찾아야 합니다

      2017.11.01 22:23 신고 [ ADDR : EDIT/ DEL ]
  9. 질문자

    저희가 옴니휠 바퀴를 사용중인데 대네브님의 코딩을 아두이노에 복사해서 저희 핀으로 바꾸고 업로드 시키니까 신호를 주지않았는데 바퀴하나가 자기혼자 돌아갑니다. 무슨 문제인지 알수있을까여

    2017.11.08 17:37 [ ADDR : EDIT/ DEL : REPLY ]
    • 일단 핀연결, 배선 등을 다시 확인해 보시고 이상이 없으면 소스 이상이므로 시리얼모니터 등으로 값을 찍어 보면서 디버깅 하세요.

      2017.11.08 19:18 신고 [ ADDR : EDIT/ DEL ]
  10. 비밀댓글입니다

    2018.02.01 00:03 [ ADDR : EDIT/ DEL : REPLY ]
    • 원인은 여러가지가 될 수 있죠. 일단 블루투스 문자열이 제대로 찍하는지 시리얼모니터에 찍어 보시고 그 다음 모터 컨트롤러, 모터 순으로 점검을 해 보세요. 전원부족 문제일 수도 있습니다. 안되는 원인이 많아 콕 찝어서 말을 못하겠네요

      2018.02.01 06:54 신고 [ ADDR : EDIT/ DEL ]
  11. zzertkm

    저 혹시 저거 모터드라이버 없이는 디지털이나 아날로그 핀을 꽂아서 모터를 제어할 수 없는건가요?

    2018.07.16 13:28 [ ADDR : EDIT/ DEL : REPLY ]
  12. 비밀댓글입니다

    2018.09.20 21:40 [ ADDR : EDIT/ DEL : REPLY ]
    • 제 블로그에서 pwm 을 검색하시면 dc모터 속도조절에 대해서 나옵니다.

      2018.10.01 16:15 신고 [ ADDR : EDIT/ DEL ]
  13. rkatkgkqslek

    블루투스 신호는 가는데 작동이 안되는경우에는 어떻게 해야하나요 ㅠㅠ?

    2019.11.11 09:46 [ ADDR : EDIT/ DEL : REPLY ]
    • 제 블로그 "아두이노 나노를 이용한 무선조종 보트 만들기" 라는 글을 참고해 보세요. 참고로 소스에 아무 이상없는데 안되는 경우 전력부족일 가능성이 높습니다

      2019.11.11 09:56 신고 [ ADDR : EDIT/ DEL ]
  14. 뷔트

    저도 블루투스가 신호를 한번 받으면 3초정도 끊기고 다시 연결되더라구요(신호를 받고 움직이면 그다음에 바로 서로 깜빡거리다가 다시 불빛이 계속 들어오며 연결상태가 됩니다) ㅠㅠ 아두이노전원에 직접 콘센트랑 연결해서 전력을 공급해줘도 이러는데 이러면 코드상의 문제일까요?

    2020.05.06 17:24 [ ADDR : EDIT/ DEL : REPLY ]
  15. HelpMe

    저희는 전동휠체어의 구동계를 그대로 가져와서 DC 모터 드라이브 2개에 연결해서 구동하려고 하는데 그럴려면 혹시 회로도 어떻게 해야하는지 알수 있을까요?

    2020.06.18 15:57 [ ADDR : EDIT/ DEL : REPLY ]
  16. snffld

    이거를 그대로 만들었는데 모터가 하나만 작동이 되고 나머지 하나는 작동이 안됩니다 뭐가 문제일까요?

    2020.11.19 11:34 [ ADDR : EDIT/ DEL : REPLY ]
    • 전력부족일수도 있고 모터 드라이버 문제일수도 있고 다양한 원인이 있을 수 도 있습니다. 테스터기 있으면 모터로 전기가 잘 들어오는지 부터 테스트 바랍니다

      2020.11.19 11:37 신고 [ ADDR : EDIT/ DEL ]
  17. kimhyeon0117

    혹시 초음파 센서를 이용해서 이 rc카에 연결해 일정 거리 이하가 되면 정지할 수 있게 만들고 싶은데 코딩을 어떻게 해야 할까요ㅠㅠ? 나이가 어려 코딩을 잘 할 줄 몰라 혹시 추가를 어떻게 해야 할지 코드를 적어 주실 수 있나요?

    2021.06.17 01:20 [ ADDR : EDIT/ DEL : REPLY ]
  18. Lyumin

    안녕하세요
    자동차의 바퀴와 모터를 4개로 변형하는 방법은 없을까요?

    2021.10.18 02:45 [ ADDR : EDIT/ DEL : REPLY ]