Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
2018/2019
YACINE TAZEROUT
SOMMAIRE
CHAPITRE I................................................................................................................................................2
INTRODUCTION ....................................................................................................................................2
DEFINITION D’UN ROBOT INDUSTRIEL .................................................................................................2
LES DIFFERENTS TYPES DE BRAS MANIPULATEUR ...............................................................................2
DEUX GROUPES ................................................................................................................................3
AXES DE LA ROBOTIQUE ...................................................................................................................3
LES CLASSES ......................................................................................................................................3
CHAINE CINEMATIQUE .....................................................................................................................4
ARCHITECTURE .................................................................................................................................5
DOMAINES D’APPLICATION DES ROBOTS MANIPULATEUR .............................................................. 10
CONSTITUTION D’UN ROBOT MANIPULATEUR ................................................................................. 10
CONCLUSION ..................................................................................................................................... 14
CHAPITRE II ........................................................................................................................................... 15
INTRODUCTION ................................................................................................................................. 15
CONCEPTION MECANIQUE ................................................................................................................ 15
SOLIDWORKS ................................................................................................................................. 15
L’IMPRESSION 3D .......................................................................................................................... 18
LE MONTAGE ................................................................................................................................. 19
REALISATION DE L’APPLICATION ANDROID....................................................................................... 22
MIT APP INVENTOR ....................................................................................................................... 22
REALISATION DE L’APPLICATION ................................................................................................... 22
PARTIE ELECTRONIQUE ..................................................................................................................... 28
ARDUINO ....................................................................................................................................... 28
LE MODULE HC-05 ......................................................................................................................... 29
LES SERVOS MOTEURS .................................................................................................................. 29
SCHEMA GENERAL......................................................................................................................... 32
CONCLUSION ..................................................................................................................................... 32
CHAPITRE III .......................................................................................................................................... 33
INTRODUCTION ................................................................................................................................. 33
EXPLICATION DU CODE ARDUINO ..................................................................................................... 33
PARTIE DECLARATION DES VARIABLE ........................................................................................... 33
PARTIE CONFIGURATION............................................................................................................... 34
PARTIE DE BOUCLE ........................................................................................................................ 35
TEACH MODE ..................................................................................................................................... 39
HACK DES MOTEURS ..................................................................................................................... 39
COMMANDE DES MOTEURS ......................................................................................................... 40
UTILISATION DES BOUTONS .......................................................................................................... 41
SCHEMA GENERAL......................................................................................................................... 41
CONCLUSION ..................................................................................................................................... 42
CHAPITRE II :
CHAPITRE III :
1
Chapitre I
I.1 Introduction :
En grec ancien, automate signifie : « machine imitant les mouvements et les fonctions d’un
corps ». Le terme « robot » quant à lui vient du tchèque « robota » : travail forcé, pour
désigner des ouvriers artificiels. Il apparait en 1924 dans la piece « les robots universels de
Rosseum » de karel Capek, auteur tchèque de nouvelle, de romans, de drames, satires des
travers humains.
Le dictionnaire nous donne plusieurs définitions du mot robot : Dans les œuvres de science-
fiction, machine à l'aspect humain, capable de se mouvoir, d'exécuter des opérations, de
parler. Appareil automatique capable de manipuler des objets ou d'exécuter des opérations
selon un programme fixe, modifiable ou adaptable. Personne qui agit de façon automatique.
De nombreux ouvrages ont déjà donné des informations sur l’origine de la robotique et du
terme robot. Ce mot est tombé dans le sens commun. Pour beaucoup, il s’agit d’une machine
anthropoïde qui, par sa forme, tente de ressembler à un être humain et par ses capteurs
intégrés à son comportement. Depuis plus d’une décennie ces machines, qui existent aussi
sous la forme de jouets donnent une fausse idée sur ce qu’elles sont réellement aujourd’hui,
sur leur développement, tout particulièrement dans le domaine industriel ou elles ont pris leur
essor.
Dans ce premier chapitre, nous allons introduire quelques notions générales relatives aux
robots manipulateurs, notamment leur définition, leur classification, leurs structures, leurs
applications, ensuite, nous présenterons la fonction perception de l’environnement dans la
robotique industriel et les différents capteurs et moteurs utilisés pour l’accomplissement de
cette fonction.
2
I.3.1 Deux groupes :
On peut déjà distinguer en général deux groupes de robots
- Le premier passif, est aveugle, accomplissant son devoir sans recourir aux
informations du monde extérieur, et évolue en boucle ouverte par rapport à son
environnement, une fois la phase d’apprentissage terminé, il reproduit toujours les
mêmes gestes, dans le même ordre, ce sont des manipulateur dépourvus de tout sens.
- Le deuxième actif, est interactif, une fois la phase d’apprentissage termine il
s’adapte suivant les paramètres désirés, et les paramètres de l’environnement, dans le
quelle il évolue en boucle fermée, Ce sont ces machines que l’on peut appeler robots,
c’est le début de l’intelligence artificielle. [2].
3
I.3.4 Chaine cinématique :
Un robot-manipulateur est constitué par deux sous-ensemble distinct, un (ou plusieurs)
organe terminal et une structure mécanique articulée :
- Un organe terminal est tout dispositif destiné à manipuler des objets ou a le
transformer, il permet au robot d’interagir avec son environnement, il peut être
multifonctionnel (plusieurs dispositifs avec fonctionnalité différentes),
monofonctionnel interchangeable, ou multi-bras.
- La structure mécanique articulée amènera l’organe terminal dans une position et
orientation donnée. Son architecture est une chaine cinématique de corps généralement
rigides, assemblés par des articulations. Les chaines peuvent être :
o Structure ouverte simple
4
Les chaines cinématique élémentaires ou simples (au plus deux
liaisons)
I.3.5 Architecture :
En complément au titre précédant, nous pouvons parler d’architecture et de structure plus
détaillé toujours en rapport avec ces les chaines cinématiques.
Dans ce qui suit nous allons voir pour chaque famille de robots manipulateur les différentes
structures existantes. Nous pouvons définir trois grandes classes d’architecture
1. Robot manipulateur sériels (Architecture série ou chaine cinématique ouverte)
La plupart des robots industriels sont de type sériel, et ils ne possèdent généralement
pas plus de six axes articulaires. On distingue dans cinq grandes familles.
a) La structure anthropomorphe
Ces robots possèdent pour la plupart six articulations rotoïdes, la
deuxième et troisième articulations parallèles, induisant un mouvement
de l’outil dans le plan vertical, La première, d’axe verticale décrivant
un arc de cercle lors du mouvement de l’outille dans le plan horizontal.
5
Figure I.6 Structure anthropomorphe Figure I.7 Robot anthropomorphe
b) La structure SCARA
SCARA veut dire « Selective Compliance Assembly Robot Arm ». Ce
sont des manipulateurs sphériques a géométrie spéciale, ces robots sont
précis et rapides, composé de deux articulations rotoïde et une
articulation prismatique, ils sont bien adaptés aux taches de montage
vertical et à la manipulation de montage.
c) La structure Cartésienne
La structure cartésienne offre une très bonne rigidité mécanique et une
grande précision, mais une faible dextérité car elle est composée de
trois articulation prismatiques dont les axes sont typiquement
mutuellement orthogonaux.
6
d) La structure sphérique
La structure du porteur sphérique dont les deux premiers axes rotoïde
sont orthogonaux et le troisième prismatique permet de positionner
l’outil dans un volume accessible sphérique.
e) La structure cylindrique
Afin de le positionner dans un volume cylindrique, le porteur
cylindrique présente quant à lui, un premier axe rotoïde vertical suivi
de deux axes prismatiques orthogonaux en série respectivement
vertical et horizontal. [1]
7
a) La structure planes
Les robot parallèles planes ont surtout été utilisé au niveau de la recherche,
l’organe terminal de ces structures est lié a la base par trois chaines cinématiques
indépendante, chaque une constitué de deux corps rigides liés par une articulation
dont le nombre total est de trois, articulation qui peut être soit rotoïde (R), soit
prismatique (P), dont une motorisée, et pour des raisons de dynamique, elle est
classiquement solidaire de la base du robot de façons a alléger la partie de la
structure en mouvement.
b) La structure Delta
Ce robot pleinement parallèle comprend une base et une plate-forme liée par trois
chaines cinématiques identiques. Chacune comprend une articulation motorisée
solidaire de la base qui met en rotation un bras. Ce bras est lié via une autre
articulation rotoïde passive au petit côté d’un parallélogramme (P) qui est parallèle
à l’axe de l’articulation motorisée. L’autre petit coté du parallélogramme qui peut
ainsi se mouvoir en translation parallèlement a (P) est lié a son tour en son milieu
par une autre articulation rotoïdes passive a la plate-forme mobile portant
l’effecteur. [1]
8
c) La structure Hexapode (plate-forme de Stewart)
Plusieurs formes d'architectures parallèles sont possibles et la plus répandue est la
plate-forme de Gough-Stewart. Il s'agit d'un manipulateur à six degrés de liberté,
dont la plate-forme est déplacée par l'élongation de six actionneurs linéaires. Son
application la plus connue est le simulateur de vol en raison, entre autres, de la
masse élevée de la cabine (jusqu'à 15 000 kg) à laquelle on doit faire subir des
mouvements. Les simulateurs de vol sont utilisés pour l'entraînement des pilotes
au sol
Figure I.19 Structure Hexapode Figure I.20 Robot simulateur de vol type
hexapode
9
I.4 Domaines d’application des robots manipulateur
La robotique permet de réaliser des taches répétitives, pénible, dangereuse et dans des milieux
hostiles, avec précision et fiabilité, dans tout environnement, a des cadences élevées et
continue, tout en palliant au manque de main-d’œuvre, favorisant la haute productivité, et
donnant ainsi à la robotique un fort intérêt humain, technique et économique. Ce qui lui a
permis de se diversifier dans de nombreux domaines d’utilisation qui sont les suivants.
• Domaines industriels
o La transformation de pièces : moulage, usinage, perçage, rectification,
enlèvement de matière
o La préparation de surface : peinture, enduction, projection thermique/plasma,
grenaillage
o L’assemblage : rivetage, vissage, soudage, insertion, collage
o Les manutentions : manipulation de pièces, chargement/déchargement de
machine, positionnement
o La distribution
o La palettisation et le conditionnement
o L’inspection et le test
o Le nettoyage
• Domaine médical
o Opérations
o Diagnostiques
o Radiothérapie
o Prothèses
• Domaine militaire
o Désamorçage
o Déminage
• Autres domaines
o Nucléaire
Manipulation des produits radioactifs
o Spatial
Exploration des planètes
o Sous-marin
Forage
o Musique
Chef d’orchestre
o Dessin
Robographe (imitation de gestes humain)
10
Figure I.21 Constituant d'un bras manipulateur
11
Figure I.23 exemple de liaisons mécanique
2. Des actionneurs qui servent à agir sur la structure mécanique pour changer la
situation de l’organe terminal. (Ensemble de moteurs et de transmissions)
o Moteurs électriques
A aimant permanent
A courant continue
A commande par l’induit
A commutation électronique (sans balais)
Pas à pas
Servo-moteur (Le terme « servo » induit un asservissement)
o Actionneur hydraulique
Vérin hydraulique pour la translation
Moteur hydraulique pour la rotation
o Actionneurs pneumatiques
Usage général pour le manipulateur a cycles (tout ou rien)
12
Vitesse
• Linéaire : tachymètres linéaires, tachymètres linéaires à ondes
• Angulaire : Tachymètres à impulsion, Génératrices
tachymétriques, Gyromètres
Accélération
• Accéléromètre
• Gyroscope
• Magnétomètre
o Capteurs extéroceptifs : recueillent des informations sur l’environnement
Capteur de contact
• Détection de collision, température, texture, relief, forme,
détection de dommages
Capteur sans contact
• Capteur de proximité
• Capteur d’image
• Caméras standards
• Caméras stéréoscopiques
• Caméras panoramiques
S'ajoutent à cela :
L'interface homme-machine à travers laquelle l'utilisateur programme
les tâches que le robot doit exécuter
Le poste de travail, ou l'environnement dans lequel évolue le robot.
13
L’interaction proche avec un robot mobile pouvant servir d’assistant
Interaction sociale, émotive ou cognitive où l’homme et le robot sont
le plus souvent proches
o Interaction physique : la robotique collaborative
I.6 Conclusion :
Nous avons donné dans ce chapitre une vue général sur les bras robotisé en passant par leur
définition, leurs types, catégories, groupes, classes, architectures et leur structure, à savoir les
structures, anthropomorphe, cartésienne, SCARA, sphérique, cylindrique, plane, DELTA, et
hexapode, nous avons cité les domaines d’applications les plus répondue, et décrit sa
constitution, notamment sa structure mécanique ainsi que les différant capteur et actionneur
utilisé dans le domaine des bras robotisé
14
Chapitre 2
II.1 Introduction :
Dans ce chapitre, nous allons nous attaquer à la réalisation d’un bras robotisé, a cinq degrés
de liberté. Nous commencerons par présenter la technologie utilisée, c’est-à-dire les logiciels
utilisé pour la modélisation et l’impression 3D, ainsi que le hardware de commande du bras
Nous allons montrer tout le processus de construction, depuis la conception et l’impression
3D des pièces du robot, la connexion des composants électroniques et la programmation de
l’Arduino, au développement de notre propre application Android pour le contrôle du bras.
La première étape fut de trouver un modèle de bras à modéliser, ensuite de le modéliser sous
le logiciel SolidWorks, de l’exporter, et de l’imprimer avec une imprimante 3D, puis de le
monter, de placer les servos moteurs, et raccorder les fils électriques.
La deuxième étape consiste à se familiariser avec le « MIT App Inventor » pour réaliser
l’application Android, qui envoie les données nécessaires à l’Arduino via Bluetooth.
Pour finir la réalisation du circuit électrique, composé de l’Arduino, du module HC-05, des
servos moteurs, et d’une source d’alimentation.
Pour la réalisation mécanique nous avons opté pour le logicielles SolidWorks qui propose un
système de contrainte mécanique réaliste. Le bras a 5 degrés de liberté, pour les 3premiers
15
axes, la base, l’épaule et le coude, nous avons opté pour le servo MG996R, et pour le poignet
et la pince, nous avons utilisé les micros-servos SG90.
Ci-dessous les vues du bras depuis le SolidWorks.
16
Figure II.4 Vue éclaté du bras
17
II.2.2 Impression 3D :
Une fois le model terminé, il faut exporter le model en fichier STL vers le logiciel de l’imprimante 3D.
L’imprimante utilisée et une « Raise3D pro2 » de ideaMaker, de l’AIP de la FST a l’université de
Lorraine
Nous importons les fichier STL dans le logiciel ideaMaker, puis nous générons le fichier G-CODE
pour l’impression 3D
L’impression des pièces a durée 35h, pour 340g de matière PLA avec une qualité d’impression
standard
18
II.2.3 Le montage :
Le montage est simple, la base est fixée sur une planche en bois, un servo moteur MG996R
est fixé à l’intérieur de la base avec des vis incluses dans l’emballage, ou vient se poser
l’épaule a là vertical, a l’aide d’un boulon a corne ronde fixé avec deux vis.
Un servo moteur MG996R est fixé sur l’épaule et l’avant-bras, les cornets ronds sont attachés
sur le bras principale avec deux vis, qui vient joindre l’épaule et l’avant-bras.
19
A l’intérieur de l’avant-bras est attaché un micros servo avec deux vis, ou vient ce fixé le
poignet qui lui-même contient un micros servo qui sera attaché à la pince du robot, pour la
pince nous avons utilisé des boulons et des écrous pour la monter et un micros servos pour
contrôler son ouverture et fermeture.
20
Une fois le tout assemblé on obtient le résultat suivant
21
II.3 Réalisation de l’application Android :
II.3.1 MIT APP INVENTOR :
App Inventor est une application développée par Google. Elle est actuellement entretenue
par le Massachusetts Institute of Technology (MIT), est un IDE qui permet la création
d’applications destinées à des systèmes Android
Son principal atout est la facilité de développement, même pour des débutants, grâce à une
interface graphique similaire à Scratch. Il se présente sous la forme d’une application en ligne,
accessible depuis le site web d’App Inventor
II.3.2 Réalisation de l’application :
La réalisation de l’application sous AppInventor ce fait divise en deux parties, la partie
Designer, pour le graphique de l’application, et la partie Blocks, pour la programmation de
l’application
Designer : Dans cette partie nous disposons de divers blocks graphiques comme des bouton,
des champs de texte, des images, des sliders, mais aussi des layout qui servent à délimiter les
zones de notre application, des sensors pour exploiter les capteurs du téléphone, et quelques
autres fonctionnalités utiles de multimédia, de GPS, et de communication Bluetooth.
Blocks : Dans la partie blocks nous retrouvons toutes les fonction mathématique, logique, ou
évènementiel, ce rapportant aux objets utilisés dans la partie graphique, ce qui nous permet de
tirer profit d’une simplicité de programmation orienté objet sous la forme de blocks près
programmé, qu’ils ne restent plus qu’a organiser en fonction du programme souhaité.
22
Figure II.17 Partie Blocks de AppInventor
Lorsque ces outilles sont utilisé correctement, nous pouvons réaliser une application simple et
efficace, avec un designe propre, et qui répond à nos besoins. Dans ce qui suit nous allons
expliquer le fonctionnement des blocks de programme, et leur utilité dans le programme
Arduino de control du bras.
1. Pour commencer les blocks permettant de connecter le smartphone au module
Bluetooth
23
Figure II.20 Block Bluetooth 3
• S’il y a une erreur de connexion avec l’appareil, l’état est mis à déconnected
24
2. Ensuite les blocks de contrôle de position et vitesse des servos moteur
• Et on répète cela pour les six curseurs associer aux six servos moteurs
25
• De la même manière on attribue le préfixe « s » suivie de la valeur du curseur, et nous
l’envoyons au programme Arduino
3. Pour finir les blocks de fonctionnalité des boutons SAVE, RUN, et RESET
• Quand le bouton « save » est appuyé, nous envoyons le préfixe « SAVE » à l’Arduino,
et nous incrémentons le nombre de positions sauvegardées
• Quand nous cliquons sur le bouton « run », nous changeons la couleur du bouton et
nous envoyons le préfixe « STOP » ou « RUN » a l’Arduino, et si il est initialement
sur « STOP », le texte est modifié en « RUN », sinon, si il est initialement en
« RUN », le texte est modifié en « STOP ».
26
Figure II.28 Block bouton RESET
27
II.4 Partie électronique :
L’étape suivante consiste à connecter l’électronique, pour ce projet nous aurons besoin d’une
carte Arduino Uno pour la commande, d’un module Bluetooth HC-05 pour la communication
avec le smartphone, et d’une source d’alimentation de 5V.
Dans ce qui suit, nous allons décrire le matériel utilisé, et montrer comment nous pouvons
associer les différent composant en eux.
II.4.1 Arduino :
La carte Arduino UNO est un microcontrôleur ATmega328 programmable permettant de faire
fonctionner des composants (moteur, LED…). Elle possède des « ports » permettant par
exemple de se connecter à un ordinateur ou de s’alimenter.
Peut être alimentée via la connexion USB ou avec une alimentation externe. La source
d'alimentation est automatiquement sélectionnée. Une alimentation externe peut provenir soit
d'un adaptateur AC-DC ou d’une batterie. L'adaptateur peut être connecté en branchant une
prise 2.1mm dans la prise d'alimentation de la carte ou à partir d'une batterie connectée dans
le pin (ou broche) GND et V-in (alimentation externe). Le processeur peut fonctionner sur
une alimentation externe de 6 à 20 volts. Cependant, si la tension est inférieure à 7V, le pin
5V peut fournir moins de cinq volts et le processeur peut devenir instable. Si la tension est
supérieure à 12V, le régulateur de tension peut surchauffer et endommager la carte. La plage
recommandée est de 7 à 12 volts.[5]
28
II.4.2 Le module HC-05 :
Le module HC-05 est un module Bluetooth SPP (Serial Port Protocol), ce qui signifie qu'il
communique avec l'Arduino via la communication série.
Le peut être alimenté de 3,6 à 6 volts, car il vient sur une carte de dérivation contenant un
régulateur de tension. Cependant, le niveau de tension logique des broches de données est de
3,3V. Ainsi, la ligne entre le Arduino TX (broche de transmission, qui a une sortie 5V) et le
module Bluetooth RX (broche de réception, qui supporte seulement 3,3V) doit être connectée
via un diviseur de tension afin de ne pas graver le module. D'autre part, la ligne entre la
broche TX du module Bluetooth et la broche Arduino RX peut être connectée directement car
le signal 3,3 V du module Bluetooth est suffisant pour être accepté comme une logique haute
sur la carte Arduino
II.4.3 Les servos moteurs :
II.4.3.1 Vue d’ensemble :
Il existe de nombreux types de servomoteurs et leur principale caractéristique est la possibilité
de contrôler avec précision la position de leur arbre. Un servo-moteur est un système en
boucle fermée qui utilise un retour d'information pour contrôler son mouvement et sa position
finale
29
Dans les servomoteurs de type industriel, le capteur de retour de position est généralement un
codeur de haute précision, tandis que dans les servos RC ou passe-temps plus petits, le capteur
de position est généralement un simple potentiomètre. La position réelle capturée par ces
dispositifs est renvoyée au détecteur d'erreur où elle est comparée à la position cible. Ensuite,
en fonction de l'erreur, le contrôleur corrige la position réelle du moteur pour qu'elle
corresponde à la position cible
Le potentiomètre est fixé sur le pignon final ou sur l’arbre de sortie. Ainsi, lorsque le moteur
tourne, le potentiomètre tourne également, produisant ainsi une tension liée à l’angle absolu
de l’arbre de sortie. Dans le circuit de commande, cette tension de potentiomètre est comparée
à la tension provenant de la ligne de signal. Si nécessaire, le contrôleur active un pont en H
intégré qui permet au moteur de tourner dans un sens ou dans l'autre jusqu'à ce que les deux
signaux atteignent une différence de zéro.
Un servomoteur est contrôlé en envoyant une série d'impulsions à travers la ligne de signal.
La fréquence du signal de commande doit être de 50Hz ou une impulsion doit avoir lieu
toutes les 20 ms. La largeur de l'impulsion détermine la position angulaire du servo et ce type
de servo peut généralement pivoter à 180 degrés (ils ont une limite physique de déplacement)
30
Figure II.34 Contrôle en PWM
Nous devons simplement connecter la broche de contrôle du servo à une broche numérique de
la carte Arduino, connecter la terre et les fils positifs à l’alimentation externe 5 V, et
également connecter la terre Arduino à la masse du servo
31
II.4.4 Schéma général :
Donc pour résumer nous utiliserons 3 servos MG966R, 3 micro servo SG90, un module
Bluetooth HC-05, une carte Arduino Uno, , le tout connecté a notre application Android pour
le contrôle. Ci-dessous le schéma électrique complet.
II.5 Conclusion :
Dans ce chapitre nous avons fait le tour de la conception de notre bras robotisé, en passant par
la modélisation, impression et conception mécanique de notre bras, la création d’une
application Android pour le contrôle de ce dernier, et la réalisation du circuit électronique
pour la commande du robot, nous avons aussi fait un bref rappelle sur les composants de ce
circuit et la méthode de contrôle des servo moteur, notamment de la commande par PWM.
Dans le prochain chapitre nous aborderons l’algorithme de commande du bras avec Arduino
via l’application Android.
32
Chapitre 3
III.1 Introduction :
Dans ce chapitre nous allons aborder la programmation de notre Arduino Uno, pour la
commande de notre bras avec l’application mobil vue précédemment.
Nous verrons les bibliothèques utilisées, les fonctions essentielles au control des servos
moteurs, et a la connexion Bluetooth, ainsi que la méthode de communication utilisée pour
interpréter les données de l’application en commande compréhensible pour l’Arduino.
Le logiciel Arduino est un IDE open source et gratuit, qui permet d’éditer un programme : des
croquis (sketch en Anglais), de compiler ce programme dans le langage « machine » de
l’Arduino, de téléverser le programme dans la mémoire de l’Arduino, et
de communiquer avec la carte Arduino grâce au terminal.
33
Figure III.2 Partie d'déclaration des variables
• « initBroches ()» ne prend pas de paramètre, et qui attache chaque servo du tableau
servo, au broches du tableau broches, a l’aide de la fonction attach()
• « positionInitiale() » ne prend pas de paramètre, et qui d’une part copie les position
initiale du tableau pi[] dans le tableau _ps[] des positions précédentes, et d’autre part
place les servos moteurs dans la position souhaitée grâce à la fonction write()
34
Sans oublier l’initialisation du module Bluetooth voici ce que l’on obtient :
o La variable Data recoit les données du smartphone sous forme d’une chaine de
caractère de la forme « num+deg » le num est un préfix désignant le numéro
du servo moteur à contrôler, et deg, le degré souhaité provenant de la position
du slider de l’application
35
Figure III.6 Fonction rotation()
36
• Pour la fonction Run(), associé au bouton RUN de l’application
• En appuyant sur le bouton RUN, l’application envoie le préfix ‘RUN’
• Toujours avec la fonction statsWith(), nous vérifions le contenue du préfix, si il
correspond nous exécutons la fonction
• La fonction Run() lis les position contenu dans le tableau pos[i][p], et déplace les
moteur avec une vitesse v
• Elle écoute aussi la réception des Data, ‘RESET’ du bouton RESET, et ‘STOP’ du
bouton RUN/STOP, pour dans l’ordre, arrêter (avec la fonction Reset()), ou mètre en
pause la fonction jusqu’à réappuyer sur le bouton RUN
• Pour finir elle permet de modifier la vitesse de déplacement à la réception de Data ‘vi’
37
• Pour la fonction Reset(), associé au bouton RESET de l’application
• En appuyant sur le bouton RESET, l’application envoie le préfix ‘RESET’
• Toujours avec la fonction statsWith(), nous vérifions le contenue du préfix, si il
correspond nous exécutons la fonction
38
III.4 Teach mode :
Pour aller plus loin sur le contrôle de notre robot, nous avons décider de lui inclure un mode
d’apprentissage manuel en contact direct avec l’opérateur ; pour ce faire nous avons besoin de
récupérer la position des moteurs a chaque position, de les enregistrer dans un tableau, pour
les réexécuter.
III.4.1 Hack des moteurs :
• Le problème est que les moteurs à notre disposition ne nous permettent pas de
récupérer la position des moteurs, pour résoudre ce problème, nous avons trouvé une
astuce. Souder un fil à la sortie du potentiomètre des moteurs pour récupérer la valeur
analogique de ce dernier en feedback.
39
III.4.2 Commande des moteurs :
• Maintenant nous pouvant récupérer les valeurs des potentiomètres des moteurs, en les
branchant aux entrées analogiques de l’Arduino.
• Un autre problème apparait, les valeurs lues sont limitées a moins de 300 pas, cela est
dut à la tension de référence du CAN de l’Arduino, pour remédier a cela, nous
pouvons réduire la tension de référence, avec un diviseur de tension, à l’aide d’un
potentiomètre relier entre le GND, le +5V, et le A-REF de l’Arduino, comme le
montre le schéma ci-dessous.
• En jouant sur la valeur du potentiomètre, nous avons pu passer de 300 à plus ou moins
700 pas, ce qui a doublé la précision de positionnement de nos moteurs.
• Pour finir nous dressons un tableau de valeurs max et min des degrés limites des
moteurs, associer à la valeur que retourne le potentiomètre interne de ces derniers.
Analogue Max Analogue Min Degré Max Degré Min
Base 990 249 180 0
Epaule 1014 365 180 20
Coude 1015 260 180 0
Poigné latéral 995 250 180 0
Poigné frontal 896 190 180 0
Pince 977 750 180 105
Les valeurs suivante nous servirons a lire la positions des moteurs par analogie avec la
fonction map(valeur analogique, Analogue Min, Analogue Max, Degré Min, Degré Max), qui
prend une valeur d’entré, et pour une plage précise, retourne une nouvelle valeur, dans une
plage voulue, en d’autre terme elle convertira la valeur du potentiomètre en degré, qui
correspond à la position du moteur.
40
III.4.3 Utilisation des boutons :
Pour contrôler notre bras, cette fois nous avons opté pour des boutons poussoir. Nous
utiliserons quatre boutons, pour chaque partie du Teach mode, c’est-à-dire
1. Détacher les moteurs
2. Enregistrer la position des moteurs à partir des potentiomètres
3. Lancer le mouvement du robot
4. Réinitialiser le tableau de position
Les boutons devront être brancher sur l’Arduino en utilisant des résistances de pull-down de
10k Ohm, comme le montre le schéma ci-dessous.
Si le poussoir est baissé, le courant va du +5V au pin de l'Arduino. Il ne prendra pas le chemin
du GND car la résistance lui demande un effort. Le pin de l'Arduino recevra du +5V et
indiquera HIGH (ou 1). Si le poussoir est levé, donc le circuit ouvert, le très faible courant
résiduel qui sortira du pin de l'Arduino sera absorbé par le GND, le pin sera donc bien en
LOW (ou 0).
III.4.4 Schéma général :
Pour finir nous allons expliquer rapidement l’algorithme utilisé, le code sera disponible en
Annex
• D’abord déclarer la référence analogique en « EXTERNAL » (pin A-Ref), pour
modifier la tension de référence du CAN d l’Arduino
• Initialiser les diffère bouton en Boolean, et les affecter à leurs pins respectifs
• Affecter pour chaque bouton en position HIGH la fonction adéquate, c’est-à-dire :
o Detacher () : qui détache tous les moteurs de leurs pins pour permettre de les
mouvoir manuellement
o Lecture () : lis la valeur du potentiomètre interne de chaque moteur, le
convertie en degré avec la fonction map(), et l’enregistre dans un tableau de
position.
o Commancer () : attache tous les moteurs a leur pin, puis parcoure le tableau
de position, et positionne les moteur du bras en fonctions de ce dernier.
41
Enfin voici le schéma électrique final, regroupant les moteurs, les boutant, et le module
Bluetooth de notre montage.
III.5 Conclusion :
Dans ce chapitre nous avons expliqué le code servant à contrôler le bras via Bluetooth, avec
une application Android, ou nous avons fait le lien avec les données transmise par
l’application, et leur interprétation dans le code Arduino.
Pour aller plus loin, nous avons ajouter à notre bras un mode d’apprentissage a contacte direct
avec l’opérateur, commandé par des boutons poussoir, et avons vue, et expliqué les grandes
lignes de son code.
42
43
Conclusion Général
Lors de ce projet intitulé « Commande d’un bras robotisé avec application Android via
Bluetooth », nous avons dans un premier temps, dans le premier chapitre, introduit quelques
notions générales relatives aux robots manipulateurs, notamment leur définition, leur
classification, leurs structures, à savoir les structures, anthropomorphe, cartésienne, SCARA,
sphérique, cylindrique, plane, DELTA, et hexapode, ainsi que leurs domaines d’application,
en finissant par les différents capteurs et actionneurs dans le domaine.
Le second chapitre nous somme entré dans le vif du sujet, nous avons vue, la modélisation,
l’impression, la conception et le montage mécanique de notre bras, la création d’une
application Android, et la réalisation du circuit électronique composé d’un Arduino, de six
servo moteur, et d’un module Bluetooth
Enfin, dans le dernier chapitre, nous avons fais le lien entre l’application Android et
l’électronique, via Bluetooth, avec un code simple et efficace, tout en expliquant les
bibliothèques, et les fonctions utilisé. Nous avons finis en ajouton un mode Teach ; un mode
de commande a contacte direct entre le robot et l’opérateur.
44
BIBLIOGRAPHIE
[1] Patrick Maurine, Jean-François Quinet. (2013). L’étalonnage des robots manipulateurs industriels
(Hermes Science publications). Paris/France.
[2] Charles BOP. (2010). Traité de robotique 1 « Les architectures ». (Edition ellipses). Paris/France.
[3] Wisama Khalil, Etienne Dombre. (1999). Modélisation identification et commande des robots.
(Hermes Science publications). Paris/France.
[4] Laboratoire de robotique, Université Laval, Pavillon Adrien Pouliot [Introduction aux mécanismes
parallèles], Récupéré le 10/02/2019 sur https://robot.gmc.ulaval.ca/recherche/theme-de-
recherche/mecanismes-paralleles/introduction-aux-mecanismes-paralleles/ .
[5] Le grand livre d'Arduino, Patrick Chantereau et Erik Bartmann, éd. Eyrolles, 2014
45
ANNEXE
46
#include <Servo.h>
void setup()
{
initBroches(); // fonction d'initialisation des broches
Serial.begin(9600); // débit en bauds par défaut du module
Bluetooth
Serial.setTimeout(50);
delay(20); // retard pour eviter les erreur
initPositionInitiale(); // fonction d'initialisation des
position des servos
analogReference(EXTERNAL);
pinMode(pin9,INPUT);
pinMode(pin10,INPUT);
pinMode(pin11,INPUT);
pinMode(pin12,INPUT);
}
void loop()
{
boolean bD=digitalRead(pin9);
boolean bL=digitalRead(pin10);
boolean bC=digitalRead(pin11);
boolean bS=digitalRead(pin12);
if(bD==1) detacher();
else if(bL==1) lecture();
else if(bC==1) commancer();
else if(bS==1) effacer();
void initBroches()
{
for(int i=0;i<6;i++)
{
servo[i].attach(broches[i]);
}
}
void initPositionInitiale()
{
for(int i=0;i<6;i++)
{
_ps[i]=pi[i];
servo[i].write(_ps[i]);
}
}
void Save()
{
for(int i=0;i<6;i++) // boucle pour parcourire tous les
servos moteurs
{
pos[i][p] = _ps[i]; // sauvegarde de la positions dans le
tableu
}
p++; // incrementations de l'indice
}
void Run()
{
while(Data!="RESET") // Répétez l'opération jusqu'à ce que
vous appuyiez sur le bouton "RESET"
{
for(int j=0;j<=p-2;j++) // Exécute toutes les étapes
(index)
{
//////////////////////////////////////////////////////////////
/////////////////
if(Serial.available()>0) // Vérifier les données entrantes
{
Data = Serial.readString();
///////////////////////////////// si STOP est appuyé
if(Data=="STOP")
{
while(Data!="RUN") // Attendre d'appuyier de nouveau
sur "RUN"
{
if(Serial.available()>0)
{
Data = Serial.readString();
if(Data=="RESET") break;
}
}
}
///////////////////////////////// si la vitesse est
modifiée
if(Data.startsWith("vi")) v = Data.substring(2,
Data.length()).toInt(); // Changer la vitesse du servo
}
///////////////////////////////////// Pour chaque moteur
du tableau servo, deplacer les moteur en fonction
///////////////////////////////////// des positions
sauvegardées
for(int i=0;i<6;i++)
{
if(pos[i][j]>pos[i][j+1])
{
for(int k = pos[i][j];k>=pos[i][j+1];k--)
{
servo[i].write(k);
delay(v);
}
}
else if(pos[i][j]<pos[i][j+1])
{
for(int k = pos[i][j];k<=pos[i][j+1];k++)
{
servo[i].write(k);
delay(v);
}
}
else{}
}
}
}
}
void Reset()
{
memset(pos,0,sizeof(pos)); // Effacer les données du tableau
p=0;
}
void detacher()
{
effacer();
for(int i=0;i<6;i++)
{
servo[i].detach();
}
}
void lecture()
{
val0=analogRead(A0);
pos[0][p]=map(val0,249,990,0,180);
val1=analogRead(A1);
pos[1][p]=map(val1,365,1014,20,180);
val2=analogRead(A2);
pos[2][p]=map(val2,260,1015,0,180);
val3=analogRead(A3);
pos[3][p]=map(val3,250,995,0,180);
val4=analogRead(A4);
pos[4][p]=map(val4,190,896,0,180);
val5=analogRead(A5);
pos[5][p]=map(val5,977,750,105,180);
for(int i=0;i<6;i++)
{
Serial.println(post[i][p]);
}
t++;
}
void commancer()
{
for(int i=0;i<6;i++)
{
servo[i].attach(broches[i]);
}
for(int j=0;j<p-1;j++)
{
for(int i=0;i<6;i++)
{
if(post[i][j]>post[i][j+1])
{
for(int k = post[i][j];k>=post[i][j+1];k--)
{
servo[i].write(k);
delay(v);
}
}
else if(post[i][j]<post[i][j+1])
{
for(int k = post[i][j];k<=post[i][j+1];k++)
{
servo[i].write(k);
delay(v);
}
}
else{}
}
}
}
void effacer()
{
memset(post,0,sizeof(post));
t=0;
}