気の向くままに辿るIT/ICT/IoT
IoT・電子工作

Doorbell using 433MHz RF radio

ホーム前へ次へ
Arduinoって?

Doorbell using 433MHz RF radio

Doorbell using 433MHz RF radio

2018/02/07
Arduino/433MHz RFトランシーバ/タクトスイッチを使った無線メロディ再生

 『Doorbell using 433MHz RF radio』を自作してみるページ。

 回路とスケッチについては後述しますが、より具体的に言うとArduino Nano互換機 5V 16MHz、Arduino Pro Mini互換機 5V 16MHz、433MHz RFトランシーバ送信機FS1000A、受信機RF-5V、タクトスイッチ、パッシブブザー他を使いました。

 が...、日本では、この機器に対して技適...というか、周波数433MHzは、アマチュア無線免許がないと...いや、待てよ?あったとしても呼び出し周波数とされている433MHzにおいて呼出符号のない交信は、通報の対象らしいので要注意...というか、つまるところ、このモジュールは、使っちゃいけない模様。

 安かったから良いものの、よくわからないまま、3組も買っちゃったけど...使える国に移住するか、造りを眺めて勉強するか、飾るか、ゴミか...何れにしても、ここまで知る前に、うっかり、やってみちゃったことだけは書いておきます。

 結果から言うと、というか、途中経過と言うべきなのか、433MHz RFトランシーバだけの動作確認では、一部、死角はあったものの、至近距離はもちろん、壁など障害物があっても余裕で数mは送受信可能だったのですが、送受信する値は全く一緒なのにブザーを実装すると、なぜか、700mm(70cm)〜800mm(80cm)が限界(それ以上は、機能することは稀で不安定)となる状況に遭遇。

 一体、なぜ!?

 タクトスイッチを押すと送信機FS1000Aから[1]を送信、受信機RF-5V側の回路上のパッシブブザーがドレミの音階を再生する動画がこれです。

 送信機側電源は、モバイルバッテリー、送信機側Arduinoボードは、Pro Mini互換機、受信機側電源は、ACコンセント接続USB充電器、受信機側Arduinoボードは、Nano互換機としました。

 ちなみに、この時の距離は、120mm(12cm)程度。

 送信、受信の回路概略とスケッチは、以下の通り。

#include <VirtualWire_Config.h>
#include <VirtualWire.h>
 
char *controller;
const int touchPin = 3;
 
controller="1";
 
void setup() {
 pinMode(LED_BUILTIN,OUTPUT);
 vw_set_ptt_inverted(true);
 vw_set_tx_pin(12);
 vw_setup(4000);// speed of data transfer Kbps
}
 
void loop(){
 if (digitaRead(touchPin)) {
  vw_send((uint8_t *)controller, strlen(controller));
  vvw_wait_tx(); // Wait until the whole message is gone
  digitalWrite(LED_BUILTIN, HIGH);
  delay(100);
  digitalWrite(LED_BUILTIN, LOW);
 }
}

 送信機側は、Pro Mini互換機の5Vをタクトスイッチの端子、FS1000AのVCCを同じ側のタクトスイッチのもう一方の端子に、Pro Mini互換機のGNDを抵抗1MΩを介し、タクトスイッチの5Vの対角の端子とFS1000AのGNDに、D12をFS1000AのDATAに接続。

 尚、送信機側は、そのままだと期待する動作と逆となるため、自身初なので自信はない(し、抵抗値も適当に選んだ)が、プルダウン抵抗を使うことで負電圧の動作(タクトスイッチONでLOW)を正電圧の動作(タクトスイッチONでHIGH)になるようにしました。

 動作確認でも使わせて頂いたRF 315/433 MHz Transmitter-receiver Module and Arduinoのスケッチを拝借、若干修正した送信機側のラフスケッチは、これです。

#include <VirtualWire_Config.h>
#include <VirtualWire.h>
 
#define BEAT 500  // 音の長さを指定
#define PINNO 8  // 圧電スピーカを接続したピン番号
 
void setup()
{
 vw_set_ptt_inverted(true); // Required for DR3100
 vw_set_rx_pin(12);
 vw_setup(4000); // Bits per sec
 
 vw_rx_start(); // Start the receiver PLL running
 
 pinMode(13, OUTPUT);
 pinMode(PINNO, OUTPUT);
}
void loop()
{
 uint8_t buf[VW_MAX_MESSAGE_LEN];
 uint8_t buflen = VW_MAX_MESSAGE_LEN;
 
 if (vw_get_message(buf, &buflen)) // Non-blocking
 {
  Serial.println(buf[0]);
  //  if(buf[0]=='1'){
  if (buf[0]) {
   digitalWrite(13, 1);
   delay(100);
   digitalWrite(13, 0);
   digitalWrite(PINNO, HIGH);
   melody();
  }
 }
}
 
void melody() {
 tone(PINNO, 262, BEAT) ; // ド
 delay(BEAT) ;
 tone(PINNO, 294, BEAT) ; // レ
 delay(BEAT) ;
 tone(PINNO, 330, BEAT) ; // ミ
 delay(BEAT) ;
 tone(PINNO, 349, BEAT) ; // ファ
 delay(BEAT) ;
 tone(PINNO, 392, BEAT) ; // ソ
 delay(BEAT) ;
 tone(PINNO, 440, BEAT) ; // ラ
 delay(BEAT) ;
 tone(PINNO, 494, BEAT) ; // シ
 delay(BEAT) ;
 tone(PINNO, 523, BEAT) ; // ド
 delay(3000) ;      // 3秒後に繰り返す
}

 受信機側は、Nano互換機の5V/GNDを受信機RF-5VのVCC/GND、D12を受信機RF-5VのDATAの何れか一方に、D8をパッシブブザーのプラス(+)、GNDをパッシブブザーの他端(マイナス)に接続。

 送信機側でも、また、動作確認でも使わせて頂いた先のリンク先(instructables.com)とパッシブブザー登場の度に使わせて頂いている圧電スピーカをつないで音を鳴らすのスケッチを拝借し、組み合わせた受信機側のラフスケッチは、これです。

 尚、ここでは、VirtualWireライブラリを使っていますが、開発者曰く、VirtualWireライブラリは、より多くの機能を持つRadioHeadライブラリに全機能を吸収、移行の過渡期にあるとアナウンスされています。

[追記:2018/07/29]

 そもそもArduinoなしでESP8266を2つ使ったWiFi玄関チャイム・呼び出しベルができました。

ホーム前へ次へ