無線スイッチ側増設ソース

無線増設チャイムスイッチ側説明

 私は、家に元々ついていたチャイムに増設する形で、ブザーを設置しました。
 私の使っているチャイムEC730は、スイッチの端子にいつも1Vほどの電流が流れていて、ボタンを押したときだけ一瞬0Vに近くなります。
 arduinoのA0とGND端子にこのスイッチ端子からの電流を並列で受け取って、アナログリードで電圧測定をします。
 A0端子への入力はそのまま受け取っても支障はないのかもしれませんが、あまり電流を流したくはないので、適当な抵抗を挟んでおきました。
 それで、スイッチが押されたときに、増設側の受信機を呼び出して、回路をONにします。

 電源はDCACコンバーターから取り、arduinoはタッパーに入れて、コンバーターごとチャイムの裏の壁に隠しました。
 100V電源は、元のチャイムに来ていた線を、コンセントを付けて二股にしてつないでいます。壁裏で塵が積もることによる自然発火が怖いので、コンセントの差し込み部分は、ビニールテープでしっかりふさいでおきました。


無線送信モジュールの接続

 433mhz無線モジュールのアンテナ付きを用意しました。写真上側の本体と、下側のアンテナが受信用、下側の本体と上側のアンテナが送信用です。
 受信モジュールは、裏から見て、左から、-、data,data、+で、中の二つのデータ線は、どちらにつないでも同じことです。
 送信モジュールは、裏から見て、左から-、+、data、enで、enには何もつなぎません。
 電圧は3Vで駆動します。
 Driverは、RadioHeadのものを使いました。
 ダウンロードがめちゃくちゃ分かりにくいですが、このページの3行目にあるzipファイルをクリックするとダウンロードが始まります。
 これを解凍してarduinoの文書ファイルが置かれているフォルダ内のlibrariesの下に置きます。
 これを使う上での注意点として、RH_ASK.h内に、送信や受信に使うポート番号が指定してあります。ディフォルトでは、受信がD11、送信がD12に設定されています。そのまま使うならいいのですが、Wemos D1では不都合なので、以下の部分を変更します。
 arduino UNOの場合のピン配置は、リンク参照。

//***********************************
#define  RXPIN  uint8_t  rxPin  =  13  //  受信ポート
#define  TXPIN  uint8_t  txPin  =  12  //  送信ポート
//***********************************

class  RH_ASK  :  public  RHGenericDriver
{
public:
    ///  Constructor.
    ///  At  present  only  one  instance  of  RH_ASK  per  sketch  is  supported.
    ///  param[in]  speed  The  desired  bit  rate  in  bits  per  second
    ///  param[in]  rxPin  The  pin  that  is  used  to  get  data  from  the  receiver
    ///  param[in]  txPin  The  pin  that  is  used  to  send  data  to  the  transmitter
    ///  param[in]  pttPin  The  pin  that  is  connected  to  the  transmitter  controller.  It  will  be  set  HIGH  to  enable  the  transmitter  (unless  pttInverted  is  true).
    ///  param[in]  pttInverted  true  if  you  desire  the  pttin  to  be  inverted  so  that  LOW  wil  enable  the  transmitter.
    RH_ASK(uint16_t  speed  =  2000,  RXPIN  ,  TXPIN  ,  uint8_t  pttPin  =  10,  bool  pttInverted  =  false);

//************************************************************* 

無線増設チャイムスイッチ側ソースコード

 /*
  *  チャイムスイッチから無線送信用  元
  *  元付けチャイム機器への増設用
  *  送信元では警告を鳴らさない
  */
#include  <RH_ASK.h>
#include  <SPI.h>  //  Not  actually  used  but  needed  to  compile
//*****************************************************
//警告音出力接続ピン  送信機電源兼用
int  BEEP_SOCKET  =  16;
#define  ANALOG_SWITCH_SOCKET  A0
//  #define  DIGITAL_SWITCH_SOCKET  15
const  char  *pass  =  "Chime1";  //判定用パスワード
//*****************************************************
static  int  switch1=  0;  
RH_ASK  driver;

//  デバッグ設定
#define  DEBUG  //  有効にするとシリアル出力が有効になります。
#ifdef  DEBUG
  #define  Serialbegin  Serial.begin
#else
  #define  Serialbegin
#endif

void  setup()  {
  pinMode(ANALOG_SWITCH_SOCKET,INPUT);
  pinMode(BEEP_SOCKET,OUTPUT);
  Serialbegin(115200);
  if  (!driver.init()){
    Serial.println("radio  init  failed");
  }
}

void  voltagehantei(){
  int  v1;
  static  int  vt  =  -2;
  int  sensorValue  =  analogRead(ANALOG_SWITCH_SOCKET);
  //  delay(500);
  //  Convert  the  analog  reading  (which  goes  from  0  -  1023)  to  a  voltage  (0  -  3.2V):
  float  voltage  =  sensorValue  *  (  3.2  /  1023.0);

  if(voltage>=0.6){
    v1  =  3;
    switch1=0;
  }else{
    v1  =  0;
    switch1=1;
  }

  if(v1  !=  vt){
    Serial.print(F("Voltage="));
    Serial.println(voltage);
    vt  =  v1;
      if(switch1==1){
        on();
      }
  }
}
void  on(){
  int  i;

//  digitalWrite(BEEP_SOCKET,  HIGH);
  for(i=0;i<3;i++){
      Serial.println((char*)pass);
      Serial.print("strlen(pass)=");
    Serial.println(strlen(pass));
    driver.send((uint8_t  *)pass,  strlen(pass));
    driver.waitPacketSent();
    delay(500);
  }

//  digitalWrite(BEEP_SOCKET,  LOW);
}

void  loop()  {
  voltagehantei();
}

スイッチが押された時だけ通電で無線は失敗

 スイッチが押された時だけ、送信モジュールに電源を入れればよいと思っていたのだけれど、実際にやってみるとうまくいきませんでした。通信距離がとても短くなってしまいます。
 通信前に数秒だけ時間を取ってやればいいのか、もっと長い時間モジュールを温めていた方がいいのかよくはわかりませんが、壁の裏の足が届かないところに設置し直すのにくたびれてきたので、ずっと電源を流す式で組み立ててしまいました。
 無線送信はおそらく1回でいいのでしょうが、エラーが起こっても通信を確立したいので、3回同じデータを送ってみました。
 これが果たして有効なのかどうなのか、よくはわかりませんが。

タイトルとURLをコピーしました