既製の無線制御ソケットを使用するため、はんだ付けする必要はありません。 220 V(初心者向け)は触れないほうがよいため、これは非常にクールです。
PS昨日、同様のトピックがありましたが、チャットで制御されるRaspberry Piが使用されました。 私たちのバージョンは、インターネットとスマートフォンを必要としないため、いくぶん単純でより普遍的です。Raspberryの代わりに、通常のArduinoがあります。
必要になります
鉄
- Arduino UNOまたは同等のもの。 原則として、メガも可能です。
- GSM / GPRSシールド。 誰でもできます。 私は中国のSeeedstudioからシールドを使用しました ロシアから購入するのが最も簡単です。
- 443MHzトランスミッター -AliExpressでは、トランスミッター/レシーバーのペアは20ルーブル近くかかります。 私の名前はFS1000A / XY-FSTです。FS1000Aは送信機です。
- マネージドソケット443MHz ドイツのオンラインストアで、リモコン付きの3つのアダプターソケットからAB440Sキットを取り出しました。 今、私たちの場所でも似たようなものを見つけることができるようです-最近Chip-e-Deepで見ました。
ソフトウェア
- GSMシールドを管理するためのライブラリ。 メーカーのウェブサイトからコードをダウンロードします。 私のシールドにはそのようなコードがなかったので、SIM900 GSMSHIELDのユニバーサルライブラリをダウンロードしました
- コンセント管理用のrcスイッチライブラリ 。
動作原理
433MHzの範囲では、低電力のトランシーバーとリモートコントロールデバイスはライセンスなしで動作できます。 セールでは、この周波数範囲の無線によるリモコンで制御される既製の調光器、スイッチ、カートリッジ、ソケットを見つけることができます。 私たちの目的には、「中間」ソケットアダプターが最適です。無線制御プラグを通常のソケットに挿入し、デバイス自体を挿入します。
そのようなソケットを相互に区別できるように、DIPスイッチまたはロータリースイッチで指定されたアドレスを持っています。 このため、複数のコンセントを個別に制御できます。 またはその逆-同じアドレスを設定して、同時にオンとオフを切り替えます。
スキームは基本的なものです。Arduinoはコマンド付きのSMSを受信し、無線モジュールを使用して「オン」または「オフ」信号をソケットに送信します。 SMSはA1B0C0の形式になります。A、B、C ...はソケットの名前、0はオフ、1はオンです。
デバイスをまとめる
- GSMシールドにsimカードを挿入し、arduinoにシールドを挿入します。
- トランスミッタのレッグを接続します:GND→GND、VCC→5V、DATA→ピンの1つ、たとえば12。
- また、送信機のショールの角にある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を受信することもできます。 この場合、アドレス帳とマッシュに番号を保存することをお勧めします。 ライブラリには対応する機能があります。