Best of Elektor-Labs.com
 

Roel Arits (Pays-Bas)

Les modules RF nRF24L01+ (fig. 1) sont intéressants et peu coûteux pour la communication bidirectionnelle sans fil [1]. Ils disposent d’un bus d’interface périphérique série (SPI) qui permet de les configurer et de les commander avec un microcontrôleur. On peut trouver sur l’internet de nombreux exemples de projets utilisant des cartes Arduino combinées avec ces modules RF.

Figure 1. Module nRF24L01 avec antenne imprimée.

Avec le projet décrit ici, je veux ajouter une fonction supplémentaire qui utilise la communication bidirectionnelle pour détecter la perte de communication entre l’émetteur et le récepteur. C’est un peu étrange de parler d’un émetteur et d’un récepteur lorsqu’on utilise la communication bidirectionnelle, puisque les modules agissent à la fois comme émetteur et récepteur. Mais pour plus de clarté, nous qualifions un des modules d’émetteur car sa tâche principale est de transmettre l’état d’un capteur (PIR) à un autre module, qui reçoit les données pour un traitement ultérieur.

La capacité de détecter la perte de communication est très utile pour les capteurs à distance, car lorsqu’il n’y a pas de communication, on peut perdre des données sans en être averti. Il est également utile, lors de l’installation du capteur, de vérifier si les deux modules RF nRF24L01 se « voient » effectivement et ne sont pas hors de portée.

La figure 2 donne une vue d’ensemble du projet et montre la communication entre les deux modules nRF24L01 – ainsi que l’implémentation de la détection de perte de communication.

Figure 2. Aperçu des étapes de la communication.

Schémas des circuits

Commençons par le schéma de l’émetteur (fig. 3). Le nRF24L01 doit être alimenté en 3,3 V, mais les broches d’E/S du nRF24L01 tolèrent le 5 V. Ainsi, connecter le bus SPI du nRF24L01 directement à un Arduino Pro Mini en 5 V ne pose aucun problème.

Figure 3: Schematic for the transmitter part.

Les condensateurs de découplage de l’alimentation doivent être placés aussi près que possible de l’Arduino et du module nRF24L01, respectivement, pour supprimer tout bruit de commutation en provenance de ces cartes. Ceci est souvent négligé dans les projets Arduino et peut causer toutes sortes de problèmes inattendus. Il est également recommandé d’utiliser plusieurs condensateurs de découplage en parallèle avec des valeurs différentes (par exemple, C1 = 100 µF et C2 = 100 nF). Les condensateurs électrolytiques ne sont pas aussi efficaces à des fréquences élevées que les condensateurs en céramique ou les condensateurs à film de polypropylène. En mettant différents types de condensateurs en parallèle, on crée un filtre plus efficace sur une plus large gamme de fréquences.

Le capteur PIR (fig. 4) est connecté en D4 à l’Arduino. Lorsque le capteur PIR nécessite une tension différente de 5 V, il est possible de s’en accommoder. Le transistor Q1 décale (et inverse) le niveau de tension dans le cas où on utilise des capteurs avec, par exemple, une tension de sortie de 3,3 V ou moins. De cette façon, vous pouvez connecter d’autres types de capteurs sans modifier le matériel. Lorsque le capteur PIR a une sortie de niveau 5 V, Q1, R4 et R3 peuvent être omis et la sortie du capteur PIR directement connectée à la broche 4 de l’Arduino Pro Mini. Dans ce cas, il faut adapter le croquis Arduino, afin que l’entrée de déclenchement soit active au niveau haut au lieu de l’être au niveau bas : #define TRIGGER_ACTIVE_LEVEL 0 /* 0 = low active, 1 = high active */ .

Figure 4. Module capteur PIR.

La LED rouge (D1) clignote lorsque la connexion entre l’émetteur et le récepteur est perdue. Lorsque la connexion est rétablie, la LED rouge cesse de clignoter et tout fonctionne à nouveau normalement.

La LED bleue (D2) indique que le capteur PIR détecte un mouvement. Cet événement sera transmis au récepteur sous forme d’un code de déclenchement sur un octet. Lorsqu’aucun mouvement n’est détecté par le capteur, un code de présence est transmis au récepteur. De cette façon, le récepteur sait s’il y a détection de mouvement ou non.

Le code suivant montre les définitions du code de présence et du code de déclenchement :

#define LIVE_BEAT_CODE 0x11 /* code that is transmitted as a live beat signal from transmitter to receiver */
#define TRIGGER_CODE 0xAA /* code that is transmitted when transmitter detects activity at the trigger input */


La figure 5 montre l’émetteur avec le capteur PIR.

Figure 5. Émetteur avec capteur PIR.

Récepteur

En guise d’accusé de réception, le récepteur (figure 6) renvoie à l’émetteur le même code que celui qu’il a reçu. Grâce à cette communication continue entre l’émetteur et le récepteur, tous deux peuvent facilement détecter la perte de connexion.

Figure 6. Unité de réception.

Le circuit du récepteur (figure 7) est presque identique au circuit de l’émetteur. Dans le récepteur, la LED rouge (D1) se met à clignoter lorsque la connexion est perdue et l’Arduino envoie un signal au haut-parleur en utilisant la commande tone (x, y), avec x = fréquence et y = durée. Le haut-parleur est de type 8 Ω et est connecté à l’Arduino via un condensateur électrolytique. Plus la valeur du condensateur est élevée, plus le volume du haut-parleur sera fort. Pour un signal à 50 Hz pendant 150 ms, on utilise le code suivant :

tone(SPEAKER_PIN, 50, 150); /* output a tone of 50 Hz for a duration of 150 ms on the speaker output */
 
Figure 7. Schéma du récepteur.

J’ai opté pour un son à basse fréquence (grave) car il est moins gênant/dérangeant que les sons plus aigus. La LED bleue (D2) indique qu’un mouvement est détecté. Vous pouvez connecter un relais à cette sortie via un transistor pour allumer/commander tout autre appareil lorsqu’un mouvement est détecté.
 

Weblinks

[1] Fiche technique des modules RF : https://www.nordicsemi.com/Products/nRF24-series
[2] Ce projet sur Elektor Labs : https://www.elektormagazine.com/remote-nrf24l01


Traduction : Asma Adhimi