SomfyDuino : Adaptateur USB vers Somfy IO pour Arduino Nano
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino Nano R3 | 1 |
| Câble plat 7 brins | 1 |
| Télécommande Somfy IO (ex: GX037) | 1 |
Outils nécessaires
- Fer à souder
À propos du projet
Genèse
J'ai voulu intégrer mes volets roulants Somfy IO à mon système domotique personnel, sans passer par le matériel cloud du fabricant. J'ai utilisé une simple télécommande IO... ÇA MARCHE !
Matériel requis
- Une télécommande Somfy IO (modèle GX037 utilisé ici, 1 canal)
- Presque n'importe quel Arduino avec connecteur USB (SoftSerial possible aussi)
- Un câble plat 7 brins + gaine thermorétractable pour la finition
Câblage selon les schémas joints. La télécommande est alimentée par l'Arduino (~20 mA en émission) : retirez sa pile.
Le code
Pour piloter l'ensemble depuis un Raspberry Pi par exemple, supprimez les Serial.print : l'Arduino n'a alors qu'à écouter et exécuter.
Le protocole de commande est expliqué dans le code.
Amusez-vous bien ! Commentaires bienvenus.
— Bjoern
P.S. : J'ai utilisé une télécommande 1 canal. Elle a la même disposition que la 5 canaux, mais sans les LED supplémentaires. La touche SELECT ne change pas de canal (testé), mais ne plante pas non plus.
Code : Série vers Somfy
// SomfyDuino
// by Bjoern Foldenauer
// 05/2017
int progPin = 8;
int upPin = 12;
int downPin = 10;
int myPin = 11;
int selectPin = 9;
int ledPin = 13;
boolean upPress = false, downPress = false, myPress = false;
boolean 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("Bjoern Foldenauer");
Serial.println("-----");
Serial.println("Reçoit des caractères série :");
Serial.println("u - preparer appui HAUT");
Serial.println("d - preparer appui BAS");
Serial.println("m - preparer appui MY");
Serial.println("p - preparer appui PROG");
Serial.println("s - preparer appui SELECT");
Serial.println("r - incrementer compteur d'envoi");
Serial.println("chiffre X - augmenter duree de X*100 ms");
Serial.println("e - EXECUTER ! Lance la sequence definie");
Serial.println("");
Serial.println("Exemples :");
Serial.println(" HAUT simple : u5e");
Serial.println(" HAUT/BAS 3s : ud9993e");
Serial.println(" PROG 5s : p999995e");
Serial.println("");
pinMode(progPin, OUTPUT);
pinMode(upPin, OUTPUT);
pinMode(downPin, OUTPUT);
pinMode(myPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(selectPin, OUTPUT);
// Repos = HIGH (pull-up interne de la télécommande)
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("Appui : ");
for (int i = 0; i <= repeatSend; i++) {
if (upPress) { digitalWrite(upPin, LOW); Serial.print("haut "); }
if (downPress) { digitalWrite(downPin, LOW); Serial.print("bas "); }
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("pendant ");
Serial.print(holdTime);
Serial.println(" ms");
delay(holdTime);
// Relâche
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("Termine.");
}
Schémas
Processus de fabrication
- Surveillance météo à distance avec Raspberry Pi 3 et PubNub
- Construire une télécommande universelle Raspberry Pi professionnelle avec LIRC
- Capturer les commandes de télécommande IR sur Raspberry Pi sans LIRC : Approche Python UART
- Système de surveillance cardiaque à distance avec alertes AWS IoT
- Interrupteur d'Alimentation AC Intelligent Contrôlé par SMS avec Raspberry Pi et Hologram
- ROObockey : Robot de hockey sur rue télécommandé à visée assistée de précision
- Surveillance Cloud : système de contrôle à distance pour la gestion d'actifs en temps réel
- 5 avantages clés du contrôle de production à distance pour l'industrie moderne
- Amélioration des systèmes de surveillance à distance grâce aux mises à niveau IoT avancées