SomfyDuino IO
USB to Somfy IO adapter - accepts serial commands and sends them to any Somfy roller shutter or windows blinds.
Components and supplies
1
Flat Cable
1
Arduino Nano R3
1
Somfy IO Remote
Tools and machines
1
Soldering iron (generic)
Project description
Code
Serial to Somfy
arduino
1// SomfyDuino 2// by Bjoern Foldenauer 3// 05/2017 4 5 6int progPin = 8; 7int upPin = 12; 8int downPin = 10; 9int myPin = 11; 10int selectPin = 9; 11int ledPin = 13; 12 13boolean upPress = false; 14boolean downPress = false; 15boolean myPress = false; 16boolean progPress = false; 17boolean selectPress = false; 18unsigned long holdTime = 0; 19int repeatSend = 0; 20 21char incomingChar; 22 23void setup() { 24 Serial.begin(9600); 25 Serial.println("SomfyDuino 0.71"); 26 Serial.println("Bjoern Foldenauer"); 27 Serial.println("-----"); 28 Serial.println("receives single serial characters like:"); 29 Serial.println("u - prepare to press UP"); 30 Serial.println("d - prepare to press DOWN"); 31 Serial.println("m - prepare to press My"); 32 Serial.println("p - prepare to press PROG"); 33 Serial.println("s - prepare to press SELECT"); 34 Serial.println("r - increase send count by one"); 35 Serial.println("any digit X - increase hold time by X*100 ms"); 36 Serial.println("e - Execute! Runs a defined (multi button) press and hold"); 37 /erial.println(""); 38 Serial.println("Example: regular UP: u5e "); 39 Serial.println(" 3 second UP/DOWN: ud9993e "); 40 Serial.println(" 5 second PROG: p999995e "); 41 Serial.println(""); 42 43 pinMode(progPin, OUTPUT); 44 pinMode(upPin, OUTPUT); 45 pinMode(downPin, OUTPUT); 46 pinMode(myPin, OUTPUT); 47 pinMode(ledPin, OUTPUT); 48 pinMode(selectPin, OUTPUT); 49 digitalWrite(progPin, HIGH); 50 digitalWrite(upPin, HIGH); 51 digitalWrite(downPin, HIGH); 52 digitalWrite(myPin, HIGH); 53 digitalWrite(selectPin, HIGH); 54 digitalWrite(ledPin, LOW); 55} 56 57void loop() { 58 59 while (Serial.available() == 0) { delay(50); } // wait until serial command comes in 60 if (Serial.available() > 0) { 61 incomingChar = Serial.read(); 62 Serial.println(incomingChar); 63 if (incomingChar == 'u') {upPress = true;} 64 if (incomingChar == 'd') {downPress = true;} 65 if (incomingChar == 'm') {myPress = true;} 66 if (incomingChar == 'p') {progPress = true;} 67 if (incomingChar == 's') {selectPress = true;} 68 if (incomingChar == '1') {holdTime += 100;} 69 if (incomingChar == '2') {holdTime += 200;} 70 if (incomingChar == '3') {holdTime += 300;} 71 if (incomingChar == '4') {holdTime += 400;} 72 if (incomingChar == '5') {holdTime += 500;} 73 if (incomingChar == '6') {holdTime += 600;} 74 if (incomingChar == '7') {holdTime += 700;} 75 if (incomingChar == '8') {holdTime += 800;} 76 if (incomingChar == '9') {holdTime += 900;} 77 if (incomingChar == 'r') {repeatSend++;} 78 if (incomingChar == 'e') {somSend();} 79 } 80} 81 82void somSend() { 83 Serial.print("Pressing: "); 84 85 for(int i=0; i <= repeatSend; i++) { 86 if (upPress) {digitalWrite(upPin, LOW); Serial.print("up ");} 87 if (downPress) {digitalWrite(downPin, LOW); Serial.print("down ");} 88 if (myPress) {digitalWrite(myPin, LOW); Serial.print("my ");} 89 if (progPress) {digitalWrite(progPin, LOW); Serial.print("prog ");} 90 if (selectPress) {digitalWrite(selectPin, LOW); Serial.print("select ");} 91 digitalWrite(ledPin, HIGH); 92 93 Serial.print("for "); 94 Serial.print(holdTime); 95 Serial.println(" ms"); 96 97 delay(holdTime); 98 99 digitalWrite(progPin, HIGH); 100 digitalWrite(upPin, HIGH); 101 digitalWrite(downPin, HIGH); 102 digitalWrite(myPin, HIGH); 103 digitalWrite(selectPin, HIGH); 104 digitalWrite(ledPin, LOW); 105 106 delay(holdTime); 107 } 108 109 upPress = false; 110 downPress = false; 111 myPress = false; 112 progPress = false; 113 selectPress = false; 114 115 116 holdTime = 0; 117 repeatSend = 0; 118 119 Serial.println("done."); 120} 121
Serial to Somfy
arduino
1// SomfyDuino 2// by Bjoern Foldenauer 3// 05/2017 4 5 6int 7 progPin = 8; 8int upPin = 12; 9int downPin = 10; 10int myPin = 11; 11int selectPin 12 = 9; 13int ledPin = 13; 14 15boolean upPress = false; 16boolean downPress = 17 false; 18boolean myPress = false; 19boolean progPress = false; 20boolean selectPress 21 = false; 22unsigned long holdTime = 0; 23int repeatSend = 0; 24 25char incomingChar; 26 27void 28 setup() { 29 Serial.begin(9600); 30 Serial.println("SomfyDuino 0.71"); 31 32 Serial.println("Bjoern Foldenauer"); 33 Serial.println("-----"); 34 Serial.println("receives 35 single serial characters like:"); 36 Serial.println("u - prepare to press UP"); 37 38 Serial.println("d - prepare to press DOWN"); 39 Serial.println("m - prepare 40 to press My"); 41 Serial.println("p - prepare to press PROG"); 42 Serial.println("s 43 - prepare to press SELECT"); 44 Serial.println("r - increase send count by one"); 45 46 Serial.println("any digit X - increase hold time by X*100 ms"); 47 Serial.println("e 48 - Execute! Runs a defined (multi button) press and hold"); 49 /erial.println(""); 50 51 Serial.println("Example: regular UP: u5e "); 52 Serial.println(" 3 53 second UP/DOWN: ud9993e "); 54 Serial.println(" 5 second PROG: p999995e 55 "); 56 Serial.println(""); 57 58 pinMode(progPin, OUTPUT); 59 pinMode(upPin, 60 OUTPUT); 61 pinMode(downPin, OUTPUT); 62 pinMode(myPin, OUTPUT); 63 pinMode(ledPin, 64 OUTPUT); 65 pinMode(selectPin, OUTPUT); 66 digitalWrite(progPin, HIGH); 67 68 digitalWrite(upPin, HIGH); 69 digitalWrite(downPin, HIGH); 70 digitalWrite(myPin, 71 HIGH); 72 digitalWrite(selectPin, HIGH); 73 digitalWrite(ledPin, LOW); 74} 75 76void 77 loop() { 78 79 while (Serial.available() == 0) { delay(50); } // wait until 80 serial command comes in 81 if (Serial.available() > 0) { 82 incomingChar = 83 Serial.read(); 84 Serial.println(incomingChar); 85 if (incomingChar == 'u') 86 {upPress = true;} 87 if (incomingChar == 'd') {downPress = true;} 88 if 89 (incomingChar == 'm') {myPress = true;} 90 if (incomingChar == 'p') {progPress 91 = true;} 92 if (incomingChar == 's') {selectPress = true;} 93 if (incomingChar 94 == '1') {holdTime += 100;} 95 if (incomingChar == '2') {holdTime += 200;} 96 97 if (incomingChar == '3') {holdTime += 300;} 98 if (incomingChar == '4') 99 {holdTime += 400;} 100 if (incomingChar == '5') {holdTime += 500;} 101 if 102 (incomingChar == '6') {holdTime += 600;} 103 if (incomingChar == '7') {holdTime 104 += 700;} 105 if (incomingChar == '8') {holdTime += 800;} 106 if (incomingChar 107 == '9') {holdTime += 900;} 108 if (incomingChar == 'r') {repeatSend++;} 109 if 110 (incomingChar == 'e') {somSend();} 111 } 112} 113 114void somSend() { 115 Serial.print("Pressing: 116 "); 117 118 for(int i=0; i <= repeatSend; i++) { 119 if (upPress) {digitalWrite(upPin, 120 LOW); Serial.print("up ");} 121 if (downPress) {digitalWrite(downPin, LOW); 122 Serial.print("down ");} 123 if (myPress) {digitalWrite(myPin, LOW); Serial.print("my 124 ");} 125 if (progPress) {digitalWrite(progPin, LOW); Serial.print("prog ");} 126 127 if (selectPress) {digitalWrite(selectPin, LOW); Serial.print("select ");} 128 129 digitalWrite(ledPin, HIGH); 130 131 Serial.print("for "); 132 Serial.print(holdTime); 133 134 Serial.println(" ms"); 135 136 delay(holdTime); 137 138 digitalWrite(progPin, 139 HIGH); 140 digitalWrite(upPin, HIGH); 141 digitalWrite(downPin, HIGH); 142 143 digitalWrite(myPin, HIGH); 144 digitalWrite(selectPin, HIGH); 145 digitalWrite(ledPin, 146 LOW); 147 148 delay(holdTime); 149 } 150 151 upPress = false; 152 downPress 153 = false; 154 myPress = false; 155 progPress = false; 156 selectPress = false; 157 158 159 160 holdTime = 0; 161 repeatSend = 0; 162 163 Serial.println("done."); 164} 165
Downloadable files
Real life wiring2
Real life wiring2

Real life wiring1
Real life wiring1

Wiring
Wiring
Real life wiring2
Real life wiring2

Wiring
Wiring
Real life wiring1
Real life wiring1

Finished and packed
Finished and packed
Comments
Only logged in users can leave comments