Hi all!
Je viens d’apporter une petite modification à Daryl: L’ajout d’un module Bluetooth. Ce module va simplifier l’architecture de Daryl dans le sens où il va me permettre de supprimer le câble USB qui reliait le Viliv S5 à l’arduino Uno, mais aussi le HUB USB. Le Viliv S5 étant déjà équipé d’un module bluetooth interne, je pourrais directement brancher la webcam sur le port USB du Viliv S5.
Autre avantage, ce module BT me permettra de « déscratcher » le Viliv S5 de Daryl, et de commander mon robot, à distance, comme une télécommande amovible.
J’ai acheté ce module BT sur Ebay pour quelques Euros au vendeur MDFLY. Le module est relativement simple à mettre en place. Il ne nécessite que 4 fils: 1 fils à relier à la pin +5V de l’arduino, 1 fils à relier à la pin GND de l’arduino, 1 fils RX à relier à la pin 1 TX de l’arduino et enfin 1 fils TX à relier à la pin 0 RX de l’arduino.
Au début, j’ai un peu galéré à réaliser une connexion entre le Viliv S5 sous Seven et le module bluetooth. En effet, je tentais de les d’appairer grâce au soft BT fournis sous Seven. Erreur! Pour je ne sais quelles raisons, il faut utiliser le soft Toshiba Bluetooth stack.
Une fois le soft installé, il faut:
1/ Rechercher les appareils BT (Linvor pour ce module). A la mise sous tension la lumière bleue clignote très rapidement.
2/ Appairer le module BT (Code: 1234). Lorsque les modules sont appairés, la lumière bleue clignote plus lentement.
3/ Rechercher les services disponibles (port COM). Le soft Toshiba va installer une multitude de port COM. Seul le port COM 40 nous intéresse.
4/ Se connecter au port COM 40. A la connexion au port COM 40 la lumière bleue devient fixe puis clignote durant le transfert des données…
Normalement, il est possible d’interroger le module afin de voir ou modifier certaines caractéristiques, comme le baud rate (à 9600 par défaut). Il faut, grâce à un Putty par exemple, entrer certaines commandes. Pour ma part, je n’ai jamais réussi à communiquer avec le module, et donc à modifier le baud rate. Pour pouvoir l’utiliser, j’ai dû modifier le baud rate au sein de mon programme arduino et de mon application Java (1152000 vers 9600).
Mise à part cette modification, la mise en place de ce module est totalement transparente vis à vis de mon code. En effet, je me connecte toujours à un port COM comme auparavant donc pas de modification à apporter.
ATTENTION: Si les broches RX et TX du module BT sont connectées aux pin 1/0 de l’arduino, alors, lors du transfert d’un sketch dans l’arduino, il est nécessaire de déconnecter les fils. En effet, le port série USB de l’arduino utilisant les pins 0 et 1, si vous laissez les fils branchés, le transfert tombera en erreur.
Houston, we’ve had a problem
Première mauvaise nouvelle dans mon projet: Je ne pourrais pas mettre en place la reconnaissance vocale au sein de Daryl, pour deux raisons majeures:
– La reconnaissance vocale (l’API) est très gourmande en ressource CPU, par conséquent, le Viliv S5 n’arrive pas à suivre. Une reconnaissance qui prenait 1-2 secondes sous mon laptop prend 2 à 4 fois plus de temps sur le Viliv S5!
– Les moteurs sont relativement bruyants et parasitent le son de la voix reçue par le micro de la webcam. Les informations vocales sont donc difficiles à traiter.
C’est avec beaucoup de déception, que je me suis résolu à ne pas intégrer la reconnaissance vocale au sein de Daryl. Cela est vraiment dommage car j’ai passé pas mal de temps à la mettre en place, et celle-ci allait me permettre de belles interactions avec Daryl. Ceci dit, je vais tout de même garder la synthèse vocale, qui permettra à Daryl d’annoncer l’arrivée d’email dans ma boite mail par exemple…
Je me suis donc penché sur une solution de contournement moins « sexy » que la reconnaissance vocale, mais tout aussi intéressante: l’utilisation d’une télécommande IR.
J’ai donc acheté pour quelques euros le module infrarouge + télécommande de chez DF Robot. La mise en place est très facile (code arduino fourni par DF Robot). Cependant, je me suis vite rendu compte que ce kit était très limité. En effet, il faut que la télécommande soit pile dans l’axe du récepteur (et très prés) pour que les données soit reçues correctement. Inutilisable dans mon cas!
Je me suis donc demandé s’il ne valait mieux pas que je me tourne vers un module RF (radio fréquence) moins susceptible en terme de transmission. Après quelques recherches, j’ai cru comprendre que ce genre de module n’était pas forcement facile à mettre en place, et qu’une télécommande RF avec plusieurs boutons serai assez onéreuse, et pas forcement facile à coupler avec un module RF.
Je suis donc parti sur approche totalement différente au final, mais relativement sympa: Le développement d’une télécommande Web
Cette réalisation nécessitera le déploiement d’un WebServer (Jetty) sur le Viliv S5. Ce serveur web permettra d’accéder (via wifi comme le Viliv S5 est connecté à mon réseau local) à une petite interface web regroupant quelques écrans. Ces écrans me permettront de commander le robot à distance et d’activer/désactiver des fonctionnalités. Je pourrais donc me connecter à Daryl via mon Iphone ou mon Ipad.
Coté implémentation, je pense partir sur un Webserver Jetty directement intégré à mon application Java existante. Jetty à l’avantage d’être très léger et de consommer peu de ressources. Cotés interface, je vais utiliser JQuery Mobile permettant de faire des interfaces web java pour appareils mobiles.
J’ai réalisé vite fait une première ébauche de ce à quoi pourra ressembler l’interface web sous Iphone: