Poubelle connectée

De Wiki d'activités IMA
Révision datée du 20 janvier 2019 à 17:21 par Rmorin (discussion | contributions) (Transfert de données entre l'Arduino et le téléphone)

Présentation du sujet

Contexte

Le module transversal "Internet des objects" a pour but de nous familiariser avec le concept des objets connectés et d'en réaliser un.

La durée totale dédiée au projet est de 24h.

Description du sujet

Nous avons choisi de réaliser une poubelle connectée qui peut avoir plusieurs utilisations. Celle qui nous est venue à l'esprit est de simplifier la vie des personnes en charge du ménage et notamment notamment du changement des sacs des poubelles.

En effet, le but de notre projet est de réaliser une application permettant de savoir en un coup d’œil si une poubelle doit être vidée ou non. Ainsi, il n'est plus nécessaire d'ouvrir toutes les poubelles pour voir si celles-ci doivent-être vidées ou si le sac est encore suffisamment vide.

Réalisation

Matériel utilisé

  • Carte Arduino Uno
  • Shield Bluetooth Low Energy (BLE)
  • Breadboard
  • Capteur de température et d'humidité (DHT11)
  • Capteur de contact
  • Capteur de force

Principales tâches à effectuer

  • Réalisation du circuit électrique comprenant la carte Arduino et les capteurs
  • Réalisation de l'application Android (via MIT App Inventor)
  • Transfert des données en Bluetooth entre la carte Arduino et l'application Android

Déroulé détaillé des séances

Le projet peut être vu comme un puzzle. Chacune de ses pièces était indépendante au départ, puis nous les avons réunies au fil de l'avancement du travail. Ainsi, au cours de cette partie, nous allons expliquer le projet selon ses différentes parties et thématiques plutôt que selon les séances.

Réalisation du circuit électronique et acquisition des mesures

Une fois le choix du sujet établi, nous avons sélectionné les différents capteurs. L'ensemble du matériel nécessaire pour mener à bien le projet était déjà disponible en salle de TP.

Nous avons donc réalisé le circuit électronique à l'aide la breadboard, sur laquelle nous avons connecté les composants/capteurs :

  • DHT11 (humidité et température à l'intérieur de la poubelle)

DHT11.jpeg

Les données issues du capteur capteur DHT11 (ci-dessus) peuvent être lues à l'aide d'une librairie. La connexion à la carte Arduino se fait de manière numérique et non analogique.

  • Contact (poubelle correctement refermée ou non)

Le capteur de contact fonctionne également de manière numérique (Oui/Non <==> contact/pas de contact).

  • Force (poids des déchets à l'intérieur de la poubelle)

Les données sont ici transmises de manière analogique (renvoie une valeur de 0 à 1023 car le CAN de l'Arduino est de 10 bits).

Nous avons utilisé un port Série pour afficher dans l'interface Arduino les valeurs issues de ses capteurs et leur bon fonctionnement.

Début de l'application Android

Nous avons utilisé l'outil MIT App Inventor pour réaliser notre application. Il s'agit d'un outil basé sur une programmation par blocs. Chaque bloc reprend les instructions de base (IF, WHEN, etc...) donc lequel on place d'autres blocs indiquant les actions à effectuer.

La connexion Bluetooth entre la Shield BLE et le téléphone (en passant par les paramètres Android) se faisait simplement.

Pour utiliser les fonctionnalités BLE dans notre application, nous devions alors implémenter la connection Bluetooth dans le module MIT. Il fallait d'une part ajouter le composant Bluetooth (prenant en charge le Low Energy) et ensuite saisir les instructions pour effectuer la connexion.

BLE Blocs.jpeg

Comme nous pouvons le voir-dessus, les blocs permettent de définir les actions à effectuer lorsque l'on appuie sur l'un des boutons de l'application.

  • Scanner les réseaux disponibles lorsque l'on appuie sur le bouton Scan.
  • Afficher la liste des réseaux lorsque ceux-ci sont détectés.
  • Se connecter au réseau sélectionné dans la liste lorsque l'on appuie sur Connect.

Nous pouvions vérifier du côté Arduino que la connexion se faisait bien. En effet, nous pouvions afficher dans le port série qu'une connexion/déconnexion avait eu lieu.

Transfert de données entre l'Arduino et le téléphone

L'étape de transfert des données était plus complexe. Afin de transmettre des données entre périphériques BLE, il faut avoir recours aux UUID. Ce sont des identifiants propres à chaque périphérique BLE. Il existe plusieurs "sous UUID" selon que l'on est en lecture ou en écriture.

Nous avons commencé par émettre des données depuis le téléphone vers la carte Arduino car il s'agissait du sens de transfert le plus simple. Nous émettions donc une chaine de caractère de test depuis le téléphone vers la carte Arduino, une fois que la connexion était faite. Du côté Arduino, nous affichions dans le port Série tout ce qui était reçu par le Shield BLE.

Une fois ce transfert fonctionnel, nous avons entrepris d'émettre des données depuis la carte Arduino vers le téléphone. C'est ce sens de transfert qui nous intéresse le plus puisque nous souhaitons envoyer les valeurs de température, humidité, etc vers le téléphone.

Nous avons rencontré quelques difficultés pour transférer les données.

  • D'une part, la fonction que nous avons utilisée sur l'Arduino ne permettait d'envoyer qu'une chaine de caractère. Il fallait donc créer une chaine de caractère contenant toutes les valeurs issues des capteurs.
  • D'autre part, le code à utilise du côté réception (MIT APP Inventor) est assez long. De plus, nous devions trouver un moyen de séparer l'unique chaine de caractère reçue (contenant les valeurs de tous les capteurs) en plusieurs morceaux pour affecter ces derniers aux bonnes variables.

Ainsi, nous avons utilisé un séparateur (espace) pour couper la chaine de caractère en une liste de valeur issues des capteurs. Nous avons ensuite affiché chacune de ces valeurs dans les labels correspondants (Température, humidité, force, contact).

Du côté Arduino, les valeurs sont envoyées toutes les deux secondes. Ainsi, la boucle WHEN StringsReceived du code MIT se déclenche toutes les deux secondes et les valeurs sont donc actualisées toutes les deux secondes.

Nous avons également ajouter une condition IF affichant un panneau Danger si le contact vaut 1. Cela permet de simuler une mauvaise fermeture de la poubelle et avertit donc l'utilisateur qu'il doit correctement la refermer. Le panneau danger disparait une fois que la valeur du contact revient à 0.

L'utilisateur peut à tout moment se déconnecter puis se reconnecter à son gré.

Perspectives d'utilisation de ce projet en application réelle

On peut imaginer que cette application soit utilisée dans le cas d'une entreprise avec de grands locaux et donc beaucoup de poubelles.