mercredi 4 avril 2012

Arduino télépathe (nRF24L01)

Il s'agit ici de mes premières incursions dans la communication sans fil entre deux Arduinos, au moyen du module NRF24L01.   En me basant sur l'exemple distribué avec la librairie mirf, j'ai réussi à faire en sorte qu'un premier Arduino (l'émetteur) muni de 6 boutons puisse contrôler 6 LEDs branchées sur un deuxième Arduino (le récepteur, qui peut être situé quelques dizaines de mètres plus loin).

Il faut deux modules NRF24L01.  J'ai pris les miens sur eBay (environ $5 pour la paire).  Comme c'est souvent   le cas avec les marchants asiatiques, le produit arrive sans la moindre documentation:  il faut fouiller un peu...

(Si vous préférez, j'ai aussi écrit un article sur l'utilisation des modules RF 433 MHz qui fonctionnent avec la bibliothèque VirtualWire).

Il faut aussi installer la librairie mirf.

Sur chaque Arduino, les branchements du NRF24L01 doivent se faire de la façon suivante:
Pin MISO du NRF24L01 sur la broche 12 de l'Arduino;
Pin MOSI du NRF24L01  sur la broche 11 de l'Arduino;
Pin SCK du NRF24L01 sur la broche 13 de l'Arduino;
Pin CE du NRF24L01 sur la broche 8 de l'Arduino;
Pin CSN du NRF24L01 sur la broche 9 de l'Arduino*;
Pin VCC du NRF24L01 sur 3,3  V;
Pin GND du NRF24L01 mis à la terre, évidemment.

(*: CE et CSN peuvent être branchées ailleurs si désiré)



Bien entendu, j'aurais pu me contenter de 2 ou 3 boutons contrôlant 2 ou 3 LEDs, mais j'en ai profité pour réaliser un module comportant 6 boutons déjà reliés à leur "pull up resistor" (comment ça s'appelle, en français, un "pull up resistor"?):  le module est muni de 6 sorties mâles qui peuvent être directement insérées dans les entrées numérique de l'Arduino (ou dans un breadboard), et de 6 sorties femelles si on préfère utiliser des fils pour les branchements.  Voilà un petit gadget qui me sauvera bien du temps à l'avenir!  Pour ce montage, les boutons sont branchées aux entrées 2, 3, 4, 5, 6 et 7 de l'Arduino émetteur.

Quand à l'Arduino récepteur, en plus de son module NRF24L01, il comporte 6 LEDs, chacune munie d'une résistance de protection, branchées aux sorties 2, 3, 4, 5, 6 et 7 de l'Arduino.

Quand vous appuyez sur le premier bouton de l'Arduino émetteur, la première LED de l'Arduino récepteur s'allume.  Lorsque vous appuyez à nouveau sur ce bouton, la LED s'éteint.


J'admet que ce n'est pas très utile, mais ça marche!  La portée est excellente:  je n'ai détecté aucun problème pendant que les deux Arduinos étaient séparés par deux étages dans la maison.

Ce que j'aimerais faire, maintenant, c'est modifier mon projet de robot contrôlé par joystick pour en faire un véritable véhicule télécommandé, sans le câble encombrant qui relie le joystick au véhicule...

Sketch de l'émetteur:

Sketch du récepteur:


Remerciements au rédacteur du blog Skyduino, où j'ai puisé un peu d'inspiration.

Mise à jour (août 2012):  le projet de véhicule téléguidé est maintenant fonctionnel.
Yves Pelletier (Twitter: @ElectroAmateur)

1 commentaire:

  1. Bonjour, je sais que ce tuto à plusieurs années, donc j'espère que j'aurais droit à une réponse :)

    Avant tout, merci pour cette article, étant débutant, je voulais tester ce principe avec votre tuto, j'ai bien tout branché correctement, sur les bonne pin (j'ai le deuxième module NRF24L01, celui avec 8 broches), et avec 2 arduino uno, identique.

    Et impossible de faire fonctionner le système :( J'ai bien placer la bibliothèque, pas de souci au niveau de la compilation et du téléversement, j'utilise le code source tel quel. Et pourtant, rien ne se passe. Une petite idée ?

    Merci d'avance :)

    RépondreSupprimer