Site icon AranaCorp

Utilisation d’un module RF 433MHz avec Arduino

La radio fréquence 433MHz (RF 433MHz) est très utilisée dans le domaine des transmissions radio que ce soit pour le pilotage à distance ou la transmission de données. On le retrouve dans les télécommandes ou en domotique.

Matériel

Principe de fonctionnement

Le module RF 433 MHz sert à transmettre une information sans fil sur des onde radio . L’ émetteur permet de moduler à haute fréquence des données série externes et de les transmettre par liaison radio au module de réception. Le module est composé d’un émetteur radio APF03 et d’un récepteur APRXB12. Il utilise la modulation ASK (Amplitude Shift Keying) sur une fréquence de 433 MHz.

Les modules radio RF433MHz on une portée de quelques mètre (<5m). Cette portée peut être grandement augmentée avec une source de tension plus élevée et une antenne correctement dimensionnée. En théorie, jusqu’à 100m sans obstacle.

Différents modules de communication sans-fil existent utilisant des protocoles différents (Wifi, LoRa, etc.) ou ayant des performances plus importante (HC-12, nRF24l01, nRF905, etc.) Vérifiez bien les spécifications techniques et les performances du module utilisé.

Schéma

Dans la librairie VirtualWire que nous allons utiliser, les broches utilisées par défaut sont la pin 12 pour la broche «data» du transmetteur et la pin 11 pour la broche «data» du récepteur.

L’affectation des broches peut être différentes selon le code et la librairie utilisée.

Code émetteur

Pour commencer il faut télécharger la librairie VirtualWire en zip, puis dans Arduino, aller dans croquis, inclure une bibliothèque,ajouter la bibliothèque.zip et mettre le dossier.zip correspond. Une fois installer, il faut redémarrer Arduino. Une fois les cartes branchées à votre pc choisir un port différent pour chaque carte.

#include <VirtualWire.h>
#define TxPin 12
void setup()
{
  pinMode(13, OUTPUT);
  pinMode(12, INPUT);
  Serial.begin(9600);    // Debugging only
  Serial.println("Setup Transmitter");

  // Initialise the IO and ISR
  vw_set_ptt_inverted(true); // Required for DR3100
  vw_setup(2000);  // Bits per sec
}

void loop()
{
  const char *msg = "Bonsoir tous le monde";

  digitalWrite(13, true); // Flash a light to show transmitting
  vw_send((uint8_t *)msg, strlen(msg));
  vw_wait_tx(); // Wait until the whole message is gone
  digitalWrite(13, false);
  delay(200);
}

Code récepteur

#include <VirtualWire.h>
#define RxPin 11
void setup()
{
  pinMode(13, OUTPUT);
  pinMode(11, OUTPUT);
  Serial.begin(9600);  // Debugging only
  Serial.println("Setup Receiver");

  vw_set_ptt_inverted(true); // Required for DR3100
  vw_setup(2000);  // Bits per sec

  vw_rx_start();       // Start the receiver PLL running
}

void loop()
{
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;

  if (vw_get_message(buf, &buflen)) // Non-blocking
  {
    int i;

    digitalWrite(13, true); // Flash a light to show received good message
    // Message with a good checksum received, dump it.
    Serial.print("From transmitter : ");

    for (i = 0; i < buflen; i++)
    {
      //Serial.print(buf[i], HEX);       →sert a afficher les valeurs en héxa
      Serial.print(char(buf[i]));
      //Serial.print(" ");
    }
    Serial.println("");
    digitalWrite(13, false);
  }
}

Il est possible de modifier les broches utilisées à l’aide des fonctions vw_set_rx_pin and vw_set_tx_pin:

//Pour l’émetteur il faut taper
vw_set_tx_pin(txPin);

//Pour le récepteur il faut taper
vw_set_rx_pin(rxPin);

Résultats

Une fois les codes téléversés dans chacun des microcontrôleurs, vous devriez voir le message s’afficher sur le moniteur série du récepteur.

Applications

Sources

Quitter la version mobile