Vous êtes sur la page 1sur 77

Dédicaces

Je dédie mon travail,

À mes très chers parents


Tout au long de mes études, vous avez été présents pour moi, me montrant un merveilleux exemple
de travail acharné et de persévérance. J'espère que ce travail reflétera toute ma gratitude et mon
affection pour vous.

À ma grande sœur
À travers les hauts et les bas, tu as été ma source constante d'inspiration, de soutien et d'amour
inconditionnel.
Dans ce moment spécial de mon parcours académique, je tiens à te dédier mon projet de fin d'études.
Ta présence et ton encouragement ont été des piliers solides qui m'ont guidé jusqu'ici.

Aux membres du jury


J’adresse mes plus sincères remerciements pour leur engagement et leur expertise. Leurs conseils
avisés, leur rigueur et leur exigence m’ont poussé à dépasser mes limites et à donner le meilleur de
moi-même.

Oussama Taif
Je dédie mon travail,

À mes très chers parents


Un grand merci à mon père, pour leurs conseils, ainsi que leur soutien inconditionnel, à la fois moral et
économique.
À ma maman, qui m’a soutenu et encouragé durant ces années d’études. Qu’elle trouve ici le
témoignage de ma profonde reconnaissance.

Aux membres du jury


J’adresse mes plus sincères remerciements pour leur engagement et leur expertise. Leurs conseils avisés,
leur rigueur et leur exigence m’ont poussé à dépasser mes limites et à donner le meilleur de moi-même.

À ma famille
qui a été mon roc et ma source de motivation. Leur amour et leur encouragement ont été essentiels pour
que je puisse mener à bien ce travail.

Omar El
Asri
Remerciement

En cet instant de réalisation et d'accomplissement, il est essentiel pour nous d'exprimer une gratitude
sincère envers ceux qui ont contribué, de près ou de loin, à la concrétisation de ce projet.
Nous adressons nos plus chaleureux remerciements à notre encadrant, Monsieur El Hanafi Ahmad,
dont les conseils éclairés et l'expertise ont joué un rôle déterminant dans la réussite de notre projet. Sa
patience, sa disponibilité et son soutien constant ont été des atouts précieux tout au long de ce parcours.
Nous souhaitons également exprimer notre profonde reconnaissance envers Monsieur Fri, notre chef
de filière, pour son soutien indéfectible et son inspiration continue. Sa guidance bienveillante et son
engagement envers notre réussite ont été des moteurs essentiels dans notre parcours académique.
À Monsieur Derouiche, notre estimé chef de département, vont nos remerciements les plus sincères.
Son leadership éclairé et son engagement envers l'excellence académique ont créé un environnement
propice à notre épanouissement professionnel. Ses conseils avisés ont été une boussole précieuse dans
nos prises de décision.
Nos parents méritent également une mention spéciale. Leur amour inconditionnel, leur soutien
indéfectible et leurs encouragements constants ont été les fondations sur lesquelles reposent chacun de
nos accomplissements. Leur exemple de dévouement et de persévérance continuera de nous inspirer
dans toutes nos entreprises futures.
Enfin, à tous ceux qui ont contribué de près ou de loin à notre succès, nous adressons nos plus profonds
remerciements. Que cette réussite soit le reflet de notre reconnaissance envers chacun d'entre vous.
Résumé
La robotique est un domaine fascinant qui englobe l’ensemble des techniques permettant la conception et
la réalisation de machines automatiques ou de robots. Elle s’appuie sur des éléments essentiels tels que
les capteurs, les systèmes logiques basés sur des microprocesseurs et les actionneurs. Ces
Composants interagissent pour permettre aux robots d’exécuter des tâches spécifiques, qu’il s’agisse
d’assembler des voitures dans une usine, de nettoyer nos maisons ou d’aider les chirurgiens lors
d’opérations délicates. La robotique est un domaine en constante évolution, où la créativité et
L’intelligence artificielle se rejoignent pour façonner notre avenir technologique.

Le concept de parking intelligent représente une avancée significative dans la gestion automatisée du
stationnement urbain. Ces systèmes, ancrés dans la technologie moderne, utilisent une gamme de
dispositifs tels que des capteurs, des applications mobiles, et des systèmes de guidage pour optimiser
l’utilisation de l’espace de stationnement. Le smart parking, aussi appelé parking connecté, tire parti de
la technologie pour optimiser la disponibilité des places et simplifier le processus de stationnement.

Ses origines remontent au début des années 2010. Grâce à des systèmes intelligents, le smart parking
permet notamment de localiser plus facilement des emplacements libres. Il améliore ainsi l’expérience
des conducteurs et la fluidité au sein du parking. Cette solution innovante renforce l’efficacité de la
Gestion des parkings et s’adapte parfaitement aux besoins des villes modernes. En somme, le parking
Intelligent révolutionne la mobilité urbaine en rendant le stationnement plus efficace et pratique.

Mots clés : la robotique , Editeur d’obstacles, Arduino, Capteur, Robot, Electronique. Parking connecte,
smart parking
Table des matières
Table des matières

Table des matières


Dédicaces.............................................................................................................................................................2
Remerciement.....................................................................................................................................................4
Résumé...............................................................................................................................................................5
Table des matières............................................................................................................................................3

Table des figures....................................................................................................................................................................6

Introduction................................................................................................................................................................7

CHAPITRE 1 :........................................................................................................................................................................8

Analyse fonctionnelle..............................................................................................................................................................8
Introduction :......................................................................................................................................................8
Description du système....................................................................................................................................9
Analyse fonctionnelle.......................................................................................................................................9
1.1 Graphe des interacteurs.............................................................................................................................9
1.2Caractérisation des Fonctions de Service..............................................................................................10
1.3Diagramme FAST du robot......................................................................................................................11
1.4 Grafcet fonctionnel du robot.................................................................................................................12
Conception du robot.....................................................................................................................................13
2.1 Choix de robot..........................................................................................................................................13
2.2 Cahier de charge.......................................................................................................................................15
Conclusion.........................................................................................................................................................16

Chapitre 2..............................................................................................................................................................................17

3
Études de conception d’un parking...............................................................................................................................17
Introduction......................................................................................................................................................18
Conception et Dimensions................................................................................................................................18
1.1 Choix du Matériaux :..................................................................................................................................18
1.2 Dimensions :................................................................................................................................................18
1.3 Disposition des Places de Stationnement :..................................................................................................19
1.4 Marquages au Sol :......................................................................................................................................19
Assemblage et Finition.....................................................................................................................................20
1.1 Construction :..............................................................................................................................................20
1.2 Finition :......................................................................................................................................................20
Système de Parking Intelligent :.....................................................................................................................20
Communication et Interaction :......................................................................................................................20

Chapitre 3 :............................................................................................................................................................................21

Conception de Matériaux et Composants ..........................................................................................................................21


Introduction......................................................................................................................................................22
Architecture matérielle....................................................................................................................................22
Vue globale:.......................................................................................................................................................22
Matériaux et composants de robot :...............................................................................................................23
Les Moteur :.......................................................................................................................................................23
Capteurs ultra-son :............................................................................................................................................24
Carte de puissance l298n...................................................................................................................................25
Brochage du pilote de moteur L298N...............................................................................................................26
MG90S – Micro servomoteur............................................................................................................................27
La carte ESP 32 :...............................................................................................................................................29
- La batterie 18650 :...........................................................................................................................................33
Les composants de parking :...........................................................................................................................34
Le cadre de parking :.........................................................................................................................................34
Capteur Infrarouge :..........................................................................................................................................35
Capteur HW-511 :.............................................................................................................................................37

Chapitre 4 :............................................................................................................................................................................38

4
Réalisation..............................................................................................................................................................................38
Introduction :....................................................................................................................................................39
Définition du logiciel Arduino IDE :.................................................................................................................39
Le logiciel Arduino :..........................................................................................................................................41
Definition du ESP Now....................................................................................................................................43
Le code ESP32 utilisé:.......................................................................................................................................44
ESP32Master.....................................................................................................................................................45
ESP32 Slave :....................................................................................................................................................49
Conclusion.......................................................................................................................................................62

Bibliographie.........................................................................................................................................................................63

https://diyi0t.com/tcrt5000-line-tracking-module-arduino-esp8266-esp32/....................................................................63

https://dronebotworkshop.com/esp-now/............................................................................................................................63

5
Table des figures

1 Graphe des interacteurs.................................................................................................7


2 Diagramme FAST du robot...........................................................................................8
3 Grafcet fonctionnel du robot.........................................................................................9
4 Robot à 4 roues.........................................................................................................10
5 Cinématique du robot..................................................................................................11
6 Un châssis du robot.....................................................................................................11
7 parking en bois...........................................................................................................18
8 les moteurs.................................................................................................................21
9 Moteur DC..................................................................................................................22
10 Capteur ultra-son...........................................................................................................22
11 Fonction de capteur ultra-son........................................................................................23
12 Brochage l298n.............................................................................................................26
13 MG90S………………………………………………………………………………..27
14 Dimension de MG90S………………………………………………………………...28
15 Fonction de la carte ESP32...........................................................................................29
16 La batterie....................................................................................................................27
17 Le cadre de parking......................................................................................................34
18 Capteur Infrarouge.......................................................................................................35
19 Fonctionnement du capteur infrarouge..........................................................................36
20 Capteur HW-511...........................................................................................................37
21 Arduino ide.....................................................................................................................40
22 Interface arduino……………………………………………………………………….41
23 Interface 2 Arduino……………………………………………………………………42
24 Protocole ESP32..............................................................................................................43
25 ESP32 NOW....................................................................................................................44

6
Introduction

Le développement technologique rapide a ouvert la voie à des innovations passionnantes dans le


domaine de la robotique et de l’automatisation. Dans ce contexte, notre projet de fin d’études (PFE)
vise à concevoir un système intelligent qui résout un problème courant : la recherche de places de
stationnement dans les parkings.
Notre objectif est de créer un robot éditeur d’obstacles capable de naviguer dans un parking,
d’identifier les places libres et de guider les utilisateurs vers ces emplacements. Pour ce faire, nous
allons exploiter les capacités des cartes ESP32, des capteurs de distance et des algorithmes de
recherche, nous allons intéresser à un type bien précis des robots mo- biles : le robot intelligent
évitant les obstacles, un robot autonome qui évite les collisions avec des obstacles inattendus, en
ajoutant un parking intelligent connecter avec le robot par le protocole ESPNOW pour le stationner
tout en focalisant notre intérêt sur la question suivante
comment serait-il possible de façonner un robot mobile évitant les obstacles qui combine à la fois
efficacité et rapidité avec un parking intelligent ?

Le Système de Parking Intelligent est un projet novateur visant à améliorer l’efficacité et la gestion
des parkings. Dans un monde où l’espace urbain est de plus en plus restreint et où la circulation
automobile ne cesse d’augmenter, la recherche de places de stationnement devient un véritable défi.
Notre système vise à résoudre ce problème en utilisant des technologies modernes telles que les
capteurs de présence, les cartes ESP32 et la communication sans fil.
L’urbanisation croissante entraîne une saturation des parkings, rendant difficile la recherche de places
libres pour les conducteurs. Les systèmes de parking traditionnels sont souvent inefficaces et ne
permettent pas une utilisation optimale de l’espace disponible. De plus, les conducteurs perdent un
temps précieux à chercher une place, ce qui peut entraîner des retards et des frustrations.
Dans le but de répondre à cette problématique, nous allons dans un premier temps opter à une étude
fonctionnelle portant sur notre robot mobile, en commençant par une analyse détaillée sur les
différentes fonctions que doit satisfaire notre robot pour arriver enfin à obtenir une conception claire
et nette de notre robot puis on passe vers le parking intelligent.
Ensuite, ayant déterminé les critères à satisfaire pour assurer un bon choix de matériaux et
composants utilisés pour sa confection, on va présenter les différents outils technologiques en
précisant leurs rôles puis leurs modes de fonctionnement.

7
CHAPITRE 1 :

Analyse fonctionnelle

7
Introduction :
Le robot éviteur d’obstacle, dans n’importe quel domaine où il est utilisé, doit nécessairement être

accompagné d’une fiche technique qui décrira la totalité de ses fonctions et qui reflètera une image

sur la qualité et la prestation de ses services. Cela dit, une analyse fonctionnelle devait être mise en

place pour exprimer le besoin de la construction du robot, définir les liens entre ses composants et

rappeler les principales fonctions qu’il doit satisfaire. Les outils utilisés pour cette analyse

fonctionnelle sont le diagramme pieuvre, le diagramme FAST et le GRAFCET.

8
Description du système
Notre robot éviteur d’obstacles utilise un capteur qui mesure la distance qui le sépare avec les déférents
objets qui l’entoure. L’information est traitée par un microcontrôleur. Le robot avance et lorsqu’il
rencontre un obstacle frontal, il s’arrête quelques instants, et il fait tourner le capteur respectivement vers
la droite puis vers la gauche puis se tourne vers la direction la plus sûr et il continue en mouvement
rectiligne.

Analyse fonctionnelle
1.1 Graphe des interacteurs

Figure 1 – Graphe des interacteurs

— FP : Fonctions Principales. FC :
— Fonctions Complémentaires ou Contraintes.

9
Fonction Description

FP1 Eviter les obstacles pour servir l’utilisateur

FP2 Capter l’existence d’un obstacle

FP3 Analyser les données fournies par le capteur

FC1 Utiliser une source d’énergie pour alimenter les composants de robot

FC2 Contrôler le déplacement du robot

FC3 Indiquer l’existence d’un obstacle

1.2Caractérisation des Fonctions de Service

10
1.3Diagramme FAST du robot

11
1.4 Grafcet fonctionnel du robot

En s’appuyant sur les informations fournies charge ci-dessus, On a réalisé le grafcet de niveau 1
suivant :
On définit les actionneurs suivants :

m : mis en marche du robot

o : présence d’un obstacle

d : la probabilité de trouver un obstacle à droite plus sûr que le trouver à gauche

g : la probabilité de trouver un obstacle à gauche plus sûr que le trouver à droite.

Donc :

Figure 3 – Grafcet fonctionnel du robot

12
Conception du robot

2.1 Choix de robot


Afin de bien assimiler la conception de notre robot, on va présenter les différentes configurations
possibles, on cite entre autres

Robot à 4 roues motrices et directionnelles

Avec 4 roues motrices jumelées 2 à 2 (côté gauche ensemble et droite ensemble), 2 moteurs de

propulsions (vitesse différentielles), 2 moteurs de direction un pour les roues avant et un pour les

roues arrière. Le centre de masse se trouve le plus près possible du centre du robot.

Figure 4 – Robot à 4 roues

13
Choix de robot

Après la comparaison des différentes configurations possible on choisit le modèle Robot a 4 roues en se basant
sur ces caractéristiques :
Les robots à 4 roues offrent plusieurs avantages en matière de mobilité et de conception.
Voici quelques-uns d'entre eux :

 Stabilité et équilibre : Les robots à 4 roues sont généralement plus stables que ceux à
pattes ou à chenilles. Ils peuvent se déplacer sans basculer facilement, ce qui est essentiel
pour de nombreuses applications.
 Simplicité de conception : La configuration à 4 roues est relativement simple à concevoir et
à construire. Elle ne nécessite pas autant de mécanismes complexes que les robots à pattes.
 Direction précise : Les roues permettent un contrôle précis de la direction. Les robots à 4
roues peuvent avancer, reculer et tourner avec une grande précision.
 Vitesse et efficacité : Les roues offrent une bonne vitesse de déplacement, ce qui est
important pour les tâches qui nécessitent une couverture rapide d'une zone.
 Adaptabilité : Les robots à 4 roues peuvent fonctionner sur divers types de surfaces, qu'il
s'agisse de sols lisses, de terrains accidentés ou de surfaces inégales.
 Capacité de charge : Ils peuvent transporter des charges plus importantes que certains autres
types de robots, ce qui les rend utiles pour le transport de matériel ou d'équipements.
 En résumé, les robots à 4 roues sont polyvalents, stables et relativement simples à concevoir,
ce qui en fait un choix populaire pour de nombreuses applications.

Figure 5 – chassie de robot

14
2.2 Cahier de charge
En se basant sur l’étude effectuée ci-dessus, on peut assumer que pour un bon
fonctionnement du robot, ce dernier doit satisfaire les critères suivants :
• Il doit assurer un mouvement de translation et de rotation.
• Il doit se déplacer aisément avant et après la détection d’un obstacle.
• Il doit être très léger, facile à prendre et à manipuler, contrôlable et rigide.
• Son montage et démontage doit se faire d’une manière simple et rapide.

• Il doit avoir plus d’autonomie concernant sa batterie.


• Le positionnement du robot à l’aide de placement de ses senseurs doit être est relativement
précis.
• Symétrie : ceci constitue le point déterminant de cette structure. La symétrie per- met des
performances intéressantes en rotation puisque le centre de masse peut être situé au centre du
robot, sur l’axe des roues motrices.

Figure 6 - robot

Notre robot éviteur d’obstacles est composée de 4 moteurs de propulsion et de direction couplés
à 4 roues motrices . Les roues motrices sont disposées à l’arrière et en avant En résumé, les
robots à 4 roues sont polyvalents, stables et relativement simples à concevoir, ce qui en fait un
choix populaire pour nombreuses applications, Le centre de masse se retrouve le plus près
possible de l’axe des roues

motrices pour faciliter les différents mouvements. La base du robot tient généralement
tous les composants qui font fonctionner le robot. Par exemple, la base comporte des roues
motrices.

15
Conclusion.
En plus de la fonction principale de ce robot qui est bien évidemment l’évitement d’obstacles, les
différentes études qu’on a menées nous ont aidés à conclure que ce qui fera différence entre un
robot et un autre est le temps que mettra chacun d’eux face à un obstacle. Dans cette première
partie, une large discussion s’est entretenue entre nous à propos de nombres de roues motrices
qu’on peut utiliser, leurs emplacements et aussi même le châssis qui devait les raccompagnés. En
effet, il devait être choisi de telles sortes de ne pas ralentir le robot lors de son déplacement sans
oublier de tenir compte à sa rigidité et sa ténacité.

Jusqu’à maintenant, on est tous convaincus que les choix que nous avons effectués sont les plus
convenables en mesure de rapidité et de maintenance. Arrivés à ce stade, il ne nous reste que
d’espérer que le choix des matériaux soit aussi décisif qu’on pourra de plus agir sur le temps de
réponse de notre robot .

16
Chapitre 2
Études de conception d’un parking

17
Introduction.
Dans le cadre de notre projet de fin d’études, nous avons entrepris la conception d’un parking en
bois. Notre objectif était de créer un espace de stationnement fonctionnel et esthétique, adapté aux
dimensions spécifiques de 170 cm x 160 cm. Voici comment nous avons abordé ce projet.

Conception et Dimensions
1.1 Choix du Matériaux :

o Nous avons opté pour le bois en raison de ses propriétés naturelles, de sa durabilité et
de son aspect chaleureux.
o Le bois est également plus léger que d’autres matériaux, ce qui facilite la manipulation et l’assemblage.

1.2 Dimensions :

o Notre parking en bois mesure 170 cm de longueur sur 160 cm de largeur.


o Ces dimensions ont été soigneusement choisies pour s’adapter à l’espace disponible
et aux nos besoins.

18
1.3 Disposition des Places de Stationnement :

o Nous avons créé une disposition simple avec 3 place de stationnement.


o Les places sont suffisamment larges pour accueillir un véhicule standard.

1.4 Marquages au Sol :

o Nous avons utilisé des marquages au sol pour délimiter la place de stationnement.
o Des lignes blanches ont été t racées pour guider les conducteurs lorsqu’ils se garent.

19
Assemblage et Finition
1.1 Construction :

o Nous avons découpé les planches de bois aux dimensions requises.


o L’assemblage a été réalisé à l’aide de vis et de colle à bois.

1.2 Finition :
o Nous avons poncé les surfaces pour éliminer les échardes et obtenir une surface lisse.
o Une couche de vernis protecteur a été appliquée pour protéger le
bois des intempéries.

Système de Parking Intelligent :


o Notre système de parking intelligent utilisera des cartes ESP32 pour la
communication sans fil.
o Des capteurs de présence ou des capteurs RFID seront déployés pour détecter
les places de stationnement disponibles.
o Une base de données enregistrera l’état des places (libres ou occupées).

Communication et Interaction :
o Le robot enverra des informations sur les places libres au système central du parking.
o Le système central pourra également envoyer des instructions au robot
pour l’aider à trouver une place libre

20
Chapitre 3 :

Conception de Matériaux et Composants .

21
Introduction
Le choix des matériaux est une tâche fondamentale et très complexe, et pour cela
nous avons parlé dans ce chapitre à propos des matériaux utilisés dans la voiture
électrique.

Architecture matérielle

Vue globale:

J’avais un robot électrique, semblable à une voiture, qui est capable de se rendre dans
un parking intelligent. Chacun de ces éléments est équipé de composants de fabrication
spécifiques

21
Matériaux et composants de robot :
Les Moteur :

Figure 8 - les moteurs.

Un moteur 4.5V est un type de moteur électrique qui fonctionne avec une tension nominale de
4,5volts, Le chiffre 200 rpm indique la vitesse de rotation du moteur, mesurée en tours par minute.
Dans ce cas, le moteur tourne à 200 tours par minute, ce qui peut être ajusté en fonction des besoins
spécifiques de l’application.

Figure 9 - Moteur
DC
21
Capteurs ultra-son :
Le capteur ultrason est un composant essentiel utilisé dans de nombreux projets de robotique
pour la détection d'obstacles et la mesure de distances. Il utilise des ondes sonores à haute fréquence
pour déterminer la distance entre lui-même et un objet en mesurant le temps qu'il faut aux ondes
sonores pour être réfléchies et revenir au capteur. Ce capteur est largement utilisé pour la navigation
autonome des robots, la création de systèmes d'évitement d'obstacles, et bien d'autres applications
nécessitant une mesure précise de la distance. Son utilisation est répandue en raison de sa fiabilité, de
sa facilité d'utilisation et de son faible coût

Figure 9 - Capteurs ultra-son.

Dans notre projet, nous avons utilisé le capteur ultrason pour permettre à notre robot de détecter les
obstacles environnants et d'ajuster son mouvement en conséquence. Le capteur ultrason émet des
ondes sonores à haute fréquence et mesure le temps nécessaire à leur retour après avoir été réfléchies
par un objet. Cette information nous permet de calculer la distance entre le 40 robot et l'obstacle le
plus proche. En intégrant cette fonctionnalité, notre robot .
Bien sûr, voici une version plus détaillée : Grâce à ses capteurs sophistiqués, le système est capable de
détecter les barrières présentes dans le parking. Cette fonctionnalité permet au robot de réagir de
manière autonome et sécurisée en s'arrêtant automatique- ment dès qu'il détecte la présence d'une
barrière, contribuant ainsi à prévenir les collisions et assurant un fonctionnement efficace et sécurisé
dans l'environnement du parking.

Figure 10: fonction de capteur ultra-son.


24
Carte de puissance l298n

La carte de puissance L298N est un module électronique utilisé pour contrôler les moteurs
à courant continu dans divers appareils, tels que les robots, les voitures télécommandées et les
imprimantes 3D. Il dispose de deux ponts-H intégrés, ce qui permet de contrôler 4 moteurs
indépendamment. La vitesse des moteurs peut être ajustée grâce à des signaux de commande
PWM. La carte offre également une protection contre la surchauffe et les surintensités pour éviter
les dommages. Elle est compatible avec une gamme de tensions d'alimentation et peut être
utilisée avec des circuits logiques TTL et CMOS. En bref, la carte de puissance L298N est un
composant polyvalent pour le contrôle précis des moteurs à courant continu.

Figure 11: Carte de puissance l298n.

25
Brochage du pilote de moteur L298N

Figure 12 – brochage l298N

Le pilote de moteur a un bornier à deux bornes de chaque côté pour chaque moteur et car on a 4
moteur on a fait les 2 moteurs droite on série et les 2 moteurs a gauche en série . OUT1 et OUT2 à
gauche et OUT3 et OUT4 à droite.
OUT1, OUT2 : moteur à courant continu A OUT3, OUT4 : Moteur à courant continu B
En bas, vous avez un bornier à trois bornes avec +12V, Terre, et +5V. Le +12V le bornier sert à
alimenter les moteurs. Le +5V terminal est utilisé pour alimenter la puce L298N

Cependant, si le cavalier (jumper) est en place, la puce est alimentée à l'aide de l'alimentation du
moteur et vous n'avez pas besoin de fournir 5V via le +5V Terminal.
Remarque : si vous fournissez plus de 12V, vous devez retirer le cavalier et fournir 5V à la borne
+5V

26
MG90S – Micro servomoteur

MG90S est un micro servomoteur à engrenage métallique. Ce servo petit et léger est doté d’une
puissance de sortie élevée, ce qui le rend idéal pour les avions RC, les quadricoptères ou les bras
robotiques.

Figure 13 – MG90S

1.1 Description du câblage MG90S

27
1.2 Caractéristiques du TowerPro MG-90S
 Tension de fonctionnement : 4,8 V à 6 V (généralement 5 V)
 Couple de décrochage : 1,8 kg/cm (4,8 V)
 Couple de décrochage maximal : 2,2 kg/cm (6 V)
 La vitesse de fonctionnement est de 0,1 s/60° (4,8 V)
 Type d’engrenage : Métal
 Rotation : 0°-180°
 Poids du moteur : 13,4 g
 L’ensemble comprend des cornes d’engrenage et des vis

1.3 Dimensions du servomoteur MG90

Figure 14 – Dimension de MG90S

28
La carte ESP 32 :

La carte ESP32 est conçue pour offrir une plateforme de développement complète et conviviale
pour une variété d'applications, allant des projets amateurs aux produits commerciaux. Voici
quelques points clés à prendre en compte lors de l'introduction à cette carte :

 Microcontrôleur ESP32 : Au cœur de la carte ESP32 se trouve le microcontrôleur


ESP32, un puissant système sur puce (SoC) développé par Expressif System. Ce
microcontrôleur intègre un double cœur processeur Xtensa 32 bits,
 Une connectivité Wi-Fi et Bluetooth, ainsi que de nombreuses interfaces pour connecter
une gamme de périphérique
 Connectivité sans fil : La carte ESP32 intègre la connectivité sans fil Wi-Fi et
Bluetooth, ce qui permet aux développeurs de créer des dispositifs IoT et des applications
qui peuvent se connecter à des réseaux locaux ou à des appareils mobiles.

Figure 12- Fonctionne de la carte Esp 32

29
1.1 Avantages :
Conception robuste
L'ESP32 est capable de fonctionner de manière fiable dans des environnements industriels, avec une
température de fonctionnement allant de -40°C à +125°C. Alimenté par des circuits d'étalonnage
l'ESP32 peut éliminer dynamiquement les imperfections du circuit externe et s'adapter aux
changements des conditions externes.
Consommation d'énergie ultra-faible
Conçu pour les appareils mobiles, l'électronique portable et les applications IoT, l'ESP32 atteint
une consommation d'énergie ultra-faible grâce à une combinaison de plusieurs types de logiciels
propriétaires. L'ESP32 comprend également des fonctionnalités de pointe, telles que le
déclenchement d'horloge à grain fin, divers modes d'alimentation et la mise à l'échelle dynamique
de la puissance.

1.2 Wi-Fi et Bluetooth :


L'ESP32 peut fonctionner comme un système autonome complet ou comme un dispositif esclave
d'un MCU hôte, réduisant ainsi la surcharge de la pile de communication sur le processeur
d'application principal. L'ESP32 peut s'interfacer avec d'autres systèmes pour fournir des
fonctionnalités Wi-Fi et Bluetooth via ses interfaces SPI/SDIO ou I2C/UART.

1.3 Caractéristiques :
L'ESP32 est double noyaux (dual core), cela signifie qu'il dispose de 2
processeurs. Il intègre le Wi-Fi et le Bluetooth.
Il exécute des programmes 32 bits.
La fréquence d'horloge peut aller jusqu'à 240 MHz et il dispose d'une RAM de 512 Ko.
Cette carte particulière a 30 ou 36 broches, 15 dans chaque rangée.
Il dispose également d'une grande variété de périphériques disponibles, tels que : tactile capacitif,
ADC, DAC, UART, SPI, I2C et bien plus encore.
Il est livré avec un capteur à effet hall intégré et un capteur de température intégré

30
1.4 Spécifications - ESP32 :

1.5 Environnements de programmation :


L'ESP32 peut être programmé dans différents environnements de programmation. Vous pouvez
utiliser :
 EDI Arduino
 Espressif IDF (cadre de développement IoT)
 Micro-python
 Javascript
 LUA
Dans nos projets, nous programmons l'ESP32 principalement avec Arduino.

1.6 Guide de brochage ESP32 :

Avec l'ESP32, nous pouvons configurer les broches utilisées comme UART, I2C ou SPI par
programmation. Cela est possible grâce à la fonction de multiplexage de la puce ESP32 qui permet
d'attribuer plusieurs fonctions à la même broche comme indiqué dans la figure ci-dessous
(l'emplacement des broches peut changer selon le fabricant).

31
Figure 15 – Brochage ESP32

32
- La batterie 18650 :

Les batteries rechargeables 3,7V offrent une capacité énergétique de 18650 mWh, ce qui les
rend idéales pour alimenter une variété d'appareils électroniques. Avec leur tension 37 nominale
de 3,7 volts, ces batteries fournissent une puissance stable et fiable pour une utilisation
prolongée. Grâce à leur conception rechargeable, elles peuvent être rechargées et réutilisées à
plusieurs reprises, ce qui les rend économiques et écologiques. Leur capacité élevée de 18650
mWh leur permet de maintenir une autonomie prolongée, ce qui en fait un choix idéal pour
notre véhicule.

Figure 16 - La batterie.

Dans le contexte de notre robot, les batteries rechargeables 3,7V sont comme
source d'alimentation principale. Leur tension nominale de 3,7 volts les rend
compatibles avec nos composants, y compris la carte ESP32 et les capteurs utilisés
dans ce robot. Avec leur capacité élevée de 18650 mWh, ces batteries offrent une
autonomie prolongée, ce qui est crucial pour assurer le fonctionnement continu du
robot

33
Les composants de parking :
Le cadre de parking :

Figure 17- le cadre de parking

Dans cette partie , nous allons détailler le cadre physique de ce parking, qui est essentiel pour
comprendre son fonctionnement.
Le parking autonome est divisé en trois sections égales, chaque section ayant une largeur de 30
cm. La largeur totale du parking est de 1,60 mètres (160 cm)ainsi que sa longueur est de 1,70
mètres. Cette division en trois parties permet une optimisation de l'espace et facilite la gestion du
flux de véhicules.
La première entrée du parking a une largeur de 30 cm, ce qui est suffisant pour permettre à un
véhicule de taille standard de s'engager en toute sécurité dans le parking. Cette entrée est conçue
pour faciliter l'accès des véhicules au système autonome de stationnement.

En résumé, le cadre de ce parking autonome robotisé est caractérisé par sa division en trois
parties égales, chaque partie ayant une largeur de 30 cm, et par une entrée initiale de 30 cm de
large.
Ce parking est aussi entouré par un entourage jaune qui mesure 7cm de sa largeur .

Ces dimensions ont été soigneusement conçues pour assurer un fonctionnement efficace et sécurisé
du système de stationnement autonome.

34
Capteur Infrarouge :

Le capteur d’évitement d’obstacles à capteur infrarouge IR est une solution peu coûteuse pour la
détection d’évitement pour la robotique, la voiture intelligente et d’autres utilisations
électroniques. Dans certains cas, ce capteur est utilisé en paire, avec un capteur placé avant et un
autre placé après une barrière ou un obstacle. Lorsque le robot ou la voiture approche de la
barrière, le premier capteur détecte sa présence et déclenche l'ouverture de la barrière. Une fois
que le véhicule a franchi la barrière, le second capteur détecte sa présence et déclenche l'arrêt du
véhicule, assurant ainsi un contrôle précis du mouvement et de la sécurité dans les applications
de stationnement ou de déplacement automatisé.

Figure 18 - Capteur Infrarouge

35
1.1 Principe de fonctionnement :

L'émetteur infrarouge envoie un signal infrarouge qui, en cas de surface


réfléchissante (par exemple de couleur blanche), rebondit dans certaines directions, y
compris celle du récepteur infrarouge qui capte le signal détectant l'objet.

Lorsque la surface est absorbante (par exemple de couleur noire), le signal IR n'est pas
réfléchi et l'objet ne peut pas être détecté par le capteur. Ce résultat se produirait même si l'objet
est absent.

Figure 19: infrarouge

1.2 Caractéristiques Techniques :

 Voltage de fonctionnement : DC 3,3 V-5 V


 Intensité du courant >= 20 mA
 Température de fonctionnement : -10 °C à + 50 °C
 Plage de distance: 2-40 cm
 Interface IO : interface 3 fils (GND / Vcc / OUT)
 Signal de sortie: tension TTL.
 Mode d’hébergement : régulation de résistance multi-cercle
 Angle effectif: 35 °
 Taille: 41,7 * 16,7 mm

36
 Poids: 5g

37
Capteur HW-511 :

Le capteur HW-511 est spécifiquement conçu pour diverses applications, en particulier dans les
domaines de la surveillance et de l'automatisation. Il appartient à la catégorie des capteurs de
proximité ou de distance et est principalement utilisé pour détecter la présence ou l'absence
d'objets à des distances courtes.

Fonctionnant généralement grâce à la technologie infrarouge, ce capteur émet un faisceau


infrarouge et mesure le temps nécessaire pour que ce faisceau revienne après avoir été réfléchi
par un objet. Cette mesure permet ensuite de calculer la distance entre le capteur et l'objet cible.

Outre sa capacité à mesurer la distance, le capteur HW-511 est également utilisé pour détecter la
disponibilité des places de stationnement dans les parkings. En analysant les zones où le faisceau
infrarouge est intercepté, il peut déterminer si une place est occupée ou libre, facilitant ainsi la
gestion du stationnement et l'orientation des conducteurs vers les places disponibles.

Figure 20- Capteur HW-511

38
Chapitre 4 :

Réalisation

39
Introduction :

Définition du logiciel Arduino IDE :

L'Arduino IDE (Integrated Développement Environnement) est un logiciel essentiel pour de


nombreux projets de fin d'études (PFE) dans le domaine de l'ingénierie électronique et de
l'informatique embarquée. Il fournit une plateforme de développement conviviale pour écrire,
téléverser et tester le code destiné aux microcontrôleurs Arduino et à d'autres cartes compatibles.
Cette introduction met en évidence l'importance de l'IDE Arduino pour les projets de fin d'études.

Importance de l'Arduino IDE pour les PFE :

▪ Facilité d'utilisation : L'IDE Arduino offre une interface utilisateur intuitive, adaptée aux
débutants comme aux utilisateurs expérimentés. Cela facilite la prise en main et l'apprentissage
pour les étudiants qui travaillent sur leur projet de fin d'études.
▪ Large compatibilité matérielle : Avec la prise en charge de nombreuses cartes Arduino et

▪ l'IDE Arduino offre aux étudiants une flexibilité pour choisir le matériel le mieux adapté à
leurs besoins de projet.
▪ Bibliothèques et exemples intégrés : Parmi ces bibliothèques , on trouve :
<esp_now.h> <Wifi. H> <ESP32Servo.h>

40
L'IDE Arduino est livrée avec une collection de bibliothèques et d'exemples prédéfinis
qui couvrent un large éventail de fonctionnalités. Cela permet aux étudiants de gagner du
temps en utilisant des codes préexistants et en les adaptant à leurs besoins spécifiques.
Débogage simplifié : L'IDE Arduino offre des outils de débogage intégrés, tels que la
console série, qui permettent aux étudiants de surveiller les données en temps réel et de
diagnostiquer les problèmes éventuels dans leur code.

 Flexibilité de programmation : Les étudiants peuvent utiliser différents langages de


programmation pris en charge par l'IDE Arduino, notamment C/C++ et des variantes
telles que Wiring et Processing. Cela leur permet d'adapter leur approche de
programmation en fonction de leurs compétences et de leurs besoins spécifiques.

 Prototypage rapide : Grâce à sa simplicité d'utilisation et à sa rapidité de mise en œuvre,


l'IDE Arduino permet aux étudiants de réaliser rapidement des prototypes fonctionnels
pour leurs projets de fin d'études, ce qui facilite l'itération et l'amélioration du concept.

Figure 21 – Arduino ide

41
Le logiciel Arduino :

Figure 22 interface Arduino :

Correspondance :
Le cadre numéro 4 : ce sont les options de configuration du logiciel
Le cadre numéro 3 : il contient les boutons qui vont nous servir lorsque l’on va programmer
nos cartes
Le cadre numéro 2 : ce bloc va contenir le programme que nous allons créer
Le cadre numéro 1 : est important, car il va nous aider à corriger les fautes dans notre
programme. C’est le débogueur.

42
Figure 23 :interface 2 Arduino

Correspondance :

Bouton 1 : cherche les erreurs dans votre programm


Bouton 2 : Charge (téléverse) le programme dans la carte Arduino

Bouton 3 : Crée un nouveau fichier


Bouton 4 : Ouvre un fichier.
Bouton 5 : Enregistre le fichier.
Bouton 6 : Ouvre le moniteur serie

43
Definition du ESP Now
ESP32 NOW est un protocole de communication sans fil propriétaire développé par Espressif
System, conçu spécifiquement pour les microcontrôleurs de la famille ESP32. Il permet la
communication directe entre les modules ESP32 sans passer par un routeur Wifi ou une
connexion Bluetooth.
Contrairement au Wifi classique, ESP32 NOW fonctionne en utilisant une topologie de réseau
en étoile simple, où un nœud maître communique avec plusieurs nœuds esclaves. Cela le rend
particulièrement adapté aux applications où plusieurs dispositifs ESP32 doivent échanger des
données de manière simple et efficace, comme dans les systèmes domotiques , les capteurs
distribués ou les réseaux de capteurs IoT.
Les avantages clés d'ESP32 NOW incluent une latence réduite, une consommation d'énergie
plus faible par rapport aux connexions WiFi traditionnelles et une configuration simplifiée.
Cependant, comme il s'agit d'un protocole propriétaire, son utilisation limite l'interopérabilité
avec d'autres dispositifs et technologies de communication.

Figure 24 - protocole ESP32

44
Le code ESP32 utilisé:

Nous avons utilisé ce code ESP32Now pour établir une connexion entre les deux cartes ESP32.
Plus précisément, la carte ESP32 du robot a été configurée en tant que “Slave”, tandis que celle
du parking a été désignée comme “Master” Ce choix de configuration a permis une
communication efficace et bidirectionnelle entre les deux dispositifs.

Nous allons diviser le code en deux parties distinctes : l'une dédiée à la carte ESP32 maître, que
nous nommerons ESP code Master, et l'autre dédiée à la carte ESP32 Slave. Cette segmentation
nous permettra de mieux organiser notre développement et de nous concentrer sur les
fonctionnalités spécifiques de chaque carte.

Figure 25 - ESP32 NOW

45
ESP32Master
Organigramme du nœud maître (Parking) :

SlaveCnt > 0 & P_Entree

Oui
Parking plein ?

SlaveCnt > 0 & P_Presence Non

Oui

46
CODE ESP32 master :

Le code ESP32 Master assume la responsabilité de coordonner les opérations de la barrière de


stationnement. Il intègre un capteur infrarouge qui scrute l'environnement pour détecter
l'approche du robot. Une fois ce dernier détecté, la barrière se déclenche automatiquement,
s'ouvrant gracieusement pour permettre au robot d'entrer dans l'enceinte de stationnement.

Lorsque le robot a pénétré dans la zone de stationnement, un autre capteur infrarouge, positionné
stratégiquement, repère sa présence et signale à la carte ESP32 Master de refermer la barrière,
assurant ainsi la sécurité et la confidentialité de la zone.

Mais le rôle de la carte ESP32 Master ne s'arrête pas là. Elle établit également une connexion
avec la carte ESP32 esclave pour échanger des informations cruciales sur la disponibilité des
emplacements de stationnement. Cette connexion permet de déterminer précisément quelles
places sont libres parmi les trois capteurs de stationnement.

En cas de saturation, où les trois positions sont occupées, la barrière reste fermée, empêchant tout
autre véhicule d'entrer. Cette stratégie garantit un contrôle efficace de l'accès au stationnement,
optimisant ainsi son utilisation et minimisant les risques de congestion.

47
/**

ESPNOW - Basic communication - Master Date:


26th September 2017

Author: Arvind Ravulavaru <https://github.com/arvindr21>

Purpose: ESPNow Communication between a Master ESP32 and multiple ESP32 Slaves
Description: This sketch consists of the code for the Master module.
Resources: (A bit outdated)
a. https://espressif.com/sites/default/files/documentation/esp- now_user_guide_en.pdf
b. http://www.esploradores.com/practica-6-conexion-esp-now/

<< This Device Master >>

Flow: Master

Step 1 : ESPNow Init on Master and set it in STA mode

Step 2 : Start scanning for Slave ESP32 (we have added a prefix of `slave` to the SSID of
slave for an easy setup)
Step 3 : Once found, add Slave as peer Step 4 :
Register for send callback

Step 5 : Start Transmitting data from Master to Slave(s)

Flow: Slave

Step 1 : ESPNow Init on Slave

Step 2 : Update the SSID of Slave with a prefix of `slave` Step 3 : Set
Slave in AP mode
Step 4 : Register for receive callback and wait for data Step 5 : Once
data arrives, print it in the serial monitor

48
Note: Master and Slave have been defined to easily understand the setup. Based on
the ESPNOW API, there is no concept of Master and Slave. Any devices can
act

// Sample Serial log with 1 master & 2 slaves Found 12


devices
1: Slave:24:0A:C4:81:CF:A4 [24:0A:C4:81:CF:A5] (-44)
3: Slave:30:AE:A4:02:6D:CC [30:AE:A4:02:6D:CD] (-55)

2 Slave(s) found, processing..


Processing: 24:A:C4:81:CF:A5 Status: Already Paired
Processing: 30:AE:A4:2:6D:CD Status: Already Paired
Sending: 9

Send Status: Success


Last Packet Sent to: 24:0a:c4:81:cf:a5 Last
Packet Send Status: Delivery Success Send
Status: Success

Last Packet Sent to: 30:ae:a4:02:6d:cd Last


Packet Send Status: Delivery Success

*/

#include <esp_now.h>
#include <WiFi.h> #include
<ESP32Servo.h>

Servo myservo; // create servo object to control a servo const int


Presence_P = 2; // Broche pour le capteur 1 const int Entree_P =
4;

int pos = 0; // variable to store the servo position


servoPin = 18; int

49
// Global copy of slave
#define NUMSLAVES 20
esp_now_peer_info_t slaves[NUMSLAVES] = {}; int
SlaveCnt = 0;

#define CHANNEL 1

#define PRINTSCANRESULTS 0

const int P1 = 5; // Broche pour le capteur 1 const int P2


= 16; // Broche pour le capteur 2 const int P3 = 17; //
Broche pour le capteur 1 const int P4 = 13; // Broche
pour le capteur 2

typedef struct struct_message { int


a[3];
int Etat;

} struct_message;

// Create a structured
object struct_message
myData;

// Init ESP Now with fallback


void InitESPNow() {
WiFi.disconnect();

if (esp_now_init() == ESP_OK) {
Serial.println("ESPNow Init
Success");
}

else {

Serial.println("ESPNow Init Failed");

// Retry InitESPNow, add a counte and then restart?


// InitESPNow();

4
// or Simply Restart
ESP.restart();
}

// Scan for slaves in AP mode void


ScanForSlave() {
int8_t scanResults = WiFi.scanNetworks();

//reset slaves
memset(slaves, 0, sizeof(slaves));

SlaveCnt = 0;
Serial.println("");
if (scanResults == 0) {

Serial.println("No WiFi devices in AP Mode found");

} else {

Serial.print("Found "); Serial.print(scanResults); Serial.println(" devices "); for (int i = 0; i <


scanResults; ++i) {
// Print SSID and RSSI for each device found String SSID =
WiFi.SSID(i);
int32_t RSSI = WiFi.RSSI(i);
String BSSIDstr = WiFi.BSSIDstr(i);

if (PRINTSCANRESULTS) {

Serial.print(i + 1); Serial.print(": "); Serial.print(SSID); Serial.print(" [");


Serial.print(BSSIDstr); Serial.print("]");
Serial.print(" ("); Serial.print(RSSI); Serial.print(")"); Serial.println("");
}

delay(10);

// Check if the current device starts with `Slave` if


(SSID.indexOf("Slave") == 0) {

41
// SSID of interest

Serial.print(i + 1); Serial.print(": "); Serial.print(SSID); Serial.print(" [");


Serial.print(BSSIDstr); Serial.print("]"); Serial.print(" ("); Serial.print(RSSI);
Serial.print(")"); Serial.println("");

// Get BSSID => Mac Address of the Slave


int mac[6];

if ( 6 == sscanf(BSSIDstr.c_str(), "%x:%x:%x:%x:%x:%x", &mac[0], &mac[1],


&mac[2], &mac[3], &mac[4], &mac[5] ) ) {
for (int ii = 0; ii < 6; ++ii ) { slaves[SlaveCnt].peer_addr[ii] =
(uint8_t) mac[ii];
}
}

slaves[SlaveCnt].channel = CHANNEL; // pick a channel


slaves[SlaveCnt].encrypt = 0; // no encryption SlaveCnt++;
}
}

if (SlaveCnt > 0) {

Serial.print(SlaveCnt); Serial.println(" Slave(s) found, processing..");

} else {

Serial.println("No Slave Found, trying again.");


}

// clean up ram
WiFi.scanDelete();
}

42
// Check if the slave is already paired with the master.

// If not, pair the slave with master void


manageSlave() {
if (SlaveCnt > 0) {
for (int i = 0; i < SlaveCnt; i++) {
Serial.print("Processing: ");
for (int ii = 0; ii < 6; ++ii ) { Serial.print((uint8_t)
slaves[i].peer_addr[ii], HEX); if (ii != 5) Serial.print(":");
}

Serial.print(" Status: ");


// check if the peer exists
bool exists = esp_now_is_peer_exist(slaves[i].peer_addr); if (exists) {

// Slave already paired.


Serial.println("Already Paired");
} else {

// Slave not paired, attempt pair

esp_err_t addStatus = esp_now_add_peer(&slaves[i]); if


(addStatus == ESP_OK) {
// Pair success
Serial.println("Pair success");
} else if (addStatus == ESP_ERR_ESPNOW_NOT_INIT) {
// How did we get so far!!
Serial.println("ESPNOW Not
Init");

} else if (addStatus == ESP_ERR_ESPNOW_ARG) { Serial.println("Add Peer


- Invalid Argument");

} else if (addStatus == ESP_ERR_ESPNOW_FULL) {


Serial.println("Peer list full");
} else if (addStatus == ESP_ERR_ESPNOW_NO_MEM) {
Serial.println("Out of memory");
} else if (addStatus == ESP_ERR_ESPNOW_EXIST)
{ Serial.println("Peer Exists");

4
3
} else {
Serial.println("Not sure what happened");
}

delay(100);

} else {

// No slave found to process Serial.println("No Slave


found to process");
}
}

// Define a data structure

//uint8_t data = 0;

// send data

void sendData() {

//data++;

for (int i = 0; i < SlaveCnt; i++) {

const uint8_t *peer_addr = slaves[i].peer_addr; if (i == 0)


{ // print only for first slave

44
Serial.print("Sending: ");
Serial.println(myData.Etat);
}

esp_err_t result = esp_now_send(peer_addr,(uint8_t *) &myData,


sizeof(myData)); Serial.print("Send Status: ");
if (result == ESP_OK) { Serial.println("Success");
} else if (result == ESP_ERR_ESPNOW_NOT_INIT) {
// How did we get so far!!
Serial.println("ESPNOW not
Init.");
} else if (result == ESP_ERR_ESPNOW_ARG) {
Serial.println("Invalid Argument");
} else if (result == ESP_ERR_ESPNOW_INTERNAL)
{ Serial.println("Internal Error");
} else if (result == ESP_ERR_ESPNOW_NO_MEM)
{ Serial.println("ESP_ERR_ESPNOW_NO_MEM")
;
} else if (result == ESP_ERR_ESPNOW_NOT_FOUND) { Serial.println("Peer not
found.");
} else {
Serial.println("Not sure what happened");
}

delay(100);
}

// callback when data is sent from Master to Slave

void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) { char


macStr[18];
snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x",

mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);

45
Serial.print("Last Packet Sent to: "); Serial.println(macStr); Serial.print("Last Packet Send
Status: "); Serial.println(status ==
ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");
}

void setup() { Serial.begin(115200);


pinMode(Presence_P, INPUT);
pinMode(Entree_P, INPUT);
pinMode(P1, INPUT);
pinMode(P2,
INPUT);
pinMode(P3,
INPUT);
//pinMode(P4, INPUT);

//Set device in STA mode to begin with


WiFi.mode(WIFI_STA);
Serial.println("ESPNow/Multi-Slave/Master Example");

// This is the mac address of the Master in Station Mode Serial.print("STA


MAC: "); Serial.println(WiFi.macAddress());
// Init ESPNow with a fallback logic InitESPNow();

// Once ESPNow is successfully Init, we will register for Send CB to

// get the status of Trasnmitted packet


esp_now_register_send_cb(OnDataSent);

myservo.attach(servoPin); // attaches the servo on pin 18 to the servo object delay(100);


// waits 15ms for the servo to reach the position
myservo.write(0); // tell servo to go to position in variable 'pos'
delay(100);
// waits 15ms for the servo to reach the position
}

void loop() {

// In the loop we scan for slave


myData.a[0] = digitalRead(P1);
myData.a[1] = digitalRead(P2);
myData.a[2] = digitalRead(P3);

if ((myData.a[0]== 0) && (myData.a[1]==0) && (myData.a[2]==0))


{

myData.Etat = 1;
}

else
{

myData.Etat = 0;
}

ScanForSlave();

// If Slave is found, it would be populate in `slave` variable

// We will check if `slave` is defined and then we proceed further if (SlaveCnt


> 0) { // check if slave channel is defined
// `slave` is defined

// Add slave as peer if it has not been added already manageSlave();


// pair success or already paired
// Send data to device

sendData();

} else {

// No slave found to process


}

int P_Presence = digitalRead(Presence_P); int


P_Entree = digitalRead(Entree_P);

4
7
if ((P_Entree == 0) && (P_Presence == 1) && (myData.Etat==0) )
{

myservo.write(90); // tell servo to go to position in variable 'pos' delay(15);


// waits 15ms for the servo to reach the position
}

else if (P_Presence == 0)
{

myservo.write(0); // tell servo to go to position in variable 'pos' delay(15);


// waits 15ms for the servo to reach the position
}

// wait for 3seconds to run the logic again

//delay(500);
}

4
ESP32 Slave :

Organigramme du nœud esclave (Voiture) :

49
CODE ESP32 SLAVE:

Dans le code ESP32 SLAVE, nous avons intégré un programme dédié au contrôle des
mouvements des roues du robot. À l'intérieur de l'unité robotique, un capteur à ultrasons est
déployé pour détecter les obstacles, notamment la barrière. Dès qu'un obstacle est détecté, le
robot interrompt ses déplacements de manière automatique.

Une fois que la barrière est opérationnelle et ouverte, le robot reprend son avancée pour atteindre
la zone de stationnement. Lorsqu'il se trouve à proximité de la barrière ouverte, le robot initie une
connexion avec les cartes esclaves et la carte ESP32 Master.
La carte maître informe ensuite le robot de l'emplacement disponible où il peut se stationner.
Cette interaction permet une gestion efficace de l'espace de stationnement en guidant le robot
vers une place libre, tout en réduisant les risques de congestion et en optimisant l'utilisation des
emplacements disponibles.

50
#include <esp_now.h>
#include <WiFi.h>

#define CHANNEL 1

// Define a data structure typedef


struct struct_message {
int a[4];
int Etat;
int Com;
} struct_message;

// Create a structured
object struct_message
myData;

// Motor A

int motor1Pin1 = 13; // 8

int motor1Pin2 = 27; // 6


int enable1Pin = 17;
// Motor A

int motor2Pin1 = 18; // 13


int motor2Pin2 = 2;
//int enable2Pin = 16;

int echoPin = 16; // ultrasonic module ECHO


to D13 int trigPin = 4; // ultrasonic module TRIG to D12

int Park = 0; int m


= 0;

51
// Setting PWM properties const
int freq = 30000; const int
pwmChannel1 = 0;
//const int pwmChannel2 = 1;
const int resolution = 8; int
dutyCycle;

int Ultrasonic_Ranging() {
digitalWrite(trigPin,
LOW);
delayMicroseconds(2);
digitalWrite(trigPin,
HIGH);
delayMicroseconds(10);
digitalWrite(trigPin,
LOW);
int distance = pulseIn(echoPin, HIGH); // reading the duration of high level

distance = distance / 58; // Transform pulse time to distance delay(50);


return distance;
}

// Init ESP Now with fallback


void InitESPNow() {
WiFi.disconnect();
if (esp_now_init() == ESP_OK) {
Serial.println("ESPNow Init
Success");
}

else {

Serial.println("ESPNow Init Failed");

// Retry InitESPNow, add a counte and then restart?

// InitESPNow();

// or Simply
Restart
ESP.restart();
}
52
}

// config AP SSID

void configDeviceAP() {
String Prefix = "Slave:";
String Mac = WiFi.macAddress();
String SSID = Prefix + Mac; String
Password = "123456789";
bool result = WiFi.softAP(SSID.c_str(), Password.c_str(), CHANNEL, 0); if (!
result) { Serial.println("AP Config failed.");
} else {

Serial.println("AP Config Success. Broadcasting with AP: " + String(SSID));


}

// callback when data is recv from Master

void OnDataRecv(const uint8_t *mac_addr, const uint8_t *incomingData, int data_len)


{

char macStr[18];

memcpy(&myData, incomingData, sizeof(myData));

snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x",


mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4],
mac_addr[5]);

Serial.print("Last Packet Recv from: "); Serial.println(macStr);


Serial.print("Last Packet Recv Data: "); Serial.println(data_len);
Serial.print("Etat Position : ");
Serial.println(myData.a[0]);
Serial.println(myData.a[1]);
Serial.println(myData.a[2]);

5
3
Serial.println(myData.a[3]);
Serial.print("Etat_Parking: ");
Serial.println(myData.Etat);
Serial.println();
Serial.println("");
}

void setup() {

// sets the pins as outputs:


pinMode(motor1Pin1,
OUTPUT);
pinMode(motor1Pin2,
OUTPUT); pinMode(enable1Pin,
OUTPUT);

pinMode(motor2Pin1,
OUTPUT);
pinMode(motor2Pin2,
OUTPUT);
//pinMode(enable2Pin, OUTPUT);

pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output


pinMode(echoPin, INPUT); // Sets the echoPin as an Input
// configure LED PWM functionalitites
ledcSetup(pwmChannel1, freq, resolution);
//ledcSetup(pwmChannel2, freq, resolution);

// attach the channel to the GPIO to be controlled


ledcAttachPin(enable1Pin, pwmChannel1);
//ledcAttachPin(enable2Pin, pwmChannel2);

myData.Com = 0;
Serial.begin(115200);

// testing
Serial.print("Testing DC Motor...");
WiFi.mode(WIFI_AP);
54
// configure device AP mode configDeviceAP();

// This is the mac address of the Slave in AP Mode Serial.print("AP MAC: ");
Serial.println(WiFi.softAPmacAddress());

// Init ESPNow with a fallback logic InitESPNow();

Stop(); dutyCycle =
210;
ledcWrite(pwmChannel1, dutyCycle);
}

void loop()
{

int distance = Ultrasonic_Ranging();


delay(300);

Serial.print("distance=");

Serial.println(distance);

5
//dutyCycle = 150;

//ledcWrite(pwmChannel1, dutyCycle);

//ledcWrite(pwmChannel2, dutyCycle);

// Move the DC motor forward at maximum speed

if (distance < 28)

{ //assuming the front distance less than 30cm


Stop(); m = 1;
while((myData.Com == 0) && (m == 1))
{

esp_now_register_recv_cb(OnDataRecv);
}

Serial.print("myData.Com =");
Serial.print(myData.Com);
delay(1000);
if ((myData.a[0] == 1) && (myData.Com == 1))
{

moveP1();
m == 0;
myData.Com = 0;
Serial.println("Position 1");
}

else if ((myData.a[1] == 1) && (myData.Com == 1))


{

moveP2();
m == 0;
myData.Com = 0;

Serial.println("Position 2");
}

else if ((myData.a[3] == 1) && (myData.Com == 1))

5
6
{

moveP3();
m == 0;
myData.Com = 0;
Serial.println("Position 3");
}

else if (m==0)
{

Avant_N(); delay(100);
}

void move(int motor1State, int motor2State, int duration)


{

digitalWrite(motor1Pin1, motor1State);
digitalWrite(motor1Pin2, !motor1State);
digitalWrite(motor2Pin1, motor1State);
digitalWrite(motor2Pin2, !motor1State);
delay(duration);
Stop();
}

void Avant(int duration) {


move(HIGH, HIGH,
duration);

5
7
}

void Arriere(int duration) {


move(LOW, LOW, duration);
}

void Right(int duration) { move(LOW,


HIGH, duration);
}

void Left(int duration) {


move(HIGH, LOW, duration);
}

void Stop()
{

digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, LOW);
}

void Avant_N()
{

digitalWrite(motor1Pin1,
HIGH);
digitalWrite(motor1Pin2,
LOW);
digitalWrite(motor2Pin1,
HIGH);
digitalWrite(motor2Pin2,
LOW);
}
void moveP1()
{

Avant(1500); delay(12000);

Avant(2400);
}

void moveP2()
{

Avant(1300);
delay(9000);
Right(1700); delay(300);
Avant(1000); delay(300);
Left(1400);
delay(300); Avant(2100);
}

void moveP3()
{

Avant(1300);
delay(9000);
Right(1700); delay(300);
Avant(1800); delay(300);
Left(1400);
delay(300); Avant(2100

5
En conclusion, ce chapitre a présenté la mise en œuvre réussie de notre projet grâce à l'utilisation des

cartes ESP32 Master et esclave, ainsi que du protocole ESP-NOW. Nous avons démontré comment

ces composants ont permis une coordination efficace de l'ouverture de la barrière en fonction de la

détection du robot et de la disponibilité des places de stationnement. Cette approche a abouti à la

création d'un système de stationnement intelligent et automatisé, améliorant l'efficacité et la sécurité

de l'accès au stationnement. En envisageant des pistes d'amélioration futures, nous sommes prêts à

poursuivre le développement de notre solution pour répondre aux besoins évolutifs de notre projet.
Conclusion
Le robot éviteur d'obstacles, par exemple, peut naviguer de manière autonome dans un

environnement, évitant les obstacles sur son chemin. Cela a des applications potentielles dans

de nombreux domaines, de la robotique domestique à l'exploration spatiale.

D'autre part, le parking intelligent utilise des capteurs de présence et une carte ESP32 pour

gérer efficacement l'espace de stationnement. Cela peut améliorer l'expérience utilisateur en

réduisant le temps passé à chercher une place de parking, et peut également contribuer à

réduire l'empreinte carbone en minimisant la conduite inutile.

Ces deux projets démontrent le potentiel de l'intelligence artificielle et de l'Internet des objets

pour résoudre des problèmes complexes. Ils soulignent également l'importance de

l'innovation et de la créativité dans le domaine de la technologie. En continuant à explorer et

à développer ces technologies, nous pouvons espérer réaliser des avancées significatives qui

auront un impact positif sur notre société.


Bibliographie
https://fr.wikipedia.org/wiki/Portail:%C3%89lectricit
%C3%A9_et_%C3 %A9lect ronique
Fun starter kit and robot for Arduino, Raspberry pi and Micro
bit (keyestudio.com)
https://wiki.keyestudio.com/KS0523_KEYESTUDIO_4WD_Mechanical_Rob
ot_Arm_Smart_Car

https://esp32io.com/tutorials/esp32-servo-motor
http://tpe-robotique-exosquelette.e-monsite.com https://www.arduino.cc
https://fr.wikipedia.org/wiki/Portail:Informatique

http://tpe-robotiqueexosquelette.emonsite.com www.mon-club-elec.fr
https://diyi0t.com/tcrt5000-line-tracking-module-arduino-
esp8266-esp32/
https://dronebotworkshop.com/esp-now/

Vous aimerez peut-être aussi