Vous voulez ajouter des capacités sans fil à votre prochain projet Arduino, pour moins que le prix d’une tasse de café ? Eh bien, alors les modules émetteurs et récepteurs RF 433MHz sont faits pour vous ! Ils peuvent souvent être obtenus en ligne pour moins de deux dollars la paire, ce qui en fait l’une des options de communication de données les moins chères que vous pouvez obtenir. Et le meilleur de tous, ces modules sont super minuscules, ce qui vous permet d’incorporer une interface sans fil dans presque tous les projets.

Vue d’ensemble du matériel

Regardons de plus près les modules émetteur et récepteur RF 433MHz.

Ce petit module est un émetteur parmi deux. Il est vraiment très simple comme il en a l’air. Le cœur du module est le résonateur SAW qui est accordé pour un fonctionnement à 433,xx MHz. Il y a un transistor de commutation et quelques composants passifs, c’est tout.

Lorsqu’un niveau logique HAUT est appliqué à l’entrée DATA, l’oscillateur fonctionne en produisant une onde porteuse de sortie RF constante à 433,xx MHz et lorsque l’entrée DATA passe au niveau logique BAS, l’oscillateur s’arrête. Cette technique est connue sous le nom d’Amplitude Shift Keying, que nous aborderons en détail prochainement.

Ceci est un module récepteur. Bien qu’il semble complexe, il est aussi simple que le module émetteur. Il se compose d’un circuit accordé RF et d’un couple d’amplificateurs OP pour amplifier l’onde porteuse reçue de l’émetteur. Le signal amplifié est ensuite envoyé à une PLL (Phase Lock Loop) qui permet au décodeur de se « verrouiller » sur un flux de bits numériques, ce qui donne une meilleure sortie décodée et une meilleure immunité au bruit.

ASK – Amplitude Shift Keying

Comme nous l’avons vu plus haut, pour envoyer les données numériques par radio, ces modules utilisent une technique appelée Amplitude Shift Keying ou ASK. Dans la modulation par déplacement d’amplitude, l’amplitude (c’est-à-dire le niveau) de l’onde porteuse (dans notre cas, c’est un signal de 433MHz) est modifiée en réponse au signal de données entrant.

C’est très similaire à la technique analogique de modulation d’amplitude que vous connaissez peut-être si vous êtes familier avec la radio AM. On l’appelle parfois modulation par déplacement d’amplitude binaire parce qu’il n’y a que deux niveaux qui nous concernent. Vous pouvez vous le représenter comme un interrupteur marche/arrêt.

  • Pour le numérique 1 – Cela entraîne la porteuse à pleine puissance.
  • Pour le numérique 0 – Cela coupe complètement la porteuse.

Voici à quoi ressemble la modulation d’amplitude:

La modulation par déplacement d’amplitude a l’avantage d’être très simple à mettre en œuvre. Il est assez simple de concevoir le circuit du décodeur. De plus, la modulation ASK nécessite moins de bande passante que d’autres techniques de modulation comme la FSK (Frequency Shift Keying). C’est une des raisons pour lesquelles elle est peu coûteuse.

L’inconvénient cependant est que l’ASK est sensible aux interférences des autres appareils radio et au bruit de fond. Mais tant que vous gardez votre transmission de données à une vitesse relativement lente, il peut fonctionner de manière fiable dans la plupart des environnements.

Pinout de l’émetteur RF 433MHz &Récepteur

Regardons le pinout des modules d’émetteur et de récepteur RF 433MHz.

La broche DATA accepte les données numériques à transmettre.

VCC alimente l’émetteur. Il peut s’agir de toute tension continue positive comprise entre 3,5V et 12V. Notez que la sortie RF est proportionnelle à la tension d’alimentation c’est-à-dire que plus la Tension est élevée, plus la portée sera grande.

GND est une broche de masse.

Antenne est une broche pour antenne externe. Comme discuté précédemment, vous voudrez souder un morceau de fil solide de 17,3 cm à cette broche pour l’amélioration de la portée.

VCC fournit la puissance pour le récepteur. Contrairement à l’émetteur, la tension d’alimentation du récepteur doit être de 5V.

Les broches DATA sortent les données numériques reçues. Les deux broches centrales sont liées en interne, vous pouvez donc utiliser l’une ou l’autre pour la sortie des données.

GND est une broche de masse.

Antenne est une broche pour l’antenne externe qui est souvent non marquée. C’est le pad en bas à gauche du module, juste à côté de la petite bobine. Encore une fois, vous voudrez souder un morceau de fil solide de 17,3 cm à cette broche pour améliorer la portée.

Câblage – Connexion de l’émetteur et du récepteur RF 433MHz à Arduino UNO

Maintenant que nous savons tout sur les modules, il est temps de les mettre en service !

Comme nous allons envoyer des données entre deux cartes Arduino, nous aurons bien sûr besoin de deux cartes Arduino, de deux planches à pain et de quelques fils de liaison.

Le câblage de l’émetteur est assez simple. Il ne comporte que trois connexions. Connectez la broche VCC à la broche 5V et GND à la masse sur l’Arduino. La broche Data-In doit être connectée à la broche numérique #12 de l’Arduino. Vous devriez essayer d’utiliser la broche 12 car par défaut la bibliothèque que nous utiliserons dans notre sketch utilise cette broche pour l’entrée de données.

L’illustration suivante montre le câblage.

Une fois que vous avez câblé l’émetteur, vous pouvez passer au récepteur. Le câblage du récepteur est aussi facile que celui de l’émetteur.

Une fois de plus, il n’y a que trois connexions à faire. Connectez la broche VCC à la broche 5V et GND à la masse sur l’Arduino. N’importe laquelle des deux broches de sortie de données du milieu devrait être connectée à la broche numérique #11 sur l’Arduino.

Voici à quoi devrait ressembler le câblage pour le récepteur.

Maintenant que l’émetteur et le récepteur sont câblés, nous devrons écrire du code et l’envoyer aux cartes Arduino respectives. Comme vous n’avez probablement qu’un seul PC, nous allons commencer par l’émetteur. Une fois que le code y a été chargé, nous passerons au récepteur. L’Arduino auquel l’émetteur est connecté peut alors être alimenté à l’aide d’une alimentation ou d’une batterie.

La bibliothèque RadioHead – un couteau suisse pour les modules sans fil

Avant de commencer à coder, il y a une bibliothèque appelée RadioHead que nous devrons installer dans notre IDE Arduino et qui rendra l’écriture du code beaucoup plus simple.

RadioHead est une bibliothèque qui permet un transfert de données simple entre les cartes Arduino. Elle est si polyvalente qu’elle peut être utilisée pour piloter toutes sortes de dispositifs de communication radio, y compris nos modules 433MHz.

Ce que fait la bibliothèque RadioHead, c’est prendre nos données, les encapsuler dans un paquet de données qui inclut un CRC (Cyclic Redundancy Check), puis l’envoyer avec le préambule et l’en-tête nécessaires à un autre Arduino. Si les données sont reçues correctement, l’Arduino récepteur est informé qu’il y a des données disponibles et procède à leur décodage et à leur action.

Le paquet RadioHead est composé comme suit : Un flux de 36 bits de paires de bits « 1 » et « 0 », appelé « préambule d’entraînement », est envoyé au début de chaque transmission. Ces bits sont nécessaires au récepteur pour ajuster son gain avant de recevoir les données réelles. Suivi de cela, un « symbole de départ » de 12 bits et ensuite les données réelles (charge utile) sont ajoutées.

Une séquence de contrôle de trame ou CRC est ajoutée à la fin du paquet qui est recalculée par RadioHead à l’extrémité du récepteur et si le contrôle CRC est correct, le dispositif de réception est alerté. Si la vérification CRC échoue, le paquet est rejeté.

Le paquet entier ressemble à quelque chose comme ceci:

Vous pouvez télécharger la bibliothèque, en visitant le airspayce.com ou, il suffit de cliquer sur ce bouton pour télécharger le zip:

Pour l’installer, ouvrez l’IDE Arduino, allez dans Sketch > Include Library > Add .ZIP Library, puis sélectionnez le fichier RadioHead que vous venez de télécharger. Si vous avez besoin de plus de détails sur l’installation d’une bibliothèque, visitez ce tutoriel Installer une bibliothèque Arduino.

Code Arduino – Pour un émetteur RF 433MHz

Dans notre expérience, nous allons juste envoyer un simple message texte de l’émetteur au récepteur. Elle sera utile pour comprendre comment utiliser les modules et peut servir de base pour des expériences et des projets plus pratiques.

Voici le sketch que nous utiliserons pour notre émetteur:

// Include RadioHead Amplitude Shift Keying Library#include <RH_ASK.h>// Include dependant SPI Library #include <SPI.h> // Create Amplitude Shift Keying ObjectRH_ASK rf_driver; void setup(){ // Initialize ASK Object rf_driver.init();} void loop(){ const char *msg = "Hello World"; rf_driver.send((uint8_t *)msg, strlen(msg)); rf_driver.waitPacketSent(); delay(1000);}

C’est un sketch assez court mais c’est tout ce dont vous avez besoin pour obtenir un signal transmis.

Le sketch commence par inclure la bibliothèque RadioHead ASK. Nous devons également inclure la bibliothèque Arduino SPI car la bibliothèque RadioHead en dépend.

#include <RH_ASK.h>#include <SPI.h>

Puis, nous devons créer un objet ASK afin d’accéder aux fonctions spéciales liées à la bibliothèque RadioHead ASK.

// Create Amplitude Shift Keying ObjectRH_ASK rf_driver;

Dans la fonction setup, nous devons initialiser l’objet ASK.

// Initialize ASK Objectrf_driver.init();

Dans la fonction loop, nous commençons par préparer un message. C’est une simple chaîne de texte et stockée dans un pointeur de caractère nommé msg. Gardez à l’esprit que, votre message peut être n’importe quoi mais ne doit pas dépasser 27 caractères pour de meilleures performances. Et assurez-vous de compter le nombre de caractères qu’il contient, car vous en aurez besoin dans le code du récepteur. Dans notre cas, nous avons 11 caractères.

// Preparing a messageconst char *msg = "Hello World";

Le message est ensuite transmis en utilisant une fonction send(). Elle possède deux paramètres : le premier est le tableau de données et le second est le nombre d’octets (longueur des données) à envoyer. La fonction send() est généralement suivie de la fonction waitPacketSent() qui attend que tout paquet de transmission précédent ait fini d’être transmis. Après cela, le sketch attend pendant une seconde pour donner à notre récepteur le temps de tout absorber.

rf_driver.send((uint8_t *)msg, strlen(msg));rf_driver.waitPacketSent();delay(1000);

Code Arduino – Pour un récepteur RF 433MHz

Connectez l’Arduino du récepteur à l’ordinateur et chargez le code suivant:

// Include RadioHead Amplitude Shift Keying Library#include <RH_ASK.h>// Include dependant SPI Library #include <SPI.h> // Create Amplitude Shift Keying ObjectRH_ASK rf_driver; void setup(){ // Initialize ASK Object rf_driver.init(); // Setup Serial Monitor Serial.begin(9600);} void loop(){ // Set buffer to size of expected message uint8_t buf; uint8_t buflen = sizeof(buf); // Check if received packet is correct size if (rf_driver.recv(buf, &buflen)) { // Message received with valid checksum Serial.print("Message Received: "); Serial.println((char*)buf); }}

Comme le cade de l’émetteur, le code du récepteur commence par charger les deux bibliothèques RadioHead et SPI et par créer un objet ASK.

#include <RH_ASK.h>#include <SPI.h> RH_ASK rf_driver;

Dans la fonction setup : nous initialisons l’objet ASK et configurons également le moniteur série car c’est ainsi que nous allons visualiser notre message reçu.

rf_driver.init();Serial.begin(9600);

Dans la fonction loop : nous créons un tampon de taille identique au message transmis. Dans notre cas, c’est 11, vous vous souvenez ? Vous devrez ajuster cela pour correspondre à la longueur de votre message. Assurez-vous d’inclure tous les espaces et la ponctuation car ils comptent tous comme des caractères.

uint8_t buf;uint8_t buflen = sizeof(buf);

Puis, nous appelons une fonction recv(). Celle-ci allume le récepteur s’il ne l’est pas déjà. S’il y a un message valide disponible, elle copie le message dans son premier tampon de paramètre et retourne true sinon retourne false. Si la fonction renvoie true, le sketch entre dans l’instruction if et imprime le message reçu sur le moniteur série.

if (rf_driver.recv(buf, &buflen)){ Serial.print("Message Received: "); Serial.println((char*)buf); }

Puis nous revenons au début de la boucle et recommençons.

Après avoir chargé le sketch, ouvrez votre moniteur série. Si tout est OK, vous devriez voir votre message.

Sortie du module RF sans fil 433MHz sur le moniteur série – Récepteur

Amélioration de la portée des modules RF 433MHz

L’antenne que vous utilisez pour l’émetteur et le récepteur peut vraiment affecter la portée que vous pourrez obtenir avec ces modules RF. En fait, sans antenne, vous auriez de la chance de communiquer sur une distance de plus d’un mètre.

Avec une conception d’antenne appropriée, vous serez en mesure de communiquer sur une distance de 50 mètres. Bien sûr, c’est à l’extérieur dans un espace ouvert. Votre portée à l’intérieur, notamment à travers les murs, sera légèrement affaiblie.

L’antenne n’a pas besoin d’être compliquée. Un simple morceau de fil à simple âme peut faire une excellente antenne pour l’émetteur et le récepteur. Le diamètre de l’antenne n’a pratiquement aucune importance, tant que la longueur de l’antenne est maintenue.

L’antenne la plus efficace a la même longueur que la longueur de l’onde pour laquelle elle est utilisée. Pour des raisons pratiques, la moitié ou le quart de cette longueur suffisent.

La longueur d’onde d’une fréquence se calcule comme suit :

Longueur d’onde de la fréquence = Vitesse de transmission (v)
Fréquence de transmission (f)

Dans l’air, la vitesse de transmission est égale à la vitesse de la lumière, soit 299 792 458 m/s pour être précis. Ainsi, pour la bande des 433 MHz, la longueur d’onde est :

Longueur d’onde de la fréquence = 299 792 458 m/s
433 000 000 Hz
= 0.6924 mètres
= 69,24 cm

Comme l’antenne pleine onde 69,24 cm est une antenne assez longue, elle n’est pas très pratique à utiliser. C’est pourquoi nous opterons pour une antenne quart d’onde, ce qui correspond à environ 17,3 cm ou 6,8 pouces.

Juste au cas où, si vous expérimentez d’autres émetteurs radio qui utilisent des fréquences différentes, vous pouvez utiliser la même formule pour calculer la longueur d’antenne requise. Plutôt facile, non ?

Même une antenne de 17,3 cm peut sembler peu pratique dans votre minuscule projet Arduino. Mais ne soyez PAS tenté d’enrouler l’antenne pour la rendre plus compacte car cela aura un impact sérieux sur la portée. Une antenne droite est toujours la meilleure!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.