Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

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

À 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

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

SomfyDuino : Adaptateur USB vers Somfy IO pour Arduino Nano SomfyDuino : Adaptateur USB vers Somfy IO pour Arduino Nano SomfyDuino : Adaptateur USB vers Somfy IO pour Arduino Nano

Processus de fabrication

  1. Surveillance météo à distance avec Raspberry Pi 3 et PubNub
  2. Construire une télécommande universelle Raspberry Pi professionnelle avec LIRC
  3. Capturer les commandes de télécommande IR sur Raspberry Pi sans LIRC : Approche Python UART
  4. Système de surveillance cardiaque à distance avec alertes AWS IoT
  5. Interrupteur d'Alimentation AC Intelligent Contrôlé par SMS avec Raspberry Pi et Hologram
  6. ROObockey : Robot de hockey sur rue télécommandé à visée assistée de précision
  7. Surveillance Cloud : système de contrôle à distance pour la gestion d'actifs en temps réel
  8. 5 avantages clés du contrôle de production à distance pour l'industrie moderne
  9. Amélioration des systèmes de surveillance à distance grâce aux mises à niveau IoT avancées