Support :

Transcription

Support :
STI2D
Option SIN
AP2.2: commande robot par arduino
Première
Informatique
Durée prévue : 4h.
Problématique : Mise en application programme Arduino pour commander le déplacement
d’un Robot (matériel et programmation)
Compétences visées
Être capable de modifier et de créer des
programmes Arduino
Savoirs associés
Plan de l’étude
1. Découverte du robot et différents cartes
2. Fonctionnement des ports de la carte Arduino
3. Analyse d'un programme
4. Améliorations du programme
5. Télécommande Nunchuk
6. En bonus
Logiciels
Arduino
Mode de distribution
Dossier technique associé
Dossier ressource associé
Fichiers programmes
Remarque
Explication du matériel
Matériels
Carte Arduino Uno
Circuit Shield Arduino commande moteur de Sparkfun
Chassis Robot+ alimentation
Telecommande Nunchuk
Format papier et numérique
Classeur Shield ou schema_Danger_Shield.pdf
Classeurs Arduino ou language Arduino.pdf et
schema_carte_Arduino_Uno.pdf
Programme1.txt et test_NUNCHUK.txt
Matériels nécessaires :
1 module Arduino UNO
1 Platine Motor Driver Shield
Découverte du robot et de sa carte de commande « Motor driver Shield »
1.
a. Motor Driver Shield
Il existe plusieurs Shield de commande de moteur. Le Shield utilisé ici est le Ardumoto de Sparkfun.
Les plans, le principe de fonctionnement et un programme de démonstration est disponible à
l’adresse suivante :
https://learn.sparkfun.com/tutorials/ardumoto-shield-hookup-guide/introduction
Cette carte permet de contrôler 2 moteurs
à
courant
continu
de
manière
indépendante.
Chaque
moteur
est
commandé par 2 ports de la carte
Arduino :
-
Un port numérique (0 ou 1) permet
de définir le sens de rotation du
moteur (DIRA et DIRB dans le
programme).
-
Un port PWM (Pulse Width
Modulation : Modulation de
largeur d’impulsion) permet de
définir la vitesse du moteur.
AP2.2 commande robot par arduino_eleves.odt
Page 2 sur 13
b. Le robot
Les deux moteurs sont totalement indépendants, l’un peut
tourner dans un sens et le second dans l’autre sens et à des
vitesses différentes.
Chaque moteur se connecte à Motor driver Shield comme indiqué
sur la photo ci-dessous
Les fils de moteur peuvent être connecte de n’importe quelle
façon. En cas d’inversion, le contrôle de direction du moteur est
échangé aussi.
À côté de chaque connexion des moteurs se trouve une paire
de LEDS bleu et jaune, qui indique la connexion de votre
moteur
b. Le Robot
Leds
c. Assemblage des différents
éléments
Vérifier que la carte Arduino
Uno, le shield Ardumoto et le
robot sont connectés comme sur
la photo. N'oubliez pas de
connectez une alimentation
extérieure (pile 9V, alim 7à12V, …) afin de fournir la puissance nécessaire aux moteurs (ce que
ne peut faire le port USB)
Afin d'avoir tous les mêmes références
il faut monter la carte de cette façon :
Moteur B
Moteur A
AP2.2 commande robot par arduino_eleves.odt
Page 3 sur 13
2.
Fonctionnement des ports de la carte Arduino
Rappel : La carte Arduino commande chaque moteur par l’intermédiaire de 2 ports : DIR qui
détermine le sens et PWM la vitesse
Fonction DIR :
Ressource : https://learn.sparkfun.com/tutorials/ardumoto-shield-hookup-guide/board-overview
12
DIR A
A digital signal to control the rotation direction of motor A (e.g.
HIGH=CW, LOW=CCW).
13
DIR B
A digital signal to control the rotation direction of motor B (e.g.
HIGH=CW, LOW=CCW).
Fonction PWM : Lire document « La génération d'impulsion modulée en largeur (ou PWM - Pulse Width
Modulation) »
L'exemple montre comment utiliser une sortie "analogique" (PWM) pour atténuer la luminosité d'une LED ou la
vitesse d’un moteur.
La modulation de la largeur d'impulsion (MLI ou PWM), est une technique pour obtenir des effets d'allure
analogique avec des broches numériques. Le contrôle numérique est utilisé pour créer une onde carrée, un signal
basculant entre un niveau HAUT et BAS, 0V et 5V. Cette succession de niveaux HAUT/BAS peut simuler des
tensions entre le niveau HAUT (5 Volts) et le niveau BAS (0 Volts) en faisant varier la proportion du temps où
le signal est HAUT sur la proportion de temps où le signal est BAS. La durée du temps du niveau HAUT est
appelé largeur d'impulsion, ou encore "duty cycle" (cycle de travail en français). Pour obtenir une variation
analogique, il suffit de changer ou de modifier cette largeur d'impulsion. En répétant la succession de niveaux
HAUT/BAS assez rapidement avec une LED par exemple, le résultat est semblable à celui que l'on obtiendrait
en contrôlant la luminosité de la LED avec une tension régulière entre 0 et 5V.
Dans le graphique ci-dessous, les lignes vertes représentent une période de temps régulière. Cette durée, ou
période, est l'inverse de la fréquence du signal PWM (qui est une onde carrée). En d'autres termes, avec une
fréquence PWM générée par la carte Arduino de l'ordre de 500hz, l'espace entre 2 lignes mesure 2
1
1
T= =
=0 .002 s=2ms
F
500
millisecondes.
Un appel de la fonction analogWrite(valeur) utilise une valeur comprise entre 0 et 255, tel que
analogWrite(255) utilise 100% du cycle (toujours au niveau HAUT), . La valeur 0 correspond ainsi à 0% du
cycle de travail (duty cycle).
AP2.2 commande robot par arduino_eleves.odt
Page 4 sur 13
a) Déterminer la valeur de la fonction analogWrite si l’on souhaite une « vitesse moteur » à N/2.
……………………………………………………………………………….
……………………………………………………………………………….
b) Quel est dans ce cas, l’allure du cycle ?
5v
0v
c) Soit le cycle de PWM
3.
-
Déterminer le contenu de la fonction analogWrite :
-
Déterminer la valeur de la tension moyenne envoyée : ……….....
-
Quel est la vitesse du moteur dans ce cas ?
analogWrite( N°PIN, ..…….)
N/4
N/2
3N/4
Analyse d'un programme (programme1.txt)
Ouvrir le fichier « programme1.txt ». Copier le contenu de ce fichier dans un Sketch Arduino (il s'agit
du logiciel de programmation Arduino).
A. Dans une partie du programme, on trouve :
driveArdumoto(MOTOR_A, CCW, 255);
delay(1000);
driveArdumoto(MOTOR_A, CW, 127);
delay(1000);
stopArdumoto(MOTOR_A);
a) Que signifient les lignes de programme précédentes ?
……………………………………………………………………………….
……………………………………………………………………………….
……………………………………………………………………………….
……………………………………………………………………………….
……………………………………………………………………………….
……………………………………………………………………………….
AP2.2 commande robot par arduino_eleves.odt
Page 5 sur 13
b) Quel mouvement fait le robot ?
……………………………………………………………………………….
……………………………………………………………………………….
……………………………………………………………………………….
……………………………………………………………………………….
B. Charger le et analyser le programme par rapport au mouvement.
……………………………………………………………………………….
……………………………………………………………………………….
……………………………………………………………………………….
……………………………………………………………………………….
C. Faire l’algorithme complet du programme
4.
Améliorations du programme
A. Nous nous proposons d'améliorer le programme. Pour cela vous allez créer 3 nouvelles fonctions,
une fonction 'marche_AV', une fonction 'marche_AR' et une fonction 'arret' (on se servira des
fonctions 'driveArdumoto' et 'stopArdumoto' déjà présentes dans le programme). La variable
Vitesse sera rajoutée. Modifier le programme pour que le robot avance à pleine vitesse pendant 2
seconde, s'arrête 1 seconde, recule à 1/3 de la vitesse max pendant 3
Validation professeur :
seconde et s'arrête 2 secondes tout cela grâce à ces nouvelles fonctions.
Faites les essais et ensuite faites valider par le professeur
B. On va maintenant créer les fonctions qui vont permettre de faire tourner notre véhicule. Faire des
essais pour trouver la meilleure solution pour tourner. Créer les fonctions
'tourne_AV_droite',
'tourne_AV_gauche',
'tourne_AR_droite'
et
Validation professeur :
'tourne_AR_gauche'. Faites les essais et ensuite faites valider par le
professeur.
AP2.2 commande robot par arduino_eleves.odt
Page 6 sur 13
Pensez à faire une sauvegarde de votre programme. Il sera réutilisé dans
la 2ème partie de la question 5.
5.
Télécommande Nunchuk
On va maintenant utiliser une télécommande filaire Nunchuck.
Données techniques :
La carte Arduino Uno est capable de communiquer avec des périphériques par
bus I2C à l’aide de ses entrées analogiques 4 et 5 avec la configuration
suivante :
 Entrée analogique 4 (A4) : SDA (serial data line)
 Entrée analogique 5 (A5) : SCL (serial clock line)
Depuis la version Uno R3 (celle que l'on possède nous), deux nouvelles
broches SDA et SCL peuvent être utilisées pour cela. Elles se trouvent à côté de la broche AREF.
Remarque : le bus I²C (Inter Integrated Circuit) fait partie des bus série (les données passent à la queue
leu leu, c'est à dire les une à la suite des autres).
La connexion sera réalisée avec un adaptateur :
4 fils sont nécessaires pour connecter la Nunchuk
à un circuit électronique, ou une carte arduino :
• 2 fils pour l’alimentation de la manette :
+3,3 Vcc
Masse (la masse doit être commune à tous les composants branchés sur le bus I2C)
• 2 fils pour la communication par bus I2C :
SDA -> serial data line (par où transitent les données)
SCL -> serial clock line (horloge de synchronisation)
AP2.2 commande robot par arduino_eleves.odt
Page 7 sur 13
Ce qui donne sur notre adaptateur :
- : relié à la masse (ground ou GND)
+ : relié au 3,3V
d : relié au SDA
c : relié au SCL
cela donne :
Cette manette contient un joystick 2 axes,
2 boutons et un accéléromètre 3 axes à
±2G.
Les données issues des capteurs de la
nunchuk sont codées sur 6 octets (voir
tableau ci-après):
•1 er Octet (adresse 0x00) : Valeur de
l’axe X du joystick analogique (0
à 255).
AP2.2 commande robot par arduino_eleves.odt
Page 8 sur 13
•2 ème Octet (adresse 0x01) : Valeur de l’axe Y du joystick analogique (0 à 255).
•3 ème Octet (adresse 0x02) : Valeur de l’axe X de l’accéléromètre. Cette valeur est codée sur 10
bit et dans cet octet sont inscrits les 8 bit de poids fort (bit 9 à 2).
•4 ème Octet (adresse 0x03) : Valeur de l’axe Y de l’accéléromètre. Cette valeur est codée sur 10
bit et dans cet octet sont inscrits les 8 bit de poids fort (bit 9 à 2).
•5 ème Octet (adresse 0x04) : Valeur de l’axe Z de l’accéléromètre. Cette valeur est codée sur 10
bit et dans cet octet sont inscrits les 8 bit de poids fort (bit 9 à 2).
•6 ème Octet (adresse 0x05) : bit 0 → Etat du bouton Z (0: appuyé ; 1: relâché)
bit 1 → Etat du bouton C (0: appuyé ; 1: relâché)
bit 2 et 3 → 2 bit de poids faible de la valeur de l’accéléromètre en X (bit 1 et 0)
bit 4 et 5 → 2 bit de poids faible de la valeur de l’accéléromètre en Y (bit 1 et 0)
bit 6 et 7 → 2 bit de poids faible de la valeur de l’accéléromètre en Z (bit 1 et 0)
5.1 Essai de la télécommande Nunchuk
AP2.2 commande robot par arduino_eleves.odt
Page 9 sur 13
Vous allez essayer le programme présent dans le fichier : test_NUNCHUK.txt
Copiez ce programme dans le programme Arduino Sketch. Essayez ce programme (on visualise les
donner dans la console « moniteur série » (menu « outils).
1. Essayer de voir ce qui se passe quand on fait toutes les actions possibles sur la manette.
Comme par la suite on ne va utiliser que le joystick, on va travailler sur la partie du programme le
concernant.
2. Relevez dans le programme le nom des variables des valeurs de position du joystick.
……………………………………………………………………………………….
……………………………………………………………………………………….
3. Faites des essais et relevez les différentes positions (x,y) de la manette (compléter ci dessous)
positions: (….. , …..)
(….. , …..)
(….. , …..)
(….. , …..)
positions: (….. , …..)
(….. , …..)
( ….. , …..)
(….. , …..)
En résumé : sur le déplacement sur l'axe des x :
gauche
centre
droite
……..
……….
……....
valeur :
AP2.2 commande robot par arduino_eleves.odt
sur l'axe des y :
(….. , …..)
Haut
……....
centre
……...
bas
……..
Page 10 sur 13
4. Compléter les phrases suivantes :
La marche avant va donc est validée par la position y entre ………. et ……….
La marche arrière va donc est validée par la position y entre ………. et ……….
On tourne à droite quand la position x est entre ………. et ……….
On tourne à gauche quand la position x est entre ………. et ……….
5.2 Application avec notre véhicule à chenilles
Maintenant vous allez intégrer la gestion de la télécommande nunchuk à votre programme de gestion
du véhicule à chenilles de telle sorte que celui-ci soit commandé par le joystick de la télécommande
(marche avant, marche arrière, tourner, vitesses proportionnelles à la position du joystick, …). Il peut
être intéressant d'utiliser la fonction Arduino MAP() pour calculer la vitesse en fonction de la position
de la manette.
Etape 1 : différents modes d'action
Il y a 9 modes d'actions possibles suivant la position de la manette : compléter le graphe ci-dessous
Marche Avant
Tourner à droite en avançant
……………………………....
………………….…………...
Tourner à droite (surplace)
………………...…………….
………………….…………...
………………………..
Arrêt
AP2.2 commande robot par arduino_eleves.odt
Page 11 sur 13
Etape 2 : quand lancer ces différents modes d'action ?
Il faut donc savoir laquelle de ces actions on doit faire.
Par exemple : (compléter les conditions)
•Arrêt :
120<joy_x_axis<140 et 120<joy_y_axis<140
•Marche avant : 120<joy_x_axis<140 et joy_y_axis>140
•Tourner à droite en avançant : ………………………………………………
•Tourner à droite (surplace) :
………………………………………………
•…………………………….. : ………………………………………………
•…………………………….. : ………………………………………………
•…………………………….. : ………………………………………………
•…………………………….. : ………………………………………………
•…………………………….. : ………………………………………………
Etape 3 : écriture en langage Arduino
Pour l'arrêt :
ou
if (joy_x_axis>120)
if (joy_x_axis>120 && joy_x_axis<140 && ….)
{
if (joy_x_axis<140)
{
if (joy_y_axis>120)
Remarque : la fonction logique ET est
possible avec Arduino à condition de
l'écrire : &&
{
if (joy_y_axis<140)
{
ARRET
Modifier le programme et essayer. Quand tout fonctionne, Faire valider par le professeur.
Validation professeur :
AP2.2 commande robot par arduino_eleves.odt
Page 12 sur 13
6.
En bonus
Créer les fonctions 'accélération_AV' et 'accélération_AR' (la vitesse part de 0 jusqu'à celle spécifiée)
et les fonctions 'décélération_AV' et 'décélération_AR' (la vitesse part de la vitesse en cours jusqu'à 0).
Vous utiliserez une boucle For et une fonction Delay. Le réglage de la vitesse d'accélération ou de
ralentissement sera réglable (3=lent (environ 5-6sec), 2=plus rapide, 1=rapide, 0=très rapide) et
réalisée grâce à la fonction Delay placée dans la boucle For). Faites les essais et ensuite faites valider
par le professeur.
Validation professeur :
AP2.2 commande robot par arduino_eleves.odt
Page 13 sur 13

Documents pareils