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

Domotique avec Raspberry Pi 2 et Windows 10 IoT

Composants et fournitures

Arduino UNO
Pour chaque pièce que vous souhaitez automatiser, prenez un Arduino UNO séparé.
× 1
Raspberry Pi 2 Modèle B
× 1
Câbles de raccordement (générique)
× 1
Planche à pain (générique)
× 1
LDR (Light Dependent Resistor)
LDR fournit une lecture de tension différente pour différentes intensités lumineuses.
× 1
Capteur de mouvement PIR (générique)
L'IR passif détecte la présence humaine.
× 1
Relais (générique)
Vous pouvez utiliser n'importe quel type de module relais. Le nombre de relais dépendra du nombre d'appareils que vous souhaitez contrôler.[NoOfDevices =NoOfRelay]
× 1
Contacteur Siemens (3TF32 00-0AP0)
Le contacteur va être utilisé pour contrôler la pompe à eau de puissance maximale AC3 :16A 415VAC.Avant lors de l'achat du contacteur, veuillez vérifier les caractéristiques nominales de votre pompe à eau et les dépendances de votre pays, le cas échéant. "3TF32 00-AP0" est capable de piloter une pompe à eau jusqu'à 16A et 415VAC. Ce contacteur fonctionne avec une bobine intégrée. Les valeurs nominales de la bobine sont (spécifiques à 3TF32 00-0AP0 uniquement) 250 VCA.
× 1
Disjoncteur miniature (1P C16A)
Le MCB est fixé avant le contacteur pour protéger la pompe à eau des défauts électriques et des surcharges. Ici, les MCB ont également des cotes spécifiques. Notre contacteur est de 16A et j'ai donc utilisé 16A MCB. Vous pouvez modifier selon votre convenance.
× 1

Applications et services en ligne

Arduino IDE
Pour écrire le firmware Arduino. Avoir expliquer dans l'article.
Microsoft Visual Studio 2015
L'édition communautaire est commandée et gratuite pour un maximum de cinq utilisateurs. Mais vous pouvez utiliser plus que cela si vous avez acheté une copie sous licence de Visual Studio 2015.
Microsoft Windows 10 IoT Core
En tant que système d'exploitation principal, qui contrôle les appareils via Arduino et fournit une console de gestion.

À propos de ce projet

À l'ère d'aujourd'hui, la technologie peut améliorer la vie humaine. La technologie évolue décennie par décennie. L'automatisation était une science-fiction plus tôt, mais pas aujourd'hui. En combinant les dernières technologies avec la maison, nous pouvons construire une maison impressionnante. Avec le Raspberry Pi et Windows 10, nous pouvons créer un système domotique capable de faire fonctionner automatiquement les appareils domestiques.

Mise en route

Avant de commencer le projet, comprenons d'abord les bases. Considérez l'image suivante (Configuration globale) :

Configuration pour la salle

Considérant maintenant le scénario de la pièce, un Arduino UNO contrôlera les appareils et lira les données des capteurs. Périodiquement, Raspberry Pi demande les données du capteur collectées par Arduino UNO. La figure « Architecture de la pièce » montre comment l'Arduino UNO se connectera aux appareils et aux capteurs. Chaque pièce dispose de plusieurs appareils contrôlables (c.-à-d. Lumière(s), Ventilateur, Prise(s) murale(s), etc.), un PassiveIR (pour détecter la présence humaine dans la pièce), un capteur de température (LM35 pour collecter la température ambiante) et LDR ( pour détecter l'intensité lumineuse près de la fenêtre de la pièce).

Mappage d'adresse de périphérique

La partie la plus importante est de savoir comment nous allons identifier les appareils ? C'est simple. Nous allons créer l'adresse de l'appareil en combinant le numéro de la pièce avec le numéro de l'appareil.

Par exemple :

Donc, jusqu'à présent, nous connaissons la configuration globale. En bref, un Raspberry Pi fera office de contrôleur principal. Chaque pièce a son propre Arduino UNO qui agit comme esclave du Raspberry Pi. La communication entre Raspberry Pi et Arduino UNO se fera via I2C.

Schémas

Pour le rendre plus facile, commençons à implémenter pour la première pièce. Reportez-vous au schéma pour connecter les composants de manière appropriée.

Bande de bus I2C : Pour attacher plus d'un Arduino, vous pouvez utiliser I2C Bus Stripe comme indiqué ci-dessous.

Comment câbler un appareil avec une carte relais ?

Tout est fait côté matériel. Il est maintenant temps de créer un logiciel.

Logiciel

Notre projet se compose d'un Raspberry Pi 2 et d'un Arduino UNO. Logiciel Raspberry Pi 2 développé dans Visual Studio 2015. Je suppose que le lecteur est au courant de la création de projet pour Raspberry Pi 2 dans Visual Studio 2015. Je suppose également que l'utilisateur a une connaissance intermédiaire du framework Arduino, de Visual C# et de Windows Universal XAML.

Comprenons le logiciel dans la formation suivante :

  • Protocole (comment le Raspberry Pi 2 et Arduino parlent)
  • Structure de classe (Comment Raspberry Pi 2 entretient des appareils et des pièces aussi compliqués)
  • Interface utilisateur (filaire)

Protocole (Comment Raspberry Pi 2 et Arduino parlent sur I2C)

Avant d'aller plus loin, décidons d'abord de la façon dont Raspberry Pi et Arduino parlent. Pour faire un protocole fiable, nous devons d'abord avoir des objectifs ou des buts clairs pour la communication. En considération de ce projet, les objectifs sont :

  • Lire les capteurs
  • Lire l'état de l'appareil
  • Définir l'état de l'appareil

Commençons d'abord par définir le protocole. Le protocole définit des règles pour communiquer sur le bus. Le protocole n'est rien de plus qu'une séquence d'octets.

J'ai défini un protocole pour envoyer et recevoir des octets. Les octets d'envoi sont fixés sur trois tandis que le tableau d'octets en réception est de quatorze octets.

Reportez-vous aux schémas suivants pour comprendre le protocole défini pour ce projet (« X » désigne une valeur aléatoire ou « 0 », il sera ignoré lors de la communication) :

La classe nommée « I2C_Helper » contient la mise en œuvre du protocole dans le projet d'application universelle de PRi2. Cette classe est disponible dans Universal Windows Project. Pour l'ouvrir :Allez dans Explorateur de solutions> Bibliothèque> Dossier de communication. Côté Arduino, il est facile de comprendre la bibliothèque I2C.

Maintenant, nous avons défini un schéma de communication approprié qui est capable de donner l'état et les valeurs des capteurs, des appareils et fournit également l'accessibilité pour définir l'état de l'appareil.

Structure de classe (Comment Raspberry Pi 2 maintient les objets)

Comme discuté d'abord, ce projet a considéré la maison entière. La maison se compose de plusieurs pièces et la pièce se compose de plusieurs appareils. Ainsi, la structure OOP d'une telle configuration est illustrée ci-dessous :

La classe primaire "Home" se compose de plusieurs objets de pièce en tant que liste générique de pièce (List). La classe Home fournit une méthode statique pour charger et enregistrer l'objet home sur le Pi afin de les utiliser plus tard.

La pièce se compose d'appareils sous forme de liste générique d'appareils (List) et d'une structure de capteurs pour encapsuler tous les capteurs en un seul.

L'appareil comprend des détails sur eux et des fonctions pour les allumer et les éteindre à l'aide du mode de protocole - 2. La classe AmbientLight, PassiveIR et Temperature permet d'accéder aux données environnementales de la pièce. L'objet de la pièce conserve les données du capteur et les actualise périodiquement à l'aide du mode de protocole - 0.

Interface utilisateur

Toute application doit être conviviale. Pour créer une application conviviale, commencez par le fil de fer. Supposons que vous allez utiliser votre propre application et découvrez les principaux objectifs et comment les intégrer de manière à ce qu'ils soient plus faciles à utiliser pour l'utilisateur final.

Dans le scénario de cette application, nos principaux objectifs sont :

  • Gestion de la salle
  • Gestion des appareils
  • Services externes tels que la communication GSM, la communication Internet, etc.

Pour ce faire, j'ai divisé le problème en :

  • Page d'accueil :fournit des informations de base sur l'état de l'appareil, la date, l'heure et le verrouillage
  • Appareils favoris :accès direct aux appareils favoris
  • Page Salle :donne accès aux salles configurées et à leurs appareils
  • Dispositifs d'eau courants :pompe à eau et geyser
  • Paramètres/Configuration :permet la gestion des salles et de leurs appareils

Fil de fer :

Sur la base du fil de fer, j'ai développé une interface utilisateur qui est illustrée ci-dessous. Vous pouvez télécharger le code source complet. Le lien vers le téléchargement est fourni à la fin de l'article.

Donc, ont déjà développé l'interface utilisateur. J'espère que vous pourrez le modifier selon vos besoins. N'hésitez pas à commenter pour l'aide.

Comment configurer ?

J'ai essayé de rendre ce logiciel aussi simple que possible. Avec une configuration mineure, vous pouvez faire fonctionner des appareils directement à l'aide de ce Raspberry Pi 2. La configuration étape par étape est illustrée ci-dessous :

Comment contrôler la pompe à eau et le geyser à l'aide de cette application ?

Vous pouvez attacher la pompe à eau et le geyser de la même manière que vous ajoutez un appareil. Mais vous ne pouvez pas attacher une pompe à eau ou un geyser directement à la carte relais pour les alimenter. Il fera exploser la carte relais ainsi que dangereux.

Pour faire fonctionner la pompe à eau ou le geyser, connectez la pompe à eau ou le geyser avec le contacteur et connectez la bobine du contacteur avec la carte relais. Alors maintenant, lorsque vous actionnez l'appareil, le relais active la bobine du contacteur et ainsi la pompe ou le geyser démarre/s'arrête. Avant d'acheter un contacteur, assurez-vous de la valeur nominale de sa bobine et de celle du contacteur. Le contacteur est disponible dans tant de variété. Vérifiez-le donc avec la cote de votre pompe à eau. Il est conseillé d'acheter un contacteur légèrement supérieur à celui de votre pompe à eau.

Comment déployer cette solution sur Raspberry Pi 2 ?

Vous pouvez consulter ce lien pour comprendre le processus de déploiement.

Comment enregistrer cette application en tant qu'application de démarrage ?

De nombreux amateurs souhaitent que leur application démarre juste après le démarrage du Raspberry Pi 2. Pour ce faire, lisez mon article : Windows 10 IoT Core :Configuration de l'application de démarrage

Problèmes connus

Démarrage Arduino

Lorsque Arduio démarre, la broche D13 clignote. Il est bon de ne connecter aucune broche de relais sur D13 car lorsque Arduino démarre ou redémarre, D13 clignotera une fois et si un périphérique connecté avec Relay (contrôlé via D13) clignotera également.

Solution : Il y a deux options :premièrement, ne vous connectez simplement pas vraiment avec D13. Le deuxième est un peu compliqué. Vous pouvez réécrire le firmware OptiBoot d'Aruino qui n'utilise pas D13 lors du démarrage et graver ce chargeur de démarrage sur Arduino.

Problème d'horloge

Raspberry Pi 2 n'a pas de puce d'horloge en temps réel intégrée. Ainsi, il n'est pas possible de maintenir le temps après une panne de courant ou un nouveau démarrage. Ainsi, un RTC externe doit être connecté et programmé pour maintenir l'heure de la date.

Solution :NTP peut être utilisé mais nécessite une connexion Internet ou même Arduino peut traiter les demandes RTC et Raspberry Pi pour la date et l'heure au démarrage. Il est également bon de connecter un RTC externe directement avec RPi 2.

Problème de débogage

J'ai rencontré de nombreux problèmes lors du développement d'Universal App en C#. L'application universelle est un sur-ensemble de WinRT et donc beaucoup d'opérations asynchrones devaient être effectuées. Si une erreur survient lors d'un fonctionnement asynchrone, cela devient un casse-tête à résoudre. Chaque fois qu'une exception ou une erreur se produisait, la plupart du temps, je faisais face à l'écran suivant :

Aucun point sur la ligne sujette aux erreurs, aucun message convivial du programmeur, rien. Je dois placer autant de points d'arrêt pour trouver la cause de l'erreur. Lors du débogage, l'application universelle s'arrête parfois sans préavis et ma fenêtre de surveillance devient soudainement inutile. La cause du comportement est décrite sur ce lien.

Solution  :placez le point d'arrêt avant la ligne sujette aux erreurs attendues.

En bref, en ce moment (alors que cet article a été publié), l'application universelle est excellente mais manque de fonctionnalités de débogage comme les applications Windows conventionnelles.

Avenir

Il n'y a aucune limitation en ce qui concerne les fonctionnalités, les nouvelles idées ou même pour surmonter les limitations existantes. Mais il n'est pas possible d'ajouter toutes les fonctionnalités à la fois. Dans cette version, cet article vous permet de comprendre la puissance réelle de Raspberry Pi 2 et Windows IoT. Windows Universal XAML est un excellent cadre d'interface graphique pour Windows 10 IoT et Raspberry Pi 2 ont un bon processeur graphique à bord. En combinant ces deux, une solution GUI d'apparence extraordinaire peut être créée. De plus, Raspberry Pi 2 dispose d'un processeur quadricœur à 900 MHz, ce qui est assez génial pour les solutions multithread (en UWP, Task). Il s'agit du projet de base à intermédiaire pour ceux qui souhaitent apprendre les principes fondamentaux des systèmes embarqués et logiciels (c'est-à-dire la communication par bus I2C, comment faire fonctionner les appareils, la conception de protocoles personnalisés, la conception OOP pour les applications réelles et filaires).

À l'avenir, nous pourrons ajouter la capacité de communiquer sur des appareils distants en utilisant la radiofréquence ou l'infrarouge au lieu du bus I2C. Le portail de gestion Web utilisant Azure peut être intégré pour les appareils mobiles. De plus, la véritable automatisation sera intégrée comme une opération basée sur des événements, une opération chronométrée avec une puce RTC. Par exemple, allumez les lumières du jardin à 19 h 00. et éteignez-les à 22h00 ; un bon exemple pour les événements est d'allumer les lumières du jardin lorsque l'intensité de la lumière ambiante a diminué en dessous de l'intensité spécifique et ainsi de suite. Il n'y a donc aucune limitation pour cette nouvelle plate-forme Windows 10 IoT Core pour Raspberry Pi 2.

Bonne chance et soyez prudent.

N'hésitez pas à demander de l'aide ou des questions.

Code

  • Esquisse Arduino
Arduino SketchC/C++
/* Arduino Sketch v0.4 Ce sketch est écrit pour "Home Automation using Raspberry Pi 2 and Window 10 IoT" Reportez-vous à ce lien :https://www.hackster.io/AnuragVasanwala/home-automation Ce sketch est testé sur Atmega328p uniquement. Ce croquis prépare un appareil Arduino en tant qu'appareil esclave sur le bus I2C exploité par Raspberry Pi 2 exécutant Windows 10 IoT Core. Objectifs :+ Collecter périodiquement les données du capteur (Fonction :boucle) + OnRecevive, collecter l'instruction en mode 3 octets et effectuer une opération en fonction de celle-ci. (Fonction :ReceiveData) + OnRequest, envoie un tableau de réponse de 14 octets basé sur le mode sélectionné par OnReceive. (Fonction :SendData) Ce croquis est fourni tel quel sans aucune GARANTIE. Vous pouvez l'utiliser à des fins personnelles et commerciales. Je ne suis pas responsable des pertes de données ou des blessures causées par ce croquis.*/#include  #define _DEBUG_/* Adresse esclave I2C d'Arduino */#define SLAVE_ADDRESS 0x40/* DÉCLARATION PIN */int Pin_AmbientLight_LDR =A0;int Pin_PassiveIR =2;int Pin_Temperature =A1;/* Variable globale */volatile short Value_AmbientLight_LDR, Value_Temperature;volatile bool Value_PassiveIR;/* Variable de protocole */byte Mode, Pin, Value;byte Response[14];void setup() { // Initialiser les broches pinMode(Pin_AmbientLight_LDR, INPUT); pinMode(Pin_PassiveIR, INPUT); pinMode(Pin_Temperature, INPUT); pinMode(0, SORTIE); pinMode(1, SORTIE); pinMode(3, SORTIE); pinMode(4, SORTIE); pinMode(5, SORTIE); pinMode (6, SORTIE); pinMode(7, SORTIE); pinMode(8, SORTIE); pinMode(9, SORTIE); pinMode (10, SORTIE); pinMode(11, SORTIE); pinMode(12, SORTIE); pinMode(13, SORTIE); pinMode (A2, SORTIE); pinMode(A3, OUTPUT);#ifdef _DEBUG_ Serial.begin(9600);#endif // Initialiser l'esclave I2C sur l'adresse 'SLAVE_ADDRESS' Wire.begin(SLAVE_ADDRESS); Wire.onRequest(SendData); Wire.onReceive(ReceiveData);}void loop(){ // Lire LDR // Arduino prend en charge la lecture analogique 10 bits. // Nous devons donc le convertir en 8 bits. Value_AmbientLight_LDR =analogRead(Pin_AmbientLight_LDR); Value_AmbientLight_LDR =map(Value_AmbientLight_LDR, 0, 1023, 0, 255); // Lecture de la valeur PassiveIR Value_PassiveIR =(digitalRead(Pin_PassiveIR) ==HIGH) ? vrai faux; // Lire le capteur de température et convertir la tension en Celsius Value_Temperature =(short)((float)(analogRead(Pin_Temperature) * 0.48828125)); // Attendre un délai de 100 ms (100);}// Rappel pour I2C Received Datavoid ReceiveData(int byteCount){ // Lire le premier octet qui est le mode Protocol Mode =Wire.read(); // Lit le deuxième octet qui est Pin. Uniquement valable pour le mode 2 Pin =Wire.read(); // Lit le troisième octet qui est Pin-Value. Valable uniquement pour le mode 2 Valeur =Wire.read(); // Signal spécifié la broche si le Mode 2 est reçu if (Mode ==2) { digitalWrite(Pin, Value); }#ifdef _DEBUG_ Serial.print(Mode); Serial.print(" "); Serial.print(Pin); Serial.print(" "); Serial.println(Value);#endif}void SendData(){ switch (Mode) { case 0 :// Mode :Read Sensor Response[0] =(byte)Value_AmbientLight_LDR ; // Value_PassiveIR est booléen, nous devons donc le convertir en octet Response[1] =(byte)((Value_PassiveIR ==true) ? 1 :0); // L'octet Response[2] est un octet de signe pour la température // 0 - -ve Temperature // 1 - +ve Temperature Response[2] =(byte)((Value_Temperature <0) ? 0 :1); Serial.println(Valeur_Température); // -ve La température ne peut pas être envoyée en octet. Convertissez-le en +ve équivalent Response[3] =(byte)((Value_Temperature <0) ? (Value_Temperature*(-1)) :Value_Temperature); Pause; case 1 :// Mode :Read Devices State Response[0] =(digitalRead(0) ==HIGH) ? dix; Réponse[1] =(digitalRead(1) ==HAUT) ? dix; Réponse[2] =(digitalRead(3) ==HAUT) ? dix; Réponse[3] =(digitalRead(4) ==HAUT) ? dix; Réponse[4] =(digitalRead(5) ==HAUT) ? dix; Réponse[5] =(digitalRead(6) ==HIGH) ? dix; Réponse[6] =(digitalRead(7) ==HIGH) ? dix; Réponse[7] =(digitalRead(8) ==HIGH) ? dix; Réponse[8] =(digitalRead(9) ==HIGH) ? dix; Réponse[9] =(digitalRead(10) ==HIGH) ? dix; Réponse[10] =(digitalRead(11) ==HAUT) ? dix; Réponse[11] =(digitalRead(12) ==HIGH) ? dix; Réponse[12] =(digitalRead(A2) ==HIGH) ? dix; Réponse[13] =(digitalRead(A3) ==HIGH) ? dix; Pause; case 2 :// Mode :Définir la réponse de l'état du périphérique[0] =(digitalRead(Pin) ==HIGH) ? dix; Pause; par défaut :pause ; } // Réponse en retour Wire.write(Response, 14);}
Logiciel Raspberry Pi 2 (Windows Headed App)
https://github.com/AnuragVasanwala/Home-Automation--RPi2-WinIoT-

Schémas

Vous pouvez ajouter plusieurs pièces en attachant un Arduino individuel avec une adresse esclave I2C unique sur le bus. Fichier Fritzing contenant le schéma complet. Accueil%20Automation%20Schéma%20-%20Anurag%20S%20Vasanwala.fzz

Processus de fabrication

  1. Capteur de température Python et Raspberry Pi
  2. Contrôleur Smart Home 433MHz avec Sensorflare et RaspberryPi
  3. Capteur de lumière activé par la voix et les SMS utilisant Raspberry Pi et Twilio
  4. Surveillez la température de votre maison à l'aide de votre Raspberry Pi
  5. DOMOMATISATION RASPBERRY PI
  6. Windows 10 IoT Core sur Raspberry Pi 2 – Données du capteur Adafruit
  7. Windows 10 IoT Core et SHT15
  8. Windows 10 IoT Core pour Raspberry Pi 3 modèle B+
  9. DÉTECTION HUMAINE DU ROBOT SONBI À L'AIDE DE KINECT ET DE RASPBERRY PI