Radiocommande par module 433 MHz avec Arduino

Utilisation de capteurs et composants électroniques avec Arduino.
Une fiche de tutoriel pour chaque.

Radiocommande par module 433 MHz avec Arduino

Messagepar tiptop » Mer 21 Aoû 2013 12:51

Radiocommande par module 433 MHz avec Arduino

Image

Composants utilisés
Les modules 433 sont fournis montés et n'ont pas besoin de composants supplémentaires : ils sont prêts à l'emploi avec une antenne incorporée.

Principe de fonctionnement
Les modules de radio transmission fonctionnent sur la fréquence 433.92 MHz .
La bande de fréquences 433 MHz est libre. Elle est donc fréquemment utilisée pour les commandes de volets, de portails, de porte de garage, mais aussi les stations météo sans fil, les écoutes bébés, les talkies walkies...

Il faut donc coder les signaux émis car il y risque de radio brouillage. Ceci permet au récepteur de reconnaître uniquement ce qui le concerne.
Les données sont envoyées sous la forme de synchronisation + adresse + données + checksum pour assurer une transmission fiable de l'information.

  • Une librairie prête à l'emploi permet une programmation très simple.
  • Utiliser une transmission plus lente permet d'augmenter la portée.
  • Utiliser une paire émetteur + récepteur pour une communication dans un seul sens
  • Utiliser 2 paires pour créer une communication bidirectionnelle.

Brochage des deux modules
Emetteur Tx (3 broches), vu de face et de gauche à droite
Emeteur--> Arduino
  • DATA données d'entrée --> Pin 12 analogique
  • VCC alimentation positif --> +5V Arduino
  • GND masse --> GND

Image

Récepteur Rx (4 broches)
De gauche à droite, récepteur --> Arduino
  • V --> +5V
  • Data --> Pin11
  • NC --> non connecté
  • GND --> GND
Le transmetteur accepte de 3 à 12V dont on peut l'alimenter directement par le 5V stabilisé de l'Arduino.

Image

Programmation
Librairie virtualwire pour Arduino permet d'envoyer du binaire par paquets, sans adresses (tous les modules de réception sont récepteurs) et sans demande de confirmation (acknowledge), avec un codage ASK (Amplitude Shift Keying).
ASK : On module l'amplitude de l'onde porteuse selon la donnée à transmettre (la fréquence et la phase restant fixes).

Télécharger cette librairie et installer les 2 fichiers VirtualWire.cpp et VirtualWire.h
dans votre répertoire C:\Program Files (x86)\arduino-1.0\libraries\VirtualWire

Emission

Code: Tout sélectionner
// ==== Emetteur 433 MHz ===============================
// Programme d'émission de données

// Source : http://skyduino.wordpress.com/2011/12/29/tutoriel-arduino-et-emetteurrecepteur-433mhz-virtualwire/
//
//=====================================================
#include <VirtualWire.h> // inclusion de la librairie VirtualWire
 
const char *msg = "28790658"; // Tableau qui contient notre message
 //Chiffres de 0-9 (les caractères ABC... sont transmis en code A=65,...)
 
void setup() // Fonction setup()
{
    Serial.begin(9600); // Initialisation du port série pour avoir un retour sur le serial monitor
    Serial.println("Tuto VirtualWire"); // Petit message de bienvenue
 
    vw_setup(2000);     // initialisation de la librairie VirtualWire à 2000 bauds (note: je n'utilise pas la broche PTT)
}
 
void loop() // Fonction loop()
{
    Serial.print("TX ... "); // On signale le début de l'envoi
    vw_send((uint8_t *)msg, strlen(msg)); // On envoie le message
    vw_wait_tx(); // On attend la fin de l'envoi
    Serial.println("Done !"); // On signal la fin de l'envoi
    delay(2000); // Et on attend 1s pour pas flooder
}


Image

Réception
Pour tester la réception, il faut deux cartes Arduino, chacune étant équipée d'un module.

Code: Tout sélectionner
// ==== Recepteur 433 MHz ===============================
//
// Source : http://skyduino.wordpress.com/2011/12/29/tutoriel-arduino-et-emetteurrecepteur-433mhz-virtualwire/
//
//=======================================================

#include <VirtualWire.h> // inclusion de la librairie VirtualWire
 
uint8_t buf[VW_MAX_MESSAGE_LEN]; // Tableau qui va contenir le message reçu (de taille maximum VW_MAX_MESSAGE_LEN)
uint8_t buflen = VW_MAX_MESSAGE_LEN; // Taille maximum de notre tableau
 
void setup() // Fonction setup()
{
    Serial.begin(9600); // Initialisation du port série pour avoir un retour sur le serial monitor
    Serial.println("Tuto VirtualWire"); // Petit message de bienvenue
 
    vw_setup(2000); // initialisation de la librairie VirtualWire à 2000 bauds (note: je n'utilise pas la broche PTT)
    vw_rx_start();  // Activation de la partie réception de la librairie VirtualWire
}
 
void loop() // Fonction loop()
{
    if (vw_wait_rx_max(200)) // Si un message est reçu dans les 200ms qui viennent
    {
        if (vw_get_message(buf, &buflen)) // On copie le message, qu'il soit corrompu ou non
        {
            Serial.print("RX : ");
            for (byte i = 0; i < buflen; i++) // Si il n'est pas corrompu on l'affiche via Serial
             //Serial.print(buf[i]);   //Conversion ASCII
             {Serial.print(buf[i]- '0');   //Conversion ASCII des chiffres 0-9
             }
             Serial.println("");
        }
    }
}



Il est important ne pas émettre en continu, sinon on risque de bloquer les récepteurs 433 des environs.
Image

Références
La librairie Virtal Wire (en anglais : VirtualWire library for Arduino and other boards)
http://www.open.com.au/mikem/arduino/

VirtualWire, la documentation (en anglais PDF) de Mike McCauley
http://www.airspayce.com/mikem/arduino/VirtualWire.pdf

Télécharger la dernière version de VirtualWire
https://github.com/digistump/DigisparkA ... irtualWire

Article de référence (complet avec code sur Skyduino)
http://skyduino.wordpress.com/2011/12/2 ... rtualwire/


Autres infos
https://www.sparkfun.com/datasheets/RF/ ... hrough.pdf (bof, tx rx)

http://arduino-info.wikispaces.com/433-315Mhz-Pairs

Exemple avec code
http://srwiez.com/blog-article-11-commu ... lwire.html
http://srwiez.com/up/code/_433Transmitter.ino
http://srwiez.com/up/code/_433Receiver.ino

Remarques
Ces modules peuvent aussi s'utiliser avec la librairie RF
http://forum.arduino.cc/index.php?topic=38075
tiptopboards - admin
Avatar de l’utilisateur
tiptop
Administrateur du site
 
Messages: 88
Inscription: Mar 13 Aoû 2013 20:38
Localisation: 38

Re: Radiocommande par module 433 MHz avec Arduino

Messagepar Wiame » Ven 25 Déc 2015 19:20

Bonsoir,
j’espère que vous vous portez bien.
S'il vous plait, je voulais juste savoir si le branchement de l’émetteur ainsi que celui du récepteur reste le même pour une carte Aduino NANO, en ce qui concerne le numéro des ports.
Bonne fête et merci d'avance pour votre réponse
Wiame
 
Messages: 1
Inscription: Ven 25 Déc 2015 13:04

Re: Radiocommande par module 433 MHz avec Arduino

Messagepar tiptop » Ven 6 Mai 2016 12:26

Bonjour
Il est possible d'utiliser d'autres pins de l'Arduino, en changeant leur numéro correspondant dans le code.
tiptopboards - admin
Avatar de l’utilisateur
tiptop
Administrateur du site
 
Messages: 88
Inscription: Mar 13 Aoû 2013 20:38
Localisation: 38

Re: Radiocommande par module 433 MHz avec Arduino

Messagepar fbedon » Lun 20 Juin 2016 20:21

Bonjour,
Toujours sur le robot Balanbot, ils interfacent directement un récepteur RC sur une carte UNO, le code est fourni, cela semble pas trop compliqué à reproduire...
Et l'interface utilisateur (télécommande de modélisme, voies proportionnelles) est quand même commode pour certaine applications (robots, drones, ...) naturellement pour ouvrir un portail...
Fred
Avatar de l’utilisateur
fbedon
 
Messages: 14
Inscription: Mer 21 Mai 2014 19:56
Localisation: Grenoble


Retourner vers Capteurs et composants

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité