아두이노2017. 10. 26. 14:34

아두이노는 자체로도 쓰임새가 많지만 와이파이, 블루투스, RF 등의 무선 모듈과 합쳐지면 그 쓰임새가 더욱 늘어난다. 여기저기 흩어져 있는 센서의 측정값 들을 모아 통합 저장할 수도 있으며 무선으로 원격 컨트롤을 가능하게 하기도 한다. 블루투스, 와이파이 등...  본 블로그에서는 무선 모듈에 대해서 많이 알아봤었는데 RF 모듈은 처음인 것 같다. 알리익스프레스를 뒤져보니 433Mhz 송수신 모듈이 5쌍에 3000원 정도 밖에 하지 않는다. 매우 저렴하다. 게다가 어떤 유튜버에 따르면 간단한 안테나를 만들어 달면 100여 미터 이상 까지도 통신이 된다고 한다. 저렴한 가격과 괜찮은 성능이다. 바로 구입해서 테스트 해 보았다.


433Mhz RF 무선 송수신 모듈이다. 좌측이 송신모듈, 우측이 수신모듈이다. 크기는 2~3CM 정도로 매우 작고 가벼워서 RC 비행기 같은데 넣어도 될 것 같다.


송신모듈이다. 핀의 구성은 위와 같으며 안테나 연결부도 위와 같다. VCC 에는 3.5 ~ 12V 까지 연결이 가능하다.


수신 모듈이다. 핀의 구성은 위와 같으며 안테나 연결부도 위와 같다. 가운데 두 개의 핀이 DATA 인데  어느것을 사용해도 상관이 없다.


■ 433Mhz RF 송수신 모듈 스펙


Transmitter module parameters

1.Product Model: MX-FS-03V

2.Launch distance :20-200 meters (different voltage, different results)

3.Operating voltage :3.5-12V

4.Dimensions: 19 * 19mm

5.Operating mode: AM

6.Transfer rate: 4KB / S

7.Transmitting power: 10mW

8.Transmitting frequency: 433M

9.An external antenna: 25cm ordinary multi-core or single-core line

10.Pinout from left to right: (DATA; VCC; GND)


Receiver module parameters

1.Product Model: MX-05V

2.Operating voltage: DC5V

3.Quiescent Current: 4MA

4.Receiving frequency: 433.92MHZ

5.Receiver sensitivity:-105DB

6.Size: 30 * 14 * 7mm

7.External antenna: 32CM single core wire, wound into a spiral


 

■ 연결


연결은 간단하다. 나의 경우 송신측은 아두이노 나노를 이용했고 수신측은 우노를 이용했다. 각각 아두이노 자체전원 5V 와 GND 에 전원을 연결했으며 송수신 모듈 모두 DATA 는 하나 밖에 없기 때문에 다음과 같이 연결하면 된다.


- 송신측 DATA : 아두이노 D12 에 연결

- 수신측 DATA : 아두이노 D11 에 연결


연결된 모습은 위와 같다. 송신측은 5V 보조 배터리 이용, 수신측은 PC 연결


 

■ 소스


소스는 송신측에서 문자열을 보내면 수신측에서 문자열을 받아서 시리얼 모니터에 출력하는 것을 목표로 했다. 먼저 RF 모듈을 쉽게 사용할 수 있게 해 주는 VirtuialWire 라이브러리를 다운로드 받아서 설치 해야 한다. 


- 다운로드 : http://www.resistorpark.com/arduino-virtualwire-library-download/

VirtualWire.zip


- 송신측 소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <VirtualWire.h>
 
const int TX_DIO_Pin = 12// default 12
 
 
void setup()
{
  vw_set_tx_pin(TX_DIO_Pin); // Initialize TX pin
  vw_setup(2000); // Transfer speed : 2000 bits per sec
}
 
void loop()
{
  send("DOIYYOURSELF");
  delay(1000);
}
 
void send (char *message)
{
  vw_send((uint8_t *)message, strlen(message));
  vw_wait_tx(); // Wait until the whole message is gone
}
cs


- 수신측 소스

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
#include <VirtualWire.h>
 
byte message[VW_MAX_MESSAGE_LEN]; // a buffer to store the incoming messages
byte messageLength = VW_MAX_MESSAGE_LEN; // the size of the message
 
const int RX_DIO_Pin = 11// default 11
 
void setup()
{
  Serial.begin(9600);
  Serial.println("Ready to receive:");
  vw_set_rx_pin(RX_DIO_Pin); // Initialize RX pin
  vw_setup(2000); // Transfer speed : 2000 bits per sec
  vw_rx_start(); // Start the receiver
}
 
void loop()
{
  if (vw_get_message(message, &messageLength)) // Non-blocking
  {
    Serial.print("Received: ");
    for (int i = 0; i < messageLength; i++)
    {
      Serial.write(message[i]);
    }
    Serial.println();
  }
}
cs


- 실행결과


위와 같이 무선 RF 통신으로 'DOIYYOURSELF (DOITYOURSELF 의 오타 ^^; )' 라는 문자열이 제대로 전송되는 것을 알 수 있다. 하지만 이 모듈에는 문제점이 있다. 통신거리가 극히 짧은 것이다. 나의 경우 10CM 정도 떨어지면 송수신이 되지 않았다.


맨 위에서도 언급했듯이 안테나를 달면 송수신 거리를 길게 할 수 있다고 한다. 그래서 랜선을 잘라서 안테나를 만들어 주었다.


안테나 길이 구하는 공식은 '300/주파수' 인데 300/433=0.693m 이다. 이를 cm 으로 하면 69.3cm 이다. 그런데 이를 다시 4로 나누어 안테나 길이를 구하는데 17.3cm가 나온다. 안테나에 대한 구체적인 지식은 모르겠고 이 공식에 따라서 17.3cm로 랜선을 잘라서 모듈에 납땜해 주었다.


그런데 위의 모듈 상세스펙의 마지막 부분을 보면 송신측은 25cm, 수신측은 32cm의 권장 안테나 길이가 쓰여 있다. 뭐가 맞는지 모르겠지만 일단 인터넷의 의견을 따랐다. 나중에 스펙에 있는 다른 안테나 길이도 추가 테스트를 해 봐야 겠다.


안테나를 만들어 달고 결과적으로 아주 약간의 향상이 있었다. 10cm 통신거리에서 30cm 정도로 통신거리가 눈꼽만큼 늘어난 것이다. 그런데 이 정도로는 무선 RF 라는 장점은 하나도 없다. 적어도 10미터는 넘게 통신거리가 나와야 활용할 수 있을 듯 하다. 


안테나 다음으로 생각되는 것이 송신측 전압이다. 송신모듈의 경우 3.5V-12V 가 작동 전압인데 나는 아두이노 자체전원을 사용했다. 이것을 외부전원을 따로 주어 조금 더 강력한 전압과 전류가 되도록 하면 어떨까? 생각해 보았다. 9V 건전지가 적당할 것 같은데 일단 없어서 글을 접고 나중에 추가로 테스트를 해 보아야 겠다.


안테나 길이 관련 참조 자료


비슷한 모듈 같은데 165m 까지 통신이 된다.




과연 싸고 좋은 것은 없는 것인가? 오늘 실험은 실망이지만 다음 추가 테스트가 기대가 된다. 적당한 거리에서 통신이 잘 된다면 이 보다 더 저렴하고 쓸만한 아두이노 무선 통신은 없을 것 같다. ^^



■ 추가내용 (2017.10.30) : 각각 9V 알카라인 배터리를 이용해서 전원을 공급해 보았다. 결론은 위의 비디오 처럼 165m 까지 절대로 안나온다는 것이다. 그래도 기존보다 많이 늘어난 5~10m 까지 통신거리가 늘어났다. 집안 근거리 통신에는 그럭저럭 쓸 수 있을 듯 하다. 또는 분실방지 장치 같은데도 쓰일 수 있을 것 같다. 지갑과 가방에 각각 모듈을 넣고 신호가 끊기면 경보를 울리게 하는... 아무튼 비추 모듈이다. 통신거리가 너무 짧다. 


작동전압을 고려해서 송신측은 9V 배터리 전압을 직접 공급했으며 수신측은 아두이노의 5V 전원을 이용했다.



■ 추가내용 (2018.04.22) : 혹시 이 모듈의 통신거리가 잘 안나오는 분들은 아래 '아두이노초보

' 님의 댓글을 참고하면 좋은 결과가 있을지도 모르겠다.


반응형
Posted by 대네브 (deneb)

댓글을 달아 주세요

  1. 비밀댓글입니다

    2017.11.22 17:34 [ ADDR : EDIT/ DEL : REPLY ]
  2. 아두이노초보

    그냥 제품 불량아닐까요?
    저도 저렇게 생긴 저가형 통신모듈 가지고 있는데
    아두이노 자체 5V 전원만으로도 10-20미터는 되던데요.

    2018.04.19 20:28 [ ADDR : EDIT/ DEL : REPLY ]
    • 그럴까요? 5쌍을 샀는데
      다른것도 해봐야 겠네요
      아니면 짝퉁일지도... ㅠㅠ

      2018.04.19 20:35 신고 [ ADDR : EDIT/ DEL ]
  3. 아두이노초보

    참고로 제가 사용한 라이브러리는
    아두이노 IDE->라이브러리 매니저->"433"으로 검색
    rc-switch 라는 걸 설치했습니다.

    아두이노 자체 5V + 저 제품 자체의 스프링안테나로도 20미터는 통신되었고,
    송신쪽에 외부전원 12볼트 + 랜케이블안테나 20cm정도 달았을때
    40미터 거리에서도 잘되는걸 확인했습니다.
    더 먼거리에서도 될거라고 생각하지만 시험해보지는 않았습니다.

    그리고 저 제품 사진이 좀 수상하네요.
    "DATA"라고 쓰여있어야 할 부분이 "ATAD"라고 적혀있네요. 얼마나 대충 만든 제품인지ㅎㅎ
    제것은 모양은 똑같이 생겼는데 제대로 DATA라고 적혀있습니다.

    2018.04.20 00:27 [ ADDR : EDIT/ DEL : REPLY ]
    • 헐 정말 ATAD 네요 ㅋㅋㅋ
      댓글 감사합니다
      정말 짝퉁일까요? ㅋㅋㅋ
      시간날때 조언주신것 참고해서
      다시 한 번 해봐야 겠네요. ^^

      2018.04.22 21:18 신고 [ ADDR : EDIT/ DEL ]
  4. 과객

    모든 무선장치를 컴퓨터가 인식가능한가요?
    Ems topgun3 라는 pc용 건콘에 쓰이는
    Rf리시버가 맛이 갔는데 이것을 사용할수 있는건가요???

    2018.06.11 11:44 [ ADDR : EDIT/ DEL : REPLY ]
  5. 안녕하세요
    블로그님 스케치를 이용하여 수신기에서 8번에서 진동모터를 연결해서 사용하고 싶은데 스케치에 추가로 어떻게 하면 될까요? 도움 좀 주시면 감사하겠습니다

    2018.09.28 01:40 [ ADDR : EDIT/ DEL : REPLY ]
  6. 학생

    안녕하세요 좋은 글 잘 읽었습니다.

    제가 아두이노를 이용해서 물건을 하나 만드려고 하는데요 이 글에서 설명한 RF송수신 모듈과 다른 센서, 예를 들어 거리 센서 or 적외선 인체감지 센서 등의 출력 결과(신호)를 연동해서 사용할 수 있나요?
    이 글에서 문자열 출력을 받은 걸 보면 가능할 것 같긴 한데 제가 지식이 얕아 확실치 않아 질문드립니다.

    2018.11.03 04:38 [ ADDR : EDIT/ DEL : REPLY ]
  7. Aaa

    433mhz 주파수못쓰는걸로 알고있는데

    2018.12.17 08:08 [ ADDR : EDIT/ DEL : REPLY ]
  8. AreNa

    안녕하세요! 블로그 글 유용하게 보고 갑니다. 저도 RF 송수신을 통해 뭔가 해보려고 하는데
    대네브님께서 송신기를 꽃은 아두이노의 이름이 뭔지 잘... 모르겠어서요 아두이노 접한지가 얼마 안되서 D11 이라고 검색을 해도 나오지가 않더라구요... 그래서 어떤 버전인지... 한번만 알려주실수있나요? 송,수신 두개다 알려주시면 감사하겠습니다..

    2019.02.08 10:35 [ ADDR : EDIT/ DEL : REPLY ]
    • 본문에 있듯이 아두이노는 우노와 나노 2개를 이용했습니다. (각각 송신 수신)
      D11 은 gpio라고 아두이노의 입출력 단자 번호 입니다.

      2019.02.08 12:22 신고 [ ADDR : EDIT/ DEL ]
  9. 안녕하세요!
    송신부에 pir센서를 이용하여 센서작동시 송신기가 작동하게끔 스케치를 수정하였는데 잘 안되서 혹시 스케치를 수정해서 메일로 좀 부탁드려도 될까요?
    hrdragon314@naver.com

    2019.03.18 17:29 [ ADDR : EDIT/ DEL : REPLY ]
  10. 혹시 mpu6050모듈 연결하여 메시지 송수신해보셨나요?
    송신측에서는 잘 가는것 같은데 수신측에서 이상한 문자로 받는걸 보아 뭔가 잘못된거같은데 도통 모르겠네요...

    2020.08.30 10:30 신고 [ ADDR : EDIT/ DEL : REPLY ]