
Composants utilisés
- 1 Paire d'émetteur et récepteur de radiocommande 433 Mhz
- 2 Cartes Arduino uno (une pour émettre, une pour recevoir)
- 1 Plaquette d'essais (ou un prototype shield)
- + quelques fils de câblage mâle/mâle à connecteurs Dupont
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

Récepteur Rx (4 broches)
De gauche à droite, récepteur --> Arduino
- V --> +5V
- Data --> Pin11
- NC --> non connecté
- GND --> GND

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
}

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.

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