Vous êtes sur la page 1sur 67

Dédicaces

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 .

À 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.

Aux membres du jury


À *Monsieur Ahmed Hanafi*, membre du jury, je tiens à exprimer ma sincère reconnaissance pour votre
rôle essentiel dans l'évaluation de cette travail . Votre expertise et votre engagement sont inestimables,
et je vous remercie d'avoir consacré votre temps et vos compétences à cette tâche. Votre présence
renforce la qualité de notre travail, et je vous en suis profondément reconnaissance

Omar El Asri
Remerciement

S’il est coutume en de telles circonstances d’adresser un remerciement au-delà d’une simple
tradition, nous tenons à remercier toutes les personnes qui ont contribué de près ou de loin à la
réalisation de ce travail.
Nos remerciements vont également à notre encadrant Mr. El Hanafi Ahmad , dont les conseils
avisés et l'expertise ont grandement contribué à la réussite de notre projet.
Nous souhaitons également adresser nos sincères remerciements à notre chef de filière, Mr. Fri,
pour son soutien constant tout au long de notre parcours académique. Sa présence
encourageante a été une source d'inspiration pour nous.
Nous désirons également exprimer nos reconnaissances à notre chef de département, Mr.
Derouiche pour son leadership éclairé et son engagement envers l'excellence académique. Ses
orientations stratégiques ont créé un environnement propice à notre développement profession
nel.
Nous souhaitons également exprimer notre sincère gratitude envers nos parents. Chaque
accomplissement a été motivé par leurs amour inconditionnel, leurs soutien inébranlable et
leurs encouragements. Notre plus grande source d'inspiration a été leur présence et leur soutien
inebranlable.
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 , Eviteur d’obstacles, Arduino, Capteur, Robot, Electronique. Parking connecte, smart
parking
Table des matières
Table des matières

Introduction....................................................................................................................... 4

1 Description du système.............................................................................................8

2 Analyse fonctionnelle................................................................................................ 9
2.1 Graphe des interacteurs................................................................................................................ 9
2.2 Caractérisation des Fonctions de Service.................................................................................10
2.3 Diagramme FAST du robot..........................................................................................................11
2.4 Grafcet fonctionnel du robot......................................................................................................12

3 Conception du robot............................................................................................... 12
3.1 Choix de robot.............................................................................................................................. 12
3.2 Cahier de charge.............................................................................................................................. 15
Conclusion................................................................................................................................................ 17

Deuxième partie............................................................................................................... 18

4 Études de conception d’un parking.............................................................................18


4.1 Introduction........................................................................................................................................ 19
4.2 Conception et Dimensions.................................................................................................................19
4.2.1 Choix du Matériau :................................................................................................................ 19
4.2.2 Dimensions :........................................................................................................................... 19
4.2.3 Disposition des Places de Stationnement :.............................................................................19

3
4.2.4 Marquages au Sol :................................................................................................................. 19
4.3 Assemblage et Finition...................................................................................................................... 19
4.3.1 Construction :......................................................................................................................... 19
4.3.2 Finition :..................................................................................................................................20
4.4 Système de Parking Intelligent :......................................................................................................... 20
4.5 Communication et Interaction :..........................................................................................................20

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

5 Conception de Matériaux et Composants pour l'Automatisation et la Sécurité...........21


5.1 Introduction........................................................................................................................................ 22
5.2 Architecture matérielle.......................................................................................................................22
4.2.1 Vue global:..............................................................................................................................22
5.2.2 Matériaux et composants de robot :..................................................................................22
5.2 Les composants de parking :...............................................................................................................29
5.2.1 Le cadre de parking :.............................................................................................................. 29
5.2.2 Capteur Infrarouge :............................................................................................................... 31
Principe de fonctionnement :..........................................................................................................32
Caractéristiques Techniques :.................................................................................................................. 32
5.2.3 Capteur HW-511 :............................................................................................................... 34

Chapitre 4 :......................................................................................................................... 35

6 Réalisation....................................................................................................................... 35
Introduction :............................................................................................................................................ 36
Définition du programme Arduino IDE :...................................................................................................36
D2FINITION DU ESP NOW :.......................................................................................................................38
Le code ESP32 utilisé:............................................................................................................................... 39
ESP32 Master :......................................................................................................................................... 40
Organigramme du nœud maitre (Parking) :....................................................................................40
CODE ESP32 master :.......................................................................................................................41
4
ESP32 Slave :............................................................................................................................................ 53
Organigramme du nœud esclave (Voiture) :...................................................................................53
CODE ESP SLAVE :............................................................................................................................ 53

Conclusion........................................................................................................................ 65

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 Carte de puissance l298n……………………………………………………………25
13 Fonction de la carte ESP32…………………………………………………………..26
14 La batterie……………………………………………………………………………27
15 Le cadre de parking…………………………………………………………………28
16 Capteur Infrarouge………………………………………………………………….30
17 Fonctionemment du capteur infrarourge………………………………………….31
18 Capteur HW-511……………………………………………………………………..32
19 Arduino ide……………………………………………………………………………35
20 Protocole ESP32………………………………………………………………………..36
21 ESP32 NOW……………………………………………………………………………37

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 éviteur 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
Première partie
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. Ceci 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.2 Caracté risation des Fonctions de Service


FS Critère Niveau
FP1 Tourner à chaque fois un obstacle est rencontré 90
FP2 Avoir un minimum de distance pour détecter un obstacle 30cm
FP3 Détection rapide de la meilleur direction Max 2 sec
FC1 Avoir une réserve d’énergie (en termes de tension) 9V
FC2 Changement rapide de direction Une seconde

1.3 Diagramme FAST du robot

10
Figure 2 – Diagramme 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

2 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
12
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

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.

13
 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
Figure 6 - robot

3.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.

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,
ainsi que les batteries (qui peut être assez lourdes) et le système de contrôle.

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
Deuxiè me partie
4 É tudes de conception d’un parking

17
4.1 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.

4.2 Conception et Dimensions


4.2.1 Choix du Matériau :
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.

Figure 7 - parking en bois

4.2.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.

4.2.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.

4.2.4 Marquages au Sol :


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

18
4.3 Assemblage et Finition
4.3.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.

4.3.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.

4.4 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).

4.5 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

19
Chapitre 3 :

5 Conception de Matériaux et Composants pour


l'Automatisation et la Sécurité.

20
5.1 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,

5.2 Architecture matérielle


4.2.1 Vue global:

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

5.2.2 Matériaux et composants de robot :


1- Les Moteur :
On alimente quatre moteurs

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.

21
Figure 9 - Moteur DC

2-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étermi- ner 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.

22
Dans notre projet, nous avons utilisé le capteur ultrason pour permettre à notre robot de
détecter les obs- tacles 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 4: fonction de capteur ultra-son.

23
24
3- 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 5: Carte de puissance l298n.

25
4-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 10 - Fonctionne de la carte Esp 32

26
5 - 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 11 - 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

27
5.2 Les composants de parking :
5.2.1 Le cadre de parking :

Figure 12 - 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

28
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.

29
5.2.2 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 13 - Capteur Infrarouge

30
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.

Figure 14 - Fonctionnement du Capteur Infrarouge

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êmesi l'objet est absent.

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

31
 Poids: 5g

5.2.3 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.

32
Figure 14 - Capteur HW-511

33
Chapitre 4 :

6 Réalisation

34
6.1 Introduction :

Dans le cadre de notre projet, le programme Arduino IDE a joué un rôle central. Cet outil de
développement intégré a été essentiel pour établir une connexion vitale entre la carte ESP32 du
robot et celle du parking. Grâce à la flexibilité et à la puissance de l'Arduino IDE, nous avons pu
concevoir et mettre en œuvre des programmes sur mesure, parfaitement adaptés aux
exigences spécifiques de notre projet.

Ce chapitre offre une plongée en profondeur dans les multiples programmes que nous avons
développés et déployés pour atteindre nos objectifs. Chaque aspect de ces programmes sera
minutieusement examiné, avec des explications détaillées sur leur fonctionnement et leur
contribution à la réalisation globale du projet. En mettant en évidence les choix de conception
et les défis rencontrés, nous fournirons une vue d'ensemble complète du processus de
développement logiciel qui a guidé notre démarche. Ensuite, nous procéderons à une analyse
des enseignements tirés de cette expérience, tout en envisageant les perspectives
d'amélioration et les pistes d'exploration futures.

6.2 Définition du programme 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
microcontrôleurs compatibles, 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>

35
<Wifi. H> <ESP32Servo.h>

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 15 – Arduino ide

36
6.3 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 16 - protocole ESP32

37
6.4 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.

38
Figure 17 - ESP32 NOW

39
6.5 ESP32 Master :
6.5.1 Organigramme du nœud maître (Parking) :

Debut

Inclure bibliothèques :
esp_now.h - WiFi.h - ESP32Servo.h

Initialisation :

 Broches Capteurs et servomoteur

 Mode Wifi STA

 Initialisation ESPNow

Enregistrement de la fonction pour obtenir l’état


des pacques transmis du maitre vers esclave :
OnDataSent(macadresse, status)

Lire l’état des capteurs du parking

ScanForSlave()

SlaveCnt > 0 & P_Entree


SlaveCnt > 0 & P_Presence
Oui

Parking plein ?
manageSlave()

Non
Fermer Barrière
sendData()

Ouvrir Barrière
Oui

40
6.5.2 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.

41
/**

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

42
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
as master or salve.

// 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;
// Broche pour le capteur 2

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


servoPin = 18;

43
// 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();

44
// 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) {

45
// 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();
}

46
// 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");

47
} 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

48
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]);

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

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

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

52
6.6 ESP32 Slave :
6.6.1 Organigramme du nœud esclave (Voiture) :

Debut
Inclure bibliothèques :
esp_now.h - WiFi.h

Initialisation :

 Broches Capteur ultrason et moteurs

 Mode Wifi AP

Lire la distance libre devant voiture


Ultrasonic_Ranging()

Non
Distance < 28

Avance Voiture Arrêt Voiture

delay (200)
Non
Connexion avec parking ?

OnDataRecv()

Parking plein ?

Non

P1 vide
P2 vide
MoveP1()
Oui
MoveP3()
MoveP2()

53
6.6.2 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.

54
#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;

55
// 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();
}

56
}

// 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]);

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

58
// 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);

59
//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");
}

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

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

61
void Avant(int duration) { move(HIGH,
HIGH, duration);
}

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

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

63
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é.

Vous aimerez peut-être aussi