Variations inspirées du Makey Makey

Variations inspirées du Makey Makey

On nous a demandé cette semaine s'il était possible d'utiliser un Yocto-Knob pour détecter un contact simplement fermé par un contact des doigts, selon le même principe que le Makey Makey. La réponse est oui bien sûr, mais l'occasion était trop belle pour en rester là. C'est parti pour un nouveau bricolage... avec une petite vidéo à la fin pour prouver que ça marche!

Le Makey Makey de base fonctionne selon un principe très simple. Il se comporte comme un clavier ne comportant que quelques touches, et dont vous fournissez les touches. Vous pouvez utiliser presque n'importe quoi pour faire la touche, pour autant que ce que vous utilisiez soit au moins légèrement conducteur, de sorte qu'en pressant l'objet, vous fermiez le contact. Allez voir la vidéo sur le site de Makey Makey, elle est bien faite.

Bien sûr, a priori, ça ne sert pas à grand chose dans la vraie vie. Mais l'idée est sympa, et ça ouvre la question de la plage de résistances que l'on peut détecter avec le Yocto-Knob. La documentation du Yocto-Knob mentionne l'usage de potentiomètres dont la résistance va jusqu'à 100 KOhm, car au delà la lecture n'est plus bien linéaire. Mais pour détecter un état fermé/ouvert, une résistance de 10 MOhm faite par la peau peut suffire.

Voilà ce qu'on va réaliser
Voilà ce qu'on va réaliser



Le bricolage du jour consiste à faire des animaux en pâte à modeler, qui feront leur cri dès qu'on les touche. Pour cela, nous utiliserons:
- Un vieux haut-parleur de PC récupéré
- Un Yocto-Knob
- Un Micro-USB-Hub
- Un mini-PC ARM de Gumstix, le Waysmall Silverlode
- Du câble plat... et de la pâte à modeler

Ce sera pour nous aussi l'occasion de tester ce mini-PC, du même genre que le MK802, mais livré avec une distribution Ubuntu Linaro supportée officiellement.

Un Yocto-Knob sur un Micro-USB-Hub, un Gumstix et un vieil haut-parleur...
Un Yocto-Knob sur un Micro-USB-Hub, un Gumstix et un vieil haut-parleur...



Pourquoi un Gumstix plutôt qu'un Raspberry Pi ? D'abord parce que le Raspberry Pi était trop gros pour entrer dans le boîtier. Et puis, sachant que le Gumstix est plus puissant et beaucoup plus cher (200$), nous avons voulu voir si pour le prix nous pourrions avoir un support USB mieux soigné que sur le Pi (cf. problèmes d'alimentation USB et de support USB 1.1 sur le Raspberry Pi). La réponse à la fin de l'épisode...

Le code

Pour faire simple vu qu'il s'agit d'une machine ARM, nous avons fait le petit programme en Python. Les exécutables pour jouer les fichiers audio s'installent sans problème sur le Linaro avec des simples apt-get install, donc il suffit des quelques lignes de code suivantes pour jouer un son dès qu'un contact est fermé:

import sys
from yocto_api import *
from yocto_anbutton import *

sounds={1:"cock.mp3", 2:"cow.wav", 3:"horse.wav", 4:"lion.mp3", 5:"sheep.wav"}

# Fonction appelée quand le contact change
def buttonChanged(fct,value):
    isPressed = (int(value) < 500);
    wasPressed = fct.get_userData();
    if(isPressed != wasPressed):
        fct.set_userData(isPressed)
        if(isPressed):
            sound = sounds[int(fct.get_functionId()[-1:])]
            sndtype = os.path.splitext(sound)[1]
            player = ("mpg123" if sndtype==".mp3" else "aplay")
            os.system(player+" "+sound+" &")

# Initialise l'API Yoctopuce sur les modules USB
errmsg=YRefParam()
if YAPI.RegisterHub("usb", errmsg)!= YAPI.SUCCESS:
    sys.exit("Init error: "+errmsg.value)

# Énumère les boutons, et active la fonction de callback
button = YAnButton.FirstAnButton()
if button is None:
    sys.exit("no Yocto-Knob found!")
while button is not None:
    button.registerValueCallback(buttonChanged)
    button = button.nextAnButton()

# Gère les événements indéfiniment
print('Hit Ctrl-C to Stop ')
while True:
    YAPI.Sleep(500, errmsg)



Avant de lancer ce programme, il faut apprendre au Yocto-Knob à reconnaître la valeur de déclenchement que vous souhaitez utiliser. Pour cela, vous lancez simplement notre VirtualHub, vous cliquez sur le lien configure à côté de votre Yocto-Knob, et pour chaque entrée vous cliquez sur le lien start calibration. Il suffit alors de toucher (avec les doigts) et relâcher le contact pour que le bouton mémorise les valeurs extrêmes que vous désirez utiliser. Pressez sur stop calibration, et cliquez le bouton Save.

L'interface de calibration du Yocto-Knob
L'interface de calibration du Yocto-Knob



Cette opération est très facile à effectuer, et elle a l'avantage de vous permettre d'obtenir dans votre code toujours des valeurs normalisées entre 0 et 1000, indépendamment de la résistance que vous utilisez.

Encore plus fort

Il y a un deuxième avantage à cette méthode: en poussant un peu plus loin le concept, on peut même faire un peu mieux que le Makey Makey. Avez-vous remarqué que sur toutes les vidéos de Makey Makey, l'utilisateur doit tenir dans une main (en général un peu cachée...) le fil de terre ? C'est logique: comme le Makey Makey détecte un contact qui se ferme, il faut bien que l'utilisateur touche deux contacts: la terre et le bouton. Le problème, c'est que si vous voulez tester le concept avec un enfant de 2 ans, ça ne va pas être possible de lui demander de tenir un fil à la main, et si vous lui mettez un bracelet, il va tout arracher.

Avec le Yocto-Knob, on peut pousser la calibration encore plus loin jusqu'à détecter les quelques millivolts que nous transmettons tous lorsque nous sommes dans un bâtiment. Pour cela, il suffit de raccorder le fil de terre du Yocto-Knob directement sur un radiateur par exemple (à l'aide d'une grosse pince crocodile), ou sur n'importe quel objet mis à la terre. On pourrait même utiliser le 3e fil d'une prise électrique, mais vu que le bricolage sera montré à des enfants, ce serait un très mauvais exemple...

Connection du fil de terre du Yocto-Knob à la terre du bâtiment
Connection du fil de terre du Yocto-Knob à la terre du bâtiment



Voici le schéma de raccordement:

Le schéma de branchement de la version finale
Le schéma de branchement de la version finale



Si vous refaites maintenant la calibration en touchant simplement un fil (et plus en touchant le fil de terre), vous verrez que le Yocto-Knob détecte bien le toucher. Par contre, ce qu'il montre n'est plus un contact fermé, mais une tension alternative de quelques millivolts que vous transmettez inconsciemment avec votre doigt. Il faut donc faire un petit changement au code, pour ne pas relancer le son à chaque oscillation de la tension (50 Hz):

prevtime = datetime.datetime.today()

def buttonChanged(fct,value):
    isPressed = (int(value) < 980);
    wasPressed = fct.get_userData();
    if(isPressed != wasPressed):
        fct.set_userData(isPressed)
        if(isPressed):
            if(datetime.datetime.today() - prevtime < timedelta(seconds=1)):
                return
            prevtime = datetime.datetime.today()
            // jouer le son comme avant



Et voila le résultat:

  



Pour conclure...

Comme promis, notre opinion sur le Gumstix Waysmall Silverlode après ce premier test: pas mal, même si on espérait encore mieux.

Par rapport au MK802, trois gros avantages: la distribution Linux bien supportée, la connexion Ethernet qui marche bien et la console série (via câble USB), qui vous évite de devoir transporter un écran HDMI pour debugger.

Un défaut lié à l'utilisation d'une machine Linux pour ce genre d'applications: si le réseau n'est pas branché (c'est notre cas une fois que le projet est en boîte), la machine met cinq minutes pour démarrer. La seule manière de l'éviter est de désactiver définitivement le réseau dans la configuration, mais du coup quand vous voulez faire une modification, c'est franchement pénible...

Par rapport au Raspberry Pi, le support USB semble bien plus fiable. Mais avec un gros bémol: le port USB Host ne fait que du USB 2.0. C'est à dire qu'il n'est pas conforme avec le standard USB: si vous y branchez directement un module USB 1.1, il ne marchera pas. C'est la raison pour laquelle nous avons dû ajouter un Micro-USB-Hub dans ce bricolage.

A part cela, pas de problème majeur. Ça reste une petite machine ARM loin des performances d'un vrai PC, mais c'est utilisable pour ce genre de bricolages...

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.