1. Introduction

Qui n'a jamais rêvé d'avoir son assistant personnel qui permettrait d'effectuer des recherches, de connaître les prévisions météorologiques pour la journée ou d'ajouter un événement dans son calendrier électronique en un clin d'oeil? Le prix des assistants vocaux de Google, Amazone ou d'autres marques ont souvent un coût élevé. L'idée est donc de réaliser un assistant connecté à l'aide d'un RaspberryPi connecté au réseau, ce qui permettrait de baisser considérablement les coûts et de pouvoir créer un objet fonctionnel de nos propres mains.

2. Matériel et méthodes

2.1 Matériel

Pour réaliser ce projet, peu de matériel est nécessaire. J'ai utilisé:

  • Un RaspberryPi 3 (Model B) avec accès internet en wifi
  • Un microphone (Adafruit Electret Microphone Amplifier - MAX9814)
  • Un haut parleur (avec branchement USB)
  • Un ADC (Analog to Digital Converter)
  • Une breadboard et des câble
  • Un câble plat pour connecter la breadboard au Raspberry Pi
  • Un ordinateur pour programmer en python

2.2 Méthode

2.2.1 Fonctionnement

Il y a deux récepteurs d'informations et un émetteur. Les récepteurs sont le microphone qui va capter les paroles de l'utilisateur afin de les envoyer à l'assistant Google en ligne et un bouton que j'ai décidé d'utiliser comme interrupteur on/off. J'ai décidé de ne pas utiliser une activation sonore car je ne souhaite pas que mes paroles soient écoutées en permanence par mon microphone. A l'activation du bouton, le micro se mettra à écouter son environnement. Lorsque le bouton est pressé une deuxième fois, l'enregistrement s'arrête, les propos recueillis sont envoyés à l'assistant vocale de Google et la réponse est retransmise par le haut parleur.

2.2.2 RaspberryPi 3

Afin de mener à bien ce projet, j'ai installé divers programmes sur mon RaspberryPi. D'abord, j'ai installé le programme afin de pouvoir utiliser du Python3, à l'aide de la commande:

sudo apt-get install python3-dev python3-venv

Ensuite, j'ai installé les programmes adafruit-blinka et mcp3008 afin de pouvoir utiliser le micro et l'ADC correctement, à l'aide des commandes:

sudo pip3 install adafruit-blinka
sudo pip3 install adafruit-circuitpython-mcp3xxx

Nous avons maintenant téléchargé tout les programmes nécessaires afin de mener à bien ce projet.

2.2.3 Configuration du bouton on/off

J'ai commencé par établir le système on/off. J'ai simplement créé un fichier afin de controller l'allumage d'une l'aide à l'aide d'un bouton. Cela m'a permis de commencer mon projet par une étape simple qui me permettait de m'assurer le fonctionnement du système on/off. Commencer par un objectif mineur permet de ne pas avoir une montagne de problèmes à résoudre en même temps mais de les résoudre un par un.

Au départ, lorsque le bouton était enfoncé, la LED s'allumait puis elle s'éteignait lorsque le bouton était relâché. Cela ne satisferait pas ma demande et j'ai donc ajouté une variable qui me permettait d'allumer la LED lors de la première pression puis de l'éteindre lors de la deuxième.

Afin d'éviter que les interférences, j'ai opté pour un montage de type "pull-up". Ce montage permet de d'allumer ou d'éteindre la LED lorsqu'aucun courant n'est détecté à travers le circuit bouton. Un courant traverse constamment le circuit bouton et la pression du bouton coupe ce courant. Le fait que la LED se déclenche lorsqu'il n'y a plus de courant détecté dans le circuit bouton permet d'empêcher que de simple interférences soient interprétées par le programme comme du courant circulant dans le circuit bouton.

2.2.4 Utilisation du microphone à l'aide d'un ADC

Maintenant que le bouton on/off est fonctionnel, nous devons mettre en place un microphone fonctionnel. Sur la plupart des sites internets, ils conseils l'utilisation d'un microphone USB mais n'en ayant pas un à ma disposition, j'ai opté pour celui mis à ma disposition.

Pour l'utiliser, il nous faut d'abord effectuer les branchements nécessaires entre l'ADC, les pins et le microphone avant de s'attaquer au code nous permettant de l'utiliser. Pour cela, j'ai suivi les instructions d'un site internet qui expliquait le fonctionnement de l'ADC et les branchements à effectuer entre celui-ci et un potentiomètre en remplaçant le potentiomètre par mon microphone.

Voici un schéma des branchements effectués sur l'ADC (à noter que le potentiomètre sur le schéma a été remplacé par un microphone dont les branchements seront expliqués plus tard):

learn_raspberry_pi_Analog_Inputs_for_Raspberry_Pi_Using_the_MCP3008-Pi-Cobbler_bb.png

J'ai remplacé les branchements effectués sur le potentiomètre par les branchements nécessaires au bon fonctionnement du microphone Adafruit. Pour ceci, j'ai suivi les instructions d'un site internet qui explique l'utilisation du microphone à l'aide de piles. Voici un schéma des branchements effectués:

adafruit_products_wired.jpg

Nous avons maintenant un micro fonctionnel qui capte le son correctement. Nous devons maintenant nous attaquer au code qui nous permettra de faire interagir le bouton, la LED et le microphone.

2.2.5 Code principal

J'ai dû écrire mon code en python3 afin de pouvoir utiliser plusieurs librairies sinon pas disponibles, par exemple busio. J'ai pris le code original du site sur laquelle j'ai appris comment effectuer les branchements pour connecter l'ADC au Raspberry PI. J'ai ensuite modifié le code pour qu'il fonctionne non avec un potentiomètre mais avec le microphone Adafruit. (Le code original se trouve sur le git). Il faut noter que certaines parties du code original ont été enlevées car non nécessaires à mon projet en particulier. Le code original affichait le pourcentage du volume détecté. J'ai donc remplacé la partie du code qui affichait le volume avec l'allumage d'une LED. J'ai ensuite fait évoluer mon code afin que lorsque le premier son est détecté, la LED s'allume et que lorsque le deuxième son est détecté, la LED s'éteigne. Cela me permettait de m'assurer de la détection correcte du son. J'ai ensuite fait en sorte que le microphone commence à détecter le son seulement lorsque le bouton était appuyé, en utilisant le même système pull-up que précédemment. L'idée, en réalisant chacune de ces étapes, était que le micro se lance lorsque le bouton est appuyé une première fois et que l'enregistrement s'arrête une fois le bouton appuyé à nouveau et que l'enregistrement soit envoyé à l'assistant Google. J'ai donc réalisé la partie la plus compliquée sans utiliser l'assistant Google mais en réalisant de manière hypothétique le code en entier. La LED n'est pas nécessaire mais m'a permis de controller le bon fonctionnement du programme.

2.2.6 Assistant Google

Il est donc venu le moment d'installer l'assistant Google sur mon Raspberry Pi. Lors de la réalisation de mon projet, j'ai rencontré un obstacle à son installation. Après avoir effectué les premières étapes nécessaires, c'est à dire installer le répertoire qui va accueillir le fichier JSON et configurer l'assistant vocal sur le site Google actions, je me suis retrouvé face à un problème. Afin de pouvoir utiliser l'assistant Google, il faut faire une demande officiel à Google pour son utilisation, à la manière d'une application. N'ayant pas le temps d'attendre une réponse qui peut prendre des semaines et ne trouvant pas d'alternative, j'ai décidé de ne pas utiliser l'assistant Google mais de garder l'idée d'un assistant vocale purement théorique. J'ai réalisé un "proof of concept" en montrant que cela détecte un son et que ce son pourrait être traité par Google si l'installation de l'assistant était réalisée.

2.2.7 Haut parleur

Comme dit précédemment, je n'ai pas pu installer l'assistant vocale. J'avais prévu d'utiliser un haut parleur USB ce qui évitait plein de problèmes pour un prix raisonnable. N'en ayant pas d'utilité, j'ai décidé de ne pas l'acheter car cela aurait été une dépense inutile. Si j'en avais eu un, il m'aurait suffit d'aller dans les réglages du Raspberry Pi et d'activer la fonction "speaker" (haut parleur).

3. Résultats

Voici une photo du résultat final:

IMG_1298.JPG

Le code fonctionne bien même si il faut parfois appuyer le bouton plusieurs fois pour arrêter le programme. Lorsque le programme est lancé, le microphone ne capte pas de son. Dès que le bouton est appuyé, lorsque le microphone détecte un son, la LED s'allume et lorsque un nouveau son est détecté, la LED s'éteint. SI on réapprit sur le bouton, le microphone arrête de capter le son et la LED s'éteint.

4. Discussion

Le gros point négatif de mon projet est le fait qu'il n'est pas fonctionnel. J'aurais aimé pouvoir présenter un projet complet mais suis tout de même satisfaite de mes progrès dans la compréhension du fonctionnement du Raspberry Pi et de ses pins. Même s'il n'atteint pas mes attentes initiales, le programme réalise quand même plusieurs actions utiles qui peuvent être utilisées dans d'autre projets. J'aurai pu améliorer mon projet en trouvant un moyen d'installer un autre assistant vocal ou, dans le cas où il y aurait eu plus de temps à ma disposition, fair el a demande officielle à Google afin d'avoir accès à son assistant vocal. Pour l'améliorer plus, j'aurais aussi pu acquérir un microphone plus performant, même si cela n'aurait pas fait de différence majeure dans l'efficacité de mon projet.

5. Conclusion

J'ai énormément appris lors de la réalisation de mon projet, notamment à chercher dans différentes sources afin de réaliser l'objectif voulu, par exemple le lien entre l'utilisation de l'ADC et du microphone Adafruit. Je sais maintenant utiliser un terminal afin de réaliser un projet et suis familière avec l'utilisation d'un git. Malgré qu'il ne soit pas terminé, je suis fière d'avoir réalisé ce projet et même si je n’ai pas pu mener à bien mon idée de départ, je reste persuadée qu’elle est possible.

Références

https://urlz.fr/9MiB configuration de l'assistant Google

https://urlz.fr/9MiA utilisation de l'ADC

https://urlz.fr/9Mom utilisation du microphone