Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Programmation > Apprendre à coder > Programmation Arduino > Une interface IHM pour Arduino

Une interface IHM pour Arduino

Contrôle par PC d’un Arduino

dimanche 18 septembre 2011, par Loïc


Toutes les versions de cet article : [English] [français]

Loïc a développé une interface utilisateur très simple mais complète pour les cartes Arduino. Il a développé son propre protocole sur quatre octets seulement, permettant une plus grande vitesse que Firmata. Des fonctionnalités étendues (enregistrement, stockage, chargement de fichiers) font de cette IHM une des meilleures qu’on puisse trouver. Cet avis n’engage que moi (Julien) mais je laisse le soin à Loïc de vous présenter son travail afin de vous en convaincre :

Comment introduire le monde réel dans nos applications ? Comment interagir avec nos créations numériques dans le monde concret qui nous entoure ? Une solution relativement facile à mettre en œuvre consiste à utiliser la plateforme de développement matériel Arduino et de l’interfacer avec Arduino IHM 2.1.

Principe

arduino_IHM_004

La solution repose sur une bibliothèque (library) appelée IHM2_1_PDE qui implémente un protocole de communication entre la carte Arduino et l’ordinateur-hôte.

En termes plus simples, cette librairie permet de faire dialoguer facilement la carte et l’ordinateur en permettant depuis l’ordinateur de modifier directement la configuration de la carte sans avoir à modifier le code que l’on a chargé initialement dans celle-ci.

Cette solution s’avère particulièrement pratique lorsque la carte est embarquée dans un dispositif difficile d’accès, avec seulement une communication sans-fil pour intervenir.

Pourtant, ce dispositif de contrôle par ordinateur n’est pas incompatible avec une utilisation autonome, comme nous le verrons plus tard.

Utilisation

Étape 1 : Installer IHM2_1_PDE sur une carte Arduino

Ouvrez le sketch disponible dans l’archive ci-jointe :

Sketch Arduino IHM 2.1

Depuis l’application Arduino, sélectionnez la bonne plateforme correspondant au modèle de la carte arduino que vous avez : UNO, Duemilanove,...

Sélectionnez le port USB qui communiquera avec la carte Arduino.

arduino_IHM_006

Téléchargez ensuite IHM2_1_PDE dans l’Arduino.

Étape 2 : Installer le logiciel

L’archive ci-dessous contient tout ce qu’il faut pour fonctionner sur un ordinateur PC équipé de Windows. Les bibliothèques logicielles (Qt) sont incluses. Contactez-nous en cas de problème.

Arduino IHM 2.1 (Win)

Il suffit de dézipper l’archive à l’endroit voulu sur votre machine, et c’est tout (comme le logiciel Arduino).

Étape 3 : Ouvrir l’exécutable Arduino IHM 2.1

arduino_IHM_004

Choisissez le port de communication de l’arduino.

La vitesse de communication par défaut est de 115200 : ne la modifiez pas si vous n’avez pas aussi modifié le code IHM2_1_PDE chargé dans l’Arduino.

Connectez-vous après vous être assuré qu’aucune autre application (logiciel Arduino ou application tierce) n’a déjà ouvert le port série associé.

L’utilisation des sorties numériques ("Digital"), ainsi que les entrées analogiques sont accessibles dans la version actuelle.
Différents modes sont disponibles : vous pourrez contrôler les sorties numériques en tout ou rien, connecter des servomoteurs, et changer les valeurs des pattes PWM disponibles selon votre modèle.

arduino_IHM_005

Fonctionnalités avancées

Il est possible d’enregistrer une séquence de commandes en cliquant sur RECORD. C’est particulièrement utile pour reproduire des mouvements de moteurs.

Vous exécutez la séquence courante en appuyant sur PLAY. Le bouton CLEAR permettra d’effacer l’enregistrement.

En haut à droite, deux boutons : "Sauver" vous permet d’enregistrer votre séquence en fichier texte (.txt) sur votre PC. Le bouton "Ouvrir" vous permet de récupérer des fichiers texte (.txt) sur votre PC.

Exemple

Le robot Quarduino est entièrement contrôlé par cette application. Une carte mémoire permettra de stocker chacune des chorégraphies élémentaires afin que le robot soit autonome.

Evolutions

Vous constaterez dans l’interface PC qu’un onglet "Oscilloscope" prévoit déjà l’utilisation de la seconde moitié de la carte, avec un tracé des sorties analogiques.

Une seconde version est également développée spécifiquement à chaque robot afin d’associer plusieurs sorties de servomoteurs entre-elles. Le langage de communication est alors étendu pour permettre de faire passer des consignes spécifiques à la morphologie du robot avec toujours la même économie de caractères.

Portfolio

Vos commentaires

  • Le 8 mai 2020 à 16:05, par Arnaud Feuillien En réponse à : Une interface IHM pour Arduino

    Bonjour,

    Juste pour dire que ce petit programme est une grande merveille. On l’installe... et ça marche à la perfection. Un vrai bonheur pour faire des petits tests faciles. Un grand merci :)

    Répondre à ce message

  • Le 17 février 2017 à 11:51, par Olivier_V En réponse à : Une interface IHM pour Arduino

    Bonjour,
    Petit nouveau dans le monde Arduino, j’ai chargé, testé et approuvé le fonctionnement de IHM 2.1.
    Simple et fonctionnel : c’est parfait ; félicitation !
    Une unique petite question : est-il aisé d’envisager d’avoir des temps variables entre 2 commutations de sorties.
    Actuellement, un temps d’attente pour 100ms est généré par deux lignes de commandes successives : $ ?0050.
    Si je souhaite avoir, par exemple, 35ms, comment dois-je procéder ?
    Grand merci
    Olivier

    • Le 17 février 2017 à 13:55, par Eric P. En réponse à : Une interface IHM pour Arduino

      Bonjour,
      Loïc n’est plus venu au club depuis un certain temps, et je ne sais pas s’il consulte le site régulièrement. Et comme il n’a pas fourni les sources de son application, impossible d’essayer de répondre à sa place malheureusement.
      Un volontaire pour réécrire cela de manière ouverte, en Python par exemple pour ne pas être confiné au monde Ouindoz ;) ?
      Cordialement

    • Le 19 février 2017 à 18:43, par Olivier_V En réponse à : Une interface IHM pour Arduino

      Bonjour
      merci pour votre message.
      Il me reste à espérer une lecture de Loïc de ce forum.
      Connaissez vous son nom de famille ?
      Cordialement.

    Répondre à ce message

  • Le 1er mars 2014 à 12:07, par momorac En réponse à : Une interface IHM pour Arduino

    re, j’ai fait comme le topic, mais rien ne se passe.

    carte arduino uno, ce connect mais dés que je lance pour un servo, rien ne se passe.

    le digital fonctionne mais rien dans l’ossiliscope tous reste blanc. la seule led allumer sur arduino c’est TX. réaction dés ke je bouge servos mais aucun mouvement de ce dernier.

    merci par avance, je ne sais pas koi vous dire de plus.

    cdt

    • Le 1er mars 2014 à 13:08, par Eric P. En réponse à : Une interface IHM pour Arduino

      OK, je vais essayer d’être plus explicite concernant ce que j’appelle des "éléments précis" :/

      carte arduino uno, ce connect
      En Français compréhensible et correct, ça donne : LA carte Arduino Uno Se connectE". Soigner l’écriture aide à être compris. Ceci étant, la carte se connecte A QUOI ? Au PC ?

      rien dans l’ossiliscope tous reste blanc
      Soit : "rien ne se passe dans l’oscilloscope dont l’affichage reste blanc". Dans l’article il est écrit :
      « [...] un onglet "Oscilloscope" prévoit déjà l’utilisation [...] »
      Il semble que cette fonction n’est pas encore développée et est prévue pour des signaux analogiques.

      le digital fonctionne : Ca veut dire quoi ça concrètement ?

      la seule led allumer sur arduino c’est TX
      Correction : la seule LED allumée est TX. Quelles autres LEDs vous attendiez-vous à voir s’allumer ?

      réaction dés ke je bouge servos => IL Y A UNE réaction dès QUE je bouge LES servos
      Quelle réaction avez-vous constatée ? Que se passe-t-il exactement ?

      je ne sais pas Koi vous dire de plus. Vous voyez bien qu’il y a encore pas mal de choses à nous dire pour qu’on puisse vous aider.

      Cordialement

      PS : par pitié, PLUS DE LANGAGE SMS et d’orthographe massacrée. C’est très impoli vis à vis des personnes dont vous sollicitez de l’aide. Nous prenons le temps de vous lire et de vous répondre, alors prenez SVP le temps d’écrire correctement. Merci ;)

    • Le 12 décembre 2015 à 17:50, par TRX En réponse à : Une interface IHM pour Arduino

      Salut, beau travail à part... l’orthographe... ça pique à toutes les lignes et dans l’application elle même.
      Si tu n’y es pas sensible,... penses aux autres.
      L’orthographe, c’est un peu comme l’haleine,... on ne s’en rend pas forcément compte mais bon...
      Bonne continuation dans cette voie.

    Répondre à ce message

  • Le 23 juin 2015 à 13:33, par pascal En réponse à : Une interface IHM pour Arduino

    bonjour,
    merci pour votre travail qui permet a un "parfait débutant"comme moi de pouvoir utilisé rapidement les capacités technique de mon UNO R3 sans savoir vraiment compilé !!! Même uniquement pour les possibilités techniques, super !!!!!!
    encore merci pour votre travail qui permet a un débutant d’avoir les outils pour comprendre et se former !!!
    ayant un raspberrypi, j espère au plus vite l’équivalent debian avec votre philosophie OPEN.
    cordialement
    pascal, électricien de base

    Répondre à ce message

  • Le 20 février 2015 à 14:18, par jp En réponse à : Une interface IHM pour Arduino

    Bonjour,
    et super tuto !!!
    J’ai pour projet de réaliser un lampemètre piloté par PC. Toute la partie purement électronique est finalisée (alims, mesure, etc...)
    Je butais sur un certain nombre de choses, et, TADA !! je tombe sur votre interface.
    Il y atout ce que je désire : piloter les ES de l’arduino, faire varier des servos (et donc des tensions).
    D’où première question : puis-je partir de votre projet pour avancer dans mon projet ?
    Deuxième question : pourriez-vous me communiquer le code source de la partie WIN de votre interface ? Je m’explique : je compte utiliser 2 mega 2560 (besoin de 100 e/s numériques et 8 analogiques), et je souhaiterais étendre votre travail sur 1 -voire 2- MEGA 2560.
    A vous lire, et encore bravo !!!

    Répondre à ce message

  • Le 5 avril 2014 à 11:25, par pif En réponse à : Une interface IHM pour Arduino

    Bonjour,
    La traduction de cet article dit "nous contacter pour une version Unix", alors je vous contacte 🙂
    Est-il possible d’avoir une version Linux, voire les sources, pour recompiler sans avoir divers soucis de dépendences ?
    Merci d’avance

    • Le 8 avril 2014 à 07:21, par Julien H. En réponse à : Une interface IHM pour Arduino

      Nous attendions depuis longtemps un volontaire pour nous aider à réaliser une version Unix / Mac, merci de nous avoir contacté ! Vous êtes le bienvenu pour nous aider à la développer.

    Répondre à ce message

  • Le 28 février 2014 à 11:16, par momorac En réponse à : Une interface IHM pour Arduino

    bjrs,

    marche pas avec arduino UNO ...

    tous ok mais aucun mouvement de servo effectuer. connection carte ok rx seulement.

    merci de votre aide

    • Le 28 février 2014 à 16:53, par Eric P. En réponse à : Une interface IHM pour Arduino

      Avec aussi peu d’information sur ce que vous voulez faire, comment vous essayez de le faire et les recherches d’anomalie effectuées et ce qu’elles ont donné, c’est plutôt à Mme Irma qu’il aurait fallu envoyer le message :)

      Pourriez-vous décrire les choses d’une manière un peu moins lapidaire, plus factuelle et plus technique ?

      Cordialement.

    Répondre à ce message

  • Le 5 février 2014 à 02:24, par Seb En réponse à : Une interface IHM pour Arduino

    Excellent ! Super !
    Exactment ce qui manquait pour faire démarre des néophytes (comme mes collégiens) !!!
    Où en êtes vous de votre développement ? Je ne peux que vous encourager à continuer.

    Répondre à ce message

  • Le 25 septembre 2011 à 11:59, par lordcuty En réponse à : Une interface IHM pour Arduino

    Superbe projet et effectivement bien pratique, j’ai juste un problème, j’ai changé le débit des deux côtes, en 9600 bauds et là, c’est le dram, je ne reçois plus rien, est-ce juste chez moi ?
    je n’ai modifier que le Serial.begin(9600) ;
    et ton logiciel, mettant 9600 en débit.

    • Le 25 septembre 2011 à 14:59, par ? En réponse à : Une interface IHM pour Arduino

      Effectivement, en 9600 ça ne marche pas. J’ai essayé aussi. La vitesse la plus basse est de 14400. Mais merci de m’avoir préciser le problème, je vais corriger l’erreur.

    Répondre à ce message

  • Le 1er juillet 2013 à 15:53, par Yousaf En réponse à : Une interface IHM pour Arduino

    Bonjour,
    Voici le programme suivant :
    const int hallPin=2 ;
    const unsigned long sampleTime=1000 ;
    const int maxRPM = 10200 ;
    int kount2rpm ;
    const int HallPin=3 ;
    const unsigned long sampleTime1=1000 ;
    const int maxRPM1 = 10200 ;
    int kount2rpm1 ;
    void setup()

    pinMode(hallPin,INPUT) ;
    pinMode(HallPin,INPUT) ;
    Serial.begin(14400) ;


    void loop()

    delay(100) ;
    int rpm=getRPM() ;
    int rpm1=getRPM1() ;
    Serial.println(kount2rpm) ;
    Serial.println(kount2rpm1) ;

    int getRPM()

    int kount=0 ;
    boolean kflag=LOW ;
    unsigned long currentTime=0 ;
    unsigned long startTime=millis() ;
    while (currentTime<=sampleTime)

    if (digitalRead(hallPin)==HIGH)

    kflag=HIGH ;

    if (digitalRead(hallPin)==LOW && kflag==HIGH)

    kount++ ;
    kflag=LOW ;

    currentTime=millis()-startTime ;

    kount2rpm = int(60000./float(sampleTime))*kount ;
    return kount2rpm ;

    int getRPM1()

    int kount1=0 ;
    boolean kflag1=LOW ;
    unsigned long currentTime1=0 ;
    unsigned long startTime1=millis() ;
    while (currentTime1<=sampleTime1)

    if (digitalRead(HallPin)==HIGH)

    kflag1=HIGH ;

    if (digitalRead(HallPin)==LOW && kflag1==HIGH)

    kount1++ ;
    kflag1=LOW ;

    currentTime1=millis()-startTime1 ;

    kount2rpm1 = int(60000./float(sampleTime1))*kount1 ;
    return kount2rpm1 ;

    Comment je peux voir que mon capteur fonctionne et j’obtiens une vitesse ?

    • Le 1er juillet 2013 à 20:16, par Julien H. En réponse à : Une interface IHM pour Arduino

      Bonjour,

      Il faudrait peut-être commenter ce code et le découper en différentes parties pour analyser ce qu’il fait ? Si tu veux documenter ton projet et détailler les différentes interprétations que tu as déjà faites de ce code, cela permettra de gagner du temps et d’être efficace dans l’aide que l’on pourrait t’apporter.

      A bientôt !

    Répondre à ce message

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.