아마 매우 긴 서론일 터...
원래는 블루투스 모듈을 사용해서 앱을 직접 만들어 원하는 곳으로 라인트레이서를 이동시키려고 Bluno-A Bluetooth 4.0을 사용하려고 했었다.. 그러나 이 Bluno를 사용하려면 Bluno로 구동되는 앱이 있어야 하는데 그게 IOS에서는 작동이 안됐고.. 오래된건지? 무슨 이유인지는 모르겠는데 앱 개발자가 앱 업데이트를 하지 않아 그런건지? 아예 실행이 안됐어서 android로 구동시키려고 다른 조원의 폰을 빌려서 해봤지만.. apk 파일이 아예 열리지 않아서 그냥 다른 모듈을 사기로 수정했다. 유튜브에 서치도 해보고 구글링도 해보니 HM-nn 이 모듈을 사용한 강의가 많아서 이 모듈을 사기로 결정했다. (왜 이렇게 정보가 많은 모듈을 찾냐.. 하면 아두이노를 직접 배운 적도 없고 시간 내에 작품을 완성해야 하는 한계가 있었기 때문에 그렇다.. 그래서 이 글도 정확하지 않은 정보가 있을 수 있다.)
아무튼 긴 서론을 마치고 본론으로 들어가겠다. 그리고 블루투스를 제어하는 것이 우리가 만드려는 작품의 핵심이 되기 때문에 아마 정보가 엄청 많을 것이다.. 그래서 1, 2편으로 나눠서 이 글에서는 HM-10 모듈의 동작, 그리고 우리 조가 구현하려는 기능에 대한 간단한 프로그램만 다룰 것이고 2편에서는 여러 모듈과 실제 코드를 적용해서 어떤 결과가 나왔는지 정리할 것이다!
블루투스 모듈 HM-10 구매처
https://www.navimro.com/g/445089/
https://www.navimro.com/g/445089/
www.navimro.com
가격은 한 10,000원 정도 했던 것 같고 다른 구매처에서도 쉽게 찾아볼 수 있을 것이다.
이번엔 순서를 좀 바꿔서..
1. 구현할 기능
일단 먼저 우리 조가 구현하려고 했던 기능에 대해 설명해보겠다. 간단하게 설명하자면 지정해둔 구역을 색깔로 구분해두고, 블루투스와 호환되는 앱을 이용해 가려고 하는 구역의 색깔을 텍스트로 보내주면 수신된 그 정보를 받아 if문으로 구별하여 자율주행하는 카트를 블루투스 모듈로 구현하려고 했다. 일단 if문이 실행이 되면 그 if문에 lcd 표시, 소리 출력, 멈춤 기능 등을 추가할 수 있기 때문에 그렇다.
(1) HM-10과 호환되는 IOS나 Android 어플 존재?
-> 어플을 직접 개발하면 더 좋았겠지만 시간의 한계가 있으므로 appstore나 play store에서 다운받을 수 있는 3dempplayer라는 어플을 설치했다. (UI는 확실히 덜 다듬어진 느낌이 있긴 하지만 제일 직관적이어서 사용하기 좋은 것 같다.)
(2) text, 즉 C언어에서 String이라고 하는 문자열을 송수신할 수 있는가?
-> 3dempplayer를 실행하면 나오는 이 TEXT 칸을 누르면 문자열을 송신할 수 있다. 또한 arduino IDE 프로그램에서 송수신되는 값을 한 문자열 변수로 지정해주면 그 값을 이용해 if문에서 사용할 수 있어서 가능했다.
2. HM-10
이 모듈은 일단은 이렇게 생겼다.. 굉장히 복잡하지만 밑에 있는 핀(VCC, GND, TX, RX)에 연결만 해주고 프로그램으로 제어하면 된다. STATE, BRK는 사용하지 않았다.
암튼 모듈에 있는 저 핀들을 아두이노 우노에 연결해서 구동시켜주면 된다.
VCC: 다 알거다.. 5V 핀에 연결해주면 된다.
GND: 얘도 arduino UNO의 GND 핀에 연결해준다.
TX: Serial 통신을 위해 사용되는 핀이며 일반적으로 송신기 역할, 다른 장치의 RX핀에 연결되어 있어야 한다.(난 이게 매우 헷갈렸다..)
RX: 얘도 무선통신에 수신기 역할을 하는데 다른 장치의 TX 핀에 연결되어 있어야 한다.
-> 즉, 블루투스 모듈의 TX, RX 핀은 arduino UNO 보드의 각각 RX, TX 핀에 연결이 되어 있어야 한다.
그래서 Hardware Serial과 Software Serial 통신의 차이점이 뭐냐?
3. Communication Form: Hardware serial VS Software serial
1) Hardware Serial communication
-> 고속, CPU resource 적게 사용, 기본적으로 USB 연결, serial monitor에 사용됨. arduino UNO에서는 지정된 핀을 사용해야 함.
2) Software Serial communication
-> 사용자가 선택한 임의의 digital pin을 TX, RX로 설정 가능, 속도가 느리고 CPU resource를 더 많이 사용, serial port가 부족한 경우 유용, 여러 모듈 장치를 동시에 연결해야 할 때 유용함. 정확성, 신뢰성이 hardware serial 통신보다 낮을 수 있음
이렇게 간단하게 정리해 볼 수 있을 듯 하다.
4. Hardware Serial Communication?
위의 정리로 보면 간단한 프로그램만 제어하기 때문에, 그리고 사용자의 반응에 즉각적으로 반응해야 하기 때문에(=고속) Hardware Serial을 사용하는 게 알맞다고 생각할 수 있겠지만 Hardware Serial을 사용하려고 프로그램 코드를 아래와 같이 정리했을 때 자꾸 10번 줄에서 에러가 떴다. 아마 Serial1을 인식하지 못하는 듯.. 하다. 그래서 결국 여러 시도 끝에 Software Serial을 사용하기로 결정했다. (나도 경험해보고 싶다.. Hardware Serial communication의 속도..)
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
|
void setup(){
// Set boardrate Serial monitor
Serial.begin(9600);
// Set boardrate Bluetooth module
Serial1.begin(9600);
}
void loop(){
// Serial monitor에서 들어오는 데이터가 존재할 때
if(Serial.available()){
// read data
String data = Serial.readString();
// send HM-10
Serial1.write(data);
}
// HM-10 module에서 들어오는 데이터가 존재할 때
if(Serial1.available()){
// read data
String data = Serial1.readString();
// output to Serial monitor
Serial.write(data);
}
}
|
cs |
아무튼 Hardware Serial 통신 방식을 사용하기 위해서는
1) HM-10의 TX 핀을 arduino UNO 보드의 0번 핀에 연결한다.
2) HM-10의 RX 핀을 arduino UNO 보드의 1번 핀에 연결한다.
* 다시 한 번 강조하지만, 모듈의 송수신 핀을 다른 장치에 연결할 때에는 반대로 연결해줘야 한다. TX는 RX로, RX는 TX로!
3) 위의 코드를 입력해주고 3dempplayer에 블루투스를 연결해주면 Serial monitor에 출력될 것이다.
그래서, 본격적으로 Software Serial 통신을 통한 간단한 프로그램에 대해서 설명하겠다.
5. 준비물
1) HM-10 bluetooth module
2) breadboard
3) 점퍼선
4) USB cable
5) iOS or Android 휴대폰 -> 3dempplayer 어플이 설치되어 있어야한다.
6. 실제 연결
1) VCC -> arduino UNO 보드의 VCC 핀에 연결
2) GND -> GND 핀에 연결
3) TX -> 12번 핀에 연결
4) RX -> 13번 핀에 연결
7. Software Serial communication?
-> 우선 간단하게 블루투스가 동작하는지 확인해보기 위해서 3dempplayer 앱으로 보내준 문자를 serial monitor에 출력해주는 프로그램을 짜보았다.
* Software Serial communication을 사용하기 위해서는 SoftwareSerial library를 포함해주어야 한다.
** Bluetooth의 Boardrate도 공장 기본값인 9600으로 설정해준다.
*** 문자열을 송수신해야 하기 때문에 변수를 문자열인 String으로 선언해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#include <SoftwareSerial.h> // software로 serial communication을 제어하기 위해
SoftwareSerial BTSerial(12, 13); // TX를 12번에 연결, RX를 13번에 연결
void setup(){
// Reset serial communication
// HC-06, HM-10은 boardrate가 9600으로 초기화되어 있음
Serial.begin(9600);
BTSerial.begin(9600);
}
void loop(){
// bluetooth module의 입력값이 있을 때 serial monitor에 출력
if (BTSerial.available()){
String value = BTSerial.readString();
Serial.println(value);
}
}
|
cs |
8. 3dempplayer 연결법, 결과
1) arduino IDE로 작성한 코드를 업로딩하고 폰에 설치되어있는 3dempplayer를 실행시킨다.
2) 어플을 실행시키면 이 창이 뜰텐데, 연두색으로 표시한 블루투스 버튼을 누른다.
3) HMsoft를 눌러 블루투스를 연결해준다. 이때 깜빡거리던 HM-10의 LED가 빨간불으로 멈출 것이다.
4) 다시 메뉴화면으로 돌아와 노란색으로 표시한 TEXT 박스를 누른다.
이 박스를 누르면 블루투스가 연결이 되지 않았을 때에는 왼쪽 상단에 빨간빛이 들어오는데 연결이 됐을 땐 초록빛이 들어오는 것을 확인할 수 있다.
5) Arduino UNO 보드에서 TX, RX가 깜빡거리는 것을 확인하고 3dempplayer에 표시된 RCVD: 를 확인한다.
6) 내가 보내줄 문자열을 직접 입력하고 그 문자열이 serial monitor에 출력되었는지 확인한다.
내가 입력해준 문자열이 serial monitor에 정확하게 출력되는 것을 확인할 수 있다.
다음 2편에서는 내가 전에 다뤘던 모든 모듈의 기능을 합하여 정보가 송수신될 때마다 모듈이 작동되는 프로그램의 코드와 기능을 설명해보겠다! 그럼 안녕
'캡스톤디자인(3-1) > 아두이노' 카테고리의 다른 글
[아두이노] 피에조 부저 모듈, fiezo buzzer (0) | 2024.07.08 |
---|---|
[아두이노] LCD I2C 모듈(LiquidCrystal Displays) (0) | 2024.07.08 |
[아두이노] RGB 모듈 (0) | 2024.07.06 |
[아두이노] 초음파 센서, HC-SR04 (0) | 2024.07.04 |