이번에는 본격적으로 지그비 통신을 활용하여 무선통신을 실습해보도록 하겠다. 아직 지그비 통신에 대한 정확한 개념을 잡지 못했다면 전에 포스팅한 글을 꼭 참고하기 바란다. 실습에서는 지그비 설정 툴인 X-CTU에 대한 사용법을 숙달하고 컴퓨터 상에서 간단하게 통신을 테스트해본 뒤에 아두이노 2개를 가지고 서로 데이터를 주고받아보는 순으로 진행할 것이다. 또한 지그비 검색 결과 XBee S1 모듈에 대한 예제들은 많이 있었지만 S2 모듈 설정에 대한 글은 찾기가 매우 힘들었다. 따라서 여기서는 미약하나마 도움이 될 수 있도록 S2 모듈을 가지고 진행하려고 한다.



1. 지그비 통신 준비


- XCTU 프로그램

XCTU 프로그램은 XBee 모듈을 다루고 설정하기 위해 필수로 필요한 소프트웨어이다. XBee 모듈에 대한 ID, CH 등을 설정하고 테스트할 수 있는 환경을 제공해주며 최근 1~2년 사이에 새로 업데이트 되면서 UI 부분이 많이 바뀌었다. 전 버전과 동일한 기능을 수행할 수 있으므로 이번 실습에서는 최신 버전의 프로그램을 사용하도록 한다.

다운로드 : http://www.digi.com/products/xbee-rf-solutions/xctu-software/xctu 


- XBee S2 모듈

안테나 유무나 PRO 등에 관계없이 S2 모듈이기만 하면 상관없다.


- 아두이노


- XBee Breakout 보드

XBee 모듈은 소형으로 제작되어 핀 배열이 좁기 때문에 활용하기 힘들다. 따라서 아두이노로 간단하게 사용할 수 있도록 위와 같은 보드가 필요하다.


- XBee FTDI 보드(인터페이스 보드)

모듈을 설정하기위해 필요한 인터페이스보드. 소켓 헤더와 led, USB 2 Serial 보드를 내장하고 있으며 제조사마다 다양한 제품이 있으므로 어떤 것을 사용해도 무방하다. 만약 아두이노 XBee 쉴드가 있다면 굳이 필요는 없지만 정신건강을 위해 하나 사는 것을 추천한다. 간단한 테스트환경을 제공해주며 안정된 통신을 보장한다.



2. XCTU 프로그램 설정


아래 화면은 XCTU 프로그램의 메인화면으로 왼쪽 상단의 Add devices 버튼을 클릭하면 XBee 모듈을 추가할 수 있다.



버튼을 클릭하면 현재 컴퓨터에 연결된 디바이스 정보가 표시된다. 해당하는 포트 선택후 아래 옵션은 그대로 놔둔채 Finish 버튼을 클릭한다.



성공적으로 XBee 모듈을 불러왔다면 불러온 모듈을 한번 클릭해주자. 그러면 해당하는 모듈의 다양한 정보가 표시될 것이며 설정된 값을 수정할 수 있다.



먼저 설정페이지 상단을 살펴보자. 여러개의 버튼 밑에 모듈 정보가 표시되는게 보일 것이다. 이는 각각 연결된 XBee 모듈의 명칭과 네트워크 역할, 펌웨어 버전을 의미하며 여기서 가장 중요한 것이 바로 네트워크 역할을 의미하는 Function set 이다. 앞서 지그비 개념 관련 포스팅에서 언급했던 네트워크 토폴로지의 개념이 여기서 적용되는 것으로 사용자는 이 부분을 변경함으로서 Star, Mesh 등 자신의 네트워크 환경에 적합한 토폴로지를 구축할 수 있다. Zigbee 통신에서 설정할 수 있는 Function set은 대표적으로 3가지가 있으며 서로 다른 역할을 하게 된다.


 Coordinator

  네트워크의 구성 및 보안을 담당하며 라우팅 구축을 지원해준다.

 Router

  거리가 멀어 직접 통신할 수 없는 노드 사이에서 데이터를 전달해주는 역할을 한다. 

 End Device

  데이터를 수집하거나 간단한 제어를 담당하며 수집된 정보를 전송해준다.



변경 방법은 상단 버튼 중 Update 버튼을 클릭하여 진행할 수 있으며 여기서 AT 모드, API 모드 설정과 함께 해당하는 최신 펌웨어 업데이트를 동시에 할 수 있다.


모듈의 기본적인 설정이 완료되었다면 이제 설정 페이지 밑의 다양한 항목들을 확인해보자. XCTU 프로그램은 지그비 통신의 주소, 접속, 제어 등을 처리하기 위한 여러가지 구성 설정을 제공해준다. 이를 통해 사용자는 모뎀 구성, 통신 테스트, 루프백 등으로 활용할 수 있다. 자세한 설정 방법이나 명령어들은 XBee 매뉴얼을 참고하기를 바라며 여기서는 중요한 설정값 몇개만 살펴보도록 하겠다.


CH

  지그비 통신의 2.4GHz의 대역내에서 동작 주파수 채널을 설정할 수 있는 항목이다. XBee 모듈

  서는 통신할 모듈끼리 채널이 같아야하기 때문에 중요한 지표이지만 S2 모듈의 경우에는 같지않 

  아도 통신이 가능하 설정값 또한 변경할 수 없다.

ID

  실질적인 네트워크 ID를 설정할 수 있는 항목을 지칭하며 이부분을 다르게 설정함으로서 각각의

  네트워크를 구별하는데 활용할 수 있다. 

DH, DL

  데이터가 전송되는 목적지 주소를 나타내며 데이터 전송 노드를 정의하기 위해 사용된다.

SH, SL

  XBee 모듈 고유의 시리얼 넘버를 말하며 수정할 수 없다. DH, DL과 같이 쓰인다.

MY

  노드 자체의 주소(나의 주소)를 설정하는 항목이다.



3. 테스트 환경 구축


그럼 이제 XBee 모듈 2개를 서로 다르게 설정하여 지그비 통신할 수 있도록 해보자. 모듈이 2개이므로 간단한 Peer to Peer 토폴로지로 네트워크를 구축할 것이며 하나는 기본 노드인 Coordinator AT로 설정하고 다른 하나는 Router AT로 구성하도록 한다. 앞서 언급했던 것 처럼 Update 버튼을 통해 설정할 수 있으며 펌웨어는 최신버전으로 업데이트 하도록 한다. 또한 2개의 모듈이 서로 통신할 수 있도록 다음과 같이 설정값을 변경하고 Write 해야 한다.


 

 Coodinator

Router 

 ID

 1234

1234

 DH

Router의 SL 값

Coordinator의 SH 값

 DL

Router의 SH 값

Coordinator의 SL 값


위와 같이 Coordinator와 Router의 DH, DL을 맞춰주면 2개의 노드가 오직 서로만 통신하게 된다. 이렇게 되면 설정은 모두 완료되었다. 만약 XBee 인터페이스 보드 혹은 아두이노 쉴드가 2개 있다면 설정된 모듈을 모두 연결하여 간단하게 통신이 정상적으로 되는지 테스트 해보자. 프로그램 상단 오른쪽에 터미널 모양의 버튼을 클릭하고 두 개의 모듈을 모두 Open 한다. 



그리고 콘솔에 글자를 입력하게 되면 정상적으로 데이터 송신과 수신이 되고 있음을 알 수 있다. 만약 테스트가 성공적이라면 이제 설정은 모두 완료되었다. 이제 우리는 Peer to Peer 토폴로지를 활용하는 모든 프로젝트에서 본 XBee 모듈을 활용할 수 있다.



4. 지그비 통신 실습


그러면 이제 배운 것들을 토대로 아두이노간의 지그비 무선 통신 실습을 진행해보도록 하자. 사실 실습이라 하기에는 그저 간단한 테스트에 불과하지만 성공한다면 이를 응용하여 할 수 있는 것들이 매우 다양해질 것이다. 회로는 아두이노 2개를 각각 다음과 같이 구성하도록 하며 지그비 모듈은 전원이 3.3V에서 동작하도록 설계되어 있으므로 5V 전원 인가시 고장날 수 있기 때문에 이 점에 유의해서 연결하도록 한다.


코드는 심플하다. 송신부에서는 1초마다 A 문자를 전송하며 수신부에서는 문자를 받을때 마다 조건 판별후 테스트 성공 문자를 시리얼 모니터에 출력하는 방식이다. 



1
2
3
4
5
6
7
8
9
10
11
12
// Node1_지그비 송신 코드
 
#include <SoftwareSerial.h>
SoftwareSerial xbee(23); 
 
void setup() {
xbee.begin(9600); 
}
void loop() {
xbee.print('A');
delay(1000);
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Node2_지그비 수신 코드
 
#include <SoftwareSerial.h>
SoftwareSerial xbee(23); 
 
void setup() {
Serial.begin(9600);
xbee.begin(9600); 
}
void loop() {
if(xbee.available()){
  char data = xbee.read();
  if(data == 'A'
    Serial.print("Zigbee test OK!"); 
  }
}
cs


이로서 지그비 통신에 대한 개념 포스팅을 모두 마친다. 내용이 부실하고 미흡하지만 그래도 필요로하는 사람들에게 도움이 되길 바라는 바이다. 다음에는 라즈베리파이와 아두이노를 지그비로 연결한 스마트홈 구축을 주제로 포스팅해볼 예정이며 후에 시간이 가능하다면 지그비 통신의 API 모드 설정법과 활용 방안에 대해서도 글을 올려보고 싶다.



'Electronic > Arduino' 카테고리의 다른 글

XBee 모듈 정보 및 종류  (0) 2016.01.17
지그비 통신의 개념 (네트워크의 이해)  (8) 2016.01.16
[Galileo] 초음파센서 사용하기  (0) 2016.01.08

1. XBee 모듈 종류

XBee 모듈은 크게 Series1과 Series2 두 종류로 나눌 수 있다. 두 시리즈 제품은 기본적으로 동일한 특징들을 많이 가지고 있지만 몇 가지에서 서로 다른 차이점을 보이는데 먼저 S1 같은 경우에는 별도의 설정이 필요하지 않기 때문에 즉시에 사용할 수 있다는 편리성이 있으며 IEEE 802.15.4 프로토콜을 사용한다. 이 프로토콜은 무선 개인 영역 네트워크로 노드 사이의 데이터 처리를 1초당 250Kbps까지 제공하는 특징이 있다. 또한 네트워크 토폴로지의 경우에는 P2P 또는 스타 네트워크 사용이 가능하다. 반면에 S2의 경우에는 802.15.4 프로토콜에 네트워크 계층과 응용 계층을 더 추가한 지그비 프로토콜을 지원한다. 이로 인해 초기에 사용하기 위해서는 별도의 설정이 필요하며 더 적은 전력으로 사용할 수 있고 추가적인 기능과 네트워크 사용이 가능하다.

 

Series 1

Series 2

통신규약

IEEE 802.15.4

Zigbee

토폴로지






 


     

실내 통신거리

30m

40m

실외 통신거리

100m

120m

공급전압

2.8~3.4V

2.8~3.6V

공급전류

45mA

40mA


XBee 모듈은 일반 모듈과 프로 모듈로도 구분할 수 있다. 두 모듈의 차이는 크기와 무선전력의 차이가 있으며 작동과 기능은 거의 동일하다고 볼 수 있다. 프로 모듈의 경우 일반 모듈보다 크기가 크고 소비전력을 많이 소비하며 그만큼 더 먼 거리까지의 통신을 지원한다.

마지막으로 XBee 모듈은 안테나를 통해서도 구분할 수 있는데 사실 안테나 종류에 따른 다양한 모델들이 있긴 하지지만 성능을 따져봤을 때 큰 의미는 없다. 즉 어떤 제품이든지 간에 잘 동작한다는 소리이다. 물론 안테나 유무에 따라서 신호의 세기를 감지하는 패턴이 달라지기 때문에 사용 용도에 따라 구분할 수 있겠지만 이 또한 그다지 큰 성능 향상을 기대하기 힘들다. 따라서 이 부분은 개인의 취향대로 구매하면 될 듯하다.


 Wire Antenna

Chip Antenna

u.FL Antenna 

Trace Antenna 


2. XBee 통신 모드

XBee모듈은 AT모드와 API모드를 모두 지원한다. 먼저 AT모드의 경우 전달 모드(Transpatent)라고도 불리며 간단하게 메시지 데이터를 보내고 받을 수 있다. 쉽게 말해 RX와 TX를 통해 데이터를 주고받는 직렬 데이터의 단순한 전송과 수신이 가능해진다. 따라서 별도의 프로그래밍이나 패키지화가 필요하지 않으며 간단하게 무선 통신을 진행할 수 있다는 장점이 있다. 반면에 API모드의 경우에는 AT모드에서 주고받는 직렬 데이터뿐만 아니라 도착 주소, 패킷 형태, 신호 강도 등의 정보를 같이 패키지화하여 전송한다. 이는 사용자가 필요로 하는 다양한 정보를 설정을 통해 데이터와 함께 보낼 수 있는 개념으로 각 노드간에 유연성있고 다이나믹한 통신망을 구축할 수 있게 해주며 상황에 따라 신뢰성 또한 크게 향상시킬 수 있게 해준다.

두 노드간 서로 통신을 설정할 때는 양측이 모두 같은 모드일 필요는 없으며 API모드에서 AT 모드로 데이터 전송이 가능하고 그 반대도 가능하다. 모드는 XBee 모듈 사이에서 결정하는 것이 아니라 메인 컨트롤러와 XBee 모뎀 사이의 연결을 정의하는 것이기 때문이다.


3. XBee 핀 배치



1) DOUT/DIN

직렬데이터 송수신 핀. 이 데이터는 XBee의 환경 설정을 설정하고 읽을 수 있으며 기본 데이터 속도는 비동기 직렬 통신을 사용하여 9600baud이다.

2) CTS/RTS/DTR

일반적으로 XBee 모듈에 펌웨어 업데이트를 다운로드할 때 사용되며 오직 Serial 통신을 활용한 XBee 어댑터 보드를 사용할 때만 동작한다.

3) DIO

표준 3.3V 디지털 입력 및 출력으로 사용되며 핀의 상태의 설정을 조절할 수 있다.

4) AD

10비트의 아날로그를 디지털로 변환하여 XBee에 입력하는 역할을 하며 값을 읽을 수는 없지만  전압의 양(PWM)으로 나타낼 수 있다.

5) RSSI

PWM 출력으로 수신된 신호의 강도를 확인할 수 있다.

6) PWM

아날로그 출력에 사용할 수 있는 10비트 펄스 폭 변조 출력을 위해 설정 할 수 있다.

7) ASSOC

XBee가 기존의 네트워크에 가입할 수 있도록 설정하고 할당할 수 있는 매개 변수 이다.


'Electronic > Arduino' 카테고리의 다른 글

지그비 무선 통신하기  (13) 2016.01.26
지그비 통신의 개념 (네트워크의 이해)  (8) 2016.01.16
[Galileo] 초음파센서 사용하기  (0) 2016.01.08


최근에 무선통신 기술중 지그비 통신을 활용하게 되어 관련된 자료를 찾아보았는데 괜찮은 정보를 찾기가 매우 어려웠다. 제대로 검색하지 못한 필자의 탓일 수도 있지만 찾아본 대부분의 자료들은 대체 핵심은 어디 갖다 팔아먹었는지 그저 이러저러 해라 식의 단순 지식만 늘어놓고 있었으며 중복되는 내용 또한 심심찮게 발견할 수 있었다. 이러한 글을 읽고 제대로 이해될리 만무하다. 물론 구글을 활용해 해외 사이트에서 검색한다면 원하는 정보를 쉽게 찾을 수 있겠지만 국내에서 지그비와 관련된 간단한 설정법조차 찾기 힘들다는 사실은 매우 안타까울 뿐이다.


때문에 답답한 나머지 지그비 통신에 대해서 필자가 찾아보고 공부한 내용을 정리하여 공유하고자 한다. 순서는 네트워크와 지그비에 대한 개념부터 시작해서 지그비 모듈 종류 및 설정 방법, 아두이노를 활용한 무선 통신 실습 순으로 포스팅할 생각이며 부디 처음으로 지그비 통신을 공부하고 활용하고자 하는 사람들에게 도움이 되길 바란다.



1. 네트워크 이해


지그비에 대한 개념을 설명하기 앞서 네트워크에 대한 이야기를 잠시 해볼까 한다. 워낙 방대한 주제인 만큼 여기서는 간단하게 개념만 짚고 넘어가도록 하자. 네트워크란 Net + Work의 합성어로 컴퓨터들이 통신기술을 이용하여 그물망처럼 연결된 형태를 의미한다. 쉽게 말해 여러 대의 컴퓨터들이 서로 통신하는 것을 말하는 것으로 여기서 통신기술이란 프로토콜(Protocol)을 뜻하며 사전적으로 '규약', '약속'등을 의미한다. 컴퓨터 네트워크에서 서로 통신하기 위한 사전의 약속같은 것으로 해석할 수 있다. 예를 들어 식당에서 음식을 주문하는 상황을 가정해보자. 한 손님이 메뉴판에서 자신이 먹을 음식을 결정했고 바로 주문하려고한다. 하지만 웨이터는 다른 손님의 주문을 받고 있으며 다른 웨이터들 또한 보이지 않는다. 당신이라면 이 상황에서 어떻게 하겠는가? 아마도 당신이 조금의 기다림을 참지 못하는 몰상식한 사람이 아니라면 웨이터가 주문을 다 받을때 까지 기다린 후에야 자신의 주문 내용을 말할 것이다. 


그렇다. 방금 당신은 훌륭하게 사람들 간에 지켜야 할 프로토콜을 잘 지킨 셈이다. 만약 프로토콜을 지키지 않고 웨이터를 억지로 불렀다면 자신과 웨이터 뿐만 아니라 다른 손님과의 소통 또한 제대로 될리가 없다. 이렇듯 사람들이 말을 할 차례를 지켜 주는 것이 중요한데 이러한 개념은 네트워크 통신에서도 똑같이 적용된다. 네트워크 측면에서 위와 같이 통신의 순서를 정해주는 것을 미디어 접근(Media Access)라고 하며 동시에 여러 통신이 발생하는 상황을 다중 접근(Multi Access)라고 한다. 그리고 이러한 상황과 유사한 프로토콜이 바로 CSMA/CD 이다.


   · CSMA/CD (Carrier Sense Multi Access / Collision Detection)

   LAN(이더넷)에서 각 단말기 간 자료를 전송하고 있는 동안 회선을 감시하여 충돌이 감지되면 즉각 전송을 멈

   추고 재전송을 위해 기다렸다가 다시 시도하는 방식


위 방식은 여러 단말기가 통신을 시도했을 때의 충돌 상황을 완화시키는 역할을 한다. 쉽게 말해 앞서 언급한 웨이터의 일이 끝날때 까지 기다려 서로의 통신이 끊어지지 않도록 도와주는 것이다.


또한 네트워크 통신에서 단말기간 특정 주소를 가지는 개념은 매우 중요하다. 각 컴퓨터가 자신의 고유 주소인 IP를 할당받는 이유는 다른 컴퓨터와 구별되기 위해서임을 우리는 이미 알고있다. 따라서 각 단말기간 어떤 통신이 진행되기 위해서는 특정한 수신자의 주소가 지정되 있어야 데이터 보내기가 가능하다. 이러한 주소는 네트워크상에서 숫자로 할당받게 된다.



2. 네트워크 토폴로지(Network Topology)


네트워크 토폴로지란 단말기 상호 간에 데이터를 전송할 수 있도록 연결된 형태를 말한다. 이는 데이터가 잘 보내지고 받을 수 있도록 어떻게 네트워크를 구축할 것인가 라는 네트워크 전략과도 일맥상통하며 어떤 형태를 구축하느냐에 따라서 데이터의 흐름이 결정되게 된다. 따라서 다양한 형태와 방법이 존재하지만 여기서는 지그비 통신과 관련된 몇가지만 소개하고자 한다.


일대일 통신 (Peer to Peer)

일대일 네트워킹은 두 노드 (여기서 노드는 연결점을 의미하며 단말 장치나 통신 처리 장치 등을 뜻한다.) 사이에 데이터를 전송하기 위한 가장 간단한 형태이다. 다양한 채널을 사용할 수 있으며 서로 다른 주파수에 작동하는 무선조종자동자가 좋은 예이며 또한 개인과 개인이 직접 연결되어 파일을 공유하는 P2P도 이러한 개념의 연장선이라고 이해할 수 있다.



스타형 토폴로지 (Star Topology)

스타형은 이더넷 LAN에 가장 널리 사용되는 물리적 네트워크 구조로 중앙의 연결 지점에 허브나 라우터 같은 중심 노드(Coordinator)가 배치되어 모든 노드들을 관리하게 된다. 모든 데이터가 중앙 지점으로 모여지는 중앙 제어 방식이기 때문에 관리가 편하고 확장이 용이하지만 그만큼 부하가 많이 걸리게 되며 중앙 노드에 장애가 발생하면 전체 네트워크 사용이 불가능하게 되는 단점이 있다.


 메쉬형 토폴로지 (Mesh Topology)

메쉬형은 모든 노드가 네트워크상에서 혹은 개별적으로 현결된 그물망 형태로 다수의 노드 쌍이 동시에 통신할 수 있다. 이는 특정 노드의 장애가 다른 노드에 영향을 주지 않기 때문에 장애에 유연한 대처가 가능해지고 가용성이 극대화 되는 장점으로 작용한다. 하지만 그만큼 회선구축 비용이 많이 들게 되며, 새로운 노드를 추가할 시에 선로 구성이 복잡해지고 비용부담이 발생한다.

                        


토폴로지는 상황에 맞게 적절한 방식을 선택하는 것이므로 좋고 나쁨을 떠나 자신이 구축할 네트워크 환경에 적합한 것을 써야 한다.


3. ZigBee 통신


서론이 생각보다 길었다. 그럼 이제 본격적으로 지그비 통신이 무엇인지 알아보도록 하자. 지그비는 근거리 저전력 무선 통신을 위한 프로토콜을 일컫는다. 앞서 프로토콜의 개념을 제대로 이해하였다면 지그비 통신 또한 여러 개의 노드가 서로 통신하기 위해 만들어진 통신 규약이라는 것을 알 수 있을 것이다. 그럼 다른 무선 통신 방법과 비교하여 지그비의 특징을 살펴보자.


 

Zigbee

 Bluetooth

Wi-Fi 

NFC 

전송거리

 ~100m

~10m 

~100m 

~20cm

 전송속도

~250Kbps 

~24Mbps 

 11M / 54Mbps

106~848Kbps 

최대 채널 수

 32000

 14

 1

 소비전력

Very Low

Medium

High

Low

복잡성

Low

Low

High

Low

 비용

Low

Low

High

Low


위 표를 통해 지그비 통신은 복잡하지 않은 시스템 구조로 구성되어 있으며 적은 소비전력으로 인해 소형화가 가능함을 알 수 있다. 비록 전송 속도면에서 블루투스나 와이파이 통신이 우수하긴 하지만 가격이 비싸기 때문에 상대적으로 저렴하고 간단한 무선 네트워크를 구축할 수 있다. 또한 네트워크 규모도 방대하기 때문에 다수의 센서를 활용하거나 모듈을 사용하는 시스템에 적합한 형태를 보인다.


지그비 통신 모듈은 시중에서 다양한 형태로 판매되고 있으나 여기서는 가장 대중적인 제품인 Digi 사의 XBee모듈에 대해서 설명하겠다.  Xbee란 지그비 프로토콜을 바탕으로 보다 쉬운 설정과 사용을 위해 개발된 별개의 프로토콜이다. 따라서 지그비 통신을 기반으로 하고는 있지만 XBee 전용의 프로토콜을 따로 제공하고 있다는 점을 염두해 두어야 한다. 이러한 XBee 모듈의 설명은 다음 포스팅에서 이어서 설명하도록 하겠다.


'Electronic > Arduino' 카테고리의 다른 글

지그비 무선 통신하기  (13) 2016.01.26
XBee 모듈 정보 및 종류  (0) 2016.01.17
[Galileo] 초음파센서 사용하기  (0) 2016.01.08

1. 초음파센서란?

 

초음파란 사람의 귀에 들리지 않을 정도로 높은 주파수 (20 kHz 이상)의 소리를 말한다. 이와 같은 특성을 이용한 것이 초음파센서로 음파를 쏘아올리고 반사되어 오는 음파까지의 시간차를 거리로 계산하여 측정하는 방식으로 동작된다. 이번에 실습해볼 예제는 HC-SR04라는 초음파센서를 활용하여 거리를 측정하는 것이며 이를 통해 초음파센서의 기초 원리를 이해하고 갈릴레오보드의 활용법을 숙달한다.


동작 전압

5V

동작 전류

15mA

동작 주파수

40Hz

발생 주파수

40kHz

측정 거리

최대 4m

측정 각도

15

 

 

2. 동작 원리

 

초음파센서는 두 개의 눈으로 구성되어 있으며, 하나는 초음파를 발생시켜 송신(Trig)하는 기능을 수행하고, 나머지 하나는 송신된 초음파의 신호를 수신(Echo)하는 기능을 수행하게 된다. 따라서 두 개의 눈이 서로 송신하고 수신되는 시간의 차이에 따라 물체와의 거리를 계산하는 방식으로 동작하며 주파수가 높은 만큼 파장이 매우 짧기 때문에 거리 방향의 분해력이 우수하고 정밀도가 높은 계측을 할 수 있다. 이러한 센서의 원리 때문에 거리감지센서나 레인지센서라고도 불린다HC-SR04 초음파센서의 경우에는 4개의 핀으로 구성되어 있으며 각각 순서대로 Vcc, Trig, Echo, Gnd 이다.

 


 

3. 준비물

 

갈릴레오보드, HC-SR04, 브레드보드, 점퍼선



4. 회로도


Vcc부분에 5V의 전원을 인가하고 Gnd끼리 연결해준다. 그리고 D2D3를 각각 echotrig순으로 연결하면 기본적인 회로 구성이 완료된다.

 

 

5. 동작 방법

 

동작 설명에 앞서 어떤 보드를 사용하여 회로를 구성할 것인가가 중요하다. 필자는 초기의 갈릴레오보드1을 사용하였는데 처음에 초음파센서를 활용한 결과값이 제대로 나오지 않아 많은 시간을 허비했다. 분명 센서는 문제가 없었으며 코드 부분도 이상이 없음에도 불구하고 결과가 0m를 보여주는 현상이 일어났다. 때문에 보드에 무엇인가 문제가 있다고 판단하여 갈릴레오보드의 데이터시트를 확인해 보았는데 여기서 문제를 발견할 수 있었다. 바로 갈릴레오보드의 초기 모델은 GPIO핀의 동작주파수 범위가 매우 낮기 때문에 초음파센서에 나오는 출력 주파수 40kHz를 보드 자체에서 읽지 못하여 0m가 계속해서 나타나는 것이었다.

이러한 문제는 의외로 단순하게 해결할 수 있는데 갈릴레오보드에서는 동작주파수 범위가 큰 Fast I/O 핀이 따로 설정할 수 있다. 여기서는 D2D3핀이 해당되며 해당 핀을 사용하고 pinMode()함수를 사용하여 기존의 입력이나 출력을 INPUT_FASTOUTPUT_FAST로 설정하면 큰 주파수 범위의 출력에서도 무리없이 사용할 수 있다. 위 문제는 갈릴레오보드 초기모델에서만 나타나며 갈릴레오보드2나 아두이노보드에서는 동작주파수 범위가 넓기 때문에 문제없이 동작하여 굳이 Fast I/O를 사용할 필요가 없다.



동작 방법은 앞에서 설명했던 초음파의 원리를 응용한 것으로 센서에서 음파를 발생시키고 물체에 반사되어 되돌아오기까지의 시간을 측정하여 거리로 표시해주는 방식이다. 여기에서 중요한 역할을 하는 것이 바로 pulseIn() 함수이다. 이 함수는 해당 출력이 HIGHLOW가 되는 순간까지의 시간을 계산해주는 함수로서 초음파센서의 음파가 되돌아오는 시간을 계산해주는 역할을 한다. 또한 밑의 소스코드에서 pulseIn()함수로 측정된 값을 58로 나누어주고 있음을 알 수 있는데 그 이유는 소리의 속도가 대략 340m/s 이기 때문에 1cm를 이동하는데 걸리는 시간이 29.155 마이크로초가 된다. 따라서 측정된 시간 값은 음파가 갔다가 되돌아오는 시간이기 때문에 2로 나누어주고 여기에 방금 계산한 29.155를 다시 나눠주게 되면 우리가 원하는 거리의 값을 나타낼 수 있다.




6. 소스 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#define trig 3 // trig 단자를 Digital 3번 단자에 연결
#define echo 2 // echo 단자를 Digital 2번 단자에 연결
long duration, distance;
 
void setup() {
  Serial.begin (9600); // Serial 통신
  pinMode(trig, OUTPUT_FAST); // trig 단자를 빠른 출력모드로 설정
  pinMode(echo, INPUT_FAST); // echo 단자를 빠른 출력모드로 설정
}
 
void loop() {
  digitalWrite(trig, LOW); // Trig 단자 LOW로 설정
  delayMicroseconds(2);
  digitalWrite(trig, HIGH); // Trig 단자 HIGH로 설정
  delayMicroseconds(10);
  digitalWrite(trig, LOW); // Trig 단자 LOW로 설정
 
  duration = pulseIn(echo, HIGH); // pulseIn 함수 호출
  distance = duration / 58// 반환값을 cm로 단위 변환
  Serial.print(distance); // 거리 표시
  Serial.println(" cm");
  delay(1000);
}
 
cs



6. 결과 화면


  


 

 

'Electronic > Arduino' 카테고리의 다른 글

지그비 무선 통신하기  (13) 2016.01.26
XBee 모듈 정보 및 종류  (0) 2016.01.17
지그비 통신의 개념 (네트워크의 이해)  (8) 2016.01.16