Pascal MASSON
Version projection Edition 2018-2019-V10
(pascal.masson@unice.fr)
Eléments de robotique avec Arduino
Communications RF
Sommaire
1. Modulations/codages 2. RF 433 MHz
Introduction
3. RF 833 MHz 4. Bluetooth
EN COURS D’ECRITURE
EN COURS D’ECRITURE
5. Lora
EN COURS D’ECRITUREEN COURS DE FINITION
6. Réaliser une télécommande
EN COURS D’ECRITUREIntroduction
Pourquoi une communication Radio Fréquence ?
▪ Le plus évident est le pilotage du robot à distance
▪ Le robot peut aussi envoyer des mesures (télémesures) à l’opérateur qui le contrôle
Introduction
Quel type de communication RF ?
▪ Une communication Radio se caractérise par sa fréquence et le type de modulation
▪ En France, seules trois bandes de fréquences "grand publiques" sont utilisables sans licence de radioamateur.
Bluetooth
RF 433 MHz WIFI
2.4 GHz
Lora
ZigBee 2.4 GHz
▪ Plus la fréquence de la porteuse est grand plus la distance de communication sera faible en raison de l’absorption de l’onde par l’air
Bluetooth : présentation
1. Modulations/Codages
1.4. Les standards
▪ Il utilise la technique d’étalement de spectre par saut de fréquence (FHSS).
▪ La bande de fréquence du Bluetooth s’étale de 2.402 à 2.48 GHz (bande ISM pour industriel, scientifique et médical) et elle est découpée en 79 canaux appelés sauts de largeur 1 MHz. Les modules Bluetooth peuvent changer de canal jusqu’à 1600 fois par seconde
▪ Le standard Bluetooth est basé sur un fonctionnement maître/esclave. Un maître peut être connecté jusqu’à 7 esclaves et il communique avec un esclave à la fois mais commute très rapidement d’un esclave à l’autre
▪ L’association maître/esclaves est appelé « picoréseau » et il peut en exister 10 dans une même zone de couverture.
La portée est très faible : 10 m
▪ plusieurs picoréseaux peuvent être connectés ensembles
Bluetooth : établissement des connexions
1. Modulations/Codages
1.4. Les standards
▪ L'établissement d'une connexion entre deux périphériques Bluetooth suit une procédure relativement compliquée permettant d'assurer un certain niveau de sécurité
▪ En utilisation normale un périphérique fonctionne en « mode passif », c'est-à- dire qu'il est à l'écoute du réseau.
▪ La connexion commence par une phase appelée « inquisition » : le maître envoie une requête d'inquisition à tous les périphériques présents dans la zone de portée, appelés points d'accès. Tous les périphériques recevant la requête répondent avec leur adresse (unique et codée sur 48 bits)
▪ Le maître choisit un esclave (avec son adresse) et se synchronise avec le point d'accès selon une technique, appelée paging (synchronisation de son
▪ Un lien s'établit et permet au périphérique maître de débuter une phase de découverte des services du point d'accès, selon un protocole appelé SDP (Service Discovery Protocol).
▪ Le périphérique maître peut alors créer un canal de communication avec l’esclave en utilisant le protocole L2CAP.
▪ Le point d'accès peut intégrer un mécanisme de sécurité, appelé pairage qui permet de restreindre l'accès aux seuls utilisateurs autorisés afin de garantir un certain niveau de sécurité au picoréseau. Le pairage se fait à l'aide d'une clé de chiffrement communément appelée « code PIN ».
Bluetooth : établissement des connexions
1. Modulations/Codages
1.4. Les standards
Lora : présentation
1. Modulations/Codages
1.4. Les standards
2. RF 433 MHz
▪ Il se compose de 3 entrées : VCC, GND et les données à envoyer.
2.1. Présentation des modules
L’émetteur
▪ Il y a aussi la possibilité de souder une antenne (fil de 16 à 18 cm) pour augmenter la distance d’envoi
▪ L’alimentation doit être comprise entre 3 et 12 V sachant que la puissance émise augmente avec la tension
▪ La modulation de la porteuse est de type ASK / OOK
▪ La puissance émise est de 25 mW pour VCC = 12 V
▪ Le débit est au maximum de 10 kbps
Données VCC
GND
2. RF 433 MHz
2.1. Présentation des modules
Le récepteur
▪ Il y a aussi la possibilité de souder une antenne (fil de 16 à 18 cm) pour augmenter la distance d’envoi
▪ L’alimentation doit être VCC = 5 V
▪ Il se compose de 3 entrées : VDD, GND et les données reçues.
Données VCC
GND
2. RF 433 MHz
2.1. Présentation des modules
Petits détails
▪ Ces modules sont unidirectionnels ce qui signifie que le module de réception n’envoie rien au module de transmission
▪ La conséquence directe est que l’émetteur ne sait pas si les données ont bien étaient reçues
▪ Donc il ne faut pas transmettre des données critiques ou alors inclure un système de sécurité qui par exemple coupe les moteurs si aucune instruction n’est reçue pendant un certain laps de temps
2. RF 433 MHz
2.2. Utilisation simple des modules
Objectifs
▪ Il est très simple, envoyer alternativement un 1 puis un 0 qui feront s’allumer ou s’éteindre une LED
▪ Cela permettra aussi de vérifier rapidement le bon fonctionnement des modules
2. RF 433 MHz
2.2. Utilisation simple des modules
Montage
▪ Il faut placer les deux modules à une faible distance l’un de l’autre si des antennes n’ont pas été soudées
Emetteur Récepteur
2. RF 433 MHz
2.2. Utilisation simple des modules
Les programmes
Emetteur Récepteur
#define rfTX 4
#define led 13 void setup(){
pinMode(rfTX, OUTPUT);
pinMode(led, OUTPUT); } void loop(){
digitalWrite(rfTX, HIGH);
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(rfTX, LOW);
digitalWrite(led, LOW);
delay(500); }
#define rfRX
#define led 13 int data = 0;
void setup(){
pinMode(rfRX, INPUT);
pinMode(led, OUTPUT); } void loop(){
data=digitalRead(rfRX);
if (data==HIGH) {
digitalWrite(led, HIGH); } else {
digitalWrite(led, LOW); }}
2. RF 433 MHz
2.2. Utilisation simple des modules
Résultat de la réception
Récepteur
2. RF 433 MHz
2.3. Bibliothèque « VirtualWire »
Présentations
▪ Cette bibliothèque permet d'envoyer / recevoir des messages de moins de 77 octets
▪ VirtualWire est une solution simple, fiable et efficace pour communiquer
▪ Il faut télécharger la bibliothèque ici :
www.airspayce.com/mikem/arduino/VirtualWire/
▪ En raison de la surutilisation de la fréquence 433MHz, la bibliothèque VirtualWire envoie plusieurs fois chaque message pour augmenter les chances de le recevoir
▪ Il faut préciser en début de programme que l’on veut utiliser cette librairie :
2. RF 433 MHz
2.3. Bibliothèque « VirtualWire »
Les principales fonctions
#include <Servo.h>
▪ Dans le « setup », il faut définir à quelle vitesse en « bauds » on souhaite parler (par exemple 2000 ou 3000)
vw_setup(vitesse);
▪ Par défaut, la librairie utilise l’IO n°12 pour la transmission et l’IO n°11 pour la réception. Il est possible de les changer :
vw_set_tx_pin(n° IO);
vw_set_rx_pin(n° IO);
▪ Il faut aussi activer la réception des données si on se place dans le cas d’un récepteur
▪ On peut bloquer le programme dans l’attente de l’envoi ou de la réception d’un message
2. RF 433 MHz
2.3. Bibliothèque « VirtualWire »
Les principales fonctions
vw_wait_tx();
vw_wait_rx();
▪ Pour éviter de bloquer éternellement le programme de réception, il est possible d’indiquer un temps maximum d’attente
vw_wait_rx_max(temps en millisecondes);
▪ Pour envoyer un message, il faut connaitre sa longueur (pointeur vers une variable de type byte) et son contenu sous forme d’un tableau d’octet
vw_send(message, longueur);
▪ Pour la réception, on indique le nom de la variable de stockage du message (tableau d’octets) et la longueur du message (pointeur vers une variable de type byte) . Si le message est plus long, il sera tronqué
2. RF 433 MHz
2.3. Bibliothèque « VirtualWire »
Les principales fonctions
vw_get_message(message, longueur);
▪ A noter que cette fonction retourne aussi « true » si le message est correct et
« false » si il est corrompu
4. Bluetooth
▪ Le HC-06 est un module esclave ce qui signifie qu’il est piloté par un autre module bluetooth
4.1. Présentation des modules
HC-06
▪ Il y a aussi une sortie TX (T pour transmission)
▪ VCC doit être compris entre 3.6 V et 6 V HC-06
▪ Le 1 logique correspond à la tension 3.3 V
▪ Il se compose de 3 entrées : VCC, GND et RX (R pour réception).
HC-05
▪ Ce module peut fonctionner en esclave ou en maitre donc contrôler d’autres modules bluetooth
4. Bluetooth
4.1. Présentation des modules
Les commandes du HC-06
▪ Les commandes se terminent sans caractère particulier ce qui correspond à « Pas de fin de ligne » dans le moniteur série:
▪ AT+NAMExyz : permet de donner le nom « xyz » au module qui doit avoir au maximum 20 charactères. Le nom est conservé même si le module n’est plus alimenté. Le module revoit l’info « Oksetname » si le changement de nom s’est bien passé
▪ AT+VERSION : renvoi la version du logiciel installé dans le module
▪ AT+PINxxxx : permet de changer le code (xxxx) pour se connecter au module. Par défaut le code est « 1234 ». Le module revoit l’info « OksetPIN » si le changement de code s’est bien passé
▪ AT : permet de vérifier la connexion avec le module qui doit répondre « OK »
4. Bluetooth
4.1. Présentation des modules
▪ AT+BAUDx : permet de modifier la vitesse de communication qui en sortie d’usine est de 9600. La modification prends effet après le redémarrage du module
▪ Les vitesses possibles sont : 1 : 1200 2 : 2400 3 : 4800 4 : 9600 5 : 19200 6 : 38400
7 : 57600 8 : 115200 9 : 230400 A : 460800 B : 921600 C : 1382400
Les commandes du HC-06
▪ Si on sélectionne une vitesse trop grande, la carte arduino n’arrivera plus jamais à communiquer avec le module. Dans ce cours, on utilisera
4. Bluetooth
4.1. Présentation des modules
▪ Contrairement au HC-06, les commandes doivent être terminées par « \r\n».
Le moniteur série de l’arduino permet de le faire automatiquement en sélectionnant « Les deux, NL et CR »:
▪ Il faut aussi appuyer sur le bouton pour rendre accessibles les commandes AT
Les commandes du HC-05
Bouton
4. Bluetooth
▪ Il est conseillé de placer un diviseur de tension entre l’Arduino et l’entrée RX du module pour abaisser la tension du niveau haut de 5 V vers 3.3 V
4.2. Montage
Ω1 kΩ
RX
TX RX
TX
4. Bluetooth
▪ Il est conseillé de placer un diviseur de tension entre l’Arduino et l’entrée RX du module pour abaisser la tension du niveau haut de 5 V vers 3.3 V
4.2. Montage
▪ Mais apparemment le module supporte quand même des tensions de 5V sur l’entrée RX
RX
TX RX
TX
4. Bluetooth
4.3. Configuration du module HC-06
Déclaration des librairies et autres
▪ La communication avec le module est de type série il est préférable d’utiliser la librairie « SoftwareSerial »
#include<SoftwareSerial.h>
#define RX 10
▪ Donc la communication Arduino/module est identique à la communication PC/Arduino
▪ RX = 10 (de l’Arduino) correspond à la sortie TX du module et TX = 11 (de l’Arduino) correspond à l’entrée RX du module
▪ On déclare une fonction « BlueT » qui correspond à une communication série.
Cette fonction se charge de déclarer RX et TX respectivement comme INPUT et OUTPUT
4. Bluetooth
Le setup
▪ Le moniteur série va servir à envoyer/recevoir des informations vers/en provenance du module donc il faut initialiser la communication série
void setup(){
Serial.begin(9600);
delay(500);
Serial.println("Bonjour -Pret pour les commandes AT");
BlueT.begin(9600);
delay(500);}
▪ Il faut aussi définir la vitesse de communication avec le module
4.3. Configuration du module HC-06
4. Bluetooth
La loop
▪ En scrute en permanence l’arrivée d’un caractère sur les entrées RX des canaux de communication « Serial » (en provenance du moniteur) et « BleuT » (en provenance du module) et on transfert l’information vers les sorties TX donc vers le moniteur série ou le module
void loop(){
while (BlueT.available()) {
Serial.print(char(BlueT.read())); } while (Serial.available()) {
BlueT.write(char(Serial.read())); }
▪ La présence de « char » permet de convertir le nombre reçu (compris entre 0 et 255) en caractère
Du module vers le moniteur
Du moniteur vers le module
4.3. Configuration du module HC-06
4. Bluetooth
Exemples de résultats
4.4. Connexion entre le HC-05 et le HC-06
Configuration du HC-05 en maitre
▪ Vérification que la vitesse de communication est identique au HC-06
▪ On supprime les anciens esclaves de la mémoire
Au préalable
▪ Il faut choisir un mot de passe pour le module HC-06 et choisir une vitesse de communication de 38400 bauds
▪ Il faut connecter l’entrée « EN » du HC-05 à 3.3 V
▪ On configure le module en esclave
▪ On fait l’inquisition d’un module fictif
▪ On indique que l’on va rechercher un esclave en
4. Bluetooth
4.4. Connexion entre le HC-05 et le HC-06
Configuration du HC-05 en maitre
▪ On recherche les modules esclaves. Des fois cela plante et il faut recommencer. ERROR:(0) signifie qu’il y a une erreur de commande AT (IMQM !)
▪ On demande l’affichage des modules détectés.
ERROR:(16) indique que la librairie SPP n’a pas été initialisée
Au préalable
▪ Il faut choisir un mot de passe pour le module HC-06 et choisir une vitesse de communication de 38400 bauds
▪ Il faut connecter l’entrée « EN » du HC-05 à 3.3 V
▪ Initialisation de la librairie SPP (Remarque : si on fait cette commande et
4. Bluetooth
4.4. Connexion entre le HC-05 et le HC-06
Configuration du HC-05 en maitre
▪ On (re)demande l’affichage des modules détectés
▪ Vérification et éventuel changement du mot de passe
▪ On se connecte au module détecté.
▪ On s’appaire avec le module
▪ On fait le lien avec le module.
4. Bluetooth
4.4. Connexion entre le HC-05 et le HC-06
Test de la connexion
▪ A présent (i.e. après la commande link) la LED du HC-05 clignote 2 fois rapidement toutes les 2 secondes et celle du HC-06 reste allumée sans clignoter
▪ On peut enlever l’entrée « EN » de la tension 3.3 V
▪ On vérifie alors que l’information circule bien entre les 2 modules
HC-05 HC-06
4. Bluetooth
4.4. Connexion entre le HC-05 et le HC-06
▪ XXX
5.1. Description
5. Lora
6. Réaliser une télécommande
6.1. Piloter l’arduino avec le smartphone
Présentation de l’appli « Bluetooth Electronics »
▪ C’est une application (sous environnement Androïde) qui permet de réaliser des écrans de contrôle et de visualisation de données sur smartphone
▪ L’application a été conçue pour communiquer avec les modules HC-06 et HC-05
▪ Site internet : www.keuwl.com/apps/bluetoothelectronics/
Les commandes
▪ Il existe un vaste panel d’actionneurs : boutons, interrupteur à glissière, lumières, graphique, jauge …
6. Réaliser une télécommande
6.1. Piloter l’arduino avec le smartphone
Les commandes
▪ Il existe un vaste panel d’actionneurs : boutons, interrupteur à glissière, lumières, graphique, jauge …
6. Réaliser une télécommande
6.1. Piloter l’arduino avec le smartphone
Connection Smartphone / module Bluetooth
▪ Il faut commencer par détecter le module bluetooth avec le smartphone et entrer le mot de pas
▪ Même si on change le nom du module par la suite, il sera quand même reconnu par le smartphone grâce à son numéro
▪ Il faut ensuite lancer l’application et se connecter au module
▪ Une fois que le smartphone est connecté au module bluetooth, sa LED rouge cesse de clignoter
6. Réaliser une télécommande
6.1. Piloter l’arduino avec le smartphone
Préparation de l’écran
▪ Sélectionner un écran vide (à droite des exemples)
▪ Ajouter le « slider » de votre choix
▪ Il faut aussi éditer la configuration du « slider »
6. Réaliser une télécommande
6.1. Piloter l’arduino avec le smartphone
▪ Il faut aussi configurer les paramètres du « slider » avec les valeurs min et max
▪ On indique aussi ce qui sera envoyé avant et après le nombre
▪ On peut aussi choisir d’envoyer une valeur à chaque modification de la position du « slider » ou quand on arrête d’appuyer sur l’écran (donc après avoir modifié la position du « slider »)
▪ Le bouton « run » sert à lancer le programme
6. Réaliser une télécommande
6.2. Piloter l’arduino avec le smartphone
Appli « Bluetooth Electronics » : préparation de l’écran
#include<SoftwareSerial.h>
#define RX 10
#define TX 11
#define LED 3
SoftwareSerial BlueT(RX,TX);
int PWM=128;
char Data;
void setup(){
Serial.begin(9600);
BlueT.begin(9600);
pinMode(LED, OUTPUT);
}
La LED (et la résistance série) est connectée sur l’IO n°3
Initialisation de la valeur du PWM Pour stocker la lettre envoyée par le Smartphone
IO n°3 configuré en sortie
6. Réaliser une télécommande
6.2. Piloter l’arduino avec le smartphone
Appli « Bluetooth Electronics » : programme arduino
void loop(){
if (BlueT.available()){
Data=BlueT.read();
if (Data=='A') {
PWM=BlueT.parseInt();
Serial.println(PWM);
analogWrite(LED, PWM);
} } }
Si il y a message dans le buffer RX de la communication avec le module
Lecture du premier caractère Si c’est la lettre « A »
Revoie le premier entier long trouvé dans le buffer
Change la luminosité de la LED
6. Réaliser une télécommande
6.2. Piloter l’arduino avec le smartphone
Appli « Bluetooth Electronics » : programme arduino
6. Réaliser une télécommande
6.2. Piloter l’arduino avec le smartphone
Appli « Bluetooth Electronics » : recevoir des données
Joystick et voiture arduino
6. Réaliser une télécommande
6.2. Piloter l’arduino avec le smartphone
255 X 0
0 511
▪ Le joystick de l’application procède 2 axes (X,Y) avec le point (0,0) en haut à gauche
▪ On utilise le joystick pour contrôler la vitesse (PWM) et la direction de chaque moteur
▪ On choisit alors des axes qui vont jusqu’à (255 × 2) 1 = 511
Joystick et voiture arduino
6. Réaliser une télécommande
6.2. Piloter l’arduino avec le smartphone
255 X 0
0 511
▪ On définit les variables PWMG et PWMD pour les vitesses et la variable Dir pour la direction
▪ L’axe Y donne la direction des moteurs
Dir = 1
Dir = 0
Joystick et voiture arduino
6. Réaliser une télécommande
6.2. Piloter l’arduino avec le smartphone
255 X 0
0 511
▪ L’axe Y donne la direction des moteurs
▪ L’axe Y donne aussi la vitesse des moteurs avant modulation avec X
▪ Pour X = 255 et Y <= 255 on obtient : PWMG = PWMD = 255 Y
PWMG = 255Y
PWMG = Y256
▪ Pour X = 255 et Y > 255 on obtient : PWMG = PWMD = Y 256
▪ Si Y = 255 ou 256 on a bien : PWMG = PWMD = 0
PWMD = 255Y
PWMD = Y256
▪ On définit les variables PWMG et PWMD pour les vitesses et la variable Dir pour la direction
Joystick et voiture arduino
6. Réaliser une télécommande
6.2. Piloter l’arduino avec le smartphone
255 X 0
0 511
▪ Si Y <= 255 et X > 255 alors la voiture doit tourner à droite et on utilise l’axe X pour ralentir le moteur de droite
▪ Si on est en haut à droite alors le moteur de gauche est au maximum et celui de droite est éteint.
▪ Pour le moteur de gauche on conserve : PWMG = 255 Y
▪ Pour le moteur de droit on a : PWMD = 255 Y (X 256)
▪ Pour Y = 255 et X = 256 on a bien PWMD = 0
▪ Pour Y = 0 et X = 511 on a bien PWMD = 0
Joystick et voiture arduino
6. Réaliser une télécommande
6.2. Piloter l’arduino avec le smartphone
255 X 0
0 511
▪ Par contre si Y = 200 et que X = 511, alors on obtient :
PWMG = 0 si PWMG < 0
PWMD = 255 200 (511 256) = 200
▪ Il est donc impératif d’annuler PWMG et PWMD si ils deviennent inférieurs à 0 :
PWMD = 0 si PWMD < 0
Joystick et voiture arduino
6. Réaliser une télécommande
6.2. Piloter l’arduino avec le smartphone
Y
X
511 255
0
0 511
▪ Pour les autres cadrans, on obtient :
PWMG = 255 Y
PWMD = 255 Y (X 256) PWMG = 255 Y (255 X)
PWMD = 255 Y
PWMG = Y 256 (255 X) PWMD = Y 256
PWMG = Y 256
PWMD = Y 256 (X 256)