AMS et le cristal magique

image

Cette fois, je propose de faire un peu de magie (pourquoi pas?) Et de créer un cristal magique pour nos besoins quotidiens. Nous l'utiliserons pour l'usage auquel il est destiné - pour la divination de diverses entités et événements non évidents. Et nous n'avons besoin que de deux ingrédients pour fabriquer cet artefact: Arduino Mega Server et le contrôleur de bande LED sans fil nooLite SD111-180 .

Le cristal ne sera pas décoratif (pour tromper un public crédule), mais le plus fonctionnel, avec de nombreuses propriétés magiques.

Alors, commençons ...

École de magie


Comme vous le comprenez vous-même, vous ne pouvez pas simplement prendre et accomplir un miracle, vous devez d'abord passer par l'école de magie et apprendre les bases de cet art difficile. Et je vous renvoie ici à une série d'articles ( un , deux , trois ) sur l'intégration des équipements nooLite dans les systèmes domotiques et je vous recommande de vous familiariser avec eux avant de poursuivre la lecture. Dans ces articles, toutes les bases et les détails techniques sur le fonctionnement du Arduino Mega Server avec l'équipement sans fil nooLite sont détaillés. Par conséquent, je continuerai tout le récit en supposant que vous avez déjà lu les articles précédents.

Module


Nous effectuerons toutes les expériences avec le contrôleur sans fil nooLite SD111-180, qui vous permet de contrôler les bandes LED "par voie aérienne", sans aucun fil. Comme toujours avec nooLite, le plus simple est de connecter deux fils à l'alimentation des bandes LED et quatre à la bande elle-même: plus et trois canaux R, G, B.

image

Partie logiciel


Les articles précédents parlaient du noyau de contrôle nooLite intégré au système Arduino Mega Server. Et il a également été mentionné que l'ensemble de fonctions de base pour contrôler les périphériques nooLite a été implémenté dans le noyau et proposé à tous ceux qui souhaitaient, par analogie, ajouter d'autres fonctions nécessaires au noyau. Nous allons maintenant faciliter cette tâche et ajouter des fonctions de contrôle sans fil des bandes de LED au noyau.

Tout d'abord, nous ajoutons la fonction «principale», qui génère des commandes de contrôle pour le module nooLite MT1132 .

void nooSendCommandLed(byte channel, byte command, byte r, byte g, byte b, byte format) {
  byte buf[12];
  
  ledLastState[0] = r;
  ledLastState[1] = g;
  ledLastState[2] = b;

  for (byte i = 0; i < 12; i++) {
    buf[i] = 0;
  }

  buf[0] = 85;
  buf[1] = B01010000;
  buf[2] = command;
  buf[3] = format;
  buf[5] = channel;
  buf[6] = r;
  buf[7] = g;
  buf[8] = b;
  
  int checkSum = 0;
  for (byte i = 0; i < 10; i++) {
    checkSum += buf[i];
  }

  buf[10] = lowByte(checkSum);
  buf[11] = 170;

  for (byte i = 0; i < (12); i++) {
    Serial1.write(buf[i]);
  }
}

Il s'agit de la sœur de la fonction nooSendCommand, que nous avons couverte dans le premier article. Il n'est que légèrement modifié pour les besoins spécifiques de contrôle des bandes LED. Ajout de l'installation de 6, 7, 8 octets de la commande de contrôle, qui contiennent la luminosité sur les trois canaux R, G, B. Et un tableau est ajouté

byte ledLastState[] = {127, 127, 127};

contenant la dernière valeur de couleur définie de la bande LED. Ceci est nécessaire pour que vous puissiez allumer et éteindre la lumière, tout en conservant la valeur de couleur définie. Si cela n'est pas fait, après l'avoir éteint puis rallumé, la couleur sera réinitialisée au blanc, ce qui n'est pas très pratique.

Et pour travailler avec une bande LED, sélectionnez le troisième canal

byte const NOO_CHANNEL_3 = 2;

Vous pouvez choisir l'un des 32 canaux avec lesquels le module nooLite MT1132 fonctionne.

Nous avons maintenant la fonction de base qui contrôle le fonctionnement du contrôleur de bande LED nooLite SD111-180 et, par conséquent, la bande LED elle-même. Et maintenant, nous pouvons commencer à écrire des fonctions wrapper qui nous permettent d'écrire plus facilement du code pour contrôler la couleur de la lueur de la bande.

Enveloppe de base

void nooLed (byte ch, byte r, byte g, byte b) {
  nooSendCommandLed(ch,  6, r, g, b, 3);
}

Indiquez simplement le canal et les couleurs de la lueur. A notre disposition 16 millions de teintes. Ensuite, nous écrivons des fonctions d'emballage pour les couleurs de base (vous pouvez ajouter de telles fonctions pour vos couleurs préférées).

void nooRed    (byte ch, byte v) {nooSendCommandLed(ch,  6, v, 0, 0, 3);}
void nooGreen  (byte ch, byte v) {nooSendCommandLed(ch,  6, 0, v, 0, 3);}
void nooBlue   (byte ch, byte v) {nooSendCommandLed(ch,  6, 0, 0, v, 3);}
void nooYellow (byte ch, byte v) {nooSendCommandLed(ch,  6, v, v, 0, 3);}
void nooMagenta(byte ch, byte v) {nooSendCommandLed(ch,  6, v, 0, v, 3);}
void nooCyan   (byte ch, byte v) {nooSendCommandLed(ch,  6, 0, v, v, 3);}

Indiquez simplement le canal et l'intensité de la lueur dans la plage de 0 à 255. Et quelques autres fonctions "conceptuelles". Intensité blanche, noire et grise.

void nooBlack  (byte ch)         {nooSendCommandLed(ch,  6, 0, 0, 0, 3);}
void nooWhite  (byte ch)         {nooSendCommandLed(ch,  6, 255, 255, 255, 3);}
void nooGray   (byte ch, byte v) {nooSendCommandLed(ch,  6, v, v, v, 3);}

Et la dernière fonction que nous ajouterons au noyau nooLite dans le système Arduino Mega Server est la fonction pour restaurer la dernière couleur de l'éclat de la bande (les modules nooLite eux-mêmes ne se souviennent pas de cette valeur). Cette fonction est utilisée pour allumer la bande (après l'avoir éteinte, ce qui réinitialise la couleur au blanc).

void nooSetLedLastState(byte ch) {
  nooSendCommandLed(ch,  6, ledLastState[0], ledLastState[1], ledLastState[2], 3);
}

Voici le code complet du nouveau noyau de gestion nooLite.

Code noyau complet
/*
  Modul nooLite for Due
  part of Arduino Mega Server project
*/

#ifdef NOO_FEATURE

byte const PIN_TX = 18; // TX PIN (to RX noolite)
byte const PIN_RX = 19; // RX PIN (to TX noolite)

byte const NOO_CHANNEL_1 = 0; // channel (address) 0...31 (MT1132)
byte const NOO_CHANNEL_2 = 1;
byte const NOO_CHANNEL_3 = 2;
byte const NOO_CHANNEL_4 = 3;
byte const NOO_CHANNEL_5 = 4;

void nooInit() {
  Serial1.begin(9600);
  modulNoo = MODUL_ENABLE;
  started("nooLite");
}

void nooWork() {

}

void nooSendCommand(byte channel, byte command, byte data, byte format) {
  byte buf[12];

  for (byte i = 0; i < 12; i++) {
    buf[i] = 0;
  }

  buf[0] = 85;
  buf[1] = B01010000;
  buf[2] = command;
  buf[3] = format;
  buf[5] = channel;
  buf[6] = data;

  int checkSum = 0;
  for (byte i = 0; i < 10; i++) {
    checkSum += buf[i];
  }

  buf[10] = lowByte(checkSum);
  buf[11] = 170;

  for (byte i = 0; i < (12); i++) {
    Serial1.write(buf[i]);
  }
  /*
  Serial.println(">");
  for (byte i = 0; i < (12); i++) {
    Serial.print(buf[i]);
  }
  Serial.println();
  */
}

byte ledLastState[] = {127, 127, 127}; 

void nooSendCommandLed(byte channel, byte command, byte r, byte g, byte b, byte format) {
  byte buf[12];
  
  ledLastState[0] = r;
  ledLastState[1] = g;
  ledLastState[2] = b;

  for (byte i = 0; i < 12; i++) {
    buf[i] = 0;
  }

  buf[0] = 85;
  buf[1] = B01010000;
  buf[2] = command;
  buf[3] = format;
  buf[5] = channel;
  buf[6] = r;
  buf[7] = g;
  buf[8] = b;
  
  int checkSum = 0;
  for (byte i = 0; i < 10; i++) {
    checkSum += buf[i];
  }

  buf[10] = lowByte(checkSum);
  buf[11] = 170;

  for (byte i = 0; i < (12); i++) {
    Serial1.write(buf[i]);
  }
}

//                                     command data format
void nooBind   (byte ch) {nooSendCommand(ch, 15, 0, 0);}
void nooUnbind (byte ch) {nooSendCommand(ch,  9, 0, 0);}

void nooOn     (byte ch) {nooSendCommand(ch,  2, 0, 0);}
void nooOff    (byte ch) {nooSendCommand(ch,  0, 0, 0);}
void nooTrigger(byte ch) {nooSendCommand(ch,  4, 0, 0);}
void nooCancel (byte ch) {nooSendCommand(ch, 10, 0, 0);}

void nooUp     (byte ch) {nooSendCommand(ch,  3, 0, 0);}
void nooDown   (byte ch) {nooSendCommand(ch,  1, 0, 0);}
void nooRevers (byte ch) {nooSendCommand(ch,  5, 0, 0);}

void nooValue  (byte ch, byte v) {nooSendCommand(ch,  6, v, 1);}

void nooLed    (byte ch, byte r, byte g, byte b) {nooSendCommandLed(ch,  6, r, g, b, 3);}
void nooBlack  (byte ch)         {nooSendCommandLed(ch,  6, 0, 0, 0, 3);}
void nooWhite  (byte ch)         {nooSendCommandLed(ch,  6, 255, 255, 255, 3);}
void nooGray   (byte ch, byte v) {nooSendCommandLed(ch,  6, v, v, v, 3);}
void nooRed    (byte ch, byte v) {nooSendCommandLed(ch,  6, v, 0, 0, 3);}
void nooGreen  (byte ch, byte v) {nooSendCommandLed(ch,  6, 0, v, 0, 3);}
void nooBlue   (byte ch, byte v) {nooSendCommandLed(ch,  6, 0, 0, v, 3);}
void nooYellow (byte ch, byte v) {nooSendCommandLed(ch,  6, v, v, 0, 3);}
void nooMagenta(byte ch, byte v) {nooSendCommandLed(ch,  6, v, 0, v, 3);}
void nooCyan   (byte ch, byte v) {nooSendCommandLed(ch,  6, 0, v, v, 3);}

void nooSetLedLastState(byte ch) {nooSendCommandLed(ch,  6, ledLastState[0], ledLastState[1], ledLastState[2], 3);}

#endif // NOO_FEATURE


C'est tout, avec cela, avec la description des modules complémentaires du noyau, nous terminons et passons à l'interface de gestion des couleurs de la bande LED AMS.

Interface de gestion de bande LED


Dans les articles précédents, vous vous souviendrez de l'interface de contrôle des instruments nooLite du système Arduino Mega Server. Nous ne serons pas particulièrement sophistiqués et ajouterons simplement une autre section aux trois existantes (deux sections pour contrôler les appareils et une section pour «lier» / «délier» les modules).

image

Des captures d'écran d'autres sections avec des explications détaillées peuvent être vues dans les articles précédents sur l'intégration d'AMS avec le système nooLite. La nouvelle section permet d'allumer et d'éteindre la bande LED et de choisir la couleur de lueur parmi plusieurs options prédéfinies.

Ceci est juste un exemple d'intégration et vous pouvez créer n'importe quelle autre interface basée sur cet exemple. Vous pouvez faire des choix de couleurs, changer les couleurs en douceur ou proposer des scénarios pour activer, désactiver et changer la couleur du rétroéclairage, etc., etc.

Cuisine domestique


L'interface de contrôle n'est qu'une partie des fonctionnalités qu'Arduino Mega Server fournit avec le noyau de contrôle d'instrument nooLite intégré. Et c'est, pour ainsi dire, la partie superficielle de l'iceberg. Et la partie sous-marine est la possibilité d'utiliser des fonctions wrapper dans le code du système lui-même. Vous pouvez facilement, littéralement dans une seule ligne de code, contrôler l'éclat de la bande et l'utiliser pour indiquer tous les paramètres internes du système (température, fonctions de sécurité, mise sous tension des appareils, etc.) et externes qui viennent via le réseau sous la forme de commandes provenant d'autres appareils de la Smart Home .

Et ici, nous allons au plus intéressant.

Cristal magique


Parlons maintenant du «cristal magique» lui-même. De quoi tu parles? Imaginez tout environnement artificiel d'une personne - l'intérieur d'un appartement ou d'un bureau, une salle pour organiser des événements, l'environnement urbain de nos villes (arrêts, poteaux, bordures de trottoir, etc.), etc. Donc, l'idée est que au niveau actuel de développement technologique, tout sujet peut devenir un «indicateur» de tout événement et paramètre. Vous pouvez aller encore plus loin et rendre n'importe quel sujet interactif ou "vivant", vous pouvez également équiper n'importe quel sujet d'une voix distinctive, etc. (salut, Alice!), Mais c'est un sujet pour un autre article, nous en reparlerons une autre fois.

image

Prenez, par exemple, votre chambre. Sur l'étagère, à côté du téléviseur, ou simplement au milieu du "désordre créatif" sur la table, il peut y avoir un petit objet, par exemple, une "boule magique" qui, en fonction de tout paramètre ou événement, change de couleur, d'ombre ou de luminosité de l'éclat. Cela ne dérange personne et n'attire pas l'attention, il ne fait pas de bruit, mais il suffit de l'examiner rapidement et il devient clair pour vous quelle est la température dans la rue, si vous avez reçu un e-mail par e-mail, combien de bière reste dans le réfrigérateur, est-il temps de nourrir le poisson ou prenez des pilules contre la sclérose prescrites par votre médecin.

image

Des événements particulièrement importants «cristal magique» peuvent être indiqués par un clignotement ou même un son. Et vous définissez vous-même tous les paramètres de ce système, en fonction de vos besoins et de votre imagination: la couleur et l'intensité de la lueur, les événements et les paramètres auxquels le «cristal magique» réagit, etc. Il peut y avoir plusieurs de ces «cristaux» et ils peuvent être de toute sorte, pas nécessairement sous la forme d'une balle.

Maintenant, des petites choses «discrètes», passons aux formes moyennes. Il peut s'agir d'un éclairage au sol ou au plafond, de murs lumineux (parties de murs) ou de niches, etc. d'éléments intérieurs. Par exemple, un rétro-éclairage peut servir d'horloge couleur, quand la nuit il change de lumière en fonction de l'heure, et le matin il devient progressivement plus lumineux et sert de réveil «naturel».

image

Et enfin, c'est un magasin inépuisable d'idées pour diverses performances et la conception d'événements de masse, tels que des fêtes, des événements d'entreprise, etc. des rassemblements de personnes, où un petit cristal magique se transforme en cubes et boules de 2 mètres qui changent de couleur en fonction de , par exemple, les résultats du vote pour ou contre quelque chose.

image

Conclusion


Et tout ce dont vous avez besoin pour réaliser toutes ces idées est le Arduino Mega Server , le contrôleur de bande LED sans fil nooLite SD111-180 et un peu d'imagination. Toutes les innovations décrites dans cet article apparaîtront dans la prochaine version 0.15 du système AMS, et les plus impatients d'entre vous peuvent prendre le code du module du noyau nooLite de cet article et commencer à faire des merveilles dès maintenant.

Articles précédents:

équipement sans fil nooLite et maison intelligente (partie 1).
Équipement sans fil Arduino nooLite et maison intelligente (partie 2). Arduino Mega Server
nooLite Wireless Equipment and Smart Home (Partie 3).

Arduino Mega Server station de soudage promo sur Youtube, démontrant le travail avec un vrai

système promo Arduino Mega Server

Source: https://habr.com/ru/post/fr390025/


All Articles