1. Introduction

Etant une grande amatrice de thé mais sérieusement tête en l’air, c’est en effet un vrai problème pour moi de me faire une tasse de thé (ou de quoique ce soit qui est supposé se boire chaud) et de la boire dans les meilleures conditions, car celle-ci se retrouve toujours oubliée sur mon bureau et froide. Mon projet consiste donc à créer une tasse qui me notifierait directement sur mon portable lorsque celle-ci détécterait la température idéale pour boire mon thé. La complication majeure est de trouver une solution au problème de température : en effet il est bien connu que la température d’infusion d’un thé est de plus ou moins 100 °C (voici le lien de l'article très intéressant où je l'ai appris), alors que les capteurs de températures que j’ai à disposition au gymnase sont seulement capables de mesurer la température jusqu’à 85 °C au maximum. En effet, comme la première température détéctée par le capteur sera très probablement supérieur à 85°C, j'ai dû trouver une autre solution. J’ai ai alors trouvé un capteur (DS18B20 Temperature Sensor) sur Digitec pour la modique somme 11.40 (disponible ici) qui va de -55°C à +125°C, ce qui est plus approprié à mon projet. De plus, il est waterproof, ce qui est un élément crucial. La deuxième complication est de trouver un moyen de recevoir des notifications. A l'origine, je voulais coder ma propre application, seulement comme je manque terriblement d'expérience et de temps, j'ai décidé de trouver une altérnative. C'est en faisant mes recherches que je suis tombée sur le service Pushover, qui permet d'envoyer et de recevoir des notifications push sur plusieurs appareils instantanément.

2. Matériel et méthodes

La liste du matériel:

  • Un Raspberry Pi 3 (Model B) avec accès internet en wifi
  • Une breadboard et des câbles
  • Un câble plat pour connecter la breadboard au Raspberry Pi
  • DS18B20 Temperature Sensor et une résistance de 4.7 kOhms (ou 15 de 330 Ohms)
  • Le programme qui me permette d’envoyer des notifications - Pushover
  • Un ordinateur pour programmer en python
  • Mon téléphone

2.1 Schéma

Capture.JPG

2.2 Fonctionnement

Un capteur de température digital (DS18B20 Temperature Sensor) est complétement imergé dans une tasse de thé avec une eau située entre 50°C et 110°C. Ce capteur va mesurer la température de l'eau toutes les 30 secondes (car la température ne change pas aussi rapidement) grâce à un programme écrit en Python directement implémenté sur le Raspberry Pi. Ensuite, un autre programme, également sur le Raspberry Pi, envois une notification à l'utilisateur lorsque la température adéquate pour boire le thé est atteinte (cette température aura été préalablement définie dans les variables au début du code). Pour pouvoir recevoir les notifications, le Raspberry Pi ainsi que le téléphone recevant les notifications requiert une connection internet afin de pouvoir accéder à Pushover, le programme utilisé pour envoyer les messages.

2.3 Raspberry Pi 3

Pour commencer, il m'a fallu être capable de me connecter sur mon Raspberry Pi depuis la maison. Pour cela j'ai utilisé le programme Putty afin d'avoir un teminal SSH sur mon portable personnel. Ensuite j'ai eu besoin de l'application WNetWATCHER pour pouvoir trouver l'adresse IP de mon Raspberry Pi sur le réseau et donc me connecter. Voilà à quoi ça ressemblait: adresse_IP.png Une fois dessus, la première étape fut de rendre mon Raspberry Pi "one wire friendly", car cela n'est pas inclu de base et est nécessaire pour faire marcher le capteur de température (DS18B20 Temperature Sensor) qui peut se brancher au Raspberry Pi avec trois câbles, mais "fait passer" l'information en utilisant un seul câble (cf. câble jaune). Pour cela il a fallu taper la commande sudo nano /boot/config.tx dans le terminal puis ajouter la ligne dtoverlay=w1–gpio à la fin du document config.tx. Ensuite il a fallu sortir de l'éditeur nano, puis rebooter le Raspberry Pi et voilà ! Ensuite, il m'a fallut écrire le code. Je me suis donc inspirée des nombreux articles de blogs disponibles sur internet, principalement de ceux cités dans les ressources. Il y avait dans ces codes beaucoup de lignes de code que je n'avait jamais vues auparavant, et donc qui n'étaient pas vraiment claires, mais j'ai expliqué ce que je comprends à l'aide de commentaires directement sur le sripte Python. Pour vérifier que le scripte fonctionne, j'ai changé les droits de mon fichier read.py et ai exécuté le fichier et en effet je captais la température. 2019-01-28 18_59_29-pi@katla_ ~_h_src.png (Le code est disponible sur le Git sous le nom smartasse.py).

2.4 DS18B20 Temperature Sensor

Pour le câblage, je suis allée sur des blogs pour trouver des illustrations afin d'éviter la fameuse "magic smoke". Je me suis aussi grandement référée au manuel d'utilisation du capteur de température dans lequel j'ai appris qu'il fallait une résistence de 4.7 kOhms. Seulement, n'en n'ayant pas sous la main et ayant seulement des résistances de 330 Ohms, j'ai pris 15 de ces dernières et les ai connéctées sur ma breadboard (c.f. photos). 20190120_145116.jpg 20190120_145153.jpg 20190120_153656.jpg Il se trouve qu'entre-temps j'ai réussi à me procurer une résitance de 4.7kOhms, mais le montage est resté le même, avec l'avantage d'être moins fragile: 20190203_113413.jpg Le montage est le suivant: j'ai un câble noir (ground) connécté au pin GND du Pi Wedge (pièce rouge sur la breadboard) est au câble noir de mon capteur de température, un câble rouge connécté au câble rouge de mon capteur et à la pin 3.3V et un câble jaune connécté au jaune de mon capteur et au pin G4 du Pi Wedge (je ai lu dans le manuel du capteur de température qu'il s'agissait de la pin nécessaire). Pour finir, j'ai deux câbles verts reliant le capteur à la résistance de 4.7kOhms et au câble jaune du capteur.

2.5 Pushover

Pushover est un service qui me permet d'envoyer et de recevoir des notifications Push sur plusieurs de mes appareils instantanément. Pour des raisons de timing, je me suis dite que choisir une application plutôt que de coder la mienne serait plus judicieux, ce qui je suis bien heureuse d'avoir fait (bien que pushover soit $4.55). Je suis donc allée sur le site internet, en particulier sur leur FAQ (ici) pour permettre à mon téléphone de recevoir des notifications. Ensuite j'ai écrit un code m'envoyant des notifications directement sur le Raspberry Pi et pour se faire j'ai dû installer le package pushover qui me permet de faire marcher le tout. 2019-01-28 19_10_21-pi@katla_ ~_h_src.png Vu de l'extérieur, voici comment fonctionne Pushover: lors de la création d'un compte, le service vous attribue une "user key" et une "app key" qu'il vous faut entrer dans l'application Pushover du téléphone (téléchargeable ici). Cest ainsi que pushover sait à quel appareil il doit envoyer la notification. Mais comme ces clés sont personnelles, je ne pouvais pas les publier sur le Git au risque de me les faire usurper. J'ai alors découvert ce qu'étaient que les fichiers gitignore qui ne sont pas ajouté au Git lors de git pull/git push/git commit et gardent leur contenu "secret". J'ai alors créer un fichier dans lequel j'ai mis mes clés personnelles et ai mis le lien du chemin relatif de ce fichier dans le fichier gitignore de façon a avoir mes clés mais à ne pas les publier. 2019-02-03 11_22_53-h.png 2019-02-03 11_24_43-.gitignore - Notepad.png

3. Résultats

Les résulats sont concluants. J'ai conscience que mon projet n'est pas parfait et peut être grandement amélioré est optimisé (j'en parle plus en détail dans la section "discussion"). Cependant, le but de mon projet était de recevoir une notification sur mon téléphone portable lorsque le capteur mesurait une température se situant dans l'intervalle définie dans mon code, ce qu'il fait.

4. Discussion

Comme mentionné auparavant, mon projet pourrait être optimisé et amélioré sur de nombreux aspects. Premièrement la question des notifications et de l'intervalle de température. Comme cette intervalle fait plusieurs degrés, le capteur m'envoit une notification à chaque fois qu'il mesure quelque chose entre X et Y degrés, ce qui fait que parfois il m'arrive de recevoir une dizaine de notifications. Une solution à se problème serait d'ajouter un break au bon endroit dans mon code pour que le capteur puisse sortir de la boucle. Cependant cela voudrait dire que si je veux à nouveau mesurer une température je dois redémarrer mon Raspberry Pi, ce qui n'est pas optimal. Mais dans le cas d'une mesure unique, cette solution fonctionne. Le deuxième point sur lequel mon projet pourrait être amélioré est que dans ma tête, le capteur est censé mesurer des températures qui diminuent (le thé se refroidit). Seulement, lorsque je mets le capteur dans mon thé juste après avoir versé l'eau, celui-ci va passer par l'intervalle X-Y (car celui-ci passe de la température de la pièce à la température de l'eau bouillante) seulement la température est en train d'augmenter. Recevoir une notification à ce moment là pourrait donc être dangereux. Pour régler ce problème j'avais pensé à stocker 4-5 valeurs de températures est à comparer la dernière mesures à/aux précédentes: en effet si la nouvelle température et plus élevée que la précédente/que la moyenne des précédentes le programme n'enverrait pas de notification car le capteur viendrait d'être trempé dans l'eau est le thé serait encore brûlant. Au contraire, si la nouvelle température serait plus petite que la précédente/que la moyenne des précédentes le programme enverrait une notification car le thé serait buvable. Une dernière réflexion concerne les connexions et l'accès internet. En effet, les deux problèmes majeurs qui pourraient survenir est si le Raspbery Pi n'est pas connecté à internet et s'il ne peut pas détécter le capteur de température. Alors si j'avais plus de temps à disposition, je connecterais deux LEDs au Raspberry Pi qui s'allumeraient ou non si ce dernier est connecté à internet ou s'il détécte le capteur.

5. Conclusion

Ce projet est quelque chose qui m'a manqué durant de longues années et je suis fière de l'avoir créer. Mon entourage s'est également retrouvé à l'utiliser, et cela à considérablement amélioré et simplifé leurs consommation de boissons chaudes. Pour ce qu'il s'agit de la société, je pense que tout consommateur de café en mug, thé, chocolat chaud, et j'en passe se sont retrouvés devant ce problème: boire une gorgée de leur boisson, se brûler sérieusement la langue, attendre beaucoup trop longtemps que celui-ci refroidisse par peur de se brûler à nouveau, et pour finir se retourver à boire sa boisson froide. Smartasse serait la solution à se problème quotidien. Bien sûr il faudrait en améliorer l'érgonomie et la practicité pour que celle-ci soit plus facile d'utilisation.

Références

https://learn.adafruit.com/adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing/ds18b20

1-wire on raspberry pi https://pinout.xyz/pinout/1_wire

GPIO Pinout https://www.raspberrypi.org/documentation/usage/gpio/

GPIO and Python https://www.raspberrypi.org/documentation/usage/gpio/python/README.md

Sensor tutorial http://www.circuitbasics.com/raspberry-pi-ds18b20-temperature-sensor-tutorial/

ds18b20 manual https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf

Pushover - FAQ https://pushover.net/faqL