Journal [DAQ] La simplicité est de mise !

Posté par .
Tags : aucun
6
28
oct.
2008
En 2006 je vous expliquais ma volonté de passer sous Linux pour faire de l'acquisition données et le pilotage : http://linuxfr.org/~freejeff/22273.html.

L'interface entre les cartes d'acquisitions et le système d'exploitation se fait par le driver COMEDI, Driver complexe à installer et à utiliser. L'idée était de pouvoir permettre à des personnes non initiées aux joies de la programmation "de bas niveau" de pouvoir développer en toute autonomie une application de pilotage/acquisition. Pour se faire j'ai acheté une carte d'acquisition USB uniquement compatible linux : http://www.linux-usb-daq.co.uk/.
Une fois tout installé et paramétré ce matériel est P&P, ce qui en simplifie l'utilisation. Reste la couche logicielle "haut niveau" pour ne pas avoir à utiliser du C. Je me suis alors tourné vers l'INRIA qui propose dans sa plateforme de calcul numérique SCILAB/SCICOS un module nomé HIL (Hardware In The loop) : http://www.scicos.org/ScicosHIL/SCICOS_HIL_ULW_11.pdf permettant d'utiliser tous les "blocks" déjà implémentés dans SCICOS ce qui en fait une solution excellente pour un prototypage rapide d'applications.

Ceci dit la procédure globale pour conduire à cette facilité finale d'utilisation est complexe et non exempte de bogue au niveau de l'interface entre COMEDI et SCICOS.

Récemment, j'ai fait un peu veille technologique au niveau de solution de domotique, domaine à la croisée des chemins entre la DAQ et l'API (automate programmable industriel) et je suis tombé sur : http://www.starting-point-systems.com/downloads_fr.html et je dois dire que j'ai vraiment été stupéfait de la simplicité de mise en oeuvre de cette solution.
L'idée de base est de pouvoir piloter un micro-contrôleur en passant par l'USB au travers d'une émulation d'un port série. Le tout est directement compatible Linux sans ajout de module. Un interpréteur de commandes permet de faire la quasi-totalité des taches : allumer la LED, commander les sorties PWM, numeriques. acquérir les valeurs des entrées analogiques et les renvoyer vers le port USB. En bref tout ce que l'on veut généralement faire avec une carte d'acquisition !
La cerise sur le gâteau est la possibilité de stocker 1 kB de commandes directement sur la carte pour qu'elle puisse fonctionner en autonomie sans le PC, permettant de faire bien plus de choses que ce que l'on peut faire habituellement avec une carte DAQ !

Je tenais donc à vous faire partager cette découverte qui n'est pas évident de faire sans avoir les bons mots clefs dans google.

Le niveau d'abstraction de l'interpréteur de commande permet de pouvoir expliqué simplement au non-informaticien une programmation simpliste d'évènements complexes telle qu'une commande thermique hystérétique :

onevent background
adc 1
if ? > 135 then pin 2 low
if ? < 126 then pin 2 high
endevent

Je trouve que c'est vraiment un net progrès. De plus l'équipe qui développe ce module est française et extrêmement réactive.

Il reste que le développement des solutions Linux est assez minimaliste, on pourra regretter par exemple l'absence d'un programme de mise à jour du firmware du µ-contrôleur sous linux alors qu'il est disponible sous windows. Les puriste pourront penser que le fait de ne pas disposer du code source du firmware est un problème. N'étant pas assez (du tout) caler en programmation de µ-contrôleur je ne peux pas juger du "préjudice" que cette non-divulgation du code source occasionne.

Ce module peut être acheté sur ebay pour une 60aine d'euros, ce qui est clairement un prix d'appel.

Avez vous un avis sur cette solution ?
En connaissez vous d'autres aussi polyvalentes ?
Je ne l'ai pas encore commandée, laissant en moi une !!!
  • # Premier lien

    Posté par . Évalué à 4.

    Désolé pour le point en trop à la fin du premier lien ...
  • # Possibilités voisines ?

    Posté par . Évalué à 4.

    Bonjour, je n'ai pas tout compris du contenu de ce journal, mais apparemment, vous avez trouvé un moyen simple et rapide de programmer un microcontrôleur sous Linux.

    J'ai quelques questions à ce sujet, et je me demande si des alternatives ne sont pas possibles.

    D'abord, quels sont vos objectifs avec cette carte d'acquisition. Quel genre de processus voulez vous mettre en œuvre ?

    En second lieu, quel est l'intérêt de faire une émulation du port série pour une carte pilotée par USB ? Est-ce pour garder une compatibilité du pilote de périphérique ? Je ne comprends pas le lien avec le fait que la carte soit programmable dans un langage « haut-niveau »

    Je me suis intéressé à ce genre de sujets il y a quelques temps, et j'ai étudié pour cela le manuel des PICS18F24xx, qui sont des composants avec une interface USB. J'ai donc du étudier quelque peu ce protocole, et je me suis aperçu qu'il y a une bibliothèque Python pour communiquer via le port USB, ce qui est très intéressant pour écrire un protocole de programmation du composant. Par contre la programmation du composant se ferait toujours en assembleur.

    Est-ce que vous avez des idées sur les compilateurs pour microcontrôleurs sous Linux ?

    Est-ce que vous pensez que la mise en œuvre de quelque chose d'approchant pourrait satisfaire à vos besoins ?

    Une liste de liens en plus :

    http://fribotte.free.fr/bdtech/pic_and_linux/pic_and_linux.h(...)
    http://www.lea-linux.org/cached/index/Pratique-pic.html
    http://www.linuxjournal.com/article/3045
    • [^] # Re: Possibilités voisines ?

      Posté par . Évalué à 3.

      "vous avez trouvé un moyen simple et rapide de programmer un microcontrôleur sous Linux."
      Ce n'est pas exactement ça. Cette carte permet une interaction avec des entrées/sorties analogiques/numérique simple. C'est cette simplicité qui en fait une solution incontournable.

      Illustration : J'ai un capteur qui me renvoie une tension en fonction de son état par exemple un capteur d'effort. Je veux prendre la décision de modifier un actionneur en fonction de l'état de ce capteur par exemple modifier la vitesse d'un moteur à courant continu.

      Il me suffit juste d'envoyer ce message au périphérique /dev/ttyUSB0 pour pouvoir lui dire que si l''éffort est supérieur à valeur alors diminues la vitesse de rotation.

      adc 1 une entrée analogique
      pin 2 est une sortie numérique/analogique (à vérifier)

      onevent background
      adc 1
      if ? > valeur then pin 2 low
      endevent

      C'est suffisamment simple pour que n'importe qui sans connaissance en programmation puisse faire ce programme.

      Je peux de plus récupérer la valeur de adc 1

      dans un fichier ce qui permet un interfaçage avec n'importe quel code.

      C'est super simple à utiliser, comparé à la procédure que j'expliquais en début de journal qui nécessite une connaissance approfondie pour l'installation, une connaissance de base de langage type SIMULINK/LABVIEW/SCICOS pour pouvoir être mise en oeuvre.

      Le fait de pouvoir entrer en dur les données dans un micro-ontrôleur n'est qu'un plus, permettant d'envisager des régulations et pilotage aux alentours des 100 Hz.
  • # Arduino ?

    Posté par . Évalué à 4.

    Dans le genre microcontrolleur avec port usb , hardware ouvert ,extensible (hard et soft ) et progammation (python , supercollider , pure-data , java ...) sous GNU/Linux en natif y a l'Arduino .
    faut voir si correspond au besoin

    http://www.arduino.cc/
  • # Merci

    Posté par . Évalué à 2.

    Merci pour ce journal très intéressant.

    le uCameleon pourrait bien être la base de mon projet à moi que j'ai.

    Une petite station de mesure (hydro, et température) pour ma cave.

    Reste à voir s'il y a la possibilité de faire un peu de stockage de valeurs ana lorsqu'il est en mode autonome.

    L'idéal serait de pouvoir interroger le truc par Wifi depuis mon salon, en utilisant un truc genre Wireless_USB

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.