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

SMART CUBE :une nouvelle façon de contrôler votre maison

Composants et fournitures

Arduino 101
× 1
LED (générique)
1 bleu - 1 jaune - 1 vert - 2 rouges
× 5
Résistance 221 ohm
× 5
Planche à pain (générique)
Pas obligatoire
× 1
Seed Base Shield V2
× 1
Rétroéclairage LCD RVB Seeed Grove
× 1
Capteur de son Seeed Grove
× 1
Avertisseur sonore Seeed Grove
× 1
Capteur de température Seed Grove
× 1
Clavier
× 1
Câbles de raccordement (générique)
× 1
Batterie 9V (générique)
× 1
Clip de batterie 9V
× 1
Fibre de densité moyenne (MDF) 20x30 cm
MDF 3 mm ou autre matériau pour la découpe laser
× 1

Outils et machines nécessaires

Coupe laser (générique)
Fer à souder (générique)

Applications et services en ligne

Arduino IDE
Nordic Semiconductor nRF Connect SDK
Pas obligatoire

À propos de ce projet

Qu'est-ce que SMART CUBE ?

Smart Cube est un contrôleur pour vos appareils Smart Home.

Aujourd'hui, gérer de manière plus intelligente tous les appareils de nos maisons devient une exigence . Nous avons besoin de quelque chose de simple et intuitif utiliser. Cube intelligent pourrait être une solution :c'est un appareil portable qui contient un Arduino 101 carte et quelques capteurs qui communiquent avec les appareils et les actionneurs de votre Smart Home.

L'innovation de cette télécommande est liée à l'innovation de la carte Arduino 101. Il utilise Bluetooth (BLE) pour contrôler les lumières, la température et votre téléviseur et vous pouvez également le synchroniser avec votre smartphone . Mais l'innovation majeure est la façon dont vous interagissez avec Smart Cube avec votre geste à l'aide du gyroscope et de l'accéléromètre. Le cube a 6 faces et chacune contrôle une fonction particulière . La fonction que vous souhaitez utiliser est détectée grâce au gyroscope qui reconnaît le haut du visage. Par exemple vous pouvez ouvrir les lumières de la pièce dans laquelle vous vous trouvez juste en positionnant le cube avec la « face lumineuse » en position haute . Si vous voulez éteindre la lumière, il vous suffit de secouer le cube.

Si un visage est UP et il ne bouge pas pendant plus de 2 secondes, la fonction correspondante est activée. Ce retard est fait pour que vous puissiez avoir le temps de faire pivoter et d'interagir avec le cube pour trouver le visage dont vous avez besoin sans activer accidentellement d'autres fonctions. Lorsque vous secouez le cube pendant plus de 2 secondes, la dernière fonction activée est fermée.

Ce projet a pour but de vous aider à construire un contrôleur intelligent . Cet appareil a besoin d'un récepteur (axe central intelligent dans l'image) qui interprètent les données et gérer les fonctions de votre maison intelligente. La principale sortie du cube est un signal BLE qui peut être utilisé de plusieurs manières :par exemple, vous pouvez connecter le cube à une application pour smartphone (ou créez le vôtre), ou vous pouvez créer une station avec un autre Arduino qui collectent les données BLE et contrôlent directement les appareils électroménagers de votre maison. En raison de la variété des cas, cette partie dépend de votre exigence. Dans ce guide, nous verrons comment construire un cube intelligent et vous apprendrez à le personnaliser.

Fonctions :

La structure du code est facile à personnaliser (nous analysons le code plus tard) afin que vous puissiez décider quelles fonctions contrôler. Voici les fonctions que j'ai décidé de contrôler :

LUMIÈRES :Ce visage en UP position ouverte les lumières de la pièce dans laquelle vous vous trouvez. Si vous secouez le cube, les lumières s'éteignent et une led jaune dans ce visage est activé afin que vous puissiez trouver le cube dans l'obscurité. La communication avec vos lampes est faite par le BLE de la carte 101.

TEMPÉRATURE :Ce visage UP activer (via BLE) la climatisation s'il fait chaud ou le chauffage s'il fait froid. Il détecte la température à l'aide d'un capteur thermique et ouvrez une led bleue si le conditionneur est allumé (flocon de neige) ou un rouge un si le chauffage est activé (soleil).

MINUTERIE :Ce visage UP démarrer une minuterie que vous pouvez voir sur l'écran LCD. Il y a un buzzer qui fonctionne comme une alarme lorsque le compte à rebours est terminé. Si vous secouez, vous arrêtez le chronomètre et vous pouvez voir le temps restant. Lorsque le compte à rebours se termine, la couleur de l'écran LCD passe du bleu au rouge et le buzzer émet trois sons.

TV :Ce visage UP ouvrez le téléviseur. Le cube devient une télécommande pour votre téléviseur. Il y a un panneau de boutons avec des chiffres qui ne s'activent que si cette face est UP afin d'éviter les touches accidentelles. Le numéro que vous appuyez est envoyé via BLE au contrôleur central connecté à votre téléviseur. En secouant le cube, vous fermez le téléviseur.

SON :Ce visage UP activer une led dont la luminosité est fonction du niveau sonore de la pièce. Le bruit est détecté grâce à un capteur sonore. Si vous secouez le cube, vous fermez cette fonction. (Si vous le souhaitez, vous pouvez activer votre fonction personnelle en tapant dans vos mains).

OFF face :si vous ne secouez pas le cube, cette face ressemble à une position neutre dans lequel rien n'est changé. Si vous voulez fermer tout positionner le cube avec la face OFF VERS LE HAUT et le secouer. Ce geste est comme le bouton d'accueil de votre smartphone sur lequel vous appuyez si vous souhaitez sortir rapidement. Il y a une led rouge pour que vous puissiez trouver le cube s'il fait noir.

Différences par rapport au concept :

Le plan initial était d'utiliser également la communication IR pour connecter votre téléviseur directement au cube. Parce que l'Arduino 101 ne supporte pas (pour l'instant) la bibliothèque qui gère les signaux IR j'ai décidé d'envoyer les informations via BLE à une station qui peut gérer cette bibliothèque (comme Arduino UNO). En raison de ce problème, j'ai supprimé la fonction radio (très similaire à la face TV), en la remplaçant par une face de capteur de son. Ce visage pourrait être utilisé pour reconnaître un bruit fort (comme un claquement de mains) pour activer quelque chose. Le plus gros changement concerne le matériel du cube. Au départ j'ai pensé le construire avec une imprimante 3D mais ensuite j'ai décidé d'utiliser un coupe laser . De cette façon, il est plus facile de substituer un visage si vous voulez changer une fonction. Par exemple, vous pouvez retirer le cadran de la minuterie et le changer avec un visage qui remplira automatiquement la gamelle de votre chat. Être modulaire vous n'avez pas besoin de reconstruire toute la structure !

Construisons-le :

Suivez ces instructions pour créer votre propre cube intelligent. Nous allons commencer par le matériel , l'assemblage de l'électronique composants d'abord, puis le corps découpé au laser du cube en MDF. Après cette opération j'expliquerai comment fonctionne le code et comment vous pouvez le personnaliser . Après avoir téléchargé le code sur votre Arduino 101, vous pouvez télécharger l'application pour voir la sortie BLE du cube ou le connecter directement à votre maison connectée !

Matériel - électronique :

Commençons par votre Arduino 101. C'est le fritzing schéma à suivre :

Montez le Bouclier de base Grove sur votre tableau et commencez par les connexions.

Clavier :vous devez connecter les fils dans l'ordre aux broches :10, 8, 7, 6, 5, 4, 2.

Connexions LED :

Tout d'abord il faut préparer les leds :

- connectez la longue patte de la led (anode) à une résistance de 220 ohms puis à un fil rouge (c'est le câble à connecter à la broche)

- connecter la patte courte (cathode) à un fil blanc (cela ira à la masse)

- souder les pièces et les recouvrir de ruban isolant

- connectez tous les câbles blancs à un seul câble blanc (cela ira à la terre) et soudez-les tous ensemble

Connectez maintenant les fils rouges à votre Arduino :la led VERTE à la broche 9, la led JAUNE à la broche 11, la led ROUGE à la broche 12, la led BLEUE à la broche 13 et le dernier ROUGE à la broche A2.

Capteurs Grove :

Connectez les capteurs de bosquet au blindage (voir schéma sur les pièces jointes).

Buzzer vers D3, LCD RGB vers I2C, capteur de température vers A0, capteur de son vers A1.

Ok, maintenant nous avons connecté tous les électriques les pièces. Maintenant, vous avez besoin du cas .

Quincaillerie - boîte

Vous pouvez télécharger le croquis du cube à découper au laser. Les lignes rouges dans le croquis sont les symboles des visages, il suffit de graver eux. Les lignes noires doivent être coupées. La dimension interne du cube est de 9 cm . Le croquis est ok si vous utilisez un matériau 3mm , si vous utilisez une épaisseur différente, vous devez la modifier (vous pouvez utiliser ce site Web :http://www.makercase.com/).

Le matériau que je choisis est le MDF (Fibre de densité moyenne) mais vous pouvez utiliser ce que vous voulez.

Voici quelques photos de la découpe laser :

Maintenant, nous devons l'assembler .

J'ai collé quelques morceaux de carton pour faire de l'épaisseur pour la led. De cette façon, ils seront alignés avec la surface .

Maintenant, nous montons le clavier . Insérez-le dans le trou et retirez le film adhésif, puis reconnectez les broches.

Maintenant l'LCD RVB . Cela correspond parfaitement au trou.

Préparons le connecteur de batterie :

J'ai coupé une vieille prise de transformateur et l'ai connectée à un clip de batterie. De cette façon, nous économisons de l'espace à l'intérieur de la boîte.

À ce stade, c'est ce que vous devriez avoir :

Il ne vous reste plus qu'à connecter la batterie , télécharger le code et fermez le cube !

ASTUCE :fixez la carte et la batterie avec le boîtier de sorte que lorsque vous secouez le cube, ils soient stables.

Code

Vous pouvez trouver le code dans les pièces jointes . Téléchargez-le dans votre carte avec l'Arduino IDE (n'oubliez pas de mettre à jour votre logiciel pour la compatibilité Arduino 101).

J'ai commenté presque chaque ligne du code pour le rendre plus compréhensible que possible. N'ayez pas peur des 500+ lignes, la structure n'est pas si compliquée.

Au début il y a les librairies et toutes les variables déclaration .

Dans cette partie il y a aussi la définition des services BLE et caractéristique . J'ai utilisé Automation IO un service. J'ai utilisé le Numérique caractéristique pour les lumières et la température (cela utilise 2 bits, donc 4 cas possibles à codifier) ​​et l'Analog pour TV (pour envoyer tous les codes du clavier).

Ensuite, la configuration . Ce tap est exécuté une seule fois au début. Ici, nous initialisons les composants comme entrées ou sorties et initialisons le BLE et le gyroscope de la carte 101.

La partie principale est la boucle . Il est divisé en quatre parties :

  • 1 La première partie est copiée à partir du didacticiel du site Web Arduino :(https://www.arduino.cc/en/Tutorial/Genuino101CurieIMUAccelerometerOrientation ) cette partie est exécutée en permanence et il renvoie l'orientation du conseil.
  • 2 La deuxième partie nous activer un visage uniquement s'il est en position haute pendant plus de deux secondes . On utilise les millis fonction pour compter le temps. Lorsque la position change il mémorise la valeur en millis et si l'orientation reste la même, après un intervalle (2 sec), on rentre dans une if-zone où le visage sélectionné est devenu vrai (pour la 4ème partie).
  • 3 La troisième partie n'est activée que si le cube est secoué avec une certaine intensité et pendant plus de 2 secondes. Le dernier activé la fonction face est fermée et le visage est défini sur false . Si le visage est faux, impossible d'entrer dans la 4e partie.
  • 4 La quatrième partie est uniquement pour vrai visages. Voici le noyau des fonctions du cube intelligent. Dans cette partie ne sont exécutées en permanence que les faces vraies en boucle.

Vous pouvez modifier le visage fonctionne avec quelques modifications du code. La structure principale devrait être comme décrit. Vous pouvez modifier la partie à l'intérieur des conditions if de chaque visage.

if (face2 ==true) { // TEMPERATURE face // COMMENCER A CHANGER ICI digitalWrite (LEDOFF, LOW); // si cette face est vraie, la led de face OFF est FAIBLE if (central.connected() ==true) { // si le cube est connecté BLE // lit la valeur de température int val =analogRead(pinTemp); // obtient la valeur analogique resistance=(float)(1023-val)*10000/val; // obtenir la température de résistance=1/(log(résistance/10000)/B+1/298.15)-273.15; // calculer la température //conditions d'activation if (temperature> tooHot) { // activer la climatisation digitalWrite(LEDhot, LOW); // fermer le chauffage led digitalWrite(LEDcold, HIGH); // climatiseur ouvert led termoChar.setValue(1); // définir via BLE la condition 1 =froid allumé - chaud éteint } if (temperature  tooCold &&temperature  

Il faut coder la partie "vrai" (comme dans le code précédent) et aussi la partie "faux" lorsque le cube est secoué :

// TEMPERATURE désactivation if (lastFUNCTION ==2) { // TEMPERATURE face // COMMENCER A CHANGER ICI // si une centrale est connectée au périphérique :if (central.connected() ==true) { digitalWrite (LEDchaude, FAIBLE) ; // fermer la température led rouge digitalWrite(LEDcold, LOW); // fermeture de la led bleue de température termoChar.setValue(0); // signal BLE de température :0 =froid éteint - chaud éteint //END HERE } Serial.println("TEMPERATURE false - CLOSE"); face2 =faux ; // TEMPERATURE visage est devenu faux } 

N'oubliez pas de définir le visage comme faux quand vous le secouez.

Application :

Pour voir les sorties du cube BLE, vous pouvez télécharger cette application :nRF Connect

https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp&hl=it

Lorsque vous l'ouvrez, il suffit de rechercher pour les appareils et connecter avec "smartcubesketch". Ensuite, vous verrez trois onglets "Automation IO", cliquez dessus et appuyez sur le collecteur de données en continu.

Il est important de connecter le cube car certaines fonctions (lumières, température et tv) ne sont exécutées que si le cube est connecté.

Comment ça marche :VIDÉO

Téléchargez le code, insérez la batterie, fermez la boîte et...

...maintenant vous avez un CUBE INTELLIGENT !

J'ai fait une vidéo pour vous montrer toutes les fonctions du cube et comment l'utiliser.

Conclusion

Ce projet n'est que la première étape à une maison intelligente. Mon but était d'utiliser l'Arduino 101 potentiel du conseil pour créer quelque chose de nouveau . Je pense que l'accéléromètre et gyroscope donner au conseil d'administration de nouvelles opportunités en termes de mobilité. Avec le BLE, en plus d'être portable, il est également facile à connecter .

C'est la première fois que je réalise concrètement un de mes projets (je veux dire avec un prototype fonctionnel). C'était dur et il y a eu quelques difficultés sur la route mais à la fin j'ai beaucoup appris et je suis content du résultat. J'espère que tous ceux qui liront ce guide pourront apprendre quelque chose de mon travail et également modifier ce projet en fonction de leurs besoins . Je suis désolé pour mon mauvais anglais mais j'espère que les images pourront vous aider.

Dans le futur de ce projet je compte créer la centraline c'est comme le pont entre le cube intelligent et les actionneurs (lumières, température, tv...). Cette centrale recevra le signal BLE du cube et utilisera ces informations pour faire des choses intelligentes dans votre maison.

Je suis très heureux d'avoir l'opportunité d'utiliser Arduino 101 et le kit Grove (le kit est très simple et rapide pour le prototypage).

J'espère qu'utiliser le tableau de cette manière pourrait être une inspiration pour votre projet. Vous pouvez le personnaliser à votre guise :Je suis curieux de voir quelles fonctions allez-vous créer et dans quel contexte différent vous l'utiliserez !

Ce n'est peut-être pas une révolution, mais c'est une nouvelle façon d'interagir avec votre maison .

J'espère que ce tutoriel vous plaira.

Maintenant c'est à ton tour :mettez vos mains sur le cube et piratez-le !

Code

  • SMART CUBE - code complet avec commentaires
SMART CUBE - code complet avec commentairesArduino
Il s'agit du code à télécharger sur votre Arduino 101. Vous pouvez utiliser ce code tel quel ou le personnaliser en fonction de vos besoins. Suivez les commentaires pour comprendre comment cela fonctionne.
// Libraries#include "CurieIMU.h" // Accéléromètre &Gyroscope#include  // Bluetooth Low Energy#include #include "rgb_lcd .h" // LCD#include  // Keypadrgb_lcd lcd; // Initialisation LCD// Initialisation Bluetooth:BLEPeripheral blePeripheral; // BLE Peripheral Device (la carte que vous programmez) // BLE ServicesBLEService lightsService("1815"); // BLE Automation IO (1815) - allume les informations BLEService termoService("1815"); // BLE Automation IO - informations de température BLEService TVService("1815"); // BLE Automation IO - informations tv// Caractéristique BLEBLEUnsignedCharCharacteristic lightsChar("2A56", // Caractéristique BLE Digital (2A56) - lights BLERead | BLENotify);BLEUnsignedCharCharacteristic termoChar("2A56", // Caractéristique BLE Digital - température BLERead | BLENotify );BLEUnsignedCharCharacteristic TVChar("2A58", // Caractéristique BLE Analogique (2A58) - tv BLERead | BLENotify);// Déclaration de constante et de variables:// Fonctions d'orientation du visage et de secousse:int lastOrientation =- 1; // orientation précédente (pour comparaison) non signé long previousMillis =0; // dernière mise à jour intervalle long non signé =2000 ; // temps d'attente en position haute avant l'activation du visageunsigned long SHAKEpreviousMillis =0; // dernière mise à jour non signée long SHAKEinterval =2000; // temps d'attente pendant la secousse pour la désactivation du visageboolean keep =false; // ceci est utilisé pour ne compter qu'une seule fois le changement d'orientation du visage lastFUNCTION =-1; // cela permet de savoir quelle est l'information précédente// Initialisation des faces :au début chaque face est falseboolean face0 =false;boolean face1 =false;boolean face2 =false;boolean face3 =false;boolean face4 =false;boolean face5 =false;// LIGHTS faceconst int LEDlights =11; // broche 11 :led jaune // TEMPERATURE faceconst int pinTemp =A0; // broche A0 :température sensorconst int LEDhot =12; // broche 12 :ledconst rouge int LEDcold =13 ; // broche 13 : température du flotteur de la led bleue ; // mémorisation de la valeur de températureint B=3975; // Valeur B de la résistance du flotteur de la thermistance ; // valeur de résistance memorizationfloat tooHot =26.0; // température à laquelle le climatiseur est activé [SET]float tooCold =23.0; // température à laquelle le chauffage est activé [SET]// TIMER faceint BUZZER =3; // broche 3 :buzzerboolean KEEPtime =false; // ceci est utilisé pour ne compter qu'une seule fois le changement d'orientation du visage (pas de redémarrage pendant le comptage)int TIMERmillis =0; // les éléments suivants sont destinés à la détermination du compte à reboursint prevSHOWsecond =0;int CountdownInMillis =0;int SHOWmillis =0; // calcul de la valeur en millis resultint SHOWminute =0; // valeur des minutes à afficher dans le moniteur pour le compte à rebours SHOWseconds =0; // valeur des secondes à afficher dans le moniteur pour le compte à rebours int SETminute =2; // régler la minuterie de 2 minutes [SET]const int SETsecond =30; // régler la minuterie de 30 secondes [SET]// SOUND faceconst int soundLED =9; // broche 9 :led verte const int soundSENSOR =A1; // broche A0 :luminosité du capteur sonore =0 ; // initialisation de la luminosité de la led verte // octet TV faceconst ROWS =4; // quatre lignes keyconst byte COLS =3; // trois colonnes touches de clavier[ROWS][COLS] ={ {'1','2','3'}, {'4','5','6'}, {'7','8' ,'9'}, {'*','0','#'}} ; // valeurs des boutons du clavier byte rowPins[ROWS] ={10,8,7,6}; // broche 10,8,7,6 :connexion aux broches de ligne du pavé numérique colPins[COLS] ={5,4,2} ; // broche 5,4,2 : connectez-vous aux broches de colonne du clavierKeypad keyboard =Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // initialisation clavier// OFF faceconst int LEDOFF =A2; // broche A2:configuration ledvoid rouge() { pinMode(LEDlights, OUTPUT); // chaque led est définie comme une sortie pinMode (LEDhot, OUTPUT); pinMode (LEDfroid, SORTIE); pinMode (LED sonore, SORTIE); pinMode (LEDOFF, SORTIE); Serial.begin(9600); // initialiser la communication série CountdownInMillis =(SETminute*60 + SETsecond)*1000; // ceci calcule la valeur correspondante en millis à partir du réglage des minutes et des secondes lcd.begin(16, 2); // Initialisation LCD lcd.setRGB(0, 0, 0); // L'écran LCD RVB est désactivé au début // initialise le périphérique Serial.println("Initialisation du périphérique IMU..."); CurieIMU.begin(); // Définir la plage de l'accéléromètre sur 2G CurieIMU.setAccelerometerRange(2); // Activer la détection de choc CurieIMU.setDetectionThreshold(CURIE_IMU_SHOCK, 7000); // 7.0g =7000 mg (cette valeur définit l'intensité du choc) CurieIMU.setDetectionDuration(CURIE_IMU_SHOCK, 2000); // 2000ms (cette valeur définit la durée du choc) CurieIMU.interrupts(CURIE_IMU_SHOCK); // Initialisation de la configuration BLE blePeripheral.setLocalName("SmartCubeSketch"); // le nom du projet blePeripheral.setAdvertisedServiceUuid(lightsService.uuid()); // ajoute l'UUID du service d'éclairage blePeripheral.addAttribute(lightsService); // ajoute le service d'éclairage BLE blePeripheral.addAttribute(lightsChar); // ajoute la caractéristique des lumières BLE lightsChar.setValue(3); // valeur initiale pour cette caractéristique =3 // signification de la valeur des lumières BLE :0 =lumières éteintes, 1 =lumières allumées, 3 =état initial, 4 =non utilisé blePeripheral.setAdvertisedServiceUuid(termoService.uuid()); // ajoute l'UUID du service de température blePeripheral.addAttribute(termoService); // ajoute le service de température BLE blePeripheral.addAttribute(termoChar); // ajoute la caractéristique de température BLE termoChar.setValue(0); // la valeur initiale est 0 :cold off - hot off // signification de la valeur termo BLE :0 =cold off - hot off, 1 =cold on - hot off, 2 =cold off - hot on, 3 =non utilisé blePeripheral.setAdvertisedServiceUuid (TVService.uuid()); // ajoute l'UUID du service de télévision blePeripheral.addAttribute(TVService); // ajoute le service de télévision BLE blePeripheral.addAttribute(TVChar); // ajoute la caractéristique tv TVChar.setValue('x'); // valeur initiale de cette caractéristique (x ne veut rien dire) // valeur BLE TV signifiant :#numéro correspondant au bouton appuyé, C :fermer TV, O :ouvrir TV, x :état initial blePeripheral.begin(); Serial.println("Périphérique Bluetooth actif, en attente de connexions..."); } // configuration de la boucle endvoid() { BLECentral central =blePeripheral.central(); // Connexion BLE non signée longue currentMillis =millis(); // valeur actuelle du temps en millisecondes // le code suivant provient de www.arduino.cc/en/Tutorial/Genuino101CurieIMUccelerometerOrientation // il est utilisé pour détecter l'orientation de la carte int orientation =- 1; // l'orientation du tableau String orientationString; // chaîne pour imprimer la description de l'orientation // lire l'accéléromètre :int x =CurieIMU.readAccelerometer(X_AXIS); int y =CurieIMU.readAccelerometer(Y_AXIS); int z =CurieIMU.readAccelerometer(Z_AXIS); // calcule les valeurs absolues, pour déterminer le plus grand int absX =abs(x); int absY =abs(y); int absZ =abs(z); if ( (absZ> absX) &&(absZ> absY)) { // orientation de base sur Z if (z> 0) { orientationString ="up"; orientation =0; } else { orientationString ="vers le bas"; orientation =1 ; } } else if ( (absY> absX) &&(absY> absZ)) { // orientation de base sur Y if (y> 0) { orientationString ="digital pin up"; orientation =2; } else { orientationString =« pince analogique vers le haut » ; orientation =3; } } else { // baser l'orientation sur X if (x <0) { orientationString ="connector up"; orientation =4; } else { orientationString ="connecteur vers le bas"; orientation =5; } } // fin du code du tutoriel. // à ce stade vous avez la valeur d'orientation de la carte constamment mise à jour :/* Les orientations de la carte :0 :plat, processeur vers le haut (TIMER) 1 :plat, processeur vers le bas (TV) 2 :paysage, broches analogiques bas (TEMPERATURE) 3 :paysage, broches analogiques haut (OFF) 4 :portrait, connecteur USB haut (LIGHTS) 5 :portrait, connecteur USB bas (SON) */ // pour ce projet vous devez savoir si le visage a changé de la fonction de visage précédente [lastFUNCTION !=orientation] // mais cette information n'est imprimée que si le visage est en position HAUT pendant plus de [intervalle] temps // et seulement pour une fois [garder] (vous n'avez pas besoin pour activer constamment le visage, vous n'en avez besoin qu'une seule fois) // parce que la valeur d'orientation est constamment mise à jour, vous devez commencer à compter le temps lorsque l'orientation change [orientation !=lastOrientation] if (orientation !=lastOrientation) { // si le l'orientation a changé, commencez à compter le temps lastOrientation =orien tation; // mémoriser l'orientation actuelle du visage previousMillis =currentMillis; // mémoriser l'heure à laquelle le visage a changé keep =false; } else if (currentMillis - previousMillis> intervalle &&keep ==false &&lastFUNCTION !=orientation) { //cette condition n'affiche l'orientation que si le visage est relevé pendant un intervalle //et une seule fois (conserver) //et uniquement si le visage est différent de la boucle précédente Serial.println(orientationString); // affiche l'orientation // le visage actuel [orientation] est défini comme vrai (cela signifie que la fonction visage est définie comme activée) if (orientation ==1) { // TV face face1 =true; // Le visage TV devient vrai lastFUNCTION =orientation; // mémoriser cette activation dans [lastFUNCTION] Serial.println("TV true"); // affiche le visage activé TVChar.setValue('O'); // O :ouvre le signal tv (BLE) :la tv n'est ouverte qu'une seule fois } if (orientation ==4) { // LIGHTS face face4 =true; lastFUNCTION =orientation; Serial.println("LIGHTS true"); } if (orientation ==3) { // OFF face face3 =true; lastFUNCTION =orientation; Serial.println("OFF true"); } if (orientation ==5) { // SON face face5 =true; lastFUNCTION =orientation; Serial.println("SON vrai"); } if (orientation ==2) { // TEMPERATURE face face2 =true; lastFUNCTION =orientation; Serial.println("TEMPERATURE true"); } if (orientation ==0) { // TIMER face face0 =true; lastFUNCTION =orientation; Serial.println("TIMER true"); if (KEEPtime ==false) { // le temporisateur n'est activé que s'il s'agit du 1er cycle ou a été arrêté TIMERmillis =currentMillis; // commencer à compter le temps } } keep =true; // [conserver] changer la valeur pour que, dans la boucle suivante, vous ne puissiez pas entrer dans cette condition si le visage ne change pas (éviter d'activer une autre fois le même visage) } // cette condition est pour la fonction shake :si vous secouez pendant plus de [SHAKEinterval], le visage est désactivé si (CurieIMU.getInterruptStatus(CURIE_IMU_SHOCK) &¤tMillis - SHAKEpreviousMillis> SHAKEinterval) { Serial.println("SHAKE"); // affiche "SHAKE" si un tremblement est détecté // le dernier visage activé [lastFUNCTION] est défini comme false (cela signifie que la fonction visage est désactivée) // Désactivation du téléviseur if (lastFUNCTION ==1) { // TV face TVChar .setValue('C'); // C:ferme le signal tv BLE Serial.println("TV false - CLOSE"); // affiche la face fermée face1 =false; // Face TV devient false } // Désactivation des LUMIERES if (lastFUNCTION ==4) { // Face LIGHTS if (central.connected() ==true) { // si une centrale est connectée au périphérique :lightsChar.setValue(0 ); // allume le signal BLE éteint digitalWrite (LEDlights, HIGH); // ouvre la led jaune pour voir le cube dans le noir } Serial.println("LIGHTS false - CLOSE"); face4 =faux ; // LIGHTS face devient faux } // OFF if (lastFUNCTION ==3) { // OFF face // OFF face secouée :tout est fermé et la led rouge OFF est ouverte digitalWrite (LEDOFF, HIGH); // la led rouge OFF est allumée lorsque le cube est fermé // maintenant fermer toutes les fonctions activées :// CLOSE TV TVChar.setValue('C'); // C:ferme le signal tv BLE Serial.println("TV false - CLOSE"); face1 =faux ; // CLOSE LIGHTS Serial.println("LIGHTS false - CLOSE"); if (central.connected() ==true) { lightsChar.setValue(0); digitalWrite (LEDlights, LOW); // la led est fermée si OFF face est secouée } face4 =false; // FERMER LE SON analogWrite(soundLED, LOW); // ferme la led sonore Serial.println("SOUND false - CLOSE"); face5 =faux ; //CLOSE TEMPERATURE if (central.connected() ==true) { digitalWrite(LEDhot, LOW); digitalWrite (LEDfroid, BAS); termoChar.setValue(0) ; // signal BLE de température :0 =froid éteint - chaud éteint } Serial.println("TEMPERATURE false - CLOSE"); face2 =faux ; // CLOSE TIMER Serial.println("TIMER false - CLOSE"); lcd.setRGB (0, 0, 0); // le LCD RGB est fermé lcd.clear(); KEEPtime =faux ; face0 =faux ; // Le cube est inactif, seule la led OFF est active Serial.println("OFF false - CLOSE"); face3 =faux ; // OFF face devient faux } // Désactivation du SON if (lastFUNCTION ==5) { // SOUND face analogWrite(soundLED, LOW); // ferme la led sonore Serial.println("SOUND false - CLOSE"); face5 =faux ; // SON face devient faux } // TEMPERATURE désactivation if (lastFUNCTION ==2) { // TEMPERATURE face // si une centrale est connectée au périphérique :if (central.connected() ==true) { digitalWrite(LEDhot, LOW ); // fermer la température led rouge digitalWrite(LEDcold, LOW); // fermeture de la led bleue de température termoChar.setValue(0); // signal BLE de température :0 =froid éteint - chaud éteint } Serial.println("TEMPERATURE false - CLOSE"); face2 =faux ; // TEMPERATURE face est devenu faux } // TIMER désactivation if (lastFUNCTION ==0) { // TIMER face Serial.println("TIMER false - CLOSE"); face0 =faux ; // Le visage TIMER est devenu faux // si vous secouez le cube lorsque le temps est écoulé, l'écran LCD devient rouge et affiche le temps restant avant le compte à rebours lcd.setRGB(180, 40, 0); // le rétroéclairage RVB devient rouge lcd.clear(); // l'écran LCD est effacé lcd.setCursor(0, 0); lcd.print("ARRÊTER À "); lcd.setCursor(8, 0); lcd.print(MONTRERminute); // indique les minutes pendant lesquelles vous secouez le cube lcd.setCursor(9, 0); lcd.print(":"); lcd.setCursor (10, 0); lcd.print(SHOWsecondes); // indique les secondes lorsque vous secouez le cube tone(BUZZER,1000,1000); // il fait un court délai sonore (2000); lcd.clear(); // efface l'écran LCD lcd.setRGB(0, 0, 0); // Le rétroéclairage LCD RVB est fermé KEEPtime =false; // Le visage TIMER est devenu faux } SHAKEpreviousMillis =currentMillis; // mémoriser la valeur pour le calcul [SHAKEinterval] } // les instructions suivantes sont exécutées en boucle uniquement si le visage est activé if (face1 ==true) { // TV face digitalWrite (LEDOFF, LOW); // si cette face est vraie, la led de face OFF est FAIBLE if (central.connected() ==true) { // si le cube est connecté BLE char key =keyboard.getKey(); // lit la valeur à partir du clavier if (touche &&orientation ==1){ // si quelque chose est pressé et seulement quand la face du téléviseur est vers le haut (évitez une pression involontaire du clavier) if (touche =='0') { // si la touche enfoncée est 0 TVChar.setValue(key); // envoyer la valeur [clé] via BLE Serial.println(clé); // imprime le bouton pressé (commentez si vous ne voulez pas afficher cette information) } if (key =='1'){ TVChar.setValue(key); Serial.println(clé); } if (clé =='2'){ TVChar.setValue(clé); Serial.println(clé); } if (clé =='3'){ TVChar.setValue(clé); Serial.println(clé); } if (clé =='4'){ TVChar.setValue(clé); Serial.println(clé); } if (clé =='5'){ TVChar.setValue(clé); Serial.println(clé); } if (clé =='6'){ TVChar.setValue(clé); Serial.println(clé); } if (clé =='7'){ TVChar.setValue(clé); Serial.println(clé); } if (clé =='8'){ TVChar.setValue(clé); Serial.println(clé); } if (clé =='9'){ TVChar.setValue(clé); Serial.println(clé); } if (clé =='*'){ TVChar.setValue(clé); Serial.println(clé); } if (clé =='#'){ TVChar.setValue(clé); Serial.println(clé); } } } } if (face4 ==true) { // LIGHTS face digitalWrite (LEDOFF, LOW); // si cette face est vraie la led face OFF est FAIBLE if (central.connected() ==true) { // si une centrale est connectée au périphérique :lightsChar.setValue(1); // LUMIÈRES activées signal BLE digitalWrite (LEDlights, LOW); // la led jaune est fermée car les lumières de la maison sont allumées } } if (face3 ==true) { // OFF face // quand OFF face est levé rien n'est fait digitalWrite (LEDOFF, LOW); // led OFF est activé uniquement lorsque le cube est secoué, donc est maintenant LOW } if (face5 ==true) { // SOUND face digitalWrite (LEDOFF, LOW); // si cette face est vraie la led face OFF est FAIBLE // le capteur de son est activé, luminosité de la led régulée par la sond // ce code provient de l'exemple de régulation de luminosité somme longue =0; for (int i=0; i<32; i++) { sum +=analogRead(soundSENSOR); } somme>>=5; luminosité =(somme*255)/1024 ; // calcule la valeur de luminosité analogWrite(soundLED,brightness); // l'intensité de la luminosité de la led verte est régulée par le délai de bruit (50) ; //fin de l'exemple de luminosité } if (face2 ==true) { // TEMPERATURE face digitalWrite (LEDOFF, LOW); // si cette face est vraie, la led de face OFF est FAIBLE if (central.connected() ==true) { // si le cube est connecté BLE // lit la valeur de température int val =analogRead(pinTemp); // obtient la valeur analogique resistance=(float)(1023-val)*10000/val; // obtenir la température de résistance=1/(log(résistance/10000)/B+1/298.15)-273.15; // calculer la température //conditions d'activation if (temperature> tooHot) { // activer la climatisation digitalWrite(LEDhot, LOW); // fermer le chauffage led digitalWrite(LEDcold, HIGH); // climatiseur ouvert led termoChar.setValue(1); // définir via BLE la condition 1 =froid allumé - chaud éteint } if (temperature  tooCold &&temperature  

Pièces et boîtiers personnalisés

Il s'agit du fichier (.dxf) que vous pouvez télécharger sur votre découpeuse laser. J'ai utilisé un panneau de fibres de moyenne densité (MDF) de 3 mm. Coupez les lignes noires et gravez les lignes rouges. Important :si l'épaisseur de votre matériau est différente, vous devez modifier ce croquis. smart_cube_8sVCflFmhM.dxfLe même fichier de la box mais dans un format différent :.pdf

Schémas

Ceci est un .jpeg du schéma Fritzing (les fils jaunes sont connectés aux composants Grove) Ceci est un schéma des connexions dans Grove Shield _cI0IwUsPVZ.Base%20shield%20connections

Processus de fabrication

  1. Pourquoi les panneaux solaires sont un investissement intelligent pour votre maison
  2. Allez grand ou rentrez chez vous avec la conception de votre nouveau produit
  3. Applications de la domotique
  4. Construire un réseau de capteurs sans fil dans votre maison
  5. Surveillez la température de votre maison à l'aide de votre Raspberry Pi
  6. L'écart de compétences dans la maison intelligente
  7. Soyez intelligent :l'avenir de votre maison
  8. Sécurité intelligente :comment protéger vos appareils domestiques intelligents contre les pirates
  9. Méthodes d'amélioration de la sécurité de votre maison intelligente