Pages

Affichage des articles dont le libellé est XBee. Afficher tous les articles
Affichage des articles dont le libellé est XBee. Afficher tous les articles

mardi 17 janvier 2012

Mesure de distance avec PING)))

Pour mesurer la distance, j'utilise un capteur "PING)))" de chez parallax. En fait, ce capteur dispose d'un émetteur et d'un récepteur sonore pour mesurer le temps entre l'envoi et le retour. La distance se mesure alors en fonction de la vitesse du son dans l'air.

Un peu de théorie.
Regardons ce capteur de plus près grâce à la fiche technique.

Méthode de mesure du capteur.

Le capteur dispose de 3 pinoches. Une Vdd (de 5V, ça tombe bien, c'est la tension fournie par les entrées/sorties de l'ArbotiX), une masse et une pour le signal. D'après ce schéma, il faut envoyer une impulsion pour recevoir un impulsion écho d'un certain temps. Voyons cela de plus près.

Détails sur le mode opératoire du capteur PING))).

Il faut donc envoyer une impulsion de 5µs. 750µs plus tard, le capteur répondra par une impulsion comprise entre 115µs et 18.5ms (nous donnant la distance). La prochaine capture pourra se faire 200µs plus tard.

Pour calculer la distance, une formule est également donnée dans la doc. On remarque alors que c'est en fait celle du son :

Tc = températeure en °C
Il faudrait donc, pour être précis avoir un autre capteur de mesure de la température et d'appliquer la formule. Pour l'instant, je ne vais pas aller jusque là et considérer que chez moi, il fait environ 20°C. Soit 331.5 + (0.6*20) = 343,5 m/s. N'oublions pas d'ailleurs que la mesure concerne l'aller-retour, soit deux fois la distance à mesurer.

Voyons maintenant le branchement sur la carte. 

Branchement des capteurs. Le PING))) se branche sur une IO digitale.

Branchez donc le capteur sur une des entrées sorties digitales. L'avantage sur l'ArbotiX (contrairement à l'Arduino) c'est que chaque entrée/sortie dispose également d'un VCC et d'un GND. Du coup, vous pouvez utiliser directement des connecteurs 3-pin. Dans les exemples suivants, mon capteur sera branché sur D7.

Programme de test
Comme j'ai appris à utiliser un XBee, je ne vais pas m'embêter avec des câbles et l'utiliser directement pour la communication série (la console quoi).
Voici donc le programme pour mesurer la distance :
int png = 7; // position du PING)))

void setup()
{
    // Démarrage du réseau série. Les modules XBee sont configurés en 38400bps. 
    Serial.begin(38400);
}

void loop()
{
    // Si on a des données sur le port série
    if(Serial.available() > 0)
    {
      // lecture de la donnée reçue
      int incomingByte = 0;
      incomingByte = Serial.read();
      if (incomingByte == 114) // 114 = touche "r"
      {
        long temps, distance;
          
        // Mesure de la distance
        pinMode(png, OUTPUT); // pin signal en mode sortie
        
        // Envoi d'une impulsion
        digitalWrite(png, LOW); // initialistion à 0.
        delayMicroseconds(2);
        digitalWrite(png, HIGH); // envoi impulsion
        delayMicroseconds(5);    // durant 5µs
        digitalWrite(png, LOW);  // remise à 0
        
        // Ecoute de la réponse
        pinMode(png, INPUT); // mode entrée pour écouter la réponse
        
        // pulseIn mesure le temps d'une impulsion en microsecondes
        temps = pulseIn(png, HIGH); 
        
        // conversion en cm
        distance = tempsSonoreEnCentimetres(temps);
        
        
        // écriture dans la console XBee
        Serial.println();
        Serial.print("Temps : ");
        Serial.print(temps);
        Serial.print(" microsecondes.");
        Serial.println();
        Serial.print("Distance : ");
        Serial.print(distance);
        Serial.print(" cm.");
        Serial.println();
        
        // Attente 200µs (temps entre les mesures)
        delayMicroseconds(200);
      } 
      
    }
}

long tempsSonoreEnCentimetres(long tempsEnMicroSecondes)
{
  // D'après la formule = 343,5m/s, soit 0,03435 cm / microseconde
  // Soit divisé par 28,99
  // Sachant que le signal va faire un aller retour, on le divise par deux
  return tempsEnMicroSecondes / 29 / 2;
}
Pour effectuer une mesure, il vous suffit d'envoyer "r" par le réseau série XBee, donc dans le terminal de X-CTU. Le résultat sera le suivant :

Mesure de distance avec une ArbotiX !

Voilà, le robot pourra bientôt se repérer avec ses 4 capteurs de distance parallax ! D'ailleurs, j'ai trouvé le résultat particulièrement précis (testé à 20cm, 40cm et 1m).

XBee : Hello World !

Les modules XBee sont des petits modems assez fascinants de par leur simplicité d'utilisation dans un univers embarqué, surtout si vous utilisez l'IDE Arduino (avec le shield adéquat) ou tout simplement ma divine ArbotiX.

Hello World
Le module XBee est directement connecté au port série de l'ATmega644P si bien qu'une simple commande "Serial." utilisera directement la communication XBee si vous en avez branché un. Alors si vous avez placé un autre XBee en écoute de l'autre côté, votre réseau fonctionnera comme par magie. De cette façon, on pourrait alors facilement imaginer un réseau de deux robots communicants (avec serial.print et serial.read)

En ce qui me concerne, je souhaite juste pouvoir lire la sortie de l'XBee connecté à mon USB Explorer. Pour cela, ouvrez X-CTU, connectez vous au XBee et utilisez l'onglet terminal.

Ensuite, il suffit juste de faire un tout petit programme pour la lecture et envoyer une réponse :

// valeur lue
int myData = 0;

void setup()
{
    // Démarrage du réseau série. Les modules XBee sont configurés en 38400bps. 
    Serial.begin(38400);
}

void loop()
{
    // Si on a des données sur le port série
    if(Serial.available() > 0)
    {
        myData = Serial.read();
        Serial.print("Hello World !");
    }
}

Dans le terminal, si on appuie sur une touche, on obtiendra alors :


Hello World sur XBee ;)
MAGIE =)

dimanche 15 janvier 2012

Configuration des XBee avec X-CTU

Les XBee sont des petits modules absolument géniaux qui permettent de créer un réseau de communication série sans-fil. Cependant, pour pouvoir les utiliser, il faut d'abord passer par une étape de configuration.
Pour cela, vous aurez besoin d'un XBee USB Explorer :
L'USB explorer. USB à gauche et XBee à brancher sur le dessus.

Avant de commencer, il faut brancher l'explorer au PC au moyen d'un câble USB qui est généralement fourni. Si vous êtes sur Windows 7, les drivers seront installés automatiquement. Sinon, vous pouvez les télécharger sur le site FTDIChip.com.
Une fois installés, il faut installer le logiciel X-CTU qui permet de communiquer avec tous les produits de la marque Digi.
Commencez donc par brancher votre XBee sur la carte. Un petit voyant rouge s'allume vous signalant que la carte est installée. Lancez alors X-CTU et configurez l'onglet "PC Settings" de la manière suivante :
  • Baud : 9600
  • Flow Control : NONE
  • Data Bits : 8
  • Parity : NONE
  • Stop Bits : 1
Et cliquez sur "Test / Query" pour vérifier que la communication passe.

Configuration initiale de X-CTU avec le module XBEE (XB24).
Maintenant, commençons les choses sérieuses. Allez dans l'onglet "Modem Configuration" pour configurer le module. En fait, un module XBee utilise un vieux protocole de modem en série. Vous savez, les 56k... Donc, chaque élément en vert correspond à une zone que vous pouvez configurer. Ces zones sont nommés par la commande "AT" qu'il faut lui envoyer pour y accéder. Par exemple ATBD correspond à la vitesse exprimée en bauds.


Configuration d'un XBee.


La plupart des zones sont utiles mais en ce qui nous concerne, nous allons nous intéresser à 4 zones. La première, ATID est l'identifiant de réseau. Cet identifiant va permettre à différents réseaux XBee de coexister. Par défaut, sa valeur est de 3332. Il vaut donc mieux le modifier et en choisir un commun entre tous nos XBee. Choisissez donc le numéro que vous souhaitez.
Une fois que nos XBee sont tous sur le même réseau, il va falloir créer un réseau de communication. C'est à dire que chaque XBee possède un identifiant (ATMY) et une destination (ATDL). Avec 2 XBee, c'est plutôt simple :)
Enfin, il reste donc la vitesse, soit ATBD. ArbotiX demande une vitesse de 38400bps.

Exemple avec deux XBee :
XBEE1 : ATID : 1234, ATMY : 1, ATDL : 2, ATBD : 5
XBEE2 : ATID : 1234, ATMY : 2, ATDL : 1, ATBD : 5

Pour chaque paramètre à changer, cliquez dessus puis sur "Write".


Enfin, il y a tout de même un autre paramètre qui pourrait éventuellement vous intéresser. Il s'agit de ATCH qui correspond au canal de communication sur la fréquence 2.4Ghz. En effet, cette fréquence est utilisée par presque tous les appareils du monde des jouets et du modélisme. Donc si vous remarquez que la communication passe mal lorsque votre fils/cousin/pote/voisin joue avec sa voiture téléguidée, il ne vous reste plus qu'à changer de canal sur tous vos XBee.