====== Epine ====== {{ :cours:oc:gr5_16_17:epine_logo.png?200 |}} ===== Nom : Epine - Le Hérisson de Jardin Connecté ===== ===== Groupe: ===== * Stackler, Mathieu, mathieu.stackler@etu.unice.fr, IAM * Laborde, Quentin, qlaborde@polytech.unice.fr, IAM * Bin Sabari, Shafiq Daniel, bs200009@etu.unice.fr, IAM ====== Design ====== ===== Scénario ===== Bob est un commercial de 45 ans. Il travaille énormément et n’a pas toujours le temps de s’occuper de son jardin. Un jour, son fils lui a acheté Epine, un hérisson connecté permettant d’obtenir des informations pratiques pour son jardin. En effet, une fois Epine planté dans le sol, il peut récolter des informations sur la luminosité, l’humidité de la terre, la hauteur de l’herbe. Ainsi ce dernier peut envoyer une notification à Bob lui disant que c’est le meilleur moment pour arroser si l’humidité de la terre est faible, que de la pluie n’est pas annoncée (API Météo) et baromètre ainsi que la luminosité. Il envoie également une notification si l’herbe est trop haute. ===== Équipements TIC ===== ^ Produit ^ Plateforme ^ Input ^Prix unitaire (TTC) ^ Nombre de pièces ^ Référence SeeedStudio ^ Référence GoTronic ^ Référence ^ | Raspberry Pi 2 | / | /|39,50 (en stock) | 1 | https://www.seeedstudio.com/Raspberry-Pi-2-Model-B-RS-Version-p-2490.html | / | / | |Carte SD 8go|Raspberry| /|19,95 (en stock)|1| / |http://www.gotronic.fr/art-carte-sd-8-gb-noobs-1-4-ada1583-21564.htm|ADA1583| |GrovePi|/|/|23.99 (en stock)|1|https://www.seeedstudio.com/GrovePi-p-1672.html|http://www.gotronic.fr/art-module-grovepi-103010002-23075.htm|103010002 | |Clef Wi-fi|Raspberry| USB|13,30 (en stock)|1|/|http://www.gotronic.fr/art-module-usb-wifi-pour-raspberry-19662.htm|/ | |Capteur de luminosité|GrovePi|A|3,30|1|https://www.seeedstudio.com/Grove---Light-Sensor-%28P%29-v1.1-p-2693.html|http://www.gotronic.fr/art-detecteur-de-lumiere-grove-101020014-18970.htm|101020014| |Capteur de distance|GrovePi|D|6,50|1|https://www.seeedstudio.com/Grove---IR-Distance-Interrupter-p-1278.html|http://www.gotronic.fr/art-detecteur-de-distance-ir-grove-101020040-18973.htm|101020040| |Capteur d’humidité de la terre|GrovePi|A|5,40|1|https://www.seeedstudio.com/Grove---Moisture-Sensor-p-955.html|http://www.gotronic.fr/art-capteur-d-humidite-grove-101020008-18962.htm| 101020008| |Capteur d'humidité + température|GrovePi|A|6,50|1|https://www.seeedstudio.com/Grove-Temp%26Humi-Sensor-p-745.html|http://www.gotronic.fr/art-capteur-d-humidite-et-de-t-grove-101020011-18963.htm| 101020011| |Baromètre |GrovePi|I2C|15,40|1|https://www.seeedstudio.com/Grove-Barometer-Sensor-p-1199.html|http://www.gotronic.fr/art-module-barometre-grove-101020032-18953.htm| 101020032| |Total capteurs| | |37.10| 5| | | | |Total| | |133.84| 9| | | | ===== Services TIC & API ===== Récoltes de données * Hauteur de l'herbe * Pression atmosphérique * Humidité de la terre * Température * Humidité ambiante Utilisation des données * Envoie une notification si c’est l’heure d’arroser * Envoie une notification si l’herbe est trop haute Données paramétrables * Réglage de la hauteur d’herbe désirée ==== Schéma de connexion ==== {{:cours:oc:gr5_16_17:schemeocs.jpg?600|}} Description des différents éléments : * Orchestrateur : c'est le cœur de notre système, c'est lui qui récupère les informations de chaque serveur et qui les envoie aux serveurs qui en ont besoin. * Serveur hérisson : notre objet contenant les capteurs, utilisation de REST pour l'envoie des données avec l'orchestrateur car besoin d'envoyer les données une fois toutes les heures seulement. * Serveur météo : utilisation de l'API OpenWeatherMap permettant d'avoir des données météorologiques à un endroit donné (ici avec longitude/latitude). * Serveur algorithme : c'est lui qui récupère les données du serveur hérisson et du serveur météo et qui fait les calculs pour répondre à nos services : "quand faut-il arroser ?" et "faut-il couper l'herbe ?". * Serveur IHM : permet de créer une web app utilisable par l'utilisateur. * Serveur communication : dialogue avec l'utilisateur, via SMS. ====== Enveloppe de l'Objet 3D ====== ===== Croquis ===== {{:cours:oc:gr5_16_17:20161011_170516.jpg?400|}} {{:cours:oc:gr5_16_17:14600490_10209399824824652_1966737493_o.jpg?400|}} ===== Emplacement Matériel et Connectique ===== La Raspberry Pi, la Grove Pi, la clef Wi-Fi et la batterie sont situés dans le corps du hérisson dans une boite étanche avec une ouverture étanche sur l’un des côté pour pouvoir rechercher la batterie (ouverture assez large pour débrancher la batterie de la Raspberry et la brancher sur une source externe). Pour les capteurs : * Capteur d’humidité de la terre situé sous le hérisson (présence d’une partie conique sous le hérisson permettant de le planter dans le sol et de mettre ce capteur). * Capteur de luminosité situé sur son dos (extrusion d'un côté de l'hérisson) + vitre pour protéger * Capteur de distance situé sur le côté (extrusion d’un côté de l’hérisson) * Capteur de température situé dans la queue du hérisson {{:cours:oc:gr5_16_17:placement_capteurs.jpg?500|}} ===== Prototype ===== /!\ N'ayant pas eu notre modèle 3D à temps, nous avons utilisé une Coccinelle comme coque /!\ {{:cours:oc:gr5_16_17:condition_reelle.jpg?500|}} ===== Modèle 3D ===== Pour ce projet, nous voulons créer un modèle de la forme d'un hérisson. Pour cela, nous allons créer deux coques: -une boîte étanche (dimensions : 130x80x60) * 4 trous pour les capteurs (dimensions : 15x10) (voir croquis) * une partie ouvrable à l'arrière (rechargement de la batterie, changement de matériel défectueux) qui reste étanche. -une coque en forme de hérisson en ABS (dimensions : environ 200x100x80) (voir croquis) * petite boîte étanche pour le capteur de luminosité (dimensions : 30x30x15) (voir croquis). * une partie ouvrable à l'arrière permettant d'accéder à la partie ouvrable de la boîte étanche {{:cours:oc:gr5_16_17:14697036_10209399830704799_1666008482_n.jpg?200|}} - une partie conique creuse (voir croquis) - une partie correspondant à la queue du Hérisson (dimensions : 40x20x20). Cette pièce doit être percée avant de laisser passer l'air (capteur de pression/température à l'intérieur). Lien Google Drive pour la modèle 3D: [[https://drive.google.com/open?id=0B56ocrzhwp_FZjJ4OHg4S2xDc2s|Coque 3D]] {{ :cours:oc:gr5_16_17:epine_perspective_above.jpg? 500 |}} {{ :cours:oc:gr5_16_17:side_view.jpg? 500 |}} {{ :cours:oc:gr5_16_17:bottom_perspective.jpg? 500 |}} {{ :cours:oc:gr5_16_17:three_layer.jpg? 500 |}} {{ :cours:oc:gr5_16_17:box_perspective.jpg? 500 |}} {{ :cours:oc:gr5_16_17:box_top_opened.jpg? 500 |}} {{ :cours:oc:gr5_16_17:top_open_battery_hidden.jpg?500 |}} {{ :cours:oc:gr5_16_17:explosion_box.jpg?500 |}} {{ :cours:oc:gr5_16_17:bottom_explosion.jpg?500 |}} Pour toutes questions, n'hésitez pas à nous envoyer un mail. ====== Rendu Final ====== ===== Code du projet (Sources et Binaires) ===== ==== WComp ==== Le Code Sources et les dll : {{:cours:oc:gr5_16_17:wcomp_sources_et_dll_.zip|}} ==== Serveur UPNP sur raspbian ==== Le Code Sources python : {{:cours:oc:gr5_16_17:serveur_upnp_sur_raspbian.zip|}} ==== Interface Utilisateur (Serveur RESTful) ==== Le Code Sources python : {{:cours:oc:gr5_16_17:interface_utilisateur_serveur_restful_.zip|}} ===== Environnement Hard/Soft ===== * WComp : SharpDevelop avec l'extentions WComp (sur Windows) * Interface Utilisateur : Interpréteur Python (sur Ubuntu ou mac) * Serveur UPNP sur raspbian (sur l'objet) : Connexion SSH avec la Raspberry + interpréteur Python ===== How To ===== ==== WComp (sur windows)==== === Installation et lancement === Pour utiliser notre composition wcomp sur sharkDevelop : → Inclure tout les beans disponible ci-dessus : - Newtonsoft.Json.dll dans le dossier SharpDevelop/3.0/Beans (dans l'installation de SharpDevelop) - Le reste des beans dans Documents/WComp.NET/Beans (le dossier WComp.NET créer à l'installation de SharpDevelop) → Ouvrir un nouveau container dans l'IDE, importer le fichier testBean23.wcc (dernière version stable). (Si des dépendances ne marchent pas, vérifier bien que vous avez tous les beans aux bons endroits) La composition : {{:cours:oc:gr5_16_17:wcomp.png?500|}} === Utilisation et paramétrage === La composition à 6 parties interconnectées : - Le bean Epine qui interagie avec le service UPNP de notre objet (A gauche au centre) - The_smart_epine.UPnP2Bean - L'affichage des events de l'objet (A gauche en haut) - Les textboxs pour modifier certains paramètres (A gauche en bas) - Une partie Orchestrateur (Au centre) - UpDateValeurBoolCapteur - UpDateValeurDoubleCapteur - VerificationStatusJardin - Une partie serveur de calcul (A droite en haut) - serveurAlgo - Les interfaces avec les API autre que l'objet (A droite en bas) - ClientInterface (connection avec le serveur RESTful) - MessagingBean (API mail) - Weather (API météo) La partie 3 permet de choisir : * URI de l'objet : l'IP et le port utilisé par l'objet avec Device Spy (le port est fixé dans le code). * L'adresse mail de l'utilisateur : l'adresse à laquelle est envoyé les informations sur le jardin. * URL de l'interface (à travers un service RESTful) : l'IP de la machine où s’exécute le serveur RESTful python. === Problèmes courants === - Si l'objet se déconnecte du réseau, il faut réimporter la composition pour de nouveau se connecté avec l'objet. ==== Serveur UPNP sur raspbian (sur l'objet) ==== 1a. Démarrage depuis la carte SD fournie: * Être sur le réseau de l'Ubiquarium ou se connecter par Ethernet * Connexion avec nom utilisateur: pi et le mot de passe : epine * Par exemple avec ssh: ssh pi@epine.local * Aller dans le dossier upnp : cd upnp * Brancher les capteurs (voir partie 2) * Lancer le fichier "epine.py" : sudo python epine.py 1b. Démarrage sans la carte SD: * Installer Grove Pi : git clone https://github.com/DexterInd/GrovePi.git * Copier le dossier upnp sur la raspberry : scp -rp chemin_vers_upnp/upnp pi@nom.local:~ * Aller dans upnp : cd upnp * Brancher les capteurs (voir partie 2) * Lancer le service : sudo python grovepi.py 2. Branchement des capteurs: * Capteur tempétature et humidité: branché sur le port D4 * Capteur de distance: branché sur le port D3 * Capteur luminosité: branché sur le port A0 * Capteur humidité de la terre: branché sur le port A1 * Capteur de pression: branché sur un des ports I2C ==== Interface Utilisateur (Serveur RESTful) ==== Afin d'avoir l'accès au interface web de l'Epine, il faut démarrer le serveur REST de l'interface en suivant la consigne de README dans le dossier EpineRest, puis en allant sur :5000 dans un navigateur web. {{:cours:oc:gr5_16_17:interface_web_epine.png?600|}}