Conception Et Realisation Dun Robot Mobi PDF
Conception Et Realisation Dun Robot Mobi PDF
Conception Et Realisation Dun Robot Mobi PDF
FACULTE DE TECHNOLOGIE
DEPARTEMENT D'ELECTRONIQUE
MEMOIRE DE MASTER
Présenté par : 1-TAKHI Hocine
2-ATTACHI Redouane Cherif
DOMAINE : Sciences et Technologies
FILIERE : Electronique
OPTION : Instrumentation
Thème
Jury de soutenance :
Promotion : 2014-2015
Remerciment
En préambule à ce mémoire, nous souhaitons adresser nos remerciements les plus sincères aux
personnes qui nous ont apporté leur aide et qui ont contribué à l'élaboration de ce mémoire ainsi
qu’à la réussite de cette formidable année universitaire.
Nous tenons à remercier sincèrement Monsieur BIRANE Abdelkader et MERAH Lehcene qui, en
tant que encadreur et co-encadreur de mémoire, s'est toujours montré à l'écoutent et très disponibles
tout au long de la réalisation de ce mémoire, ainsi pour l'inspiration, l'aide et le temps qu'ils a bien
voulus nous consacrer et sans qui ce mémoire n'aurait jamais vu le jour.
Nous tenons à exprimer nos reconnaissances envers monsieur Hamdi Abdelwaheb qui nous ont
donné le meilleur de lui même en contribuant à augmenter notre savoir durant nos études.
Nous exprimons nos gratitudes à tous les consultants et internautes rencontrés lors des recherches
effectuées et qui ont accepté de répondre à mes questions avec gentillesse.
Sans oublie nos parents pour leur contribution, leur soutien et leur patience.
Enfin, nous adressons nos plus sincères remerciements à tous nos proches et amis, qui nous ont
toujours soutenue et encouragée au cours de la réalisation de ce mémoire.
-Mes très chers parents pour leur soutien infaillible durant toutes mes années d’études.
-Mes chers : Lahrache Abdelkader, Lahrache Allal, Ghilane Mohamed, Goual Ibrahim, Daoudi
youssef et Nouar djeloul
T. Hocine
-Mes très chers parents pour leur soutien infaillible durant toutes mes années d’études.
A.Redouane
ملخص
إن الهدف من هذا العمل هو تصميم آلة متحركة على ثالث عجالت يتم توصيلها ببطاقة إلكترونية "اردوينو" و التحكم بها بتطوير برنامج
."اردوينو" على مستوى الحاسوب مهمة هذه اآللة هي تحديد منبع نار ما و إطفائها
Résumé
Ce projet concerne la conception, la réalisation et la commande d’un robot mobile à trois roues a
l’aide d'une carte électronique" Arduino" adapté pour pouvoir la relier au robot après avoir développé le
programme en logiciel Arduino ,son rôle est de détecter une source de flamme quelconque et l'éteindre.
Abstract
This project involves the design, implementation and controlling of a mobile robot with three
wheels with an electronic card "Arduino" adapted to be able to connect to the robot after developing the
program in Arduino software, its role is to detect any source of flame and extinguish it.
(http://ichbiah.online.fr/extraits/robots/histoire-des-robots.htm)
I
Figure1.19 : Robot de type unicycle (Belkhadria Khemisti, "commande d’un robot mobile par
réseaux de neurones artificiels" Mémoire en vue de l’obtention du diplôme de magister en
électronique. Option : Robotique. Université El Hadj Lakhdar Batna)
Figure1.20 : Robot de type tricycle (Belkhadria Khemisti, "commande d’un robot mobile par
réseaux de neurones artificiels" Mémoire en vue de l’obtention du diplôme de magister en
électronique. Option : Robotique. Université El Hadj Lakhdar Batna)
Figure1.21 : Robot de type voiture (Belkhadria Khemisti, "commande d’un robot mobile par
réseaux de neurones artificiels" Mémoire en vue de l’obtention du diplôme de magister en
électronique. Option : Robotique. Université El Hadj Lakhdar Batna)
Figure1.22 : Robot de type omnidirectionnel (Belkhadria Khemisti, "commande d’un robot mobile
par réseaux de neurones artificiels" Mémoire en vue de l’obtention du diplôme de magister en
électronique. Option : Robotique. Université El Hadj Lakhdar Batna)
Figure 2.1 : Les différents étages d’un system automatisé (Sensors and Actuators: Control System
Instrumentation)
Figure 2.3 : Schéma d'un capteur composite (Les capteurs en instrumentation industrielle (par
Georges Asch))
Figure 2.4 : Quelque effet physique d’un capteur actif : a) thermoélectrique, b) pyroélectrique, c)
piézoélectrique, d) indiction électromagnétique, e) photoélectricité, f) effet Hall (Les capteurs en
instrumentation industrielle (par Georges Asch))
Figure 2.6 : La sensibilité d’un capteur (Sensor Technologies: Healthcare, Wellness and
Environmental Applications (Par Michael J. McGrath,Cliodhna Ni Scanaill))
Figure 2.7: hystérésis d’un capteur (Resistive, Capacitive, Inductive, and Magnetic Sensor
Technologies (Par Winncy Y. Du))
II
Figure 2.13 Principe de la commande de vitesse en boucle fermée
III
Figure 3.3 : Signal analogique par la technique PWM ([35])
IV
Figure 4.9 : La valeur de capteur de précision en fonction de distance
V
Liste des tableaux
Liste des tableaux
Tableau 1.1 Les avantages et des inconvénients des différents types de robots à roues
Tableau 2.2 : L’influence des mesurande sur les propriétés électriques de matériaux.
VI
Introduction générale
Introduction général
L'homme a toujours souhaité se libérer du travail dans ce qu'il a d'astreignant, de fatiguant,
d’inintéressant. Les progrès qu'on connue les technologies depuis un demis siècle sont a même de
répondre en bonne parti à son désir par l'intermédiaire de deux outils générique: l'ordinateur pour
les travaux mentaux et le robot pour les travaux physiques. Le premier a pris une certaine avance
sur le second grâce à la découverte des semi-conducteurs, ces matériaux solides qui peuvent trier
des informations sans mobilité mécanique. Le second est toujours tributaire de la vieille mécanique
aux pièces fragiles et mobiles et au cout significatif.
Malgré son aspect récent, la robotique tire ses origines des civilisations les plus antiques. Il est
peut être même vrai que toutes les autres sciences ont existé juste pour permettre à la robotique de
se développer afin d’aider l’Homme à créer ce « esclave » qui appliquera ses ordres au doigt et à
l’œil et qui le libérera à jamais du travail.
L’objectif principal de notre travail est de réaliser un robot mobile on utilisant une carte
électronique Arduino. La tache principale du robot est de détecter et éteindre la flamme même il
peut éviter les obstacles et le forage.
Le premier chapitre présente certaines généralités concernant la robotique et les différents types des
robots et robots mobiles.
Le second chapitre introduit quelques composants du robot comme les capteurs, les actionneurs et
d’autres concepts liés à leurs utilisations.
1
Chapitre 1 :
Généralité sur les robots
1. Introduction
Les robots aujourd'hui ont un impact considérable sur de nombreux aspects de la vie moderne, de
la fabrication industrielle aux soins de santé, le transport et l'exploration de l'espace et le profond de
la mer. Demain, des robots seront aussi omniprésents et personnelle comme les ordinateurs
personnels.
Le rêve de créer des machines qui sont qualifiés et intelligentes a fait partie de l'humanité depuis
le début du temps. Ce rêve est en train de devenir une partie de la réalité de notre monde. [4]
Quand les chercheurs ont commencé à réfléchir sur la conception de robots, on appelait
« robotique » la science des robots et/ou l'art de concevoir et fabriquer des robots. Les succès des
robots industriels, qui travaillaient initialement en poste isolé et qui ont été intégrés à des chaînes de
production comme des machines parmi d'autres, ont conduit le public à élargir le sens du terme
« robotique » et à le rendre désormais presque synonyme d'automatisation. Le correspondant de
robotique devrait naturellement être « automatique » mais ce n'est pas le cas dans le langage
courant. Pour compenser ce hiatus se sont créés le mot « robotisation » et le verbe « robotiser » pour
désigner la plupart des automatisations et leur mise en œuvre, même en l'absence de véritables
robots. Dans certains champs d'applications, des mots calqués sur robotique sont apparus. Il en est
ainsi de « domotique » qui désigne tout ce qui concerne l'automatisation dans l'habitat ou
« productique » pour tout ce qui a trait aux moyens de production. [1]
Aujourd'hui, la robotique est donc l'art d'automatiser des systèmes plus ou moins complexes mais
en s'appuyant sur le savoir-faire acquis par les études sur la conception de robots, savoir-faire issu
des développements d'une branche de l'automatique générale. [2]
En effet, on constate a posteriori que la structure d'une machine ou d'un système n'a pas besoin
d'adopter la forme physique de ce qu'on appelle généralement robot pour que son contrôle adopte
les mêmes composants que ces machines, à savoir : des capteurs internes pour la régulation, des
capteurs externes pour connaître l'environnement, des moyens d'action motorisés, ainsi qu'une
informatique de commande pouvant faire appel à la programmation et aux techniques de
l'intelligence artificielle. Tous ces composants et leurs actions peuvent être distribués dans l'espace
au lieu d'être rassemblés ou de provenir d'une seule structure. Par ailleurs, une collaboration de
divers ensembles est possible aboutissant donc à un système robotisé.
2
L'origine des masques et statues animés remonte à l'Egypte ancienne où l'on a recensé un masque
à l'effigie de Thot (tête d'Ibis) ou d'Horus (tête de faucon) qui pareillement semblent doués de
mouvement. Ce qui caractérise ces divers artefacts, c'est que l'automatisme y est caché, mis à profit
par des castes religieuses pour assurer leur pouvoir sur le peuple comme sur les souverains. [3]
L’horloge
C'est en 246 avant J.C. que nous trouvons la trace du premier inventeur d'envergure, un dénommé
Ctésibios qui habite la ville d'Alexandrie. Ctésibios est parvenu à créer une horloge si précise que
son cadran fait exactement un tour par année solaire ! Pour la première fois, il existe une parfaite
concordance entre un instrument de mesure humain et un phénomène issu du monde physique
extérieur. [3]
Les arabes sont les premiers à mettre en pratique à une grande échelle les techniques décrites par
le mathématicien et mécanicien grec Héron d'Alexandrie (et aussi par Phylon de Byzance). Dès
809, Charlemagne reçoit de la part du sultan Haroun Al Rachid un automate mécanique. [3]
Puis, lors des huit expéditions en Orient menées à l'occasion des Croisades - de 1096 à 1291 - les
européens découvrent de visu l'étonnant raffinement des horloges à eau réalisées par Al Jazari pour
le compte de ce même Haroun Al Rachid.
Pour obtenir un écoulement constant de l'eau, Al Jazari a développé un système d'une rare
ingéniosité, inspiré d'un système inventé par Archimède. La plus grande de ses horloges mesure 3,3
mètres de hauteur et 1,35 mètre de largeur. [3]
3
Figure 1.2 L’automate d’Al Jazari
Le 18ème siècle apparaît comme l'âge d'or des automates. L'un des grands inventeurs d'engins
mécaniques de l'époque est le protégé du roi Louis XV, Jacques de Vaucanson (1709 - 1792). Il
développe un " canard mécanique " qui force l'admiration. Celui ci " allonge le cou pour aller
prendre le grain dans la main, l'avale, le digère " Après avoir transformé l'aliment en bouillie, il le
rejette par les voies ordinaires, pleinement digéré. Les créations que réalise Vaucanson tel le joueur
de flûte qui exécute onze airs différents et aussi celle de ses disciples séduisent l'Europe entière et
s'exportent aux Etats-Unis. [3]
La mode veut que l'on s'habille à la chinoise, avec des tenues de soie bardées de motifs complexes.
Pour les tisserands lyonnais, la réalisation de telles étoffes représente un casse-tête de taille.
Basile Bouchon se penche sur le problème, et il a réussi de développé une machine à tisser dont
son mécanisme utilise une bande de papier perforé pour contrôler le passage des aiguilles dans le
tissu. Ce procédé mis au point en 1729 est automatisé par Vaucanson en 1745.
Le tisserand Joseph-Marie Jacquard a ensuite l'idée de séparer les cartes perforées portant le
modèle à réaliser, de la machine elle-même.
4
Produit en milliers d'exemplaires, le métier à tisser Jacquard qu'il inaugure en 1801 devient la
première machine automatisant le traitement de l'information et opérant une distinction entre la
machine et le programme qu'elle utilise. Il ouvre ainsi la voie aux ordinateurs et robots capables
d'opérer par eux-mêmes. [3]
Niels Bohr a décrit dans ses travaux publiés vers 1913 que l'électron peut déplacer d'un atome à
l'autre une vitesse vertigineuse. D'où l'idée de créer des circuits exploitant cette incroyable mobilité.
En 1937, Turing énonce les principes d'une machine qui calculerait à la vitesse de l'électronique, et
serait donc capable de traiter d'énormes volumes d'informations codées sous la forme booléenne (0
et 1).L'arrivée des ordinateurs est appelée à jouer un rôle majeur dans l'élaboration des machines
intelligentes que sont les robots.
Sous l'impulsion de Turing, un premier ordinateur apparaît en 1943. Sa puissance de calcul est
mise à contribution dans la guerre et joue un rôle décisif en facilitant le décryptage du code Enigma
mis au point par les nazis pour leurs échanges de messages. [3]
C'est en Lorraine en 1954, à Argonne qu'un chercheur du nom de Raymond Goertz a l'idée de
rationaliser les bras de télé-opération en assujettissant leurs articulations à des moteurs électriques.
Grâce à un tel système, l'opérateur peut désormais se trouver à plusieurs centaines de mètres du lieu
5
où il manipule des éléments dangereux : les commandes qu'il transmet à la pince sont transmises
par les fils électriques. [3]
3. Définition
Écrivain tchèque, Karel Capek, dans son drame, introduit le mot robot au monde en 1921. Il est
dérivé du mot tchèque robota qui signifie "travailleur forcé". Isaac Asimov l'écrivain russe de la
science-fiction, a inventé le mot robotique dans son histoire "Habillage", publié en 1942, pour
désigner la science consacrée à l'étude des robots. [5]
Avant définir qu'est ce qu'un robot nous citerons les trois lois qui ont été développés par Isaac
Asimov, et qui sont régissant le comportement d'un robot
Un robot ne peut blesser un humain ni, par son inaction, permettre qu’un humain soit blessé.
Un robot doit obéir aux ordres donnés par les humains, sauf si de tels ordres se trouvent en
contradiction avec la première loi.
Un robot doit protéger sa propre existence aussi longtemps qu’une telle protection n’est pas
en contradiction ni avec la première et/ou ni avec la deuxième loi. [6]
Le robot
C'est une machine pouvant manipuler des objets en réalisant des mouvements variés dictés par un
programme aisément modifiable.
Programmer un robot consiste, dans ut premier temps, à lui spécifier la séquence des
mouvements qu'il devra réaliser.
Certains robots sont dotés de "sens" ; c'est-à-dire d'un ensemble plus ou moins important
d'instruments de mesure et d'appréciation caméra, thermomètre, télémètre, ...) permettant au
programme du robot de décider du mouvement le mieux adapté aux conditions extérieures. Par
exemple: si un robot mobile muni d'une caméra ut amené à se déplacer dans un local inconnu, on
peut le programmer pour qu'il contourne tout obstacle qui entraverait sa route.
On essaie également de doter des robots d'un dispositif d'intelligence artificielle afin qu’ils
puissent faire face a des situations imprévues et nouvelles (le robot pourrait acquérir une certaine
"expérience").
6
4. Les composants de Robots
Un robot, en tant que système, se compose des éléments, qui sont intégrés ensemble pour former
un ensemble. La plus par des robots contient les éléments suivants:
4.1. Manipulateur: c’est le corps principal du robot qui comprend les jonctions, les articulations, et
d'autres éléments de structure du robot. Il convient de noter ici que le manipulateur seul n’est pas un
robot. [11]
4.2. Effecteur finale: cette partie est reliée à la dernière jonction (main) d'un manipulateur qui gère
généralement les objets, établit des connexions à d'autres machines ou effectue les tâches requises.
[11]
4.3. Actionneurs: les actionneurs sont les «muscles» de manipulateurs. Le contrôleur envoie des
signaux aux actionneurs, qui, à son tour, déplacent les articulations du robot et des jonctions, les
types communs des actionneurs sont les servomoteurs, les moteurs pas à pas, les actionneurs
pneumatiques et les vérins hydrauliques. Les actionneurs sont sous le contrôle du contrôleur. [11]
4.4. Capteurs: les capteurs sont utilisés pour recueillir des informations sur l'état interne du robot
ou pour communiquer avec l'environnement extérieur. Comme chez l'humain, le dispositif de
commande de robot doit connaître l'emplacement de chaque lien du robot afin de connaître la
configuration du robot. Toujours comme vos principaux sens de la vue, le toucher, l'ouïe, le goût, et
7
la parole, les robots sont équipés de dispositifs sensoriels externes comme un système de vision, le
toucher et les capteurs tactiles, synthétiseur de parole, et grâce à eux le robot peut communiquer
avec le monde extérieur. [11]
4.5. Contrôleur: le contrôleur est plutôt proche de votre cervelet; même si elle n'a pas la puissance
du cerveau; il contrôle toujours vos mouvements. Le contrôleur reçoit les données de l'ordinateur (le
cerveau du système), commande les mouvements des actionneurs, et coordonne les mouvements
avec les informations envoyées par les capteurs.
4.6. Processeur: le processeur est le cerveau du robot. Il calcule les mouvements des articulations
du robot, détermine combien et à quelle vitesse chaque joint doit se déplacer pour atteindre
l'emplacement et la vitesse souhaitée, et supervise les actions coordonnées du contrôleur et les
capteurs. Dans certains systèmes, le contrôleur et le processeur sont intégrés ensemble en une seule
unité, et dans d'autres cas, ce sont des unités séparées. [11]
4.7. Logiciel: trois groupes de logiciels sont utilisés dans un robot. L'un est le système
d'exploitation qui exploite le processeur. Le second est le logiciel robotique qui calcule la motion
nécessaire de chaque joint du robot basée sur des équations cinématiques. Ces informations sont
envoyées au dispositif de commande. Ce logiciel peut être à différents niveaux, de la langue de la
machine aux langues sophistiqués utilisés par les robots modernes. Les troisième groupes est la
collection d'application - orientée les routines et les programmes développés pour utiliser le robot
ou ses périphériques pour des tâches spécifiques telles que l'assemblage, le chargement de
machines, la manutention et les routines de vision. [11]
8
Figure1.12 Le logiciel qui commande le robot
Les robots manipulateurs viennent sous plusieurs formes. Les formes se répartissent en en cinq
grandes catégories :
Robots cylindriques
Robots rectilignes
Robots sphériques
Robots articulés
Robots SCARA
a) Robots cylindriques
Le robot cylindrique a deux axes de mouvement, un pour le mouvement en haut et bas. La rotation
se fait par la jonction à la base. De plus, le bras horizontal peut se déplacer à l'intérieur et à
l'extérieur, ce qui donne un troisième axe de mouvement limitée. [9]
9
Figure 1.13 L’espace de travaille de robot cylindrique
b) Robots rectilignes
Les robots rectilignes a trois axes de mouvement (x, y, z). Pour cette raison, le robot rectiligne est
parfois appelé Robot cartésien. Ces robots sont exploités par vérin pneumatique. [9]
c) Robots sphériques
Le robot sphérique est de grande taille avec un bras télescopique qui assure un mouvement à
l'intérieur ou à l'extérieur. Les mouvements de base du robot sphérique sont de rotation (à la base) et
angulairement en haut ou en bas (sur le bras). [9]
d) Robots articulés
Le bras articulé du robot ressemble à un bras humain. Il se compose de deux éléments, nommés
l'avant-bras et le bras supérieur. Ce type de robot n’a généralement pas besoin d'un lieu séparé. [10]
10
Figure 1.16 L’espace de travaille de robot articulé
e) Robots SCARA
Un robot SCARA est défini dans la norme ISO 8373: 1994, No.3.15.6, en tant que «robot comporte
deux liaisons pivots parallèles pour fournir conformément à un plan sélectionné».et peut être
considérée comme un cas particulier d'un robot cylindrique. Le terme «SCARA» signifie «Selective
Compliance Arm for Robot Assembly». (Autre interprétation comprennent «Selective Compliance
Articulated for Robot Assembly».). [8]
11
Figure 1.18 Architecture d’un robot mobile
a) Robot unicycle
Un robot de type unicycle est actionné par deux roues indépendantes, il possède éventuellement
des roues folles pour assurer sa stabilité. Son centre de rotation est situé sur l'axe reliant les deux
roues motrices.
C'est un robot non-holonome, en effet il est impossible de le déplacer dans une direction
perpendiculaire aux roues de locomotion.
Sa commande peut être très simple, il est en effet assez facile de le déplacer d'un point a un autre
par une suite de rotations simples et de lignes droites. [7]
b) Robot tricycle
Un robot de type tricycle est constitué de deux roues fixes placées sur un même axe et d'une roue
centrée orientable placée sur l'axe longitudinal. Le mouvement du robot est donné par la vitesse des
deux roues fixes et par l'orientation de la roue orientable. Son centre de rotation est situé à
l'intersection de l'axe contenant les roues fixes et de l'axe de la roue orientable.
12
C'est un robot non-holonome. En effet, il est impossible de le déplacer dans une direction
perpendiculaire aux roues fixes. Sa commande est plus compliquée. Il est en général impossible
d'effectuer des rotations simples à cause d'un rayon de braquage limité de la roue orientable. [7]
c) Robot voiture
Un robot de type voiture est semblable au tricycle, il est constitué de deux roues fixes placées sur
un même axe et de deux roues centrées orientables placées elles aussi sur un même axe.
Le robot de type voiture est cependant plus stable puisqu'il possède un point d'appui
supplémentaire.
Toutes les autres propriétés du robot voiture sont identiques au robot tricycle, le deuxièmes
pouvant être ramené au premier en remplaçant les deux roues avant par une seule placée au centre
de l'axe, et ceci de manière à laisser le centre de rotation inchangé. [7]
d) Robot omnidirectionnel
Un robot omnidirectionnel est un robot qui peut se déplacer librement dans toutes les directions.
Il est en général constitué de trois roues décentrées orientables placées en triangle équilatéral.
L'énorme avantage du robot omnidirectionnel est qu'il est holonome puisqu'il peut se déplacer
dans toutes les directions. Mais ceci se fait au dépend d'une complexité mécanique bien plus grande.
[7]
13
Figure1.22 Robot de type omnidirectionnel
Nous pouvons observer dans le tableau ci-dessous un récapitulatif des avantages et des
inconvénients des différents types de robots à roues
Tableau 1.1 Les avantages et des inconvénients des différents types de robots à roues
Robots en médecine et chirurgie : Les robots semblent avoir de l'avenir à l'hôpital. Robodoc aide
à réaliser certaines opérations de chirurgie. Le robot infirmier est encore en projet. Le
cybersquelette HAL aide les personnes à se déplacer. Et le robot patient permet aux futurs
chirurgiens dentistes d’apprendre à soigner sans faire de dégâts…
Le système chirurgical Da Vinci : Le robot chirurgien permet d’opérer à distance, soit dans la même
pièce avec une machine comme intermédiaire, soit d’un endroit très éloigné, ce qui peut être très
utile souvent.
14
Figure 1.23 Robot chirurgical Da Vinci
Les infirmiers du futur : Les infirmiers qui portent et déplacent les malades seront des robots. En
fait, ils ne sont pas prévus pour un avenir si lointain: ils fonctionnent déjà!
Le robot infirmier peut prendre un patient dans ses bras, le porter et le déposer dans un fauteuil.
Le robot patient : L'actroïde Simroid assez réaliste réagit quand l’opérateur le touche à un endroit
sensible. Il permet ainsi de réaliser un apprentissage du métier sans frais.
Hanako Showa est une initiative similaire. Grâce à des capteurs implémentés dans ses dents
artificielle, le robot peut réagir aux actes du praticien novice, émettre des gémissements ou bouger
les bras quand on lui "fait mal". Il peut même communiquer grâce à un procédé de synthèse vocal.
Les robots peuvent travailler dans un environnement dangereux, sans le besoin de soutien de la vie,
ou les préoccupations concernant la sécurité.
15
Robots travailler continuellement, sans ressentir une fatigue ou l'ennui, et ne nécessitent pas une
assurance médicale ou de vacances.
Les robots sont de précision répétable à tous les moments, sauf si quelque chose arrive à eux ou ils
s’usent.
Les robots peuvent être beaucoup plus précis que les humains. Précision linéaire d'un robot
typiquement est de 20 à 10 microns.
L'inconvénient des robots est qu'ils manquent de capacité de réagir en cas d'urgence, à moins que
les situations comprises et les réponses sont inclut dans le système. Les mesures de sécurité
nécessaires pour s’assurer qu'ils ne lèsent pas les opérateurs et n’endommagent les machines qui
travaillent avec eux. Inconvénients des robots comprennent: [12]
Bien que les robots ont de bonnes certaines caractéristiques mais aussi ont ces caractéristiques
limités comme la capacité à degré de liberté, la dextérité, capteurs, système de vision et la réponse
en temps réel. Les robots sont coûteux en raison du: coût initial de l'équipement, le coût
d'installation, le besoin de périphériques, le besoin de formation et la nécessité de la
programmation.
16
8. Conclusion
A travers ce chapitre on peut dire que dans le cadre de la robotique, la robotique mobile joue un
rôle à part. Contrairement aux robots industriels manipulateurs qui travaillent de façon autonome
dans un grand nombre d’usines automatisées, les robots mobiles sont très peu répandus. Cette
situation n’est pas due au manque d’applications possibles, mais dés qu’on dispose de la mobilité,
on peut imaginer des robots facteurs, nettoyeurs, gardiens, démineurs, explorateurs, jardiniers et
beaucoup d’autres. La faible diffusion est surtout due au fait que ces tâches ont une complexité bien
supérieure à celles effectuées par des robots manipulateurs industriels. Le monde dans lequel un
robot mobile doit se déplacer est souvent très vaste, partiellement ou totalement inconnu,
difficilement caractérisable géométriquement et ayant une dynamique propre.
17
Chapitre 2 :
Capteurs et Actionneurs
1. Introduction
Ce chapitre discute sur les composants du robot. Se n'est pas tout les composants qui sont
mentionnés dans le chapitre précédant, mais plus précisément, le chapitre traite les capteurs,
actionneurs, et d'autre concepts sur ces deux termes.
Les capteurs et les actionneurs utilisés dans certain domaine sont indiqués dans le tableau suivant:
[13]
18
pompes, les sources de
chaleur
Système de pression, température, débit de fluide Moteurs, pompes, sources de
chauffage chaleur
domestique
Fraiseuse déplacement, vitesse, force, pression, Moteurs à courant continu,
température, la tension, le courant, moteurs à courant alternatif
l’acoustique
Robot image optique, déplacement, vitesse,
Moteurs à courant continu,
force, la tension, le courant, couple
moteurs à courant alternatif,
motrice des actionneurs hydrauliques,
des servomoteurs
Four de séchage du La température, l'humidité relative, Moteurs à courant continu,
bois taux d'humidité et le débit d'air moteurs à courant alternatif,
pompes, sources de chaleur
2. Les capteurs
Avant de donner la définition d'un capteur, il est nécessaire de connaître quelques définitions de
métrologie.
La mesure c'est le résultat d’u mesurage. Autrement dit c'est la valeur du mesurande.
19
Dans l’immense majorité des cas, le signal de sortie est électrique en raison de la facilité de
transmission de l’information sous cette forme (câblage), même si les signaux optiques transmis par
fibre sont de plus en plus fréquents. La tension ou l’intensité de ce signal est alors l’image de
mesurande par une loi continue qu’on souhaite idéalement linéaire ou affine, telle que : [14]
Pour obtenir une image d’une grandeur physique, la chaine de mesure peut faite intervenir
plusieurs phénomènes différents. Par exemple, la mesure d’un débit peut se faire en plusieurs
étapes :
Toutes ces classifications permettent d'avoir une vue d'ensemble des capteurs et bien sur aucune des
méthodes de classification n'est meilleure que l'autre car toutes présentent des avantages et des
inconvénients.
20
2.3.1. Capteur actif
Fonctionnant en générateur, un capteur actif est généralement fondé dans son principe sur un
effet physique qui assure la conversion en énergie électrique de la forme d’énergie propre au
mesurande : énergie thermique, mécanique ou de rayonnement. [15]
Ce type de capteur est très utile vu qu'il fournit un signal linéaire avec une grande sensibilité, une
miniaturisation et un coût faible.
Effet pyroélectrique : certains cristaux dits pyroélectrique, le sulfate de triglycine par exemple, ont
une polarisation électrique spontanée qui dépend de leur température ; ils portent en surface des
charge électrique proportionnelles à cette polarisation et de signes contraires sur les faces opposées.
Effet piézoélectrique : l’application d’une force et plus généralement d’une contrainte mécanique à
certains matériaux dits piézoélectriques, le quartz par exemple, entraine une déformation qui suscite
l’apparition de charges électriques égales et de signes contraires sur les faces opposées.
21
exemple), la force électromotrice dont il est le siège est égale et de signe contraire à la vitesse de
variation du flux d’induction.
Effets photoélectrique : on en distingue plusieurs, qui différent par leur manifestations mais qui ont
pour origine commune la libération de charge électrique dans la matière sous l’influence d’un
rayonnement lumineux ou plus généralement électromagnétique, dont la longueur d’onde est
inférieure à une valeur seuil, caractéristique du matériau.
Effet photoémissif : les électrons libérés sont émis hors de la cible éclairée et forment un courant
collecté par application d’un champ électrique.
Effet photovoltaïque : des électrons et des trous sont libérés au voisinage d’une jonction de semi-
conducteurs P et N illuminée ; leur déplacement dans le champ électrique de la jonction modifie la
tension à ses bornes.
Effet Hall : un matériau généralement semi-conducteur et sous forme de plaquette, est parcouru par
un courant I et soumis à une induction B faisant un angle avec le courant. Il apparait, dans une
direction perpendiculaire à l’induction et au courant une tension qui a pour expression :
Figure 2.4 Quelque effet physique d’un capteur actif : a) thermoélectrique, b) pyroélectrique, c)
piézoélectrique, d) indiction électromagnétique, e) photoélectricité, f) effet Hall
22
D’une part à sa géométrie et ses dimensions. D’autres part aux propriétés électriques des
matériaux : résistivité , perméabilité magnétique , constante diélectrique .
Les propriétés électrique des matériaux, selon la nature des ces derniers, peuvent être sensibles à
des grandeurs physiques variées : température, éclairement, pression, humidité… Si l’une de ces
grandeurs est susceptible d’évolution, toutes les autres étant maintenues constantes il s’établit une
correspondance univoque entre la valeur de cette grandeur et celle de l’impédance du capteur.
Le tableau suivant est un aperçu des divers mesurande susceptibles de modifier les propriétés
électriques de matériaux.
Tableau 2.2 L’influence des mesurande sur les propriétés électriques de matériaux.
Remarque : l’impédance d’un capteur passif et ses variations ne sont pas mesurable qu’en intégrant
le capteur dans un circuit électrique, par ailleurs alimenté et qui est son conditionneur.
23
2.5. Caractéristiques métrologique
Il existe plusieurs propriétés associées à un capteur qui sont critiques pour les performances du
capteur. Les plus importantes sont :
Le domaine de non détérioration dans lequel se produit une altération réversible des propriétés du
capteur.
L’étendu de mesure : l’étendu de mesure d’un capteur correspond à l’intervalle entre la valeur
minimale et la valeur maximale du mesurande.
2.5.3. Sensibilité
C’est la pente de la tangente à la courbe issue de la caractéristique de capteur. [18]
24
Figure 2.6 La sensibilité d’un capteur
2.5.4. Résolution
Résolution : correspond à la plus petite variation de la grandeur physique à mesurer que le capteur
est susceptible de déceler. [18]
2.5.5. Finesse
C’est l'aptitude d'un capteur à délivrer, pour une même valeur de la grandeur mesurée, des mesures
répétitives concordantes entre elles.
Justesse : indique la fiabilité ou l'exactitude d'un résultat; il peut aussi être définie comme la fraction
de résultats valides obtenus à partir de tous les résultats. [21]
Précision : indique le plus petit changement qui peut être enregistrée avec précision. [20]
2.5.7. Hystérésis
Hystérésis: d'un capteur peut produire des résultats différents lors de la mesure de la même quantité
en fonction de la "direction" dans laquelle la valeur a été approchée. [19]
25
2.5.8. Reproductibilité (répétabilité)
C’est la capacité du capteur pour produire la même sortie lorsque la même entrée est appliquée. [17]
Le temps de récupération: est le temps qu'il faut au capteur d'être à moins de 10% de la valeur
qu'elle avait avant l'enlèvement de la mesurande. [16]
L'erreur sur le zéro (zéro offset) : appelée aussi ‘dérive’ est généralement due au vieillissement des
composantes d'un capteur et aux variations de température. Elle se traduit par un décalage de la
grandeur de sortie indépendante du mesurande.
26
L'erreur liée à l’étalonnage : L'erreur liée à l'étalonnage du capteur est due à la qualité de l'opération
d’étalonnage. Si cette opération n'est pas effectuée correctement, cela se traduit par une erreur dans
la pente de la caractéristique du capteur. Il est recommandé de toujours étalonner un capteur avec
un étalon de référence au moins 4 fois plus précis.
Les erreurs dues aux grandeurs d'influence : Les grandeurs d'influence provoquent sur le capteur
des variations de ses caractéristiques métrologique. L'erreur sur le zéro mentionnée précédemment
est un très bon exemple de ces variations.
L'erreur sur la sensibilité est aussi une erreur due aux grandeurs d'influence. Toutes les grandeurs
physiques connues peuvent agir comme grandeur d'influence. Pour minimiser l'effet de ces
grandeurs d'influence, il faut utiliser soit la compensation, soit la stabilisation.
Les erreurs dues aux conditions d'alimentation et de traitement de signal : La grandeur de sortie
peut être fortement dépendante des conditions d'alimentation du capteur. L'alimentation du capteur
est dans certains cas une grandeur modifiante qui peut affecter la précision d'une mesure.
Les erreurs dues au mode d'utilisation : certaines erreurs sont simplement dues à une utilisation
incorrecte d'un capteur. Par exemple, on si utilise un capteur pas assez rapide dans un cas ou le
mesurande évolue de façon rapide.
Les erreurs liées aux indéterminations intrinsèques d'un capteur : certaines erreurs aléatoires sont
liées à la non-connaissance de caractéristiques de capteurs. Ainsi, pour certains capteurs, on ne
connait pas de façon précise des paramètres comme la résolution, réversibilité, hystérésis,... Par
exemple, lorsque l'on achète un potentiomètre, on ne se pose pas de questions sur la résolution de
ce capteur.
Les erreurs dues à des signaux parasites de caractère aléatoire : le bruit électrique, si nuisible à la
qualité des mesures, est la source principale des signaux parasites. Ces signaux sont dus
généralement à des phénomènes d'induction, ce qui fait que l'on recommande de blinder les
conducteurs transportant les signaux de mesure.
Les erreurs de mesure dues aux grandeurs d'influence non-contrôlées : les grandeurs d'influence
non-contrôlées sont souvent sources d'erreur, car le corps d'épreuve d'un capteur est généralement
sensible à plus d'une grandeur physique.
27
2.7. Etalonnage des capteurs
L’étalonnage est la relation qui établit la relation entre le mesurande et la grandeur électrique de
sortie. Cette relation peut dépendre non seulement du mesurande mais aussi des grandeurs
d’influence. S’il n’y a pas de grandeurs d’influence, l’étalonnage est simple, dans le cas contraire il
est multiple.
L’étalonnage direct dans le quel les valeurs du mesurande sont issues d’étalons ou d’objets de
référence pour lesquels le mesurande est connu avec une incertitude donnée.
L’étalonnage par comparaison dans lequel on compare les mesures du capteur à étalonner avec
celles provenant d’un autre capteur lui-même préalablement étalonné et considéré comme étant la
référence, ce qui signifie que son étalonnage est raccordé à étalons et que l’incertitude
correspondante est connue.
Pour les capteurs présentant une hystérésis, il est nécessaire de procéder à l’étalonnage par une
succession ordonnée et spécifiée des valeurs du mesurande.
Pour les capteurs de grandeurs dynamiques, if faut relever la réponse en fréquence pour un
mesurande d’amplitude fixée et la réponse en amplitude pour une fréquence fixée.
Dans certains cas, notamment pour beaucoup de capteurs mécaniques et thermiques, lorsque le
constructeur ne donne pas d’indication relative à l’usage du capteur, il est souvent souhaitable
d’effectuer l’étalonnage après son installation sur le site.
3. Les actionneurs
3.1. L’actionneur
Un actionneur est un dispositif qui transforme l’énergie délivrée par l’interface de puissance, en
énergie utilisable par les effecteurs de processus. Le schéma fonctionnel d’un actionneur ainsi que
les schémas des principaux actionneurs sont représentés à la figure ci-dessous. Les moteurs
électriques, les vérins pneumatiques ainsi que les éléments chauffants sont des exemples typiques
d’actionneurs utilisés en automatisation industrielle.
Les effecteurs : un effecteur est un dispositif qui transforme l’énergie délivrée par un actionneur,
en valeur ajoutée. Selon le cas, un effecteur peut être séparé ou non de l’actionneur. Quelques
exemples d’effecteurs rencontrés en milieu industriel sont : les ventilateurs, les broyeurs, les pinces
à outils de robots articulés, dispositifs de transfert de chaleur… [26]
28
Figure 2.12 Schéma fonctionnel et symboles des actionneurs
Mode réglé en vitesse : le principe de la régulation est illustré dans la figure ci-dessous :
l’opérateur ou le programme d’automate choisit une valeur de consigne en fonction de la
vitesse qu’il souhaite obtenir. La valeur réelle est mesurée et fournit le signal de contre-
réaction , qui est comparé à la valeur de consigne. La différence entre ces deux valeur est
appelée écart de régulation s’efforce de le minimiser en ajustant la grandeur de réglage et, par
l’intermédiaire de l’amplificateur de puissance, l’alimentation du moteur.
29
Mode servomoteur-réglé en position : en ajustant un capteur de position sur l’arbre du moteur ou
sur la charge en mouvement, il est possible de réaliser des déplacements point à point et d’arrêter le
moteur à des positions très précises.
Mode pas à pas : il est combine le mode tout ou rien et le mode servomoteur. L’actionneur
travaille bien en mode tout ou rien, mais il est alimenté par une succession d’impulsions. A chaque
impulsion, il avance d’une petite distance appelée pas ou incrément. La distance parcourue dépend
directement du nombre d’impulsions reçues. La vitesse dépend de la fréquence des impulsions. De
plus, lorsqu’il ne reçoit plus d’impulsions, un tel actionneur est tenu en place avec une certaine
force de maintien.
Actionneur hydraulique : un actionneur hydraulique est composé de deux parties : une partie vérin
et une partie valve. Dans un système à commande proportionnelle, on place dans l’étage de pilotage
(valve) une bobine (solénoïde) qui régule la pression du fluide proportionnellement à la consigne
électrique (courant tension). [27]
30
Actionneur électromécanique : est un transducteur assurant une conversion d’énergie et
d’information de la forme électrique à la forme mécanique. Un actionneur électromécanique est
aussi appelé moteur.
Selon les applications, l’aspect énergétique ou la qualité du signal prime. Le rendement énergétique
est parfois déterminant. Dans d’autres cas, c’est le caractère linéaire de la transformation qui
importe. Dans d’autre cas encore, c’est le temps de réaction ou la fréquence limite qui sont
déterminants. [22]
Une partie mobile : l’induit (rotor) comportant une ou plusieurs bobines tournant dans le champ
magnétique crée par l’inducteur.
Le collecteur qui associé aux balais, permet de relier les enroulements du rotor à l’extérieur du
moteur.
Principe de fonctionnement :
Rappel : Un conducteur parcouru par un courant I et placé dans un champ magnétique B est soumis
à une force F appelé force de LAPLACE.
31
Le sens de la force est donné par la règle des trois doigts de la main droite :
Les deux forces de LAPLACE qui s'exercent sur la spire créent un couple appelé couple
électromagnétique ( ) qui entraîne la rotation du rotor.
De plus, en tournant dans le champ magnétique uniforme , la spire parcourue par le courant
embrasse un flux qui varie dans le temps. D ‘après la loi de FARADAY, toute variation de flux à
travers une surface entraîne une force électromotrice ( ) induite. Donc une fem est induite le long
de chaque spire.
Pour inverser le sens de rotation, il suffit d’inverser le sens du courant dans la spire donc d’inverser
la polarité de la tension d’alimentation.
Remarque :
32
Couple moteur (couple utile) et couple de pertes:
Le couple électromagnétique n’est pas égal au couple moteur (ou couple utile )
disponible sur l’arbre du moteur. Il y a une perte de couple due aux frottements des diverses
pièces en rotation et aux pertes fer (courants de Foucault…). Pour un moteur donné est
constant :
Couple résistant:
Le couple résistant est le couple qu’exerce sur l’arbre, la charge que le moteur doit entraîner en
rotation. Plus la charge est importante plus est important.
En multipliant par I des deux côtés du signe égal, l’équation électrique nous donne :
: Puissance électromécanique
: Pertes collectives
: Puissance électromécanique
Remarque :
Le rendement :
33
Moteurs DC avec un autre mode d’excitation :
Le moteur à courant continu excité par des aimants permanents n'est pas le seul type possible.
Souvent on remplace les aimants par des électroaimants fixes (bobines convenablement alimentées
en courant continu). Les bobines sont appelées “bobines d’excitation” ou “bobines inductrices”. On
distingue généralement trois types de moteurs selon le branchement envisagé:
Moteur à courant continu à excitation séparée ou shunt : La tension appliquée à l’inducteur, donc le
courant d’excitation, est indépendante du courant d’induit, c’est-à-dire de la charge. Pour un moteur
à excitation séparée, l’inducteur possède son alimentation propre, ce qui est la configuration la plus
courante pour un moteur à courant continu. Pour un moteur shunt, l’inducteur est branché en
parallèle avec l’induit. [24]
Moteur à courant continu à excitation sérié : Moteur à courant continu est dit à excitation série
lorsque l’inducteur est branché en série avec l’induit.
Moteur-compound : Une bobine inductrice est raccordée directement à la source de courant, tandis
que la seconde bobine inductrice est raccordée en série au rotor. La tension aux bornes ne doit pas
dépasser 10 V.
34
Moteur synchrone sans balais et servomoteur
Moteur synchrone sans balais : Le moteur synchrone sans balais a une structure inversée par rapport
au moteur à courant continu. Les aimants sont au rotor et les bobinages sont au stator. La
particularité de ce type de moteur est qu’il est conçu grâce aux capacités de l’électronique moderne.
Les phases de ce type des moteurs sont alimentées successivement par un commutateur de phases
électronique. Par contre, ce n’est plus une horloge extérieure qui fixe l’instant de commutation,
mais la position du rotor par l’intermédiaire de capteurs. Le couple moteur dépendant pour chaque
phase de la position du rotor par rapport au stator, les capteurs sont donc placés de manière à
obtenir en permanence un couple maximum.
Le servomoteur : un servomoteur est, comme son nom l'indique, un moteur mais avec quelques
spécificités en plus. Contrairement à un moteur classique qui est utilisé pour tourner avec une
vitesse proportionnelle à un courant ou à une tension, pour obtenir une position. Il effectue une
rotation suivant un angle déterminé. Le plus souvent l'angle est compris entre 0 et 180° puis il garde
cette position.
35
Le moteur universel c’est un moteur électrique fonctionnant sur le même principe qu'une machine à
courant continu à excitation série : le rotor est connecté en série avec l'enroulement inducteur. Le
couple de cette machine indépendant du sens de circulation du courant est proportionnel au carré de
son intensité. Il peut donc être alimenté indifféremment en courant continu ou en courant alternatif,
d'où son nom. Pour limiter les courants de Foucault qui apparaissent systématiquement dans toutes
les zones métalliques massives soumises à des champs magnétiques alternatifs, son stator et son
rotor sont feuilletés. Dans la pratique, ces moteurs ont un mauvais rendement, mais un coût de
fabrication très réduit. Leur couple est faible, mais leur vitesse de rotation est importante. Quand ils
sont utilisés dans des dispositifs exigeant un couple important, ils sont associés à un réducteur
mécanique.
La machine synchrone est souvent utilisée comme génératrice. On l'appelle alors « alternateur ».
Mis à part pour la réalisation de groupe électrogène de faible puissance, cette machine est
généralement triphasée. Pour la production d’électricité, les centrales électriques utilisent des
alternateurs dont les puissances peuvent avoisiner les 1 500 MW.
Comme le nom l'indique, la vitesse de rotation de ces machines est toujours proportionnelle à la
fréquence des courants qui les traversent. Ce type de machine peut être utilisé pour relever le
facteur de puissance d'une installation. On appelle celle-ci un « compensateur synchrone ».
Selon sa construction, un moteur pas à pas peut avancer de 90°, 45°, 18°, ou d’une fraction de
degré seulement par impulsion. En faisant varier la fréquence des impulsions, on peut faire tourner
le moteur très lentement, d’un pas à la fois, ou rapidement à des vitesses aussi élevées que 4000
tr/min. [25]
Le moteur à aimants permanents : Le nom de ce type de moteur pas à pas est lié à la conception de
son stator : une tôle magnétique découpée et emboutie. Sur un diamètre intérieur, les tôles
composent une série de dents qui symbolise les pôles du stator tout en laissant un espace torique
pour une bobine. Chaque sous-ensemble représente une phase stator. Le rotor est un barreau
aimanté radialement ayant plusieurs paires de pôles N-S.
36
Figure 2.26 Moteur à aimants permanant
Le moteur hybride : Le moteur pas à pas « hybride » allie le principe du moteur à réluctance
variable à celui du moteur à aimant permanent. Le rotor du moteur hybride comprend 2 structures
régulières de dents. Ces 2 blocs sont décalés d’une ½ dent l’un par rapport à l’autre et sont fixés de
part et d’autre d’un aimant permanent magnétisé axialement. Le circuit magnétique du stator
possède plusieurs pôles constitués de paquets de tôles entourés chacun d’une bobine ; les paquets de
tôles se terminant par des dents. Une phase est constituée de plusieurs dents ; 4 dans la plupart des
cas. Tous les pôles de la phase sont décalés de façon à assurer le déphasage de 90° (quadrature).
Le moteur à réluctance variable : Le principe de fonctionnement de ce type de moteur pas à pas est
proche de celui du moteur hybride, avec une structure dentée au rotor et au stator. Il n’y a pas
d’aimant au rotor pour renforcer l’action du flux et donc pas de couple résiduel sans courant. Ce
type de moteur pas à pas n’est presque plus utilisé ni fabriqué.
37
Si nous devions comparer les différents types de moteurs pas à pas :
4. Conclusion
On peut dire à la fin de ce chapitre que toute système automatisé ou installation industrielle est
équipée d’un ensemble de capteurs et actionneurs dont l’utilité consiste à contrôler des différents
paramètres physiques telle que: la pression, le débit, la température,…, etc. Donc la compréhension
des principes de fonctionnement des principaux capteurs et actionneurs utilisés est une phase très
importante lors de l’étude de n'importe qu'el système automatisé.
38
Chapitre 3 :
Microcontrôleur et Arduino
1. Introduction
Le terme micro-ordinateur est utilisé pour décrire un système qui comprend au moins un
microprocesseur, une mémoire de programme(ROM), la mémoire de données (RAM), et une
entrée-sortie (I / O) périphérique. Certains systèmes de micro-ordinateurs comprennent des
composants supplémentaires tels que des Timers, des compteurs et des convertisseurs analogique-
numérique. Ainsi, un système de micro-ordinateur peut être existé sous plusieurs sortes à partir d'un
gros ordinateur ayant disques durs, disquettes, imprimantes et à contrôleur intégré à puce unique.
Dans ce chapitre, nous allons considérer seulement le type de micro-ordinateurs qui se composent
d'une seule puce de silicium. Ces systèmes de micro-ordinateurs sont aussi appelés
microcontrôleurs, et ils sont utilisés dans de nombreux produits ménagers tels que les fours à micro-
ondes, unités de contrôle à distance d'un TV, cuisinières, équipements HIFI, lecteurs CD,
ordinateurs personnels, et les réfrigérateurs. De nombreux microcontrôleurs sont disponibles au
marché. [28]
2. Historique
Depuis la création de microprocesseurs, 4, 8, 16, 32 bits. Les microprocesseurs/microcontrôleurs
ont développé et sont apparu sur le marché. Intel 4004 était le premier processeur à 4 bits qui est
apparu en 1971. Ces instructions sont de 8 bits, mais ces données traitées sont de 4 bits. Il avait
mémoires externes séparés, pour le programme (4K) et les données (1K). Il y avait 46 instructions
et la fréquence d'horloge est de 740 kHz. Puis, en 1972, Intel 4040, la version améliorée de 4004.
4040 avaient 14 instructions de plus avec mémoire 8K du programme et des possibilités
d'interruption.
En 1974, Texas Instruments a présenté le premier microcontrôleur TMS 1000. TMS 1000 avait
dans la même puce une RAM, une ROM, et les I / Os. Intel 8080 a ensuite été introduit en 1974,
c'est la version améliorée de 8008, qui est également apparu en 1972. Intel 8085 a été élaboré en
1976. Cela pourrait fonctionner sur +5V et fréquence de 3 MHz. Dans la même année, Zilog Z-80
est apparu comme une amélioration par rapport Intel Z80 8080. Z80 fonctione à 2,5 MHz, et dans la
version CMOS (Complementary Metal Oxide Semiconductor), fonctionne à 10MHz.
Immédiatement après Intel 8080, en 1975, Motorola a lancé son 6800, suivi plus tard par le 6502
et 6809, etc. Ensuite, Intel 8084 a été développé comme un microcontrôleur autour de 1976. C'est la
famille MCS-48. Il est possible de stocker les données sur la même puce, mais le code a été stocké
dans la mémoire externe de programme. il est immédiatement remplacé par le MCS-51 famille de
microcontrôleurs en 1980. Intel MCS-51 utilise plus souple des instructions de 2 octets. Sur une
seule puce il procède (RAM / EPROM ROM RAM). En 1982, Motorola a présenté microcontrôleur
6805. Le PIC (Peripheral interface controller) est né à l'Université Harvard en 1975. Les familles de
microcontrôleurs PIC a été introduit vers 1985, par Microchip. PIC utilise l'architecture de Harvard,
et il dispose d'un jeu d'instructions réduit. Intel 8086 a été développé en 1978, c'est un processeur de
16 bits. Après, Motorola a présenté un microprocesseur 68000 16-bit, et Zilog introduit Z8000, un
microprocesseur 16 bits. Les développements historiques dans les produits de microprocesseurs
sont listés dans le tableau suivant :
39
1972 Intel 4040 Microprocesseur à 4-bit
1974 Intel 8080 Microprocesseur à 8-bit
TMS 1000 Microcontrôleur à 8-bit
1975 Motorola 6800 Microprocesseur à 8-bit
1976 MCS-48 Microcontrôleur à 8-bit
Intel 8085 Microprocesseur à 8-bit
1978 8086, Motorola 68000, Zilog Z-8000 Microprocesseur à 16-bit
1980 8051 Microcontrôleur à 8-bit
1982 68010,6805 Microcontrôleur
80186, 80188, 80286 Microprocesseur à 16-bit
8096 (MCS-96) Microcontrôleur à 16-bit
1984 86020 Microprocesseur à 32-bit
1985 80386 Microprocesseur à 32-bit
PIC microcontrollers by Microchip Microcontrôleur à 8-bit
1987 Z280 Microprocesseur à 16-bit
1989 80386sx, 80486 Microprocesseur à 32-bit
1993 Pentium Microprocesseur à 32-bit
1997 Atmel 8-bit AVR family Microcontrôleur RISC à 8-bit
En Juin 1997, les microcontrôleurs ATMEL 8 bits AVR ont été introduites qui ont également le
jeu d'instructions réduit. Aujourd'hui, nous voyons un certain nombre de familles de
microcontrôleurs, de sources multiples et dans de nombreuses versions. [29]
3. Définition de microcontrôleur
Un microcontrôleur est un circuit hautement intégré qui rassemble, sur une puce, la plus part ou
tout les parties nécessaire d'un ordinateur. Le microcontrôleur comprend généralement: CPU
(Central Processing Unit), la mémoire RAM (Random Access Memory), EPROM / PROM / ROM
(programmable effaçable Read Only Memory), I / O (entrée / sortie), des timers. [30]
Une unité centrale qui est le cœur de système, également appelé CPU (Central Processing Unit)
dans cette unité centrale nous retrouverons plusieurs éléments telle que l’unité arithmétique et
logique (UAL).
40
Une mémoire contenant le programme à exécuter par le microcontrôleur, généralement appelée
mémoire morte ou ROM, mémoire à lecture seule. Cette mémoire a la particularité de sauvegarder
en permanence les informations qu’elle contient, même en absence de tension (ce qui est
primordiale, sino il faudrait reprogrammer le microcontrôleur à chaque remise sous tension !).
Une mémoire vive (RAM), cette mémoire permet de sauvegarder temporairement des informations.
Il est à noter que le contenu d’une RAM n’est sauvegardé que pendant la phase d’alimentation du
circuit. Le microcontrôleur pourra utiliser cette mémoire pour stoker des variables temporaires ou
faire des calculs intermédiaires.
Une base de temps : elle peut être assurée par un cristal de quartz externe, un oscillateur
programmable, un résonateur céramique, ou d'une base de temps interne. [35]
Des bus internes permettent la communication entres les différents éléments intégrés au
microcontrôleur.
Et pour certains microcontrôleurs les plus sophistiqués peuvent contenir des éléments
supplémentaires, tels que :
Un convertisseur numérique-analogique (CNA): un CNA accepte un mot d'entrée de n bits b1, b2,
b3, ..., bn en binaire et produire un signal proportionnel analogique à elles. La figure ci-dessous
montre son symbole. [34]
Le PWM (Pulse Width Modulation) : est une technique pour obtenir des résultats analogiques avec
des moyens numériques. La commande numérique est utilisée pour créer une onde carrée, le signal
se varier entre 1 et 0. Par le changement de la durée du moment où le signal est en 1 par rapport au
période du signale carré on peut obtenir des tensions entre les deux valeurs 5 Volts et 0 Volts
41
Figure 3.3 Signal analogique par la technique PWM
Lorsque l'UAL effectue des opérations arithmétiques et logiques sur un octet (8 bits) à une
instruction, on dit qu'il est un microcontrôleur de 8 bits. Son bus interne est de largeur de 8 bits.
Lorsque l'UAL effectue des opérations arithmétiques et logiques sur un octet (16 bits) à une
instruction, on dit qu'il est un microcontrôleur de 16 bits. Son bus interne est de largeur de 16 bits.
Ses performances et la capacité de calcul sont renforcées avec une plus grande précision par rapport
aux microcontrôleurs 8 bits.
Lorsque l'UAL effectue des opérations arithmétiques et logiques sur un octet (32 bits) à une
instruction, on dit qu'il est un microcontrôleur de 32 bits. Son bus interne est de largeur de 32 bits.
Ses performances et la capacité de calcul sont plus grandes et plus précis par rapport aux
microcontrôleurs 16 bits.
Quand un système embarqué comporte un UC ou tous les blocs fonctionnels en une seule unité,
donc il est appelé un microcontrôleur intégré. [32]
42
Quand un système embarqué comporte une unité de microcontrôleur qui n'a pas tous les blocs
fonctionnels disponibles sur une seule puce, il est appelé un microcontrôleur de mémoire externe.
[31]
l'architecture CISC (instruction Complicated Set Computer) des microcontrôleurs: quand un MCU a
un jeu d'instructions qui prend de nombreux modes d'adressage pour les instructions arithmétique et
logiques et pour l'accès à la mémoire et des instructions de transfert de données de le UC est dit être
de l'architecture CISC. [32]
Toutefois, les professionnels placent le langage C en tête de liste pour plusieurs raisons : [37]
43
Le langage C contient peu de mots.
Le langage C est modulaire. Son code peut être écrit sous forme de sous programme appelés
fonctions.
Le C++ : dans les années 80 B. Stroustrup propose d’appeler C++ un nouveau langage, conçu non
pas comme un remplaçant mais comme une amélioration du langage C. [38]
Comme le C, C++ adopte une vision très proche de la machine. Il à été destiné en premier lieu à
l’écriture de systèmes d’exploitation mais ses caractéristiques lui ont ouvert d’autres perspectives.
Il est formé d’instructions très explicites, courtes, dont la durée d’exécution peut être prévue à
l’avance, au moment de l’écriture du programme.
Son nombre d’instructions et de notations étant volontairement limité les interprétations des
constructions sémantiques sont multiples et c’est sans doute ce que le concepteur du langage C++
désigne sous le terme d’expressivité. [39]
Le Java : Java est un langage de programmation informatique de haut niveau. Langages de haut
niveau, comme Java, permettent aux programmeurs d'écrire des instructions en utilisant des
commandes en anglais. Chaque instruction dans un langage de haut niveau correspond à de
nombreuses instructions dans la langue de la machine. Java a été crée au début des années 1990 par
une équipe de Sun Microsystems dirigée par James Gosling. Les concepteurs de Java ont
commencé avec la syntaxe de base des langages comme C, C ++ et Smalltalk. Java a été
initialement conçu pour une utilisation dans des dispositifs tels que les téléphones cellulaires,
cependant, dans quelques années, Sun Microsystems a été utilisé Java pour fournir l'animation et de
l'interactivité sur le Web. IBM a adopté Java comme son principal langage de développement. De
nombreuses interfaces de réseau et des serveurs Web sont maintenant basés sur Java. [40]
L’assembleur : Le langage assembleur est très proche du langage machine (c'est-à-dire le langage
qu'utilise l'ordinateur : des informations en binaire, soit des 0 et des 1). Il dépend donc fortement du
type de processeur. Ainsi il n'existe pas un langage assembleur, mais un langage assembleur par
type de processeur.
44
Technique médicinale: Les instruments de mesure (par exemple mesure de la glycémie), les organes
artificiels, etc.
Les technologies de la sécurité: Les systèmes pour gérer la sécurité dans les moyes de transport (par
exemple : les passages à niveau), dans les bâtiments (par exemple: alarme incendie, effractions) etc.
45
Figure 3.10 Les moyens de transports
Application basse consommations : Les appareils à piles, tels que ceux développés par la HESB
pour la station ornithologique suisse, qui permettent d’enregistre des données spatiales et
télémétriques.
4. Arduino
4.1. C’est quoi l'Arduino?
Elle est considérée comme un grand équipement électronique pour les amateurs ainsi que les
professionnels, l'Arduino est un puissant ordinateur à carte unique avec une utilisation facile à
adapter. C’est une open source, ce qui signifie que vous devez payer son matériel et le logiciel
requis est gratuit. Son logiciel est basé sur la puce ATMega. [42]
Pour ce travail, Hernando Barragan réutilisait les sources du projet Processing. Basée sur un
langage de programmation facile d'accès et adaptée aux développements de projets de designers, la
carte Wiring a donc inspiré le projet Arduino (2005). Comme pour Wiring, l'objectif était d'arriver à
un dispositif simple à utiliser, dont les coûts seraient peu élevés, les codes et les plans « libres ».
46
Côté entrées, des capteurs qui collectent des informations sur leur environnement comme la
variation de température via une sonde thermique, le mouvement via un détecteur de présence ou un
accéléromètre, le contact via un bouton-poussoir, etc…
Côté sorties, des actionneurs qui agissent sur le mode physique telle une petite lampe, un moteur,
haut parleur…
Comme le logiciel arduino, le circuit électronique de cette plaquette est libre et ses plans sont
disponibles sur l’internet. On peut donc les étudier et créer des dérivés. Plusieurs constructeurs
proposent ainsi différents modèles de circuits électroniques programmables et utilisables avec le
logiciel Arduino.
"Seule le nom « arduino » n’est pas utilisable librement. De telle sort à toujours pouvoir identifier le
projet de ses dérivés."
Il existe plusieurs variétés de cartes Arduino. Ces cartes peuvent être autonome et fonctionner sans
ordinateur ou servir d’interface avec celui-ci.
47
Plusieurs fichiers différents vous sont proposés en téléchargement, vous devez faire votre choix en
fonction du système d’exploitation de votre ordinateur : Windows, MacOs X, Linux. La dernière
version officielle est généralement celle qu’il faut sélectionner, bien que pour les cartes les plus
récents il faille parfois préférer les versions « beta » du logiciel, c’est-à-dire des versions non
éprouvées et perfectibles, mais tout de même fonctionnelles. [44]
IDE (Integrated Development Environment) est un programme spécial exécutable sur votre
ordinateur qui vous permet d'écrire des esquisses pour la carte Arduino dans un langage simple sur
le modèle du langage de traitement. La magie se produit lorsque vous appuyez sur le bouton qui
télécharge l'esquisse à la carte: le code que vous avez écrit est traduit dans la langue de C (qui est
généralement assez difficile pour un débutant d'utiliser), et est passé au compilateur avr-gcc, une
pièce importante du logiciel open source qui fait la traduction finale dans la langue comprise par le
microcontrôleur. Cette dernière étape est très importante, parce que c’est là où Arduino rend votre
vie simple en cachant autant que possible de la complexité de la programmation des
microcontrôleurs. [45]
L’interface de logiciel:
Double-click sur l’icone IDE Arduino est on obtien la fenetre vierge ci-dessous :
Cette fenêtre vide sera remplie de mots et de chiffres et d'autres textes. Cette fenêtre est comme tout
autre logiciel que vous avez utilisé. Elle contient des menus, des boutons, des alertes spéciales, et
toutes sortes de contrôles: Ouvrir, Enregistrer, et le bouton du moniteur de série à l'extrême droite.
Ouvert: présente un menu de tous les croquis dans votre dossier de croquis. Cliquez sur l'un va
ouvrir dans la fenêtre actuelle.
48
Vérifiez: ce bouton vous permet de vous assurer que votre logiciel est exempt d'erreurs de syntaxe.
Envoyez: ce bouton peut à la fois vérifier et télécharger un croquis à l'Arduino si aucune erreur
d'orthographe ou de mise en forme n’est trouvée.
Serial Monitor: ce bouton vous permet d'ouvrir le moniteur de série et d'afficher les informations en
provenance du port série sur l'Arduino. Le moniteur de série est comme un outil pour "parler avec
l'Arduino et vous l'utilisez pour voir les choses d'intérêt. [46]
5. Conclusion
À travers ce chapitre on peut dire que lors de la conception d’un circuit électronique, si celui-ci
nécessite une unité de calcul, l’implantation de celle-ci est soit un assemblage de portes logiques
(programmation matérielle), soit un microcontrôleur comme le cas de notre travail (programmation
logicielle). Les premiers ont un très faible coût de fabrication s’ils sont produits en très grande
quantité. L’avantage des seconds est qu’ils sont de toute manière fabriqués en masse afin de les
rendre le plus accessible possible en réduisant au maximum leur prix, et il suffit d’y embarquer un
logiciel pour qu’ils puissent accomplir une tâche spécifique, l'un de ses logiciels est l'arduino, qui
représente un logiciel de programmation par code basé sur des cartes électroniques a
microcontrôleur open source et qui peut être utilisé pour construire des objets interactifs
indépendants (prototypage rapide), ou bien peut être connecté à un ordinateur pour communiquer et
superviser en utilisant des logiciels de programmation (flash, labview, etc).
49
Chapitre 4 :
Réalisation
1. Introduction:
Le but essentiel de notre travail est d’utiliser l'arduino pour commander le robot mobile. On
doit construire un prototype de ce robot qui contient un petit cadre d'aluminium clôturer de tel sort
qu'on va obtenir a la fin un boitier qui circule a l'aide des trois roues, et pour pouvoir commander
ce boitier on doit le connecter a des circuits d'alimentation, de commande et des capteurs puis a une
carte arduino contient le programme qui nous permet de gérer tout les applications de ce robot.
2. La conception de robot :
2.1. La structure de base du robot :
50
Parmi plusieurs capteurs qui peuvent effectuer la tâche nous avons choisi un capteur infrarouge a
base d’un phototransistor, a cause de sa disponibilité, son schéma et sa réalisation n’est pas
compliqué et bien sur de l'autre côté que leur cout n'est pas cher.
On a utilisé 5 capteurs, quatre pour déterminer de quelle coté provient le signal de la flamme, de
l’avant, de l’arrière, du droit ou de la gauche d’une coté et de l’autre coté ils sont pris comme un
référence par la mesure de l'intensité de la lumière avant l'existence de la flamme (au début de
démarrage), de cette dernière on peut programme le robot à partir quelle grandeur il doit réagi. Le
cinquième est mis en avant et utiliser pour déterminer la direction vers la flamme avec grande
précision.
Dans cette étalonnage on mesure dans le premier cas on absence de flamme la valeur maximale
entre les 4 capteurs qui sont utiliser pour les cotes, nous avons choisi la valeur maximale pour
assurer que chaque capteur ne dépasse pas cette valeur à cause de leurs incertitudes. Puis on mesure
la valeur maximale de ces 4 capteurs approprie à une distance bien déifiée, cette distance variée par
un pas de 5 cm de 5 à 150 cm. On répète l'étalonnage plusieurs fois en variant l’intensité de la
lumière ambiante. (Remarque : la valeur mesurée c’est une valeur numérique, au lieu de mesurer la
51
valeur du capteur en Volt puis on converti en valeur numérique pour la programmation on prend
directement la valeur numérique mesurée par l’arduino. (Annexe A).
On remarque que :
Les graphes d’étalonnage des capteurs commence a prend la même forme a partir d’une
intensité lumineuse ambiante approprier à la valeur 571.
La variation de la valeur mesurée et la distance sont proportionnelle.
Entre 5cm et 25cm la valeur mesurée a peu pris stable il subit à une petite variation.
Entre 25cm et 45 la relation entre la distance et la valeur mesurée est une relation à peu pris
linière
52
Entre 70 et 150 la valeur mesurée est subit à des petites variations, il existe aussi à cet
intervalle une relation à peu pris linière.
En remarque que :
Les graphes d’étalonnage des capteurs commence a prend la même forme a partir d’une
intensité lumineuse ambiante approprier à la valeur 751.
53
Le pic maximale dans la plus par des graphes se situer en angle de 0° par rapport au capteur
si que signifie que le capteur attendre sa repense maximale quand la source de flamme se
situer en face de lui.
À partir de l’étalonnage on remarque que ce capteur a un intervalle angulaire très large ce qui ne
nous aidons pas à dirigé le robot vers la flamme avec précision, pour sortir de cette cas on utilise
une fente qui réduit l’intervalle angulaire comme le montre dans la figure ci-dessous.
Dans cet étalonnage on prend les mêmes conditions que le précédant, mais on mesure seulement la
valeur du capteur de précision où on ajoute la fente, puisque rien ne change pour les autre capteurs
(annexe A).
54
Dans cette graphe on a les même remarque que le précédant (Figure 4.5), La chose qui est claire ici
est l'absence totale des fluctuations. Et bien sûr, cela résulte de l'utilisation de la fente.
Mais ce capteur n’est pas la solution parfaite, tout simplement il ne suffit pas seulement le capteur
infrarouge, car s’il y a une flamme le capteur fonctionne bien, le problème apparut avec l’existence
d’une autre source de la lumière infrarouge (une LED par exemple) puisqu’il considère cette source
comme une flamme.
Nous avons pris notre décision d’utilise le CTN a partir de la courbe d’étalonnage des deux
thermistances apparu au figure ci-dessous puisque la courbe de CTN a une forme exponentielle.
55
Figure 4.11 Courbe d’étalonnage de thermistance
On utilise cette thermistance comme un thermostat, on s’intéresse a une seule valeur qui représente
la tension appropriée à la chaleur du feu puisque l’information que nous voulons c’est s’il y a une
flamme ou non, et bien sur s’elle existe sa température sera trop élevée par rapport a la température
ambiante, et cela simplifie beaucoup la tâche.
Pour l’étalonnage on n’a pas besoin de le faire car on ne s’intéresse pas à la valeur exacte de
température mais du changement important de la valeur de sortie dans une durée bien définie, et
d’une autre part on a remarqué que le temps de repense de la thermistance est très grand.
Maintenant parce que le robot peut se déplacer dans des différents lieux et des différents espaces,
il peut être entravé par des obstacles et de forage, alors l'utilisation d'un capteur de distance devient
nécessaire. Nous avons choisi le capteur ultrason HC-SR04.
56
Pourquoi se module parce que tout ce qu'il faut pour un capteur ultrason est intégré dans une seule
petite pièce. Ce module dispose simplement de 4 pins de sortie : VCC, TRIG, ECHO, GND. Il est
donc très facile de l'interfacer à un microcontrôleur.
Le processus complet est le suivant: Mettre le pin "TRIG" une impulsion de niveau haut (5V)
durant au moins 10µs et le module démarre sa lecture; A la fin de la mesure, s'il détecte un objet
devant lui, le pin "ECHO" passe au niveau haut (5V). Et, la distance où se situe l'obstacle est
proportionnelle à la durée de cette impulsion. Il est donc très facile de calculer cette distance avec la
formule suivante:
La tension de fonctionnement : 5V
Le courant de fonctionnement : 15mA
Fréquence de fonctionnement : 40Hz
La distance de détection : de 2cm à 450cm
L’intervalle angulaire de capture : de -7,5° à +7,5°
Signale de détection : impulsion de 10us TTL
Signale d'écho : sortie TTL PWL
Dans cet étalonnage nous utilisons une plaque de bois qui à été séparée de capteur par une distance
bien définie, et nous mesurons la distance captée. A chaque fois on varie la distance et on relève la
valeur mesurée.(Annexe A).
57
Figure 4.15 Étalonnage de capteur de distance HC-SR04
On remarque que :
Ceci est tout sur la première partie du robot qui est les capteurs, qui représente leur sens. Mais la
partie suivante est le cerveau de robot, que nous allons parler maintenant.
2.2.2. Le contrôleur :
Comme il est indique au figure de la structure générale du robot notre contrôleur est ATmega 2560
inclue dans la carte arduino Mega.
L'Arduino Mega 2560 est une carte microcontrôleur basée sur le Microcontrôleurs. Il est doté de 54
broches d'entrée/sortie numériques (dont 14 peuvent être utilisées comme sorties PWM), de 16
entrées analogiques, de 4 émetteurs-récepteurs universels asynchrones (UART, ports de série de
matériel), d'un oscillateur en cristal de 16 MHz, d'une connexion USB, d'une prise de courant, d'une
embase ICSP et d'un bouton de réinitialisation. Il contient tout ce qui est nécessaire pour prendre en
charge le microcontrôleur…
Chacune des 54 broches numériques sur le Mega peuvent être utilisées en tant qu'entrée ou sortie,
en utilisant les fonctions pinMode(), digitalWrite(), et digitalRead() Il dispose également de 16
entrées analogiques, chacune d'elles disposant de 10 bits de résolution (c'est à dire 1 024 valeurs
différentes).
58
L'Arduino Mega2560 dispose d'un certain nombre de moyens pour communiquer avec un
ordinateur, un autre Arduino, ou d'autres microcontrôleurs. L'ATMEGA2560 fournit quatre UART
physiques pour des communications sérielles de type TTL (5 V). Un ATmega8U2 sur la carte
canalise l'un d'eux sur l'USB et fournit un port COM virtuel pour le logiciel sur l'ordinateur.
Microcontrôleur : ATmega2560
Tension de fonctionnement : 5 V
Tension d'entrée (recommandée) : 7 à 12 V
Tension d'entrée (limites) : 6 à 20 V
Broches E/S numériques : 54 (dont 14 fournissent la sortie PWM)
Broches d'entrée analogiques : 16
Courant alternatif par broche d'E/S : 40 mA
Courant continu pour la broche de 3,3 V : 50 mA
Mémoire Flash : 256 Ko (dont 8 Ko utilisés par le chargeur initial de programme)
SRAM : 8 Ko
EEPROM : 4 Ko
Vitesse de l'horloge : 16 MHz
Voilà tout ce que nous pouvons dire sur le contrôleur, maintenant nous passons à la partie qui
permet au robot de réagir selon les informations qu'il reçoit de l'environnement à partir de ses
capteurs, les résultats de traitement de ces informations. Cette partie représente les actionneurs.
59
Puissance: 7.78W
Couple: 81,8 m.Nm
Diamètre de l'arbre: 3.17mm
Diamètre du moteur: 30mm
La longueur du moteur: 67mm
On remarque d’appris les caractéristiques que le moteur est alimenter par une tension supérieur ou
égal a 12V, ceci nous oblige à utiliser un étage entre le contrôleur et le moteur qui joue le rôle de
circuit de puissance ou de commande, parmi plusieurs solution on a choisi le circuit L298N
puisqu’il est disponible, facile à réaliser et ça coûte pas cher, d’une part et d’une autre part un seul
circuit c’est suffisant pour commander les deux moteurs.
Dans le processus d'étalonnage de ce circuit, nous avons connecté ses entrées par les sorties
d’arduino qui donne des tensions analogique pour commander les sorties de circuit, et nous avons
connecté les entrées OUT1, OUT2 par un moteur et OUT3, OUT4 par le deuxième moteur.
A chaque fois on donne une valeur analogique par l’arduino et on mesure la tension aux bornes de
chaque moteur et sa vitesse
Remarque : puisque on a utilisé l’arduino, on la donne une valeur de 0 à 255 et elle convertie on
valeur de 0 à 5V, chaque valeur numérique est proportionnelle à une valeur analogique par la
relation suivante :
Donc pour le tableau suivant on donne les valeurs numériques au lieu des valeur analogique.
60
Figure 4.19 L’opération d’étalonnage de circuit de commande
On remarque que :
61
A peu pris à partir de la valeur numérique 37 la variation de la vitesse de chaque moteur est
proportionnel à la variation de valeur numérique.
Les courbes de tension et de vitesse des deux moteurs ont la même forme, mais ils ne sont
pas identiques.
Les courbes de tension et de vitesse des deux moteurs commencent à prend une variation
presque linière à partir de la valeur numérique 206.
Et pour la pompe nous ne se soucient seulement que par deux cas qui sont soit alimentée ou non,
donc sa circuit de commande se n'est qu'une interrupteur à base d'un transistor.
Remarque : Parce que, il doit toujours y avoir la quantité d'eau en prévision de feu, il est nécessaire
de connaître la quantité d'eau restante dans le réservoir, donc nous avons besoin d'ajouter un capteur
de niveau, et en raison que le budget ne suffit pas, nous devons trouver une autre façon de résoudre
ce problème. Nous avons réfléchir à une solution qui est de calculer le temps T1 nécessaire pour
que la pompe vider le réservoir, et pour savoir la quantité restante nous calculons le temps T2 de
fonctionnement de la pompe, et en fin la différence entre T1 et 2 avec la quantité est proportionnelle
restante.
En fin de compte, nous ne devons pas oublier que le circuit principal qui est le circuit d'alimentation
de tous les circuits dans le robot. La plupart des circuits d'alimentation contient de nombreux étages,
y compris: l'étage de transformation (généralement transformateur abaisseur), l'étage de
redressement et l'étage de régulation. Mais dans notre cas, nous utilisons un seul étage qui est
l'étage de régulation. Parce que notre source d'énergie est une batterie, donc l'existence de l'étage de
transformation n'a aucun sens car la tension de la source de basse et égale 12V, fait également pour
l'étage de redressement puisque la tension de la batterie est constante.
par contre l'utilisation de l'étage de régulation est nécessaire, pour alimenter le contrôleur on utilise
le régulateur 7809 pour abaisse la tension de 12V à 9V, régulateur 7805 pour abaisse la tension de
62
12V à 5V pour le circuit de capteur, et pour tout les parties qui sont besoin de 12V nous ne sommes
pas obligés d'utiliser un régulateur, mains on les broche directement à la batterie.
Nous avons discuté dans ce qu'il passé presque sur tout ce qu'il comprend notre robot comme des
matériels. Maintenant nous passons à l'étape de programmation.
2.3. La programmation
63
faire(String action) : pour faire les différents actions
Mise_a_jour(String capteur) : pour la mise à jour les valeurs des capteurs et le niveau de réservoir
3. La réalisation
3.1. La réalisation des circuits
64
Le circuit de commande de la pompe :
Le circuit d’alimentation :
Avant de commencer la construction, il est nécessaire de concevoir un design que nous allons
réaliser. Pour sa nous avons utilisé le logiciel Solid Edge qui nous permet de crée des différentes
pièces et les assembler.
65
Figure 4.23 Solid Edge
Au début, nous avons choisi la forme sous laquelle il sera le robot, ceci est illustré dans la figure ci-
dessous.
Et maintenant, selon nos matières premières, nous avons divisé la structure en trois parties
principales: le côté droit, le côté gauche et le côté arrière, comme illustré dans la figure suivante:
66
Parce que la forme devient maintenant claire, nous pouvons commencer à la concevoir sous le
logiciel et aussi les autres pièces.
Après le processus de conception, nous pouvons commencer à réalise les pièces selon le plan.
Plaque de
l’avant
Plaque du
bas
Plaque du
coté
Plaque du
haut
Roulement
Axe
pignon
roue avant
67
roue
arrière
moteur
Pompe
d’eau
batterie
boutie
d'eau
Châssis réalisé
68
Le cadre sous le logiciel
Le cadre réalisé
69
Face de haut Face de bas
Remarque :
Après assemblage du cadre, et le test du robot nous avons trouvé un problème dans sa
fonctionnement qui est, il ne marche pas tout droit.
70
Figure 4.30 Mauvaise fonctionnement du robot
Nous avons pensé à la cause du problème, et nous avons remarqué d'après l'étalonnage de circuit de
commande, que les sorties liées au moteur 1 sont toujours élevé par rapport les sorties liées au
moteur 2, donc nous changeons le circuit de commande trois fois, mais le problème reste comme il
est.
Puis nous avons pensé que le problème peut être du cadre lui même, et quand nous avons le vérifié,
effectivement nous avons constaté que la côté arrière est inferieur de la côté avant par 1.3 cm, de
nouveau nous avons reconstruire le cadre encore une fois. Mais cela ne résout pas complètement le
problème, mais légèrement amélioré.
71
Figure 4.32 L’ancien cadre
En fin et après une réflexion profondé nous avons atteint une solution mathématique qui est comme
suit, nous avons remarqué que dans l'intervalle [206 , 255] de chaque courbe d'étalonnage de circuit
de commande, la variations est presque linéaire, nous avons extrait la fonction linéaire pour chacun
des deux courbes l'aide de Microsoft Office Excel, et puisque la fonction du moteur 2 est toujours
petit devant la fonction du moteur 1, donc nous avons fixé la valeur de sortie du moteur 2, et nous
avons extrait la valeur de sortie du moteur 1 de sa fonction linéaire. Et comme ça le problème est
résolu définitivement.
72
Figure 4.33 Bonne fonctionnement du robot
Nous notons ici que le temps que nous avons passé pour trouver une solution pour dépasser deux
mois.
Contrôle à distance
Pour contrôler le robot à distance nous avons utilisé l’application QuickRemote de téléphone
mobile pour crée un télécommande spéciale pour le robot.
La création d’une nouvelle télécommande se fait par l’ajout des touches nécessaire puis
configuration les ordres émis par chaque touche
73
Figure 4.35 La télécommande crée
5. Le teste de robot
Le démarrage du robot
74
Le robot va vers la flamme
75
6. Conclusion:
Dans ce dernier chapitre, nous avons explicité les différentes étapes qui nous ont permis de
réaliser ce robot, ces composants utilisés et leurs tâches, on a présenté aussi une description général
du programme arduino implémenté sur la carte électronique.
76
Conclusion générale
Conclusion générale:
Nous avons donc pu réaliser l’objectif de notre projet qui est l’utilisation de logiciel et carte
électronique arduino pour manipuler un robot mobile a trois roues. Nous avons étudié tout d’abord
les principales caractéristiques d’un robot et en particulier le robot mobile. On a ensuite essayé de
parler des différents composants utilisés pour construire se robot: de moteurs vers les capteurs
jusqu' arduino et microcontrôleurs pour mieux comprendre son fonctionnement et pouvoir ensuite
générer les signaux de commandes qui seront envoyés a partir de la carte électronique.
Ce projet pourra plutôt servir de base pour commander d’autres systèmes ou d'autres robots qu'ils
ont des différents taches et applications selon le besoin.
78
Annexe A :
Les tableaux d’étalonnage
Annexe A : Les tableaux d’étalonnage
Tableau 4.1 L’étalonnage de distance des capteurs infrarouge
79
571 85 716 344 85 473 210 85 337
571 90 729 344 90 457 210 90 334
571 95 718 344 95 438 210 95 339
571 100 737 344 100 439 210 100 334
571 105 694 344 105 452 210 105 315
571 110 696 344 110 431 210 110 314
571 115 694 344 115 443 210 115 303
571 120 682 344 120 431 210 120 300
571 125 677 344 125 416 210 125 297
571 130 663 344 130 418 210 130 295
571 135 668 344 135 408 210 135 286
571 140 666 344 140 403 210 140 277
571 145 670 344 145 400 210 145 295
571 150 665 344 150 407 210 150 279
80
Tableau 4.2 L’étalonnage angulaire des capteurs infrarouge
81
870 70 464 808 70 227 772 70 197
870 75 456 808 75 218 772 75 223
870 80 446 808 80 215 772 80 222
870 85 442 808 85 183 772 85 171
870 90 438 808 90 183 772 90 183
870 95 446 808 95 176 772 95 183
870 100 444 808 100 174 772 100 155
870 105 449 808 105 157 772 105 151
870 110 464 808 110 165 772 110 140
870 115 464 808 115 150 772 115 132
870 120 457 808 120 138 772 120 135
870 125 459 808 125 142 772 125 128
870 130 464 808 130 149 772 130 107
870 135 450 808 135 136 772 135 125
870 140 447 808 140 141 772 140 119
870 145 457 808 145 133 772 145 114
870 150 446 808 150 137 772 150 120
82
Valeur Valeur de Valeur Valeur de Valeur Valeur de
Distance Distance Distance
ambiante précision ambiante précision ambiante précision
108 5 873 43 5 693 25 5 872
108 10 869 43 10 871 25 10 869
108 15 868 43 15 863 25 15 861
108 20 795 43 20 752 25 20 533
108 25 560 43 25 473 25 25 313
108 30 360 43 30 297 25 30 209
108 35 222 43 35 186 25 35 121
108 40 201 43 40 122 25 40 98
108 45 131 43 45 86 25 45 110
108 50 111 43 50 79 25 50 73
108 55 84 43 55 71 25 55 59
108 60 92 43 60 68 25 60 38
108 65 71 43 65 49 25 65 46
108 70 55 43 70 38 25 70 32
108 75 53 43 75 43 25 75 25
108 80 41 43 80 31 25 80 34
108 85 38 43 85 26 25 85 18
108 90 47 43 90 21 25 90 18
108 95 38 43 95 26 25 95 16
108 100 36 43 100 18 25 100 66
108 105 41 43 105 19 25 105 10
108 110 31 43 110 18 25 110 9
108 115 23 43 115 13 25 115 10
108 120 30 43 120 13 25 120 8
108 125 29 43 125 15 25 125 9
108 130 28 43 130 10 25 130 7
108 135 19 43 135 11 25 135 8
108 140 19 43 140 9 25 140 6
108 145 22 43 145 11 25 145 5
108 150 20 43 150 9 25 150 6
83
Valeur Valeur de Valeur Valeur de Valeur Valeur de
Angle Angle Angle
ambiante précision ambiante précision ambiante précision
234 -30 23 187 -30 16 19 -30 1
234 -25 24 187 -25 17 19 -25 1
234 -20 26 187 -20 18 19 -20 3
234 -15 31 187 -15 22 19 -15 5
234 -10 42 187 -10 37 19 -10 14
234 -5 46 187 -5 41 19 -5 21
234 0 49 187 0 50 19 0 28
234 5 39 187 5 40 19 5 11
234 10 34 187 10 27 19 10 8
234 15 28 187 15 24 19 15 5
234 20 26 187 20 21 19 20 2
234 25 24 187 25 21 19 25 2
234 30 24 187 30 21 19 30 2
84
8 0,106 0,0753 0 0 136 6,64 6,18 907 847
9 0,1252 0,0911 0 0 137 6,51 6,23 910 851
10 0,145 0,11 0 0 138 6,57 6,31 913 856
11 0,166 0,1256 0 0 139 6,62 6,35 915 860
12 0,188 0,1435 0 0 140 6,64 6,37 920 865
13 0,21 0,163 0 0 141 6,7 6,43 927 870
14 0,242 0,183 0 0 142 6,73 6,64 934 873
15 0,265 0,204 0 0 143 6,76 6,53 949 880
16 0,29 0,226 0 0 144 6,82 6,59 955 887
17 0,315 0,248 0 0 145 6,88 6,65 960 893
18 0,344 0,27 0 0 146 6,9 6,69 973 908
19 0,372 0,292 0 0 147 6,94 6,66 978 914
20 0,4 0,316 0 0 148 6,98 6,7 981 918
21 0,45 0,34 0 0 149 7 6,82 986 929
22 0,48 0,366 0 0 150 7,06 6,83 997 936
23 0,505 0,383 0 0 151 7,11 6,86 1009 940
24 0,55 0,412 0 0 152 7,12 6,85 1015 944
25 0,58 0,42 0 0 153 7,14 6,86 1020 946
26 0,632 0,442 0 0 154 7,17 6,89 1024 951
27 0,678 0,469 0 0 155 7,19 6,91 1031 957
28 0,748 0,495 0 0 156 7,22 6,97 1036 963
29 0,834 0,52 5 0 157 7,24 6,95 1041 965
30 0,942 0,544 6 0 158 7,27 6,99 1045 970
31 1,084 0,567 43 0 159 7,3 7,06 1048 976
32 1,185 0,581 58 0 160 7,32 7,03 1053 982
33 1,247 0,691 60 0 161 7,41 7,15 1060 986
34 1,32 0,714 68 0 162 7,45 7,16 1064 990
35 1,4 0,79 81 0 163 7,42 7,15 1069 994
36 1,477 0,867 92 1 164 7,48 7,18 1071 999
37 1,51 1,018 100 8 165 7,52 7,21 1075 1002
38 1,612 1,13 113 29 166 7,56 7,27 1079 1010
39 1,696 1,23 128 50 167 7,61 7,3 1084 1017
40 1,78 1,277 138 61 168 7,65 7,33 1089 1021
41 1,86 1,363 158 79 169 7,69 7,38 1092 1026
42 1,93 1,441 165 86 170 7,72 7,46 1096 1030
43 2 1,525 173 93 171 7,74 7,44 1100 1033
44 2,06 1,634 202 109 172 7,78 7,47 1104 1038
45 2,15 1,7 207 129 173 7,84 7,58 1109 1042
46 2,18 1,78 211 132 174 7,87 7,59 1112 1046
47 2,25 1,82 214 137 175 7,89 7,62 1116 1049
48 2,3 1,907 219 149 176 7,91 7,66 1121 1055
49 2,36 1,957 225 158 177 7,93 7,69 1125 1060
50 2,42 2,06 233 168 178 7,96 7,7 1130 1064
51 2,48 2,08 240 183 179 8 7,76 1138 1066
52 2,53 2,17 247 197 180 8,04 7,78 1143 1070
53 2,57 2,23 254 215 181 8,08 7,81 1148 1074
54 2,63 2,28 261 221 182 8,12 7,87 1154 1078
55 2,68 2,34 268 230 183 8,17 7,9 1159 1082
56 2,73 2,4 278 236 184 8,19 7,92 1163 1085
57 2,79 2,45 286 245 185 8,22 7,97 1167 1089
58 2,84 2,51 292 258 186 8,27 7,98 1173 1092
59 2,9 2,56 305 270 187 8,29 8 1178 1092
85
60 2,94 2,61 310 285 188 8,33 8,04 1184 1096
61 3 2,65 313 285 189 8,36 8,08 1187 1104
62 3,04 2,73 315 290 190 8,38 8,1 1191 1108
63 3,08 2,76 320 296 191 8,42 8,14 1196 1112
64 3,15 2,83 334 304 192 8,45 8,19 1201 1116
65 3,17 2,88 345 325 193 8,49 8,2 1207 1120
66 3,23 2,94 354 334 194 8,5 8,24 1210 1125
67 3,29 2,97 362 345 195 8,53 8,26 1215 1129
68 3,33 3,03 371 350 196 8,55 8,27 1222 1132
69 3,38 3,08 385 357 197 8,57 8,33 1224 1136
70 3,42 3,15 390 360 198 8,6 8,34 1228 1139
71 3,47 3,2 396 374 199 8,63 8,35 1233 1143
72 3,51 3,23 401 377 200 8,64 8,4 1236 1147
73 3,56 3,33 413 401 201 8,68 8,41 1241 1151
74 3,61 3,38 423 408 202 8,72 8,43 1247 1158
75 3,65 3,4 439 402 203 8,74 8,45 1251 1160
76 3,7 3,45 439 420 204 8,76 8,47 1256 1163
77 3,75 3,53 445 414 205 8,85 8,51 1265 1167
78 3,79 3,59 456 426 206 10,18 9,9 1440 1332
79 3,83 3,61 463 433 207 10,21 9,9 1442 1332
80 3,89 3,67 483 441 208 10,23 9,95 1453 1333
81 3,95 3,71 500 468 209 10,27 9,98 1457 1336
82 4 3,79 516 472 210 10,28 9,99 1461 1347
83 4,04 3,82 533 485 211 10,29 10 1465 1351
84 4,08 3,88 538 495 212 10,3 10,02 1469 1355
85 4,17 3,9 545 507 213 10,32 10,04 1473 1360
86 4,21 3,93 566 512 214 10,37 10,06 1477 1363
87 4,24 3,96 574 526 215 10,35 10,08 1474 1367
88 4,54 4,34 589 545 216 10,36 10,1 1476 1372
89 4,6 4,39 596 554 217 10,37 10,1 1477 1372
90 4,64 4,43 602 569 218 10,39 10,12 1482 1378
91 4,68 4,48 611 577 219 10,41 10,14 1487 1383
92 4,74 4,53 620 595 220 10,43 10,16 1494 1389
93 4,78 4,57 647 597 221 10,46 10,21 1497 1399
94 4,82 4,61 654 605 222 10,47 10,22 1509 1408
95 4,88 4,64 660 609 223 10,5 10,25 1513 1422
96 4,92 4,68 675 614 224 10,52 10,26 1519 1436
97 4,97 4,72 681 617 225 10,53 10,28 1521 1442
98 5,02 4,79 692 624 226 10,55 10,31 1526 1447
99 5,06 4,84 702 653 227 10,57 10,34 1532 1452
100 5,1 4,89 711 662 228 10,6 10,36 1535 1461
101 5,15 4,94 715 666 229 10,62 10,39 1540 1466
102 5,19 4,9 722 686 230 10,64 10,43 1544 1470
103 5,21 4,95 724 655 231 10,67 10,48 1547 1475
104 5,15 4,95 691 633 232 10,69 10,52 1552 1484
105 5,22 5 720 635 233 10,71 10,55 1558 1487
106 5,28 5,06 722 638 234 10,73 10,58 1563 1493
107 5,32 5,1 724 642 235 10,76 10,62 1570 1501
108 5,37 5,13 731 659 236 10,77 10,67 1575 1508
109 5,41 5,19 738 665 237 10,8 10,71 1581 1516
110 5,46 5,23 743 677 238 10,83 10,75 1586 1521
111 5,5 5,28 755 685 239 10,86 10,79 1589 1531
86
112 5,54 5,33 768 691 240 10,88 10,83 1592 1537
113 5,58 5,36 786 700 241 10,91 10,86 1595 1544
114 5,63 5,4 794 712 242 10,92 10,88 1598 1549
115 5,66 5,45 798 719 243 10,93 10,91 1600 1555
116 5,71 5,46 802 723 244 10,96 10,95 1605 1562
117 5,75 5,52 807 727 245 11 10,99 1609 1576
118 5,79 5,53 813 732 246 11,03 11,02 1613 1585
119 5,82 5,6 815 738 247 11,07 11,06 1617 1593
120 5,87 5,63 817 743 248 11,11 11,1 1624 1600
121 5,9 5,66 819 747 249 11,14 11,15 1633 1606
122 5,93 5,7 828 755 250 11,19 11,21 1640 1630
123 5,98 5,74 833 759 251 11,24 11,25 1646 1637
124 6,03 5,78 840 768 252 11,27 11,29 1649 1641
125 6,07 5,83 850 783 253 11,31 11,33 1661 1646
126 6,12 5,9 861 787 254 11,36 11,38 1669 1652
127 6,15 5,9 875 790 255 11,41 11,43 1676 1672
87
Annexe B :
Algorithme et programme
Annexe B : Algorithme et programme
Le programme global :
Algorithme robot ;
Var C : String; Commande : String =’manu’ ;
Début
Si (il y a réception) Alors
Commande réception() ;
FinSi
Au cas où (Commande) vau
‘manu’ : marcher_manu() ;
‘auto’ : marcher_auto() ;
Fin de cas
Fin
Fin algorithme
La fonction marcher_manu() :
Procédure marcher_manu()
Const en1: Byte=34; en2: Byte=35; in1: Byte=2; in2: Byte=3; in3: Byte=4; in4: Byte=5; pmp:
Byte=27;
Var Ordre : String; v_if: int ; v_thr: int ; niveau :int ;
Début :
Si (il y a réception) Alors
Ordre réception();
FinSi
Au cas où (Ordre) vau
‘Avant’ :
Si (Vérifier_obstacle() = 0) Alors
faire(‘av’) ;
Sinon
faire(‘st’) ;
FinSi
‘Arriérer’ :
faire(‘ar’) ;
‘Droit’ :
Si (Vérifier_obstacle() = 0) Alors
faire(‘dr’) ;
Sinon
faire(‘st’) ;
FinSi
‘Gauche’ :
Si (Vérifier_obstacle() = 0) Alors
faire(‘gc’) ;
Sinon
faire(‘st’) ;
88
FinSi
‘Pompe’ :
faire(‘pmp’) ;
‘Stop’ :
faire(‘st’) ;
‘maj_if :
v_if= Mise_à_jour(‘cpif’) ;
‘maj_thr :
v_thr= Mise_à_jour(‘cpthr’) ;
‘niv’ :
niveau= Mise_à_jour(‘niv’) ;
Fin de cas
Fin
La fonction marcher_auto() :
Procédure marcher_auto()
Var Coté : String;
Début
Si (Vérifier_flamme() = ‘rien’) Alors
Si (Vérifier_obstacle() = 0) Alors
faire (‘av’) ;
Sinon
Repeter
faire (‘dr’) ;
Tant que (Vérifier_obstacle() = 1)
faire (‘st’) ;
FinSi
Sinon
Tant que (Vérifier_flamme() ≠ ‘flamme’) Faire
Si (Vérifier_obstacle() = 0) Alors
Coté Vérifier_flamme() ;
Positionner(Coté) ;
faire (‘av’) ;
attendre (1000ms) ;
faire (‘st’) ;
Sinon
Repeter
faire (‘dr’) ;
Tant que (Vérifier_obstacle() = 1)
faire (‘av’) ;
attendre(2000ms) ;
faire (‘st’) ;
FinSi
Tant que (Vérifier_flamme() = ‘flamme’) Faire
faire (‘pmp’)
89
FinSi
Fin
La fonction Vérifier_obstacle() :
La fonction Vérifier_flamme() :
Fonction Vérifier_flamme()
Const cif_av :Byte= 0; cif_dr :Byte=1 ; cif_ar :Byte=2 ; cif_gc :Byte=3 ; cthr:Byte=5 ; val_nrm_if:
int =Mise_à_jour("cpif")+10; val_nrm_thr: int =Mise_à_jour("cpthr")+20;
Var val_av:int; val_dr:int; val_ar:int; val_gc:int; val_thr:int;val_max:int;
Var sig_fvf :String;
Début
val_av lire cif_av;
val_dr lire cif_dr;
val_ar lire cif_ar;
val_gc lire cif_gc;
90
val_pr lire cif_pr;
val_thr lire cif_thr;
val_max max(val_av, val_dr) ;
val_max max(val_max, val_ar) ;
val_max max(val_max, val_gc) ;
val_fnct_if =Mise_à_jour(‘cpif’) ;
Si( (val_av > val_nrm_if) et (val_av >= val_max)) Alors
Si (val_dr > val_gc) Alors
Sig_fvf = ‘av_dr’ ;
Sinon Si (val_gc > val_dr) Alors
Sig_fvf = ‘av_gc’ ;
Sinon
Sig_fvf= ‘av’ ;
FinSi
Sinon Si ((val_ar > val_nrm_if) et (val_ar >= val_max)) Alors
Si (val_dr > val_gc) Alors
Sig_fvf = ‘ar_dr’ ;
Sinon Si (val_gc > val_dr) Alors
Sig_fvf = ‘ar_gc’ ;
Sinon
Sig_fvf= ‘ar’ ;
FinSi
Sinon Si (val_dr > val_nrm_if) et (val_dr >= val_max)) Alors
Sig_fvf= ‘dr’ ;
Sinon Si (val_gc > val_nrm_if) et (val_gc >= val_max)) Alors
Sig_fvf= ‘gc’ ;
Sinon
Sig_fvf = ‘rien’
FinSi
Si (val_thr > val_nrm_thr) Alors
Si (Sig_fvf ≠ rien) Alors
Sig_fvf =’flamme’ ;
FinSi
FinSi
Fin
La fonction Positionner() :
91
faire(‘dr’) ;
attendre(20ms) ;
faire(‘st’) ;
Tant que (val_pr < lire cif_pr) Faire
val_pr lire cif_pr ;
faire(‘dr’) ;
attendre(20ms) ;
faire(‘st’) ;
faire(‘gc’) ;
attendre(20ms) ;
faire(‘st’) ;
‘av_gc’ :
faire(‘gc’) ;
attendre(20ms) ;
faire(‘st’) ;
Tant que (val_pr < lire cif_pr) Faire
val_pr lire cif_pr
faire(‘gc’) ;
attendre(20ms) ;
faire(‘st’) ;
faire(‘dr’) ;
attendre(20ms) ;
faire(‘st’) ;
‘ar_dr’ :
val_ar lire cif_ar -20 ;
Tant que (lire cif_av < val_ar) Faire
faire(‘dr’) ;
faire(‘st’) ;
Tant que (val_pr < lire cif_pr) Faire
val_pr lire cif_pr ;
faire(‘dr’) ;
attendre(20ms) ;
faire(‘st’) ;
faire(‘gc’) ;
attendre(20ms) ;
faire(‘st’) ;
‘ar_gc’ :
val_ar lire cif_ar -20 ;
Tant que (lire av < val_ar) Faire
faire(‘gc’) ;
faire(‘st’) ;
Tant que (val_pr < lire cif_pr) Faire
val_pr lire cif_pr ;
faire(‘gc’) ;
attendre(20ms) ;
faire(‘st’) ;
92
faire(‘dr’) ;
attendre(20ms) ;
faire(‘st’) ;
‘av’ :
faire(‘dr’) ;
attendre(20ms) ;
faire(‘st’) ;
Si (val_pr < lire cif_pr) Alors
Tant que (val_pr < lire cif_pr) Faire
val_pr lire cif_pr ;
faire(‘dr’) ;
attendre(20ms) ;
faire(‘st’) ;
faire(‘gc’) ;
attendre(20ms) ;
faire(‘st’) ;
Sinon Si (val_pr > lire cif_pr) Alors
faire(‘gc’) ;
attendre(40ms) ;
faire(‘st’) ;
Tant que (val_pr < lire cif_pr) Faire
val_pr lire cif_pr ;
faire(‘gc’) ;
attendre(20ms) ;
faire(‘st’) ;
faire(‘dr’) ;
attendre(20ms) ;
faire(‘st’) ;
FinSi
‘ar’ :
Val_ar lire cif_ar-20
Tant que (lire av < Val_ar) Faire
faire(‘dr’) ;
faire(‘st’) ;
Tant que (val_pr < lire cif_pr) Faire
val_pr lire cif_pr ;
faire(‘dr’) ;
attendre(20ms) ;
faire(‘st’) ;
faire(‘gc’) ;
attendre(20ms) ;
faire(‘st’) ;
Fin de cas
Fin
La fonction faire() :
93
Procédure faire(String action)
Const en1: Byte=34; en2: Byte=35; in1: Byte=2; in2: Byte=3; in3: Byte=4; in4: Byte=5; pmp:
Byte=27; led_rouge:Byte=42; ig: int=200; id:int =(((7.0358*ig)-628.21))/4.617; istp: int=90;
Var i:int;act_prcd: String;
Début
définie en1 comme sortie ;
définie en2 comme sortie ;
définie in1 comme sortie ;
définie in2 comme sortie ;
définie in3 comme sortie ;
définie in4 comme sortie ;
définie pmp comme sortie ;
ecrire_numérique(en1, 0) ;
ecrire_numérique(en2, 0) ;
ecrire_numérique(in1, 0) ;
ecrire_numérique(in2, 0) ;
ecrire_numérique(in3, 0) ;
ecrire_numérique(in4, 0) ;
ecrire_numérique(pmp, 0) ;
Au cas où (action) vau
‘av’ :
ecrire_numérique(en1, 1) ;
ecrire_numérique(en2, 1) ;
ecrire_analogique(in1, id) ;
ecrire_numérique(in2, 0) ;
ecrire_analogique(in3, ig) ;
ecrire_numérique(in4, 0) ;
act_prcd ‘av’ ;
‘ar’ :
ecrire_numérique(en1, 1) ;
ecrire_numérique(en2, 1) ;
ecrire_numérique(in1, 0) ;
ecrire_analogique(in2, id) ;
ecrire_numérique(in3, 0) ;
ecrire_analogique(in4, ig) ;
act_prcd ‘ar’ ;
‘dr’ ;
ecrire_numérique(en1, 0) ;
ecrire_numérique(en2, 1) ;
ecrire_ numérique (in1, 0) ;
ecrire_numérique(in2, 0) ;
ecrire_analogique(in3, ig) ;
ecrire_numérique(in4, 0) ;
act_prcd ‘dr’ ;
‘gc’ :
ecrire_numérique(en1, 1) ;
94
ecrire_numérique(en2, 0) ;
ecrire_analogique(in1, id) ;
ecrire_numérique(in2, 0) ;
ecrire_ numérique(in3, 0) ;
ecrire_numérique(in4, 0) ;
act_prcd ‘gv’ ;
‘st’ :
i=50,
Si (act_prcd = ‘av’) Alors
Pour i de 50 à istp pas 1 faire
ecrire_numérique(en1, 1) ;
ecrire_numérique(en2, 1) ;
ecrire_numérique(in1, 0) ;
ecrire_analogique(in2, i) ;
ecrire_numérique(in3, 0) ;
ecrire_analogique(in4, i) ;
attendre (20us) ;
FinPour
ecrire_numérique(en1, 0) ;
ecrire_numérique(en2, 0) ;
ecrire_numérique(in1, 0) ;
ecrire_numérique(in2, 0) ;
ecrire_numérique(in3, 0) ;
ecrire_numérique(in4, 0) ;
Sinon Si (act_prcd = ‘ar’) Alors
Pour i de 50 à istp pas 1 faire
ecrire_numérique(en1, 1) ;
ecrire_numérique(en2, 1) ;
ecrire_analogique(in1, i) ;
ecrire_numérique(in2, 0) ;
ecrire_analogique(in3, i) ;
ecrire_numérique(in4, 0) ;
attendre (20us) ;
FinPour
ecrire_numérique(en1, 0) ;
ecrire_numérique(en2, 0) ;
ecrire_numérique(in1, 0) ;
ecrire_numérique(in2, 0) ;
ecrire_numérique(in3, 0) ;
ecrire_numérique(in4, 0) ;
Sinon Si (act_prcd = ‘dr’) Alors
Pour i de 50 à istp pas 1 faire
ecrire_numérique(en1, 1) ;
ecrire_numérique(en2, 0) ;
ecrire_numérique (in1, 0) ;
ecrire_numérique(in2, 0) ;
95
ecrire_ numérique(in3, 0) ;
ecrire_analogique(in4, i) ;
attendre (20us) ;
FinPour
ecrire_numérique(en1, 0) ;
ecrire_numérique(en2, 0) ;
ecrire_numérique(in1, 0) ;
ecrire_numérique(in2, 0) ;
ecrire_numérique(in3, 0) ;
ecrire_numérique(in4, 0) ;
Sinon Si (act_prcd = ‘gc’) Alors
Pour i de 50 à istp pas 1 faire
ecrire_numérique(en1, 0) ;
ecrire_numérique(en2, 1) ;
ecrire_ numérique(in1, 0) ;
ecrire_analogique(in2, i) ;
ecrire_numérique(in3, 0) ;
ecrire_numérique(in4, 0)
attendre (20us) ;
FinPour
ecrire_numérique(en1, 0) ;
ecrire_numérique(en2, 0) ;
ecrire_numérique(in1, 0) ;
ecrire_numérique(in2, 0) ;
ecrire_numérique(in3, 0) ;
ecrire_numérique(in4, 0) ;
Sinon
ecrire_numérique(en1, 0) ;
ecrire_numérique(en2, 0) ;
ecrire_numérique(in1, 0) ;
ecrire_numérique(in2, 0) ;
ecrire_numérique(in3, 0) ;
ecrire_numérique(in4, 0) ;
FinSi
act_prcd ‘st’ ;
‘pmp’ :
Si (niveau < 120000)
ecrire_numérique(pmp, 1) ;
attendre(2000ms) ;
ecrire_numérique(pmp, 0) ;
niveau niveau+1 ;
Sinon
ecrire_numérique(led_rouge, 1) ;
attendre(500ms) ;
ecrire_numérique(led_rouge, 0) ;
FinSi
96
Fin de cas
Fin
La fonction Mise_à_jour() :
La fonction réception() :
97
2160032644:
val_rec ‘Avant’ ;
2160028564:
val_rec ‘Arriérer’ ;
2160008164:
val_rec ‘Droit’ ;
2160057124:
val_rec ‘Gauche’ ;
2160024484:
val_rec ‘Pompe’ ;
2160061204:
val_rec ‘maj_if’ ;
2160055084:
val_rec ‘maj_thr’ ;
2160046924:
val_rec ‘niv’;
2160016324 :
val_rec ‘Stop’;
4294967295 :
val_rec val_rec ;
Fin de cas
Return(val_rec);
Fin
Le programme
#include <IRremote.h>
const byte in_rc = 30, trig_ob = 22, echo_ob = 23, trig_fr = 24, echo_fr = 25, cif_av = 0, cif_dr = 1, cif_ar = 2,
cif_gc = 3, cthr = 5, cif_pr = 4, en1 = 34, en2 = 35, in1 = 2, in2 = 3, in3 = 4, in4 = 5, pmp = 27, led_rouge = 42;
String Commande;
int niveau, val_nrm_if, val_nrm_thr;
IRrecv irrecv(in_rc);
decode_results results;
void setup()
{
irrecv.enableIRIn();
pinMode(led_rouge, OUTPUT);
pinMode(trig_ob, OUTPUT);
digitalWrite(trig_ob, 0);
pinMode(echo_ob, INPUT);
pinMode(trig_fr, OUTPUT);
digitalWrite(trig_fr, 0);
pinMode(echo_fr, INPUT);
pinMode(en1, OUTPUT);
pinMode(en2, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
98
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(pmp, OUTPUT);
pinMode(led_rouge, OUTPUT);
digitalWrite(en1, 0);
digitalWrite(en2, 0);
digitalWrite(in1, 0);
digitalWrite(in2, 0);
digitalWrite(in3, 0);
digitalWrite(in4, 0);
digitalWrite(pmp, 0);
digitalWrite(led_rouge, 0);
niveau = Mise_a_jour("niv");
val_nrm_if = Mise_a_jour("cpif")+10;
val_nrm_thr = Mise_a_jour("cpthr")+20;
}
void loop()
{
if (irrecv.decode(&results))
{
Commande = reception();
irrecv.resume();
}
Commande = Commande;/*……………………………………….*/
if (Commande == "auto")
{
marcher_auto();
}
else
{
marcher_manu();
}
}
String reception()
{
unsigned long rec;
String val_rec;
rec = results.value;
switch (rec)
{
case 2160004084 :
val_rec = "manu";
break;
case 2160014284:
val_rec = "auto";
break;
case 2160032644 :
99
val_rec = "Avant";
break;
case 2160028564 :
val_rec = "Arriérer";
break;
case 2160008164 :
val_rec = "Droit";
break;
case 2160057124 :
val_rec = "Gauche";
break;
case 2160024484 :
val_rec = "Pompe";
break;
case 2160061204 :
val_rec = "maj_if";
break;
case 2160055084 :
val_rec = "maj_thr";
break;
case 2160046924:
val_rec = "niv";
break;
case 2160016324:
val_rec = "Stop";
break;
case 4294967295:
val_rec = val_rec;
break;
}
return (val_rec);
}
void marcher_manu()
{
String Ordre;
if (irrecv.decode(&results))
{
Ordre = reception();
irrecv.resume();
}
if (Ordre == "Avant")
{
if (Verifier_obstacle() == 0)
{
faire("av");
}
else
100
{
faire("st");
}
}
else if (Ordre == "Arriérer")
{
faire("ar");
}
else if (Ordre == "Droit")
{
if (Verifier_obstacle() == 0)
{
faire("dr");
}
else
{
faire("st");
}
}
else if (Ordre == "Gauche")
{
if (Verifier_obstacle() == 0)
{
faire("gc");
}
else
{
faire("st");
}
}
else if (Ordre == "Stop")
{
faire("st");
}
else if (Ordre == "Pompe")
{
faire("pmp");
}
else if (Ordre == "maj_if")
{
val_nrm_if = Mise_a_jour("cpif");
}
else if (Ordre == "maj_thr")
{
val_nrm_thr = Mise_a_jour("cpthr");
}
else if (Ordre == "niv")
101
{
niveau = Mise_a_jour("niv");
}
}
void marcher_auto()
{
String Cote;
if (Verifier_flamme() == "rien")
{
if (Verifier_obstacle() == 0)
{
faire("av");
}
else
{
do
{
faire("dr");
} while (Verifier_obstacle() == 1);
faire("st");
}
}
else
{
while (Verifier_flamme() != "flamme")
{
if (Verifier_obstacle() == 0)
{
Cote = Verifier_flamme();
Positionner(Cote) ;
faire ("av") ;
delay(1000) ;
faire("st") ;
}
else
{
do
{
faire("dr");
} while (Verifier_obstacle() == 1);
faire ("av") ;
delay(2000) ;
faire("st") ;
}
}
while (Verifier_flamme() == "flamme")
{
102
faire("pmp");
}
}
}
int Verifier_obstacle()
{
const byte dis_nrm_ob = 24, dis_nrm_fr = 18;
long temps_ob, dis_ob, temps_fr, dis_fr;
int sig_fvo;
byte rep;
delayMicroseconds(2);
digitalWrite(trig_ob, 1);
delayMicroseconds(10);
digitalWrite(trig_ob, 0);
temps_ob = pulseIn(echo_ob, 1);
delayMicroseconds(2);
digitalWrite(trig_fr, 1);
delayMicroseconds(10);
digitalWrite(trig_fr, 0);
temps_fr = pulseIn(echo_fr, 1);
dis_ob = temps_ob * 340 / 20000;
dis_fr = temps_fr * 340 / 20000;
if ((dis_ob < dis_nrm_ob) || (dis_fr > dis_nrm_fr))
{
sig_fvo = 1;
}
else
{
sig_fvo = 0;
}
return (sig_fvo);
}
String Verifier_flamme()
{
int val_av, val_ar, val_dr, val_gc, val_thr, val_max;
String sig_fvf;
val_av = analogRead(cif_av);
val_ar = analogRead(cif_ar);
val_dr = analogRead(cif_dr);
val_gc = analogRead(cif_gc);
val_thr = analogRead(cthr);
val_max = max(val_av, val_ar);
val_max = max(val_max, val_dr);
val_max = max(val_max, val_gc);
if ((val_av > val_nrm_if) && (val_av >= val_max))
{
103
if (val_dr > val_gc)
{
sig_fvf = "av_dr";
}
else if (val_gc > val_dr)
{
sig_fvf = "av_gc";
}
else
{
sig_fvf = "av";
}
}
else if ((val_ar > val_nrm_if) && (val_ar >= val_max))
{
if (val_dr > val_gc)
{
sig_fvf = "ar_dr";
}
else if (val_gc > val_dr)
{
sig_fvf = "ar_gc";
}
else
{
sig_fvf = "ar";
}
}
else if ((val_dr > val_nrm_if) && (val_dr >= val_max))
{
sig_fvf = "dr";
}
else if ((val_gc > val_nrm_if) && (val_gc >= val_max))
{
sig_fvf = "gc";
}
else
{
sig_fvf = "rien";
}
if ((val_thr > val_nrm_thr))
{
if (sig_fvf != "rien")
{
sig_fvf = "flamme";
}
}
104
return (sig_fvf);
}
void faire(String action)
{
const int ig = 200, id = ((7.0358 * ig) - 628.21) / 4.617, istp = 90;
String act_prcd;
int i;
if (action == "av")
{
digitalWrite(en1, 1);
digitalWrite(en2, 1);
analogWrite(in1, id);
digitalWrite(in2, 0);
analogWrite(in3, ig);
digitalWrite(in4, 0);
act_prcd = "av";
}
else if (action == "ar")
{
digitalWrite(en1, 1);
digitalWrite(en2, 1);
digitalWrite(in1, 0);
analogWrite(in2, id);
digitalWrite(in3, 0);
analogWrite(in4, ig);
act_prcd = "ar";
}
else if (action == "dr")
{
digitalWrite(en1, 0);
digitalWrite(en2, 1);
digitalWrite(in1, 0);
digitalWrite(in2, 0);
analogWrite(in3, ig);
digitalWrite(in4, 0);
act_prcd = "dr";
}
else if (action == "gc")
{
digitalWrite(en1, 1);
digitalWrite(en2, 0);
analogWrite(in1, id);
digitalWrite(in2, 0);
digitalWrite(in3, 0);
digitalWrite(in4, 0);
act_prcd = "gc";
}
105
else if (action == "st")
{
if (act_prcd == "av")
{
for (i = 50; i <= istp; i++)
{
digitalWrite(en1, 1);
digitalWrite(en2, 1);
digitalWrite(in1, 0);
analogWrite(in2, i);
digitalWrite(in3, 0);
analogWrite(in4, i);
delayMicroseconds(20);
}
digitalWrite(en1, 0);
digitalWrite(en2, 0);
digitalWrite(in1, 0);
digitalWrite(in2, 0);
digitalWrite(in3, 0);
digitalWrite(in4, 0);
}
else if (act_prcd == "ar")
{
for (i = 50; i <= istp; i++)
{
digitalWrite(en1, 1);
digitalWrite(en2, 1);
analogWrite(in1, i);
digitalWrite(in2, 0);
analogWrite(in3, i);
digitalWrite(in4, 0);
delayMicroseconds(50);
}
digitalWrite(en1, 0);
digitalWrite(en2, 0);
digitalWrite(in1, 0);
digitalWrite(in2, 0);
digitalWrite(in3, 0);
digitalWrite(in4, 0);
}
else if (act_prcd == "dr")
{
for (i = 50; i <= istp; i++)
{
digitalWrite(en1, 1);
digitalWrite(en2, 1);
digitalWrite(in1, 0);
106
digitalWrite(in2, 0);
digitalWrite(in3, 0);
analogWrite(in4, i);
delayMicroseconds(50);
}
digitalWrite(en1, 0);
digitalWrite(en2, 0);
digitalWrite(in1, 0);
digitalWrite(in2, 0);
digitalWrite(in3, 0);
digitalWrite(in4, 0);
}
else if (act_prcd == "gc")
{
for (i = 50; i <= istp; i++)
{
digitalWrite(en1, 1);
digitalWrite(en2, 1);
digitalWrite(in1, 0);
analogWrite(in2, i);
digitalWrite(in3, 0);
digitalWrite(in4, 0);
delayMicroseconds(50);
}
digitalWrite(en1, 0);
digitalWrite(en2, 0);
digitalWrite(in1, 0);
digitalWrite(in2, 0);
digitalWrite(in3, 0);
digitalWrite(in4, 0);
}
else
{
digitalWrite(en1, 0);
digitalWrite(en2, 0);
digitalWrite(in1, 0);
digitalWrite(in2, 0);
digitalWrite(in3, 0);
digitalWrite(in4, 0);
digitalWrite(pmp, 0);
}
act_prcd == "st";
}
else if (action == "pmp")
{
if (niveau < 120000)
107
{
digitalWrite(pmp, 1);
delay(2000);
digitalWrite(pmp, 0);
delay(1000);
niveau++;
}
else
{
digitalWrite(led_rouge, 1);
delay(500);
digitalWrite(led_rouge, 0);
delay(500);
}
}
}
108
v_cp = 0;
digitalWrite(led_rouge, 0);
}
return (v_cp);
}
void Positionner(String direct)
{
int val_pr, val_av, val_ar;
val_pr = analogRead(cif_pr);
if (direct == "av_dr")
{
faire("dr");
delay(20);
faire("st");
while (val_pr < analogRead(cif_pr))
{
val_pr = analogRead(cif_pr);
faire("dr");
delay(20);
faire("st");
}
faire("gc");
delay(20);
faire("st");
}
else if (direct == "av_gc")
{
faire("gc");
delay(20);
faire("st");
while (val_pr < analogRead(cif_pr))
{
val_pr = analogRead(cif_pr);
faire("gc");
delay(20);
faire("st");
}
faire("dr");
delay(20);
faire("st");
}
else if (direct == "ar_dr")
{
val_ar = analogRead(cif_ar) - 20;
while (analogRead(cif_av < val_ar))
{
faire("dr");
109
}
faire("st");
while (val_pr < analogRead(cif_pr))
{
val_pr = analogRead(cif_pr);
faire("dr");
delay(20);
faire("st");
}
faire("gc");
delay(20);
faire("st");
}
else if (direct == "ar_gc")
{
val_ar = analogRead(cif_ar) - 20;
while (analogRead(cif_av < val_ar))
{
faire("gc");
}
faire("st");
while (val_pr < analogRead(cif_pr))
{
val_pr = analogRead(cif_pr);
faire("gc");
delay(20);
faire("st");
}
faire("dr");
delay(20);
faire("st");
}
else if (direct == "av")
{
faire("dr");
delay(20);
faire("st");
if (val_pr < analogRead(cif_pr))
{
while (val_pr < analogRead(cif_pr))
{
val_pr = analogRead(cif_pr);
faire("dr");
delay(20);
faire("st");
}
faire("gc");
110
delay(20);
faire("st");
}
else if (val_pr > analogRead(cif_pr))
{
faire("gc");
delay(40);
faire("st");
while (val_pr < analogRead(cif_pr))
{
val_pr = analogRead(cif_pr);
faire("gc");
delay(20);
faire("st");
}
faire("dr");
delay(20);
faire("st");
}
}
else if (direct == "ar")
{
val_ar = analogRead(cif_ar) - 20;
while (analogRead(cif_av < val_ar))
{
faire("dr");
}
faire("st");
while (val_pr < analogRead(cif_pr))
{
val_pr = analogRead(cif_pr);
faire("dr");
delay(20);
faire("st");
}
faire("gc");
delay(20);
faire("st");
}
}
111
Bibliographie
[1] 10 questions à Philippe Coiffet sur les robots ; Auteur : Philippe Coiffet, Editions Le Manuscrit,
2009 ; ISBN 978-2-304-02880-5
[2] Robotics: Modelling, Planning and Control; Auteur: Bruno Siciliano, Lorenzo Sciavicco,Luigi
Villani,Giuseppe Oriolo
[5] Robotics and control; Auteur: Mittal & Nagrath, ISBN 0-07-048293-4
[6] La double contrainte: L'influence des paradoxes de Bateson en Sciences humaines; Auteur :
Jean-Jacques Wittezaele
[7] Belkhadria Khemisti, "commande d’un robot mobile par réseaux de neurones artificiels"
Mémoire en vue de l’obtention du diplôme de magister en électronique. Option: Robotique.
Université El Hadj Lakhdar Batna
[8] Robotics for Electronics Manufacturing: Principles and Applications in cleanroom automation;
Auteur: Karl Mathia, ISBN978-0-521-87652-0Hardback
[10] Computer Aided Manufacturing; C. Elanchezhian,G. Shanmuga Sundar; First Edition 2005,
Second Edition 2007.
[13] Sensors and Actuators: Control System Instrumentation (Par Clarence W. de Silva); Auteur :
Clarence W. de Silva
[14] Abrégé de mesure physique (par Aurelien Pierre); Auteur : Aurélien PIERRE ; 2éme Edition
ISBN979-10-92277-01-2
[15] Les capteurs en instrumentation industrielle (par Georges Asch) ; Auteur : Georges Asch,
7éme Edition
[16] Introduction to Sensors (Par John Vetelino,Aravind Reghu); Auteur: John Vetelino,Aravind
Reghu.
[18] Précis de physique et électricité appliquées: sections de technicien ... (Par Albert Terras);
Auteur: Albert Terras; ISBN2-7495-0087-7
[19] Resistive, Capacitive, Inductive, and Magnetic Sensor Technologies (Par Winncy Y. Du);
Auteur: Winncy Y. Du
[20] Field Measurements for Forest Carbon Monitoring: A Landscape-Scale Approach ( par Coeli
M. Hoover); Auteur: Coeli M. Hoover
[21] Handbook of Sensor Networks: Compact Wireless and Wired Sensing Systems (par
Mohammad Ilyas,Imad Mahgoub); Auteur: Mohammad Ilyas,Imad Mahgoub
[24] Entraînements à Courant Continu (Par Géza Joos,Edward D. Goodman) ; Auteur : Géza
Joos,Edward D. Goodman
[27] Théorie élémentaire et pratique de la commande par les régimes glissants (Par Pierre
Lopez,Ahmed Saïd Nouri) ; Auteur : Pierre Lopez,Ahmed Saïd Nouri,ISBN10 3-540-31003-7
[28] Advanced PIC Microcontroller Projects in C: From USB to RTOS with the PIC ... (Par Dogan
Ibrahim); Auteur: Dogan Ibrahim
[29] Microcontrollers: Theory and Applications (Par Ajay V Deshmukh); Auteur: Ajay V
Deshmukh, ISBN0-07-058595-4
[31] Microcontroller and Embedded System (Par A.K. Singh); Auteur: A.K. Singh
[32] Microcontrollers: Architecture, Programming, Interfacing and System Design (Par Raj Kamal);
Auteur: Raj Kamal, ISBN978-81-317-0697-8
[33] Embedded Systems Interfacing for Engineers Using the Freescale HCS08 ... (Par Douglas
Summerville); Auteur: Douglas Summerville, ISBN9781608450053
[35] Microcontrollers Fundamentals for Engineers and Scientists (Par Steven Frank Barrett,Daniel
J. Pack); Auteur: Steven Frank Barrett,Daniel J. Pack, First Edition
[39] Langage C++ (Par Brice-Arnaud Guérin) ; Auteur : Brice-Arnaud Guérin, ISBN :2-7460-2611-
2
[40] Java Programming: Comprehensive Concepts and Techniques (Par Gary Shelly,Thomas J.
Cashman,Joy Starks,Michael Mick); Auteur: Gary Shelly,Thomas J. Cashman,Joy Starks,Michael
Mick
[41] Arduino and Kinect Projects: Design, Build, Blow Their Minds (Par Enrique Ramos Melgar,
Ciriaco Castro Diez); Auteur: Enrique Ramos Melgar, Ciriaco Castro Diez
[42] Arduino: A Complete Guide (Par Tech Guru) ; Auteur : Tech Guru
[43] Make: Arduino Bots and Gadgets: Six Embedded Projects with Open Source ... (Par Tero
Karvinen,Kimmo Karvinen) ;Auteur : Tero Karvinen,Kimmo Karvinen, ISBN978-1-449-38971-0
[45] Getting Started with Arduino (Par Massimo Banzi); Auteur: Massimo Banzi,ISBN978-1-449-
309879,First Edition
[46] Arduino Adventures: Escape from Gemini Station (Par James Floyd Kelly,Harold Timmis);
Auteur: James Floyd Kelly,Harold Timmis