SomfyDuino:Arduino Nanoで作るUSB-Somfy IOアダプター
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino Nano R3 | 1 | USBコネクタ付きなら他のボードでも可。SoftSerialも可 |
| フラットケーブル(7芯) | 1 | シュリンクチューブで整理 |
| Somfy IOリモコン(GX037等) | 1 | 1ch/5chどちらでも可 |
必要な工具
- はんだごて(汎用)
プロジェクト概要
着想
リビングのロールシャッターを自作ホームオートメーションシステムに組み込みたく、メーカー純正のクラウドハードウェアを買わずに済むよう、Arduino NanoでUSB-Somfy IOアダプターを自作しました。市販のIOリモコンを分解して接続するだけで動作しました。
必要なもの
- Somfy IOリモコン(GX037使用)
- USBコネクタ付きArduino(Nano等)
- 7芯フラットケーブルとシュリンクチューブ
配線は添付図参照。リモコンはArduinoから給電(送信時約20mA)するため、電池は外してください。
コードについて
Raspberry Pi等に接続する場合、Serial.printデバッグ出力を削除すると通信がシンプルになります。コマンド送信形式はコード内にコメントで記載しています。
※1chリモコンで検証。5chリモコンも基本レイアウトは同じですが、SELECTボタンでチャンネル切替はできませんでした(効果なし、悪影響もなし)。
ソースコード
// SomfyDuino by Bjoern Foldenauer 05/2017
int progPin = 8, upPin = 12, downPin = 10, myPin = 11, selectPin = 9, ledPin = 13;
bool upPress = false, downPress = false, myPress = false, progPress = false, selectPress = false;
unsigned long holdTime = 0;
int repeatSend = 0;
char incomingChar;
void setup() {
Serial.begin(9600);
Serial.println("SomfyDuino 0.71");
Serial.println("Commands: u=UP, d=DOWN, m=MY, p=PROG, s=SELECT");
Serial.println("1-9: hold time x100ms, r: repeat count++, e: EXECUTE");
Serial.println("Example: u5e (regular UP), ud9993e (3sec UP+DOWN)");
pinMode(progPin, OUTPUT); pinMode(upPin, OUTPUT); pinMode(downPin, OUTPUT);
pinMode(myPin, OUTPUT); pinMode(selectPin, OUTPUT); pinMode(ledPin, 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' && incomingChar <= '9') holdTime += (incomingChar - '0') * 100;
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 = downPress = myPress = progPress = selectPress = false;
holdTime = 0; repeatSend = 0;
Serial.println("done.");
}
回路図・配線写真

製造プロセス
- Raspberry Pi 3とPubNubでリモート気象監視
- LIRCでプロフェッショナルなRaspberry Piユニバーサルリモコンを構築
- LIRCなしでRaspberry PiにIRリモコンを接続 - Python UARTアプローチ
- リモート心拍数監視システム:AWS IoTアラート付き
- Raspberry PiとHologramでSMS制御スマートAC電源スイッチを構築
- ROObockey:精密照準アシスト付きリモコンストリートホッケーロボット
- クラウド監視:リアルタイム資産管理のためのリモート制御システム
- モダン産業におけるリモート生産制御の5つの主要メリット
- PLCnextデバイスでgrpcurlを用いた安全なリモートgRPCアクセス
- 製造効率を高めるリモート監視のトップ3メリット
- 先進IoTアップグレードでリモート監視システムを強化