Cuire une viande avec un Raspberry PI (vidéo)

Cuire une viande avec un Raspberry PI (vidéo)

Quand un geek se met aux fourneaux, le moment critique est la cuisson. Plus précisément, l'attente de la cuisson. Il est souvent tentant d'aller lire un article sur l'iPad, traîner devant le PC ou discuter avec les invités plutôt que de rester devant le four à surveiller une viande qui cuit. Et immanquablement, on mange de la viande un peu trop cuite. Mais grâce à une petite recette à base de Yocto-Thermocouple et de Raspberry Pi, ce problème va être résolu. Notre Raspberry Pi va surveiller la température de la viande pour nous, et nous envoyer un email dès que la temperature idéale sera atteinte. Et vive les smartphones!


Le matériel

Pour la partie matérielle on va utiliser :
- une pointe thermocouple, que l'on va piquer dans la viande (~ EUR 20.-, mais fournie en standard avec de nombreux fours).
- un Raspberry Pi pour exécuter notre script de surveillance écrit en Python (~ EUR 30.-)
- un Yocto-Thermocouple pour lire le thermocouple avec le Raspberry Pi (~ EUR 38.-)
- un chargeur USB pour alimenter le Raspberry Pi (~ EUR 10.-, mais vous pouvez utiliser un chargeur de téléphone portable)
- un câble USB et un peu de visserie (~ EUR 5.-)
- une RaspBox pour assembler le tout (~ EUR 12.-)

Comme le tout va finir caché dans une armoire, il n'est pas nécessaire de faire un boîtier bien compliqué. On va simplement monter le Yocto-Thermocouple sur la RaspBox en utilisant les trous prévus à cet effet.

Le Rasspberry Pi dans une RaspBox, avec un Yocto-termocouple monté dessus.
Le Rasspberry Pi dans une RaspBox, avec un Yocto-termocouple monté dessus.



Le Raspberry Pi

Le Raspberry Pi est un micro PC de la taille d'une carte de crédit et vendu bon marché, utilisant un processeur ARM et un OS Linux. L'installation de l'image recommandée est très bien documentée (http://elinux.org/RPi_Easy_SD_Card_Setup) et ne pose pas de problème.

Le Raspberry Pi souffre malheureusement d’un support USB buggé perfectible et nous allons devoir le configurer pour qu'il soit fiable. En effet le Raspberry Pi perd de temps en temps des paquets USB pour les périphérique "full-speed" (claviers, souris, modems, certains devices audio, etc) lorsqu'il travaille dans le mode "high-speed" standard. Ce problème se produit moins fréquemment avec les dernières mises à jours du firmware, mais n'est pas encore complètement résolu. La seule solution fiable est de forcer tous les périphériques à fonctionner en mode "full-speed". L'effet de bord regrettable est que tous les périphériques USB (y compris la carte réseau onboard) seront limités à 1.5 Mo/s, mais quoi qu'il en soit, le Raspberry Pi n'a pas été conçu pour être une bête de course...

Pour forcer USB à fonctionner en "full-speed", il faut rajouter dwc_otg.speed=1 dans le ficher /boot/cmdline.txt, comme suit:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 dwc_otg.speed=1 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait


Édit: L'option "dwc_otg.speed" n'est plus nécessaire pour les Raspberry Pi B+ et suivants.

Configuration du Yocto-Thermocouple

Avant d'aller plus loin, on vérifie que notre thermocouple est bien configuré. Pour ce faire il faut lancer sur le Raspberry Pi le programme VirtualHub fourni avec le Yocto-Thermocouple et se connecter sur l'interface web (port 4444 par défaut). Le type du thermocouple doit être changé si nécessaire (nous utilisons ici le type "K", le plus courant). On en profite aussi pour donner le nom logique "food_sensor" à l'entrée sur laquelle on a branché notre thermocouple.

Notre thermocouple correctement configuré
Notre thermocouple correctement configuré



Le software

Notre application va devoir envoyer des emails, répondre à des requêtes HTTP (pour l'interface de contrôle) et dessiner des graphiques de température. Le langage python est idéal dans ce cas, car il possède nativement le support pour envoyer des email et répondre à des requêtes HTTP. De plus, il est installé en standard sur l'image du Raspberry Pi. Pour dessiner un graphique, il existe la libraire Matplotlib qui s'installe très facilement avec la commande :

> sudo apt-get install python-matplotlib


Il faut ensuite installer la libraire Yoctopuce [edit: maintenant disponible sur PyPI: Voir cet article].

Le code python est relativement simple et est téléchageable ici. Nous n'allons détailler ici que les parties qui sont spécifique à nos modules.

Il faut tout d'abord importer le module yocto_api pour pouvoir utiliser la librairie, et le module yocto_temperature pour avoir accès à la classe YTemperature qui nous permettra de récupérer la température du thermocouple.

# import Yoctopuce Pyhton library (can be downloaded from http://www.yoctopuce.com/EN/libraries.php)
from yocto_api import *
from yocto_temperature import *


Au début du programme, il faut initialiser l'API pour se connecter au module USB.

def main():
    """ Main function, deals with arguments and launch program"""
    ....
        errmsg=YRefParam()
        if YAPI.RegisterHub("usb", errmsg) != YAPI.SUCCESS:
            sys.exit("init error"+errmsg.value)


Le coeur du programme se situe dans la fonction run, qui est exécuté dans un thread séparé et qui va vérifier la température de la viande toutes les secondes.

...
def run(self):
    temp_sensor = YTemperature.FindTemperature("food_sensor")
    ....
    while not self._mustStop :
        # verify that our device is still connected
        if not temp_sensor.isOnline():
            sendResult('No temperature sensor connected !',0)
            if options.verbose : print "Temperature sensor 'food_sensor' not found"
            return
        cur_temp = temp_sensor.get_currentValue()
        if options.verbose : print "current value is %2.1f" % cur_temp
        ...
...



Le reste du code va répondre au requêtes HTTP avec la dernière valeur mesurée.

Testing party

Si vous lancez l'application telle quelle, il y a de grandes chances que l'envoi des emails ne fonctionne pas (sauf si vous avez configuré un serveur SMTP sur votre Raspberry Pi). Il faut passer sur la ligne de commande le nom de votre serveur SMTP ainsi que vos informations d'authentification. Si vous lancez l'application avec le paramètre --help, la liste complète des options sera affichée.

Voici par exemple les options à passer pour utiliser le serveur SMTP de gmail:

> ./picooker.py --smtp_host=smtp.gmail.com --smtp_port=465 --smtp_user=myemail@gmail.com --smtp_pass=mypassword


En se connectant sur l'interface web (par défaut sur le port 8888), on peux configurer la température a laquelle on veux envoyer un email d'alerte, et le destinataire. Il ne reste plus qu'a planter le thermocouple dans la viande et appuyer sur le bouton Start Recording.

L'interface web du programme
L'interface web du programme



Quand la viande atteindra la température fixée l'email sera envoyé avec le graphique de la cuisson.

Voilà l’émail qui est envoyé en fin de cuisson
Voilà l’émail qui est envoyé en fin de cuisson



Voilà une petite démo en vidéo.

  



Bon, c'est pas tout ça, mais il faut j'aille faire un peu de social avec mes invités...
Mise à jour: 19 avril 2013
Nous avons amélioré le Pi Cooker. Il est maintenant possible d'utiliser plusieurs capteurs de température Yoctopuce. Voir Yoctopuce libraries, GitHub, PyPI, and Raspberry Pi.

Commenter 3 commentaires Retour au blog



1 - mvuilleu (Yocto-Team)Lundi 15 octobre 2012 7H40

Je l'ai testé ce week-end sur une selle de chevreuil, avec un MK805 (j'ai du WiFi mais pas d'ethernet dans ma cuisine). Tout a fonctionné à merveille, j'adore le graph de température en temps réel sur l'iPad...

La seule difficulté rencontrée par rapport au contenu de l'article est le port SMTP de la ligne de commande d'exemple: il n'est valable que pour GMail. J'ai du utiliser le port SMTP standard (25) pour mon hébergeur mail.

2 - nfrancois Mardi 04 décembre 2012 20H21

Question un peu bête (je n'y connais pas en électronique) : y a une température max du four sans cramer le fil de la sonde ou c'est un fil prévu pour ?

3 - mvuilleu (Yocto-Team)Mardi 04 décembre 2012 21H15

Les fils thermocouples sont fabriqués avec des isolants résistant à la chaleur. Plus ou moins selon le prix...
Le thermocouple vendu avec le Yocto-Thermocouple est fabriqué avec un isolant en PFA, donné pour résister aux températures de -75°C à 260°C. Les fils de thermocouple isolés en fibre de verre disponibles facilement sur le marché montent jusqu'à 480°C. Pour les températures supérieures (par exemple pour fondre l'or), on utilise une pointe rigide qui se visse en dure dans le récipient métallique où se trouve le produit à mesurer. Mais à 1250°C, on est plus vraiment dans le registre de la cuisson lente :-)

Yoctopuce, get your stuff connected.