• Aucun résultat trouvé

avec Arduino

N/A
N/A
Protected

Academic year: 2022

Partager "avec Arduino"

Copied!
49
0
0

Texte intégral

(1)

Pascal MASSON

Version projection Edition 2018-2019-V10

(pascal.masson@unice.fr)

Eléments de robotique avec Arduino

Communications RF

(2)

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’ECRITURE

EN COURS DE FINITION

6. Réaliser une télécommande

EN COURS D’ECRITURE

(3)

Introduction

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

(4)

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

(5)

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

(6)

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

(7)

▪ 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

(8)

Lora : présentation

1. Modulations/Codages

1.4. Les standards

(9)

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

(10)

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

(11)

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

(12)

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

(13)

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

(14)

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); }}

(15)

2. RF 433 MHz

2.2. Utilisation simple des modules

Résultat de la réception

Récepteur

(16)

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

(17)

▪ 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

(18)

▪ 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);

(19)

▪ 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

(20)

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

(21)

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 »

(22)

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

(23)

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

(24)

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

(25)

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

(26)

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

(27)

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

(28)

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

(29)

4. Bluetooth

Exemples de résultats

4.4. Connexion entre le HC-05 et le HC-06

(30)

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

(31)

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

(32)

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

(33)

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

(34)

▪ XXX

5.1. Description

5. Lora

(35)

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/

(36)

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

(37)

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

(38)

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

(39)

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

(40)

▪ 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

(41)

#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

(42)

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

(43)

6. Réaliser une télécommande

6.2. Piloter l’arduino avec le smartphone

Appli « Bluetooth Electronics » : recevoir des données

(44)

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

(45)

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

(46)

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 = 255Y

PWMG = Y256

▪ Pour X = 255 et Y > 255 on obtient : PWMG = PWMD = Y  256

▪ Si Y = 255 ou 256 on a bien : PWMG = PWMD = 0

PWMD = 255Y

PWMD = Y256

▪ On définit les variables PWMG et PWMD pour les vitesses et la variable Dir pour la direction

(47)

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

(48)

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

(49)

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)

Références

Documents relatifs

Une résistance, soumise à une tension de 20 V, est parcourue par une intensité de 100 mA.. Quelle est la valeur de

- on multiplie ce nombre par la sensibilité horizontale B choisi, c'est à dire la valeur (en s) d'une division horizontale. La fréquence f d'une tension, est le nombre

Dans ce cas il est nécessaire d’avoir une tension de commande plus élevée que la tension d’entrée V in pour pouvoir travailler avec une faible différence de tension

• Dans un circuit en série, la tension aux bornes du générateur est égale à la somme des tensions aux bornes des autres dipôles. • Plus généralement, la tension entre

4. Nixon, London Calling. Naipaul, Postcolonial Mandarin.. donc insister sur les contradictions qui appartiennent à ses textes, car il est un peu facile de les laisser de côté pour

Exemple : mesure de la valeur efficace d’une tension u sinusoïdale Même branchement. Mais : Position AC sélectionnée pour les mesures

La caractéristique tension-courant U(I) d'un dipôle passif linéaire est une droite d'équation U =R

Exercice n°3: valeur moyenne et efficace (7 points) Soit la tension périodique u ci-contre:. 1- Calculez sa valeur moyenne&lt;u&gt;, en expliquant bien la