SomfyDuino IO
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
> |
|
このプロジェクトについて
アイデア
こんにちは、
リビングルームにローラーシャッターを含めるために、ArduinoNanoを使用してUSBto SomfyIOアダプターを実装しようとしました。元のサプライヤーからクラウドベースのハードウェアを入手することなく、DIYホームオートメーションシステムに接続したかったのです。うまくいきました-シンプルなIOリモコンを使用しました。
必要なもの:
- Somfy IORemote-GX037を使用しました。
- USBコネクタを備えたほとんどすべてのArduinoで問題ありませんが、ソフトシリアルでも機能します。
- きちんと梱包するための7芯フラットケーブルとシュリンクホース。
付属品に応じた配線。リモコンはArduinoを介して電力を供給されます-送信中に約20mAを使用するため、非常に優れているはずです。したがって、必ずバッテリーを取り外してください。
コードについて:
全体の矛盾を例えばに接続したい場合RPiの場合は、Serial.printのすべてのアイテムを削除することを検討してください。Arduinoがリッスンしてシャットダウンするだけの場合は、Arduinoとの通信がはるかに簡単になります。
コマンドの送信方法はコードで説明されています。
楽しんでください-コメントは大歓迎です!
乾杯、
ビョルン
P.S. -私は1チャンネルのリモコンを使用しました。基本的に5チャンネルリモコンと同じレイアウトを使用していますが、一部のパーツ(追加のLEDとして)が欠落しています。 SELECTがトリガーされた場合、別のチャネルにジャンプするのではないかと思います。 1つのチャンネルが機能するようになって良かったので、まだ試していませんが、これは更新し続けます
P.P.S.チェックしたばかり-残念ながら選択ボタンが有効になりました-チャンネルを変更しませんが、リモコンを台無しにすることもありません。
コード
- シリアルからソムフィへ
SerialからSomfy Arduino
// SomfyDuino // by Bjoern Foldenauer // 05 / 2017int progPin =8; int upPin =12; int downPin =10; int myPin =11; int selectPin =9; int ledPin =13; boolean upPress =false; boolean downPress =false; boolean myPress =false; boolean progPress =false; boolean selectPress =false; unsigned long holdTime =0; int repeatSend =0; charcomingChar; void setup(){Serial.begin(9600); Serial.println( "SomfyDuino 0.71"); Serial.println( "Bjoern Foldenauer"); Serial.println( "-----"); Serial.println( "次のような単一のシリアル文字を受け取ります:"); Serial.println( "u-UPを押す準備をします"); Serial.println( "d-DOWNを押す準備をします"); Serial.println( "m-Myを押す準備をします"); Serial.println( "p-PROGを押す準備をします"); Serial.println( "s-SELECTを押す準備をします"); Serial.println( "r-送信カウントを1つ増やします"); Serial.println( "任意の数字X-保持時間をX * 100ミリ秒増やします"); Serial.println( "e-実行!定義された(マルチボタン)長押しを実行します"); /erial.println( ""); Serial.println( "例:通常のUP:u5e"); Serial.println( "3秒UP / DOWN:ud9993e"); Serial.println( "5秒PROG:p999995e"); Serial.println( ""); pinMode(progPin、OUTPUT); pinMode(upPin、OUTPUT); pinMode(downPin、OUTPUT); pinMode(myPin、OUTPUT); pinMode(ledPin、OUTPUT); pinMode(selectPin、OUTPUT); digitalWrite(progPin、HIGH); digitalWrite(upPin、HIGH); digitalWrite(downPin、HIGH); digitalWrite(myPin、HIGH); digitalWrite(selectPin、HIGH); digitalWrite(ledPin、LOW);} void loop(){while(Serial.available()==0){delay(50); } //シリアルコマンドが着信するまで待つif(Serial.available()> 0){incomingChar =Serial.read(); Serial.println(incomingChar); if(incomingChar =='u'){upPress =true;} if(incomingChar =='d'){downPress =true;} if(incomingChar =='m'){myPress =true;} if(incomingChar =='p'){progPress =true;} if(incomingChar =='s'){selectPress =true;} if(incomingChar =='1'){holdTime + =100;} if(incomingChar =='2') {holdTime + =200;} if(incomingChar =='3'){holdTime + =300;} if(incomingChar =='4'){holdTime + =400;} if(incomingChar =='5'){holdTime + =500;} if(incomingChar =='6'){holdTime + =600;} if(incomingChar =='7'){holdTime + =700;} if(incomingChar =='8'){holdTime + =800;} if(incomingChar =='9'){holdTime + =900;} if(incomingChar =='r'){repeatSend ++;} if(incomingChar =='e'){somSend();}}} void somSend(){Serial.print( "Pressing:"); for(int i =0; i <=repeatSend; i ++){if(upPress){digitalWrite(upPin、LOW); Serial.print( "up");} if(downPress){digitalWrite(downPin、LOW); Serial.print( "down");} if(myPress){digitalWrite(myPin、LOW); Serial.print( "my");} if(progPress){digitalWrite(progPin、LOW); Serial.print( "prog");} if(selectPress){digitalWrite(selectPin、LOW); Serial.print( "select");} digitalWrite(ledPin、HIGH); Serial.print( "for"); Serial.print(holdTime); Serial.println( "ms"); delay(holdTime); digitalWrite(progPin、HIGH); digitalWrite(upPin、HIGH); digitalWrite(downPin、HIGH); digitalWrite(myPin、HIGH); digitalWrite(selectPin、HIGH); digitalWrite(ledPin、LOW); delay(holdTime); } upPress =false; downPress =false; myPress =false; progPress =false; selectPress =false; holdTime =0; repeatSend =0; Serial.println( "done。");}
回路図
ドキュメントがありません。
製造プロセス