H3V4F ASK ワイヤレスモジュールを使う

ProMini->ProMini


今までいくつかASKワイヤレスモジュールを試してきましたが、いずれもデータ送受信できる距離が30p程度のものばかりでした。
今回、たまたまH3V4F/H34Aという型番のASKワイヤレスモジュールを格安(送受信モジュール合わせて100円)で入手しました。
スペックはこちらにありま す。
全く期待していなかったのですが、非常に安定して送受信できました。

今回使用した送信モジュールは技術基準適合証明等のマーク(通称技適マーク)が交付されていませんので
これ以降の記事はあくまでも実験レベルと考えてください。



左上から「H3V4F受信モジュール」 「433Mhzの受信モジュール」 「315MHzの受信モジュール」
左下から「H34A-433送信モジュール」 「433Mhzの送信モジュール」 「315MHzの送信モジュール」

見た通り、送受信ともに非常に小さなモジュールです。
あまりに小さいのでクリスタル以外、実装されている部品のマーキングは全く読み取れません。


左が送信モジュール 右が受信モジュール



今回入手した受信モジュールは3.3V、433Mhzのモデルです。型番違いで315Mhz版や5V版/5V低消費電力版もあります。
受信モジュール
周波数 駆動電圧
H3V3E 315MHz 3.3V
H3V4F 433MHz 3.3V
H5V3C 315MHz 5.0V
H5V3M 315MHz 5.0V 低消費電力版
H5V3G 315MHz 5.0V 低消費電力版(?)
H5V4D 433MHz 5.0V
H5V4H 433MHz 5.0V 低消費電力版
H5V4N 433MHz 5.0V 低消費電力版(?)

送信モジュールも、H34A-433/H34A-315の2つが有りますが、駆動電圧は2.6V-12Vとなっています。

3.3V駆動のProMiniを使って、以下のスケッチで送受信できます。
こ ちらのページを参考にしています。
なお、RCSwichライブラリは何種類かありますが、使用したのは
https://github.com/sui77/rc-switch
のライブラリです。

送信側
送信モジュールのDataピンをProMiniのPD7に接続します。
/*
  SendDemo - sends RF codes.
*/

#include <RCSwitch.h> // https://github.com/sui77/rc-switch
RCSwitch mySwitch = RCSwitch();

void setup() {
 
  // VCC  : 3.3V
  // GND  : GND
  // Data : 7
  // ANT  : in between the two headers!
 
  // Data
  pinMode(7, OUTPUT);  // Either way, we'll use pin 7 to drive the data pin of the transmitter.

  Serial.begin(9600);
 
  // Transmitter is connected to Arduino Pin #10  
  mySwitch.enableTransmit(7);
 
}

void loop() {
  static long value=0;   

//  mySwitch.send(value, 24);
  mySwitch.send(value, 32);
  value++;
  delay(1000);
}

受信側
受信モジュールのDataピンをProMiniのPD2に接続します。
/*
  RF_Sniffer - receive RF codes.
*/

#include <RCSwitch.h> // https://github.com/sui77/rc-switch
RCSwitch mySwitch = RCSwitch();

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // Receiver on interrupt 0 => that is pin #2
  Serial.println("mySwich start");
}

void loop() {
 
  if (mySwitch.available()) {
    
    int value = mySwitch.getReceivedValue();
    
    if (value == 0) {
      Serial.print("Unknown encoding");
    } else {
   
     Serial.print("Received ");
      Serial.print( mySwitch.getReceivedValue() );
      Serial.print(" / ");
      Serial.print( mySwitch.getReceivedBitlength() );
      Serial.print("bit ");
      Serial.print("Protocol: ");
      Serial.println( mySwitch.getReceivedProtocol() );
    }
    
    mySwitch.resetAvailable();
    
  }

}

受信側のシリアルモニターには受信したデータがこのように表示されます。


試しに送信側モジュールを別のモジュール(一番上の写真の下側中央)に変えてみましたが
問題なく通信できました。

このモジュールでは0の値は送受信できません。
送信側スケッチを見るとわかりますが、送信データの初期値は0ですが受信側には0は表示されません。
受信側の表示は必ず1から始まります。
0はおそらく「電波なし」になるのだと思います。


見通しで、だいたい8Mぐらいまで離れても送受信できます。
高々100円のモジュールで、ちょっと気持ち悪いぐらい安定して通信できます。

次回は送信側をATtinyに変えてみます。