SMSでコンセントを管理します

リモートで電源を管理する非常に簡単な方法を紹介したいと思います。

既製の無線制御ソケットを使用するため、はんだ付けする必要はありません。 220 V(初心者向け)は触れないほうがよいため、これは非常にクールです。



   -



PS昨日、同様のトピックがありましたが、チャットで制御されるRaspberry Piが使用されました。 私たちのバージョンは、インターネットとスマートフォンを必要としないため、いくぶん単純でより普遍的です。Raspberryの代わりに、通常のArduinoがあります。



必要になります





ソフトウェア





動作原理



433MHzの範囲では、低電力のトランシーバーとリモートコントロールデバイスはライセンスなしで動作できます。 セールでは、この周波数範囲の無線によるリモコンで制御される既製の調光器、スイッチ、カートリッジ、ソケットを見つけることができます。 私たちの目的には、「中間」ソケットアダプターが最適です。無線制御プラグを通常のソケットに挿入し、デバイス自体を挿入します。



そのようなソケットを相互に区別できるように、DIPスイッチまたはロータリースイッチで指定されたアドレスを持っています。 このため、複数のコンセントを個別に制御できます。 またはその逆-同じアドレスを設定して、同時にオンとオフを切り替えます。



スキームは基本的なものです。Arduinoはコマンド付きのSMSを受信し、無線モジュールを使用して「オン」または「オフ」信号をソケットに送信します。 SMSはA1B0C0の形式になります。A、B、C ...はソケットの名前、0はオフ、1はオンです。





デバイスをまとめる



  1. GSMシールドにsimカードを挿入し、arduinoにシールドを挿入します。
  2. トランスミッタのレッグを接続します:GND→GND、VCC→5V、DATA→ピンの1つ、たとえば12。
  3. また、送信機のショールの角にあるANTに15 cmの配線をはんだ付けしました。 しかし、これはオプションのようです。






GSMモジュールの確認



GSMシールドを使用したことがない場合は、最初にテストコード( ここから取得)をアップロードし、その動作を確認することをお勧めします。

コードはすべてのデータをシリアルからSoftwareSerialに、またはその逆に転送するため、シールドをSoftwareSerialに接続することにより、Arduino IDEのシリアルモニターを介してモデムにコマンドを送信できます。

//Serial Relay - Arduino will patch a //serial link between the computer and the GPRS Shield //at 19200 bps 8-N-1 //Computer is connected to Hardware UART //GPRS Shield is connected to the Software UART #include <SoftwareSerial.h> SoftwareSerial GPRS(7, 8); unsigned char buffer[64]; // buffer array for data recieve over serial port int count=0; // counter for buffer array void setup() { GPRS.begin(19200); // the GPRS baud rate Serial.begin(19200); // the Serial port of Arduino baud rate. } void loop() { if (GPRS.available()) // if date is comming from softwareserial port ==> data is comming from gprs shield { while(GPRS.available()) // reading data into char array { buffer[count++]=GPRS.read(); // writing data into array if(count == 64)break; } Serial.write(buffer,count); // if no data transmission ends, write buffer to hardware serial port clearBufferArray(); // call clearBufferArray function to clear the storaged data from the array count = 0; // set counter of while loop to zero } if (Serial.available()) // if data is available on hardwareserial port ==> data is comming from PC or notebook GPRS.write(Serial.read()); // write it to the GPRS shield } void clearBufferArray() // function to clear buffer array { for (int i=0; i<count;i++) { buffer[i]=NULL;} // clear all index of array with command NULL }
      
      





Arduinoにコードを入力し、シリアルモニターを開きます。 ATコマンドを入力します-答えはOKです。 答えがなければ、何かが間違っています。 おそらく、伝送速度を変更する必要がありますか?



次に、ネットワークに登録されていることを確認できます。

AT + COPS?

+COPS: 0,0,"MTS-RUS"





OK









UARTモデムの速度を下げることをお勧めします。 SMSについては正確に知りませんが、GPRSは低速でも確実に機能します。Arduinkaには小さなバッファーがあり、情報の一部が失われる可能性があります。 速度を2400ボーに設定します。

AT+IPR=2400





OK







モデムを使用したい場合は、ブラウザ用の既製のJavaアプレットを使用することをお勧めします 。 さて、あなたはチームのマニュアルを読むことができます。





ソケットのアドレスを確認/変更します



コンセントには2つの部分からなるハードウェアアドレスがあります。 最初の5ビットはセット全体で同じであり、コンソールのアドレスと一致します。 最後の5ビットは個別です。 キャップを緩めてアドレスを変更できます。 他のモデルでは、アドレス設定が異なる場合があります-rc-switchサイトを参照してください。







コード



GSMSHIELDではなく、他のライブラリを使用する場合、コードは確かに異なりますが、原則は同じです。 特定の間隔で、未読のSMSがあるかどうかをチェックして解析し、有効なコマンドが承認された番号から来た場合、無線信号を関数mySwitch.switchOff



またはmySwitch.switchOn



に送信し、ソケットアドレスを渡します。

ご注意 私の場合、Seeedstudioシールドの場合、GSM.cppにアクセスし、指定されたピンを7と8に変更する必要がありました。
 /* Arduino GSM-switch example code Switch on/off radio controlled controlled outlets Author: Vladislav Ross, 2014 Contact: vladislav.ross@gmail.com You need to download: 1. rc-switch https://code.google.com/p/rc-switch/ 2. GSMSHIELD http://www.gsmlib.org/ For GSMSHIELD: * To change pins for Software Serial, use the two lines in GSM.cpp. * If you are using Mega, uncomment "#define MEGA" line in HWSerial.h * You can enable debug messages on serial port by defining DEBUG_ON */ #include "SIM900.h" #include <SoftwareSerial.h> #include "sms.h" #include "call.h" #include <RCSwitch.h> // 433MHz transmitter pin const byte RCpin = 12; char groupAddress[6] = "11111"; char smsLetters[] = "ABC"; char* deviceAddresses[] = { "10000", //A "01000", //B "00100" //C }; char adminNumber[] = "+74991356235"; //your phone number CallGSM call; SMSGSM sms; RCSwitch mySwitch = RCSwitch(); char number[20]; byte stat=0; char smsText[11]; byte position; int deviceLetterIdx = -1; byte i,j; void setup() { gsm.begin(2400); delay(10000); for(i = 1; i <= 21; i++) { sms.DeleteSMS(i); } mySwitch.enableTransmit(RCpin); }; void loop() { //hang up all incoming calls /*stat=call.CallStatus(); if(stat==CALL_INCOM_VOICE) { call.HangUp(); }*/ position = sms.IsSMSPresent(SMS_UNREAD); //get new SMS if (position) { sms.GetSMS(position, number, smsText, 10); sms.DeleteSMS(position); if(strcmp(number, adminNumber) == 0) //accept SMS only from defined number { for (i = 0; i < sizeof(smsText) - 1; i++) { if(deviceLetterIdx != -1) { //got letter, now expecting 0 or 1 if(smsText[i] == '0') { mySwitch.switchOff(groupAddress, deviceAddresses[deviceLetterIdx]); delay(500); } if(smsText[i] == '1') { mySwitch.switchOn(groupAddress, deviceAddresses[deviceLetterIdx]); delay(500); } deviceLetterIdx = -1; } else { //waiting for letter A,B,C... for(j = 0; j < sizeof(smsLetters) - 1; j++) { if(smsLetters[j] == smsText[i]) { deviceLetterIdx = j; break; } } } } } } delay(10000); };
      
      



Github





問題?



ソケットが何にも切り替えたくない場合は、自分のリモコンからレシーバーへの信号を受信しようとすることができます。 Rcスイッチにはサンプルコードがあります。







次は?



このプロジェクトをさらに開発する方法:

まず、Arduino自体とGSMシールドにまだピンがあります。 一部のセンサーまたはデバイスをそれらに接続できます。 たとえば、遠隔温度監視や花の水やりを行います。

第二に、SMSのみを使用し、モジュールは音声とGPRSの送信方法をまだ認識しています。 GPRSはより多くのデータを送信できます。 また、電話をかけるときに電話を落とすことはできませんが、たとえば、電話に出てその場で起こっていることを聞くことができます。

1つの番号からではなく、複数の番号からコントロールSMSを受信することもできます。 この場合、アドレス帳とマッシュに番号を保存することをお勧めします。 ライブラリには対応する機能があります。



All Articles