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

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

増設チャイム

 これは、玄関のスイッチを使って、arduinoだけでチャイムを動かすための設定です。
 おおよそは、既設機器への増設と同じですが、スイッチが押された時の読み取り方法が違うほか、音楽回路が加わります。音楽回路の説明については、後述に譲ります。

使用arduino

 私は、無線Lanを使って、初めにこのチャイムの増設計画を始めたので、それ用に用意したWemos D1ボードをそのまま使っています。
 Wemos D1ボードは、かなり癖があり使いにくいので、WiFiの必要がない無線の場合は、UNO互換のボードを使う方がよいでしょう。
 その場合は、同じピン位置を利用するなら、以下のように変更します。

 GPIO16→2
 GPIO12→6
 GPIO13→7
 GPIO15→10

スイッチが押された時の読み取り

 増設では、analogReadでスイッチの電圧を読み取りましたが、新規設置ならarduinoから電流をスイッチに向かって流して、その値を直接読み取ればよいので、digitalReadが使えます。
 ただこのデジタル入力端子は、Wemos D1ボードの場合、GPIO0やGPIO2では、コードをつないでいると、プログラムの書き込み時にエラーが出ました。警告音も、スイッチの如何にかかわらず、鳴りっぱなしになります。
 基盤の表面にWiFiと書いてあるので、おそらく無線通信用に使っているのでしょうね。
 GPIO12、GPIO0やGPIO15のあたりなら使えます。全部のデジタル端子を調べたわけではないので、他の端子でも使える所はあると思います。プログラムの書き込みができないとか、他にももしエラーが出るなら、その端子がほかの用途と干渉している可能性があります。
 私は回路の組みやすさから、GPIO15を使いました。

スイッチにはプルダウン

 3V端子からスイッチに行き、帰ってきたコードをGPIO15につなぎます。
 スイッチが押されていないときの電圧を一定にさせるために、GPIO15から1KΩの抵抗経由でGNDにつないでプルダウンします。

アラーム電源

 アラームの電源は、GPIO16から+がでます。ブザーぐらいなら、これとGNDとに接続するだけで鳴りますが、リレーを使うなど、もっと大きな電流が必要な場合には、音楽回路の説明のように、トランジスタで信号を増幅する必要があります。

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

 無線送信モジュールの接続については、先に説明しました。

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

/*
    *  チャイムスイッチに直付けして
    *  他の機器はつながずに
    *  無線送信用  元
    *  発信元でもチャイムを鳴らす
  */
#include  <RH_ASK.h>
#include  <SPI.h>  //  Not  actually  used  but  needed  to  compile
//*****************************************************
#define  DIGITAL_SWITCH_SOCKET  15

//警告音出力接続ピン
int  BEEP_SOCKET  =  16;
#define  BEEPTIME  25000  //1000分の1秒単位
const  char  *pass  =  "Chime1";  //判定用パスワード
//*****************************************************

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

static  int  switch1=  0;  
RH_ASK  driver;

void  setup(){
  Serial.begin(115200);    //  Debugging  only
  if  (!driver.init()){
    Serial.println("radio  init  failed");
  }
  pinMode(BEEP_SOCKET,OUTPUT);
  pinMode(DIGITAL_SWITCH_SOCKET,INPUT);
}

void  voltagehantei(){
  int  v1;
  static  int  switcht  =  -2;
  int  sensorValue  =  digitalRead(DIGITAL_SWITCH_SOCKET);

  if(sensorValue==LOW){
      switch1=0;
  }else{
      switch1=1;
  }
  //  Serial.println(sensorValue);
  if(switch1  !=  switcht){
    switcht  =  switch1;
      if(switch1==1){
        Serial.println("ON");
        on();
      }
  }
}

void  on(){
  Serial.println(F("BEEP!!"));
  digitalWrite(BEEP_SOCKET,  HIGH);

  int  i;
  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);
  }

  delay(BEEPTIME);
  digitalWrite(BEEP_SOCKET,  LOW);
}

void  loop(){
  voltagehantei();
}
        
タイトルとURLをコピーしました