Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Communications > Communications sans fil > Arduino BT

Arduino BT

Une version bluetooth de la carte électronique programmable

lundi 21 décembre 2009, par Julien H.

Tous ceux qui ont vu James Bond piloter sa BMW avec son téléphone portable ont rêvé pouvoir faire de même avec leur propre véhicule, ou plus simplement avec leur chaine de salon, leurs volets électriques ou leur robot.

Heureusement pour eux, les téléphones qui sortent sur le marché disposent la plupart du temps d’une connexion Bluetooth (BT) et d’un langage de programmation (J2ME, Java pour les mobiles) permettant d’écrire de petits programmes.

Côté voiture/robot/chaine hifi/stores, il faut donc un équipement capable de communiquer avec le téléphone en Bluetooth. Exit la communication XBee que nous avions déjà vue pour faire communiquer à distance deux équipements électroniques, on va donc parler maintenant de la version version BT de l’Arduino.

Description matérielle

La carte est légèrement plus grande qu’une Arduino classique (type Duemilanove) : 82 mm x 54 mm car le module Bluetooth dépasse.

Il n’y a pas de connecteur jack pour l’alimentation mais un bornier à vis et il n’y a pas de connecteur USB, la place est prise par le module bluetooth. Autre changement, le microcontrôleur AVR est en version CMS et pas en DIP classique.

Pas d’autre changement visible qui soit important, mais on peut déjà noter que la patte 7 n’est pas utilisable (sur les inscriptions, vous voyez d’ailleurs que le numéro est supprimé (-). On y reviendra plus tard, c’est la patte de reset du module Bluetooth.

Alimentation

Pour pouvoir être embarquée facilement (c’est quand même la destination normale pour une carte sans-fil), cette version particulière de l’Arduino permet une tension d’alimentation basse (dès 1,2 volts) grâce à un convertisseur de tension qui reconstruira les 3,3 volts nécessaires. Par contre, la tension maximale est bien inférieure à la carte classique, puisqu’il est formellement interdit de l’alimenter avec une tension supérieure à 5,5 volts !!

Dans mon cas, j’ai utilisé deux piles 1,5 volts dans un coupleur de piles qui se connecte non pas au bornier, mais directement sur la patte "9v" (attention, le nom est mal choisi et il ne faut surtout pas dépasser les 5,5 volts).

Description logicielle

Pour programmer l’Arduino BT, il faut utiliser une liaison Bluetooth avec l’ordinateur. Un simple "dongle" USB fait l’affaire et la carte est "découverte" et "appariée" comme tout autre matériel Bluetooth.

Connexion au PC

La carte est vue comme un périphérique non défini qui porte le nom "ARDUINO BT" ou bien qui est identifié par une adresse de type MAC (genre 0a:4c:8f:12:a2). Lorsque vous choisissez de vous y connecter, on vous demandera de choisir le mode de connexion : il faut utiliser celui avec mot de passe, et c’est 12345.

Une fois apparié, la carte offre 2 services, sous forme de port série entrant et port série sortant. Je ne sais pas très bien à quoi correspond le second, j’ai utilisé le premier (dans les images, COM29).

Premier test

Comme souvent avec une carte programmable, le premier test est de faire clignoter une led. Il y a une petite subtilité pour la carte Arduino BT, car il faut initialiser le Bluetooth, en utilisant la patte 7 citée plus haut. On y accède normalement avec les mêmes fonctions qu’une entrée/sortie numérique, soit pinMode et digitalWrite. Il suffit de suivre l’exemple ci-dessous dans chacun de vos programmes.

Autre point notable, la vitesse de communication doit être 115200 bps. C’est la configuration standard du module. Pensez-y quand vous utiliserez le terminal série du logiciel Arduino.


int LED = 13 ; // select the pin for the LED
int RESET = 7 ;

void setup()
pinMode(LED,OUTPUT) ; // declare the LED’s pin as output
pinMode(RESET,OUTPUT) ; // declare the reset pin as output
Serial.begin(115200) ; // connect to the serial port
digitalWrite(RESET, HIGH) ;
delay(10) ;
digitalWrite(RESET, LOW) ;
delay(2000) ;

void loop ()
digitalWrite(LED, HIGH) ;
delay(100) ;
digitalWrite(LED, LOW) ;
Serial.println("ciao") ;
delay(1000) ;

Envoi du programme

Maintenant que le programme est écrit dans l’environnement Arduino, il faut le compiler et l’envoyer dans la carte : prenez-bien soin de sélectionner le type de carte (Arduino BT) dans le menu adéquat avant compilation, ainsi que le port série dans le menu voisin.

Puis cliquez sur "envoyer le programme". Attention, il n’y a pas d’auto-reset comme avec une liaison série ou USB, il faut donc appuyer sur le bouton Reset de votre carte Arduino BT. Faites le calmement, après avoir cliqué sur "envoyer le programme", sans vous précipiter, sans synchroniser le clic et la pression, et sans réappuyer comme un dingue :)

Normalement, en plantant une led directement entre la patte 13 et la masse juste à côté (GND), vous devriez obtenir un beau clignotement.

Ouvrez la console série du logiciel Arduino, changez la vitesse pour 115200 et vous verrez notre ami Massimo Bansi (le créateur de la carte Arduino, dont j’ai repris le code ci-dessus) vous saluer en italien.

Autres réalisations

Visualiser les valeurs reçues par l’Arduino BT sur un téléphone portable, c’est possible et tout aussi simple avec Mobile Processing : voici des exemples (mais pas réalisés par le club).

Vos commentaires

  • Le 4 janvier 2010 à 18:04, par ? En réponse à : Arduino BT

    Interressant !! Et comment est faite l’appli sur le portable ? En Java ?

    • Le 4 janvier 2010 à 18:54, par Julien H. En réponse à : Arduino BT

      Sur téléphone, oui c’est du Java, et pour que ce soit aussi simple, avec Mobile Processing, une version J2ME de l’environnement simplifié Processing (P5).

    • Le 4 mars 2011 à 19:41, par Dex En réponse à : Arduino BT

      Bonjour à tous,

      J’ai un problème avec mon Arduino Bluetooth.
      J’arrive à la connecter au PC en bluetooth (Port COM 4 avec 115200 bauds) mais lorsque je veux transférer un programme à l’intérieur ça ne fonctionne pas. Voici le message d’erreur :

      avrdude : stk500_getsync() : not in sync : resp=0x00
      avrdude : stk500_disable() : protocol error, expect=0x14, resp=0x51

      J’ai bien vérifié dans Tools > Board et Tools > Serial Port !

      Voilà, je vous remercie d’avance en espérant que vous pourrez m’aider.

      Ps : voici mon code (le programme est bidon mais au cas où il faudrait mettre quelque chose de particulier...)

      Quote
      #include <Servo.h>

      Servo Servo1z ;
      int Posiz = 90 ;
      int Potentioz = 0 ;
      int Tensionz ;

      void setup()

      Serial.begin(115200) ;
      Servo1z.attach(2) ;

      void loop()

      if (Posiz != 90)

      Servo1z.write(90) ;
      delay(1000) ;

      Tensionz = analogRead(Potentioz) ;
      Serial.print(Tensionz) ;

    • Le 5 mars 2011 à 12:15, par Julien H. En réponse à : Arduino BT

      Bonjour,

      Il me semble que l’Arduino BT n’a pas de reset automatique et qu’il faut appuyer sur le bouton au moment de la programmation (juste après avoir cliqué sur l’envoi dans le logiciel, sinon faire plusieurs essais).

      En attente de savoir si cette astuce a résolu ton problème ou s’il faut chercher plus avant.

    • Le 5 mars 2011 à 20:27, par Dex En réponse à : Arduino BT

      Bonsoir,
      Malheureusement j’ai déjà essayé plusieurs fois de faire le reset après l’upload mais ça ne fonctionne pas... Si vous avez une idée...
      Je vous remercie d’avance.

    • Le 5 mars 2011 à 22:33, par Julien H. En réponse à : Arduino BT

      Non, pas vraiment d’idées. Tu peux essayer d’appuyer sur le bouton reset (s’il y en a un, je n’ai plus la carte sous les yeux), de maintenir appuyer, de cliquer sur l’envoi du programme et de relâcher ensuite.

    • Le 17 mars 2011 à 15:32, par Dex En réponse à : Arduino BT

      Bonjour,
      J’ai 2 Arduino BT et je voudrais les faire interagir entre elles.
      J’ai des petites idées mais pas vraiment concluante.
      Je voudrais en faite recevoir des données de potentiomètres envoyée par l’une et les récupérer avec l’autre pour contrôler un servo. Voilà si vous avez une idée sur la Librairie à utiliser, ou une doc ou quoi que ce soit, je suis preneur.
      Merci d’avance.

      Ps : je voudrais principalement savoir si il faut appairer les 2 Arduino BT entre elles (avec une portion de code par exemple) ou si la connexion se fait automatiquement.

    • Le 17 mars 2011 à 16:59, par Julien H. En réponse à : Arduino BT

      Bonjour, je n’ai pas encore vu un tel montage, le Bluetooth étant utilisé pour communiquer avec un dispositif bluetooth autre qu’Arduino : téléphone, ordinateur, etc... L’Arduino BT se comporte comme un périphérique, pas comme un organe de contrôle.

      Il existe des solutions plus économiques pour faire communiquer deux Arduino : radio, XBee, ...

    • Le 27 avril 2012 à 13:15, par Agrum En réponse à : Arduino BT

      Bonjour, je dépoussière un peu tout sa ^^

      Donc pour commencer, j’ai actuellement un projet ou je dois faire communiquer plusieurs Arduino BT ensemble, comme dans un réseau le tout comme vous vous en doutez via Bluetooth, Dit plus haut, l’Arduino BT se comporterais comme un périphérique et pas comme un organe de contrôle, je dirais que cela pose problème.
      Je m’explique, nous avons 3cartes, carte A, B, C disposée en ligne à une distance d’environ 10m chacune, la carte C ne peux communiquer avec la carte A que en passant par B. Nous branchons un capteur sur notre carte C et un ordinateur relié via bluetooth à notre carte A.
      Lorsque notre capteur sur la carte C détecte ce que l’on souhaite, lumière, mouvement, il envoie sont information à notre carte C. On souhaite transmettre ses informations à l’ordinateur, j’ai donc plusieurs questions :

      1° Est-ce possible pour notre carte B d’agir en récepteur puis en émetteur, il seras considéré comme un périphérique ou un organe de contrôle ou autre chose ??

      2° Notre carte A est pairé avec notre Ordinateur mais aussi notre carte B, je souhaiterais savoir si c’est possible de tenir une communication entre la carte A et l’ordinateur, et recevoir en même temps des données de la carte B faut-il ajouter quelque lignes dans mon programme pour que la carte A soit toujours en attente de données provenant de B et une fois ces dernières reçues passer dans un autre mode pour transférer les informations à l’ordinateur ??

      Cela fais seulement une vingtaine de jours que je programme sur des cartes Arduino pas seulement des BT mais aussi des Duemilanove, et sur ces dernières avec un Arduino shield et un module XBee j’ai réussis des transferts de données, je me doute que la solution la plus simple serais avec des cartes Arduino Duemilanove et non des Arduino BT, mais je souhaiterais savoir si c’est possible.

      Merci pour votre lecture et en attente d’une réponse :)

      Agrum

    • Le 27 avril 2012 à 13:57, par Julien H. En réponse à : Arduino BT

      Bonjour,

      Il y a deux réponses :
       la même que ci-dessus, à savoir que l’Arduino BT n’est pas faite pour une communication M2M entre plusieurs cartes identiques, mais pour s’interfacer avec un ordinateur ou un téléphone
       la réponse technique, qui veut que la puce Bluetooth (WT11) sur la carte puisse être pilotée pour permettre une communication entre deux cartes

      La seconde piste n’a que peu d’intérêt, car vu le prix des cartes BT au regard d’une version simple Arduino Uno + shield XBee, et puisque le 802.15.4 ou le Zigbee sont faits pour ce type d’interaction, pourquoi payer plus cher et avoir beaucoup de soucis.

      Mais bon, si vous souhaitez tester le protocole iWrap, amusez-vous bien avec le lien ci-dessous (mais ne comptez pas sur nous pour vous aider).

    • Le 27 avril 2012 à 16:23, par Agrum En réponse à : Arduino BT

      Bonjour, et merci pour votre réponse rapide !

      Pour le prix des cartes eh bien elles ont déjà été achetée depuis longtemps par le département des recherches à l’université ou je fais actuellement mon stage et donc mon projet... Bref ici le problème n’est pas à propos de l’argent, mais plutôt au niveau de mes connaissances, j’avais déjà commencé à parcourir le manuel iWrap et j’ai trouvé plus ou moins quelque chose s’apparentant à une solution possible que je vais tester.
      Je vais essayer de convaincre mon superviseur que la solution Arduino Board + module Zigbee est bien plus intéressante à mettre en place qu’un réseau d’Arduino BT et je verrais bien comment se passeras la suite.

      Dans tout les cas merci pour les réponses et l’aiguillage fournis !
      Et bonne journée.

      Agrum

    • Le 28 avril 2012 à 09:07, par Julien H. En réponse à : Arduino BT

      Dans ce cas, le résultat nous intéresse ! Bonne continuation.

    • Le 22 mai 2012 à 11:31, par Agrum En réponse à : Arduino BT

      Bonjour à toutes et à tous,
      Je réponds certes un peu tard mais ça a pris du temps. Je précise que je fais mon stage en Irlande donc certains termes seront en anglais.
      Donc pour faire le projet que j’ai mentionner, c’est possible en théorie, je m’explique,
      Le projet implique 3 cartes arduino BT-V06, que l’on va nommer A, B, C,
      La carte A est relié au pc, et seras considérée comme la "Master Board".
      La carte B est à 150m de la carte A et possède un capteur sur sa pin 12 ainsi qu’une LED sur sa pin 13.
      La carte C est à 150m de la carte B et 300m de la carte A, impossible pour elle de communiquer directement avec la carte A,
      Cette carte possède aussi un capteur sur sa pin 12 ainsi qu’un LED sur sa pin 13.
      Les capteurs ne sont pas inclus dans mon projet, je sais juste qu’ils seront placés dans l’eau pour détecter le passage d’un poisson.
      Lorsque ce dernier en détecte un, il envoie une impulsion à la carte, lorsque la carte (B ou C) reçois une impulsion sur sa pin 12,
      Elle envoie l’heure à laquelle elle a reçue l’impulsion ainsi qu’un petit message "Board B (ou C) i saw a fish"
      La carte A en plus d’être la "Master Board" elle est aussi ce que je vais appeler la "Master clock" en français l’horloge maître, traduction barbare, mais bon.
      Bref, à intervalle régulier (30mins) la carte A envoie un message aux carte B et C pour qu’elles se synchronisent sur la carte A.
       Lorsque la carte B reçois une impulsion :
      La carte B envoie à la carte A, l’heure, la date, ainsi que le message "Board B i saw a fish"
      La carte A reçois le message de la carte B, et l’envoie à l’ordinateur qui l’affiche.

       Lorsque la carte C reçois une impulsion :
      La carte C envoie à la carte B, l’heure, la date, ainsi que le message "Board C i saw a fish"
      La carte B joue simplement le rôle de "passeur" elle transmet les données tel quelle à la carte A, cette dernière l’envoie à l’ordinateur qui l’affiche.

      En théorie ce système fonctionne bien, mais en pratique, ce n’est pas la même chose,
      La carte doit passer du mode command au mode data et cela peut prendre apparemment 2secondes, si une autre carte voit un autre poisson, ne le sauras pas.
      L’autre problème est que si la carte B et C voient un poisson en même temps, on sauras seulement que la carte B a vus un poisson. (temps de transmission de la carte C vers la carte B alors que la carte B seras déjà entrain d’envoyé ses données).

      La solution qui résout nos 2 problèmes est le Multiplexing Mode (en français le mode multiplexage) ce mode permets plusieurs connexion simultanées avec envoie et reception de données en même temps.
      Ce mode nous permet donc de voir les messages de la carte B et C en même temps si les cartes détectent un poisson en même temps.
      Malheureusement, dans la pratique, c’est encore différent, puisque la connexion est je cîte : " Communication between the BT module and the computer can be temperamental."
      voir le lien : http://arduino.cc/en/Guide/ArduinoBT

      Mais j’ai eu d’autres problèmes lors de l’upload de programme court par exemple faire clignoter 1, 2, 3 LED ça va, mais lorsque l’ont complique le programme, il y a des complication.
      Pour le moment, j’ai tout mes programmes d’écrit, et il n’y a pas d’erreurs, 2 de mes 3cartes refusent toujours l’upload de programme, et la dernière a une erreur encore différente.

      Un de mes collègues travaillent actuellement sur les 2 cartes qui refusent l’upload d’un programme plus long que le "blinking LED" dans les "examples" et je cherche toujours à régler mon autre problème.
      Une réunion est prévue cette après midi pour savoir si on remplace les carte Bluetooth, par des Arduino Duemilanove, avec un shield et un module XBee (ou zigbee, je ne sais pas comment vous appelez ça ^^’).

      Merci de m’avoir lu,
      Bonne continuation à toutes et à tous, et bonne journée.

      Agrum

    • Le 23 mai 2012 à 12:51, par Julien H. En réponse à : Arduino BT

      Merci pour ces explications et bonne continuation.

    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.