dimanche 14 février 2016

Communication par laser entre deux cartes Arduino


Hé oui: aujourd'hui, notre projet consistera à utiliser un laser afin de transmettre un message d'une carte Arduino vers une autre.  Pour ce faire, nous utiliserons l'émetteur-récepteur universel asynchrone (UART) de l'Arduino (les pins Rx et Tx).

L'émetteur

L'émetteur est constitué d'un module laser contrôlé par une carte Arduino.

J'ai utilisé un module laser rouge conçu pour fonctionner sous une tension d'alimentation de 5 V (attention: il en existe aussi qui sont conçus pour une tension de 3,3 V).



L'idée est toute simple:  le laser sera contrôlé par la pin 1 (Tx) de l'Arduino.  Le laser sera allumé lorsque la pin Tx est à 5 V, et éteint lorsqu'elle sera à 0 V.




Par mesure de précaution, j'ai également utilisé un transistor pour éviter de drainer trop de courant de la sortie Tx de l'Arduino (j'ai mesuré que le laser en fonctionnement consomme 30 mA, ce qui est un peu plus que les 20 mA qu'on recommande généralement).


J'ai piqué le circuit dans cet instructable, qui décrit un projet très similaire impliquant le Raspberry Pi, mais j'ai remplacé leur MOSFET par un 2N7000 (pas parce que c'est mieux, simplement parce que c'est ce dont je disposais).

Une façon efficace de vérifier que votre circuit est fonctionnel consiste à utiliser l'exemple "Blink" pour faire clignoter votre laser.

Pour l'émission de messages destinés au récepteur, j'ai choisi d'émettre des valeurs numériques croissantes (nous pourrons donc facilement vérifier si toutes les valeurs sont correctement décodées par le récepteur).  Côté codage, rien d'intimidant:  c'est comme si vous écriviez des valeurs dans le moniteur série:



Ne soyez pas surpris de voir le laser demeurer allumer pendant qu'aucun message n'est transmis:  il s'agit du comportement normal de la pin Tx:  son état normal est 5 V, et elle alterne rapidement entre 5 V et 0 V pendant la transmission d'un message.

Le récepteur

Le récepteur est constitué d'un phototransistor branché à une carte Arduino (je n'ai pas vérifié, mais je suppose qu'une photorésistance réagirait trop lentement pour être utile ici).




J'ai utilisé un phototransistor TEPT5600 (optimisé pour les longueurs d'ondes de 440 à 800 nm, ce qui semble parfait pour de la lumière rouge à 633 nm).  Sur le schéma, la broche la plus longue du phototransistor est du côté 5 V.

Au départ, j'avais prévu qu'il serait probablement nécessaire d'ajouter un comparateur pour rendre le signal un peu plus "propre" avant de le transmettre à l'Arduino, mais ce ne fut pas le cas. Le signal était d'environ 4 V quand le laser état allumé, et d'environ 1,2 V quand il était éteint (ces valeurs sont suffisamment proches de 5 V et 0 V pour être correctement interprétées par une entrée numérique).



Petit pépin, par contre:  le circuit cesse de fonctionner correctement aussitôt qu'on le branche à la pin 1 (Rx) de l'Arduino.  Je crois que problème est causé par une résistance pull up dans la carte.  J'ai donc utilisé une autre pin (la numéro 3) et la bibliothèque "SoftwareSerial" (pas la peine d'installer cette bibliothèque, puisqu'elle est fournie avec l'IDE).

Voici le sketch, qui s'occupe de transcrire ce qu'il reçoit dans le moniteur série.




Résultats

Si tout fonctionne normalement, vous devriez voir les valeurs numériques s'afficher dans le moniteur série, du côté du récepteur.  L'affichage s'interrompt lorsque vous bloquez le faisceau laser, et repart à zéro si vous appuyez sur le bouton reset du côté de l'émetteur.


La fréquence de transmission est limitée:  les résultats sont corrects à 1200 bauds, mais ça ne fonctionne plus du tout à 2400 bauds.

Lors de la phase de développement, le laser et le phototransistor se faisaient face sur la même breadboard à quelques centimètres l'un de l'autre.  Ensuite je les ai séparés d'une distance de 4 mètres et les résultats on continué d'être excellents (bien sûr, l'alignement est très important:  le laser doit atteindre le phototransistor de plein fouet).

L'éclairage ambiant n'a pas affecté la qualité de la transmission (il faut quand même préciser que les tests ont eu lieu dans un sous-sol dont l'éclairage est plutôt modéré).


Yves Pelletier   (TwitterFacebook)

3 commentaires:

  1. Bonjour,
    Très bon article (comme toujours).

    Avec cette méthode, peut on imaginer d'optocoupler, le port serie d'un arduino(5v) et d'un raspberry pi(3.3V), pour de petits échanges?

    RépondreSupprimer
  2. Bonjour,
    Je m'initie à l'électronique et voudrait tenter ce tuto.
    Mais voilà souhaitant acquérir ce 2N7000, j'ai chercé sur internet qui avait les composants que vous citez pour un prix le plus correct possible.
    Au final c'est http://www.mouser.fr qui semble remporter la palme.
    Mais pour 2N7000 ils proposent pas moins de 9 modèles différents.
    Lequel choisir et pourquoi ?
    merci de votre aide.
    Xavier

    RépondreSupprimer
  3. Bonjour je dois modifier quoi si je veux que ce soit un message qui soit transmis

    RépondreSupprimer