카테고리 없음

아두이노 RF통신 2.4GHz NRF24L01 송수신 모듈

abc0123 2017. 12. 6. 14:13
반응형

 

아두이노를 무선으로 컨트롤할 수 있는 방법은 다양하지만 오늘은 통신할 수 있는 거리가 상대적으로 꽤 되는 RF 통신에 대해서 정리를 해보려고 한다. 멀게는 200m 이상 가능하다고 하는데 실내에서만 테스트해보는 지금으로써는 피부로 느낄 수 없겠지만 기본 개념을 정리하기 위해 예제를 만들어보면서 개념 정리를 하려고 한다.

 

예제는 하프 사이즈의 빵 판 두 곳에 각각 아두이노 나노를 올리고 두 곳 모두에 RF 라디오 모듈을 연결한 후 '송신부' 쪽에서 보내는 데이터를 '수신부'에서 받아서 시리얼 모니터에서 그 값을 확인하는 과정을 통해서 개념 정리를 해보려고 한다.

 

 

여기서 사용할 RF 통신 모듈은 2.4GHz NRF24L01 송수신 모듈인데 다음과 같이 안테나가 내장된 형태이다.

 

두 개의 RF 통신 모듈

 

▲ 송. 수신이 모두 가능하기 때문에 똑같은 걸 두 개 사용하면 되고 이 녀석들을 사용하기 위해서는 다음 라이브러리를 아두이노에 추가해줘야 한다.

 

libraries.zip

 

혹시 필요한 분들이 계실지 몰라 라이브러리 파일을 첨부해 놓는다. 그리고 RF 통신 모듈에는 8개의 핀이 있는데...

 

NRF24L01

 

▲ 이 핀 연결을 잘 해야 하더라. 각 핀들의 이름도 있지만 나중에 참고 자료로 사용하려고 정리하는 이 글에서 굳이 핀 이름까지는 정리할 필요 없을 거 같고 위 사진을 기준으로 가장 위쪽부터 1-2, 3-4, 5-6, 7-8 번 식으로 가상 번호를 먹이고 그것들을 아두이노 디지털 핀에 연결해본다.

 

GND(1), VCC 3.3V(2), D7(3), D8(4), D13(5), D11(6), D12(7) 순서로 연결을 했으며 마지막은 일단 비워놓은 상태이다. 이때 VCC는 반듯이 3.3V를 연결해야 하는 점 주의하자.

 

수신부

 

▲ 라이브러리를 들여다보지는 않았지만 아마도 이 핀번호가 정해진 듯하니 똑같이 연결을 했고 이 녀석이 수신부인데 컴퓨터와 연결해서 여기로 들어오는 값을 시리얼 모니터에 출력해볼 것이다.

 

 

송신부 역시 RF 통신 모듈은 똑같은 디지털 핀에 연결을 한 후 아날로그 값을 전달하기 위해서 조이스틱을 연결해봤다.

 

조이스틱

 

▲ 조이스틱은 VCC와 GND 그리고 x, y 핀만 연결을 했는데 x 값은 A0에서 y 값은 A1 핀에서 받아서 전송을 하게 될 것이다.

 

송. 수신

 

▲ 이 RF 통신 모듈이 빵 판에 연결할 수 없는 구조로 되어 있기에 암수 케이블을 이용해서 연결을 했더니 선 정리가 제대로 안된다. ㅎㅎ 일단 이번 글에서는 제대로 데이터 통신이 이루어지는 것만 확인해볼 계획이니 이대로 두고 프로그램을 짜서 조이스틱 값을 바탕으로 데이터 전송을 해보자.

 

먼저 데이터를 전송할 [송신부]쪽 코딩부터 살펴보면....

 

코딩

 

▲ RF 통신과 조이스틱을 이용하기 위해서 ① <SPI.h>, <nRF24L01.h>, <RF24.h>, <analog_keyboard.h> 파일을 include 했으며 ② RF24의 객체 radio를 만들었는데 이때 전달한 숫자 두 개 (7, 8)는 디지털 핀 번호이다. 그리고 data는 두 개만 받도록 하고 있으며 다른 장치들과 통신교란을 방지하기 위해서 address를 생성하고 있는데 이 값은 양쪽 모두 똑같이 넣어줘야 한다. ③ 초기 설정 구간에서는 RF 통신을 시작하며 송신 모드(openWritingPipe)로 오픈을 하고 있다.

 

아날로그 값 받아서 전달

 

▲ 그리고 loop() 함수에서는 data 값을 0으로 초기화한 후 조이스틱에서 들어오는 아날로그 값을 각각 int형 변수 x와 y에 저장을 한 후 그 값에 따라서 KEY_LEFT, RIGHT, DOWN, UP의 값을 전달하고 있다.

 

 

다음은 데이터를 받을 [수신부]쪽 코딩을 살펴보자.

 

수신

 

▲ 역시 ① 똑같은 헤더 파일을 include 했으며 ② radio 객체를 생성한 후 address 값을 똑같이 설정해주고 있다. data도 역시 두 개를 받도록 했으며 command 변수를 선언한 후 그 값을 0으로 초기화했다. ③ setup()에서는 전송된 값을 시리얼 모니터에서 확인하기 위해서 시리얼 통신을 준비하며 RF 통신을 시작하고 수신모드(openReadingPipe)로 오픈을 했다.

 

들어오는 값에 따라 데이터 출력

 

▲ 그리고 어떤 값이 들어오냐에 따라서 '앞으로', '뒤로', '왼쪽으로', '오른쪽으로'라는 문자열을 시리얼 모니터에 출력하도록 했는데 이 값들을 활용해서 다양한 액추에이터를 제어할 수 있을 것이다. 그 내용은 다음 과정에서 정리하기로 하고 여기서는 시리얼 모니터에서 확인하는 걸로 만족하자.

 

 

▲ 계획한 대로 조이스틱을 왼쪽, 오른쪽, 앞으로, 뒤로 움직일 때마다 해당되는 데이터가 전송이 돼서 시리얼 모니터에서 출력이 되는 걸 확인할 수 있다.

 

이렇게 해서 아두이노의 여러 가지 통신 방법 중에서 RF 통신에 대해서 정리를 해봤는데 다른 것들에 비해서 통신 거리가 넓기 때문에 다양한 분야에서 활용할 수 있을 것 같다.

반응형