Académique Documents
Professionnel Documents
Culture Documents
Dédicace
Jamais les mots ne sauraient exprimer ma gratitude envers vous pour votre
dévouement, votre tendresse et votre attention pour m’avoir facilité le chemin, souvent à vos
dépens, par votre sens du devoir et du sacrifice. Je vous dois ce que je suis et ce que je serai.
J’implore Dieu, le tout puissant, de m’aider à vous prouver ma sincère reconnaissance pour
ces nombreuses années de sacrifices qui resteront gravées dans ma mémoire.
A toute ma famille.
A tous mes deux amies Sihem et Chayma qui m’ont soutenu dans les moments les plus
difficiles.
Remerciement
Au terme de ce travail résultat de tant d’années de sacrifices et d’efforts, je tenais à
remercier avec beaucoup de respect et de reconnaissances Mr. Sami Melki en tant
qu’encadrant, pour son disponibilité, son valeurs, son bon directive, et son patience qu’il a
montré pour contribuer à la réalisation de ce projet de fin d’études et enfin de vouloir accepter
de juger le contenu de ce rapport.
Je serais très reconnaissante envers les enseignants du département Technologie de
l’informatique qui ont procédés à mon enseignement durant les années universitaires (2019 à
2022).
Introduction générale
1-thème général du projet
Au cours des deux dernières décennies, le monde a connu un certain nombre de foyers de
maladies infectieuses qui ont montré un taux élevé de propagation.
À l’heure actuelle, l’inquiétude grandit face à la propagation continue de la COVID-19 dans
certaines régions du monde et le maintien d’un taux réduit de propagation de l’épidémie dans
d’autres est un véritable défi. Les gouvernements, les employeurs, les travailleurs et leurs
organisations sont confrontés à d’énormes défis lorsqu’ils tentent de lutter contre la pandémie
de COVID-19 et de protéger la sécurité et la santé sur les lieux de travail.
En Tunisie (2022), plus de 7 mille cas de contamination au coronavirus ont été détectés
chez les élèves, les étudiants et le personnel éducatif, alors que 122 des 6.100 écoles et 373
des 78.000 classes ont été fermées.
2-Cadre du sujet
Partager un espace confiné, mal ventilé pendant une ou plusieurs heures constituerait le
dénominateur commun à la grande majorité des situations propices à la contagion du
Coronavirus SARS CoV-2. Si la transmission du virus par les microgouttelettes
A l’occasion d’une toux ou d’un éternuement est établie depuis le début de l’épidémie,
un faisceau d’indices concordant laisse à penser que son transport aéroporté sous forme
d’aérosols serait à l’origine d’un nombre tout aussi important de contaminations.
Notre cas l’ISET, où les salles de cours ou les amphis qui accueillent et qui sont plus au
moins fermés. Ce manque d’aération et de ventilation risque de causer des problèmes de
respiration avec le manque d’oxygène ainsi la propagation des épidémies respiratoires.
Le premier chapitre sera consacré pour définir l'organisme d'accueil, présenter brièvement
les résultats des différentes études précédentes, poser notre problématique et finalement
décrire le fonctionnement du système.
Chapitre 1 :
1-Organisme de l’entreprise (ISET Radés) :
L’Institut supérieur des études technologiques de (ISET-Radés) est une institution
d'enseignement supérieur tunisienne formant des techniciens supérieurs et délivrant le
diplôme de licence appliquée dans plusieurs domaines.
Fondation : 1995
Régime linguistique : Français
Directeur : Rachid Amri
Assure la formation selon la réforme LMD du système de l'enseignement supérieur
tunisien[1] au sein des départements suivants : génie mécanique, génie civil, génie électrique,
technologies d'informatique et gestion des entreprises et des administrations. L'Iset de Radès
est situé dans la banlieue de Radès (gouvernorat de Ben Arous) et abrite aussi la direction
générale des études technologiques.
2-Etat de l’existant :
Dans les études antécédentes certaines chercheurs ont présenté les solutions suivantes :
Un protocole d’autorisation d’accès est un outil administratif utilisé afin de documenter
l’aération des risques effectué pour chaque entrée en espace clos. Une personne ayant toute la
formation requise et de l’expérience en travail dans un espace clos doit remplir l’autorisation
d’accès.
Certaines administrations demandent un permis d’entrée est requis pour les espaces clos
lorsque l’évaluation des dangers et des risques indique la nécessite des mesures de contrôle de
risque qui suivent :
Surveillance des conditions atmosphériques
Isolation
Ventilation
Dispositifs protecteurs
Dispositifs protecteurs
Protection respiratoire
Aération ou une ventilation renforcée soit mise en place.
2-Problématique :
Un espace clos est un lieu totalement ou partiellement fermé non conçu pour être occupé
par des personnes mais où , à l’occasion , des travaux sont exécutés. On y accède par une
voie restreinte.
L’atmosphère dangereuse que contient l’espace clos sa configuration , sa conception , son
contenu et les travaux qui y sont effectués comportent des risques .
L’espace clos peut contenir de gaz toxiques ou inflammables, l’oxygène peut y être rare et
les risques d’incendies plus grands à cause de la présence de gaz et d’une ventilation
déficiente.
a- Solution :
Vu le risque présenté par les espaces fermés, nous proposons ce projet qui consiste à
installer des capteurs afin de saisir la qualité d'air dans la salle et les mesures d'oxygène, de
CO2, de fumée, la température et le gaz. Ces indicateurs seront affichés su un Dashboard à
travers une application dans le but d’intervenir et agir rapidement en cas de risque, si l’un de
ces indicateurs dépasser le seuil maximale. Ainsi cette application nous permettra de mettre
en marche les ventilateurs installés dans la salle des cours en cas de besoin.
b- Ecosystème :
Chapitre 2 :
1- Partie Electronique (Hardware) :
a- Carte Raspberry pi zero :
Raspberry Pi est un nano-ordinateur monocarte à processeur ARM de la taille d’une carte de
crédit conçu par des professeurs du département informatique de l’université de Cambridge
dans le cadre de la fondation Raspberry Pi.
b- Capteur de gaz O2 :
Basé sur un capteur de gaz ME2-O2, ce module de chez Seeed Studio, est capable de
mesurer la concentration d'Oxygène dans l'air ambiant avec précision. Ce capteur à réaction
organique génère un courant très faible quand il est traversé par un courant d'air. Le module
intègre un étage de conversion/amplification pour en récupérer les données au travers une
entrée analogique d'un module Arduino (par exemple) ou tout microcontrôleur disposant de ce
type d'entrée.
Si votre microcontrôleur ne dispose pas d'une entrée analogique, mais d'une entrée I2C
(Raspberry Pi par exemple) nous vous conseillons d'utiliser en plus le module
Grove I2C- ADC (proposé en option).
Remarque : On n’a pas adapté ce capteur dans notre projet a cause de sa rupture de
stock en Tunisie.
c- Capteur de présence :
Les capteurs de présence, encore appelés « capteur de position » ou « détecteur de présence »,
sont principalement utilisés dans les systèmes automatisés pour détecter les positions d’objets
ou de personnes. Ils sont fabriqués à base de microcontacts, placés dans un corps de
protection et muni d’un système de commande.
Caractéristiques : La lentille spéciale permet une détection sur une large zone d’objets en
mouvement qui présentent un écart de température avec l’environnement.
d- Capteur de fumée :
Le capteur MQ-2 est un capteur qui permet de détecteur du gaz ou de fumée à des
concentrations de 300 ppm à 10000 ppm. Après calibration, le MQ-2 peut détecter différents
gaz comme le GPL (LPG), l’i-butane, le propane, le méthane, l’alcool, l’hydrogène ainsi que
les fumées. Il est conçu pour un usage intérieur à température ambiante.
Alimenté en 5V, il dispose d’une sortie analogique et d’un réglage de la sensibilité par
potentiomètre.
Caractéristiques :
fonctionnement
e- Ventilateur :
:
Figure n°7 : Ventilateur 2 broches
Alimentation Courant
5V 0.2A
l’ADC tolère une tension d’entrée comprise entre 2,7 V et 5 V. Étant donné que les
GPIO fonctionnent avec 3,3 V et peuvent se casser à des tensions plus élevées, le MCP3008
ne doit fonctionner qu’avec 3,3 V. Si vous utilisez un module analogique dont la tension
d’entrée est supérieure à 3,3 V (et qui peut également la transmettre), vous devez vous assurer
qu’il n’atteint pas le CAN. Pour cela, par ex. Des résistances série sont utilisées et cela peut
être pris en compte dans la suite (calculs, etc.).
a- Caractéristiques :
Raspberry Pi Zero W
Processeur intégré monocore ARM 11 Broadcom BCM2835 @ 1 GHz
RAM : 512 Mo
Lecteur de cartes Micro SD
Sortie mini HDMI
Deux ports micro USB dont un utilisé pour l'alimentation (non fournie)
1 port CSI pour connecter une caméra de surveillance
Connecteur 40 broches compatible HAT
Wi-Fi 802.11 b / g / n et Bluetooth 4.1 BLE (faible consommation d'énergie)
b- Alimentation électrique :
Le microcontrôleur Raspberry Pi Zero fonctionne sur une plage de tension de 4.9-5.2V
grâce à son régulateur de tension embarqué. Le microprocesseur, quant à lui, fonctionne avec
une tension de 3.3V. Le microcontrôleur consomme, en fonctionnement normal, jusqu’à
45mA (s’il n’alimente rien) et peut accepter sur chacune des broches IO un courant maximum
de 20mA.
c- Introduction aux entrées / sorties :
La partie la plus importante pour ce qui nous concerne est le port GPIO (en anglais
"general purpose input & output"). Ce connecteur à 40 points est le moyen fourni par
les créateurs du Raspberry Pi pour nous permettre d’accéder aux ports d’entrée/sortie du
processeur BCM2837.
Digital I/O : 29 (GPIO0, GPIO1, GPIO2, GPIO3, GPIO4, GPIO5, GPIO6, GPIO7,
Les ports du connecteur GPIO ont tous un rôle bien déterminé. On trouve des
alimentations 5V et 3,3V ainsi que des masses.
Les ports GPIO sont identifiés par un chiffre ; GPIO1, GPIO2, … Certains ont une fonction
supplémentaire précisée entre parenthèses. Cette fonction n’empêche pas d’utiliser les GPIO
de façon classique, comme entrée/sortie numérique (0 ou 1).
Les GPIO utilisables comme entrée/sortie numérique sont au nombre de 26. Ils ne
fonctionnent qu’en tout ou rien, 0 ou 1, 0V ou 3,3V. Il n’y a pas de port analogique (tension
continument variable). Si vous avez besoin de plus de ports ou de ports analogiques, il faudra
ajouter des cartes d’extension.
La communication suivant le protocole SPI est très rapide, car les fréquences sont élevées
et le dialogue totalement bidirectionnel « full-duplex ». Ce type de communication sert
typiquement pour établir un lien entre un processeur et des périphériques (capteurs, etc.), mais
on peut aussi l'utiliser pour dialoguer avec un microcontrôleur.
Le protocole SPI (Serial Peripheral Interface) implémente une liaison série synchrone
entre un maître et un esclave. Lorsqu'un seul esclave est employé, trois signaux seulement
(outre la masse) sont nécessaires.
Le maître produit une horloge (signal SCLK) envoyé à l'esclave. Sur certaines transitions de
cette horloge, l'esclave lira (sur le signal nommé MOSI – Master Out Slave In), ou écrira (sur
le signal nommé MISO – Master In Slave Out) des données.
f- Câblage de matériels :
Connexion du Raspberry pi Zero avec le convertisseur MCP3008 :
A cette étape, notre MCP3008 est connecté au Raspberry. Toutes les broches de
gauche du circuit sont des entrées analogiques que nous pourrons utiliser.
B- Programme principale :
a- Langage utilisé :
Python :
Python est le langage de programmation open source le plus employé par les
informaticiens. Ce langage s’est propulsé en tête de la gestion d’infrastructure, d’analyse de
données ou dans le domaine du développement de logiciels. En effet, parmi ses qualités,
Python permet notamment aux développeurs de se concentrer sur ce qu’ils font plutôt que sur
la manière dont ils le font. Il a libéré les développeurs des contraintes de formes qui
occupaient leur temps avec les langages plus anciens. Ainsi, développer du code avec Python
est plus rapide qu’avec d’autres langages.
la programmation d’applications
la création de services web
la génération de code
la méta programmation.
Techniquement, ce langage servira surtout pour le scripting et l’automatisation (interaction avec les
navigateurs web).
On différencie deux versions : Python 2 et Python 3. Python 2, l’ancienne version propose des
mises à jour jusqu’en 2020. Python 3 est la version actuelle. Son interpréteur est plus efficace, ainsi
que son contrôle de concurrence.
Guido van C pour CPython, Java pour 20 février 1991 3.10.5 (6 juin py, pyc, pyd,
Rossum Jython, C# pour IronPython e 2022) pyo, pyw, pyz et
t en Python pyi
b- Code :
Code du capteur de fumée MQ-2 :
#Bibliothèque
import RPi.GPIO as GPIO
import time
#Ces numéros de pins GPIO doivent etre modifies pour correspondre aux broches
utilisées
SPICLK = 11
SPIMISO = 9
SPIMOSI = 10
SPICS = 8
# Les ports du capteur
mq2_dpin = 26
mq2_apin = 0
# Utiliser la numérotation des broches Broadcom GPIO
def init():
GPIO.setwarnings(False) #désactive le mode avertissement
GPIO.cleanup()
GPIO.setmode(GPIO.BCM) # Utiliser la numérotation des broches Broadcom GPIO
# définition de l'interface SPI
GPIO.setup(SPIMOSI, GPIO.OUT)
GPIO.setup(SPIMISO, GPIO.IN)
GPIO.setup(SPICLK, GPIO.OUT)
GPIO.setup(SPICS, GPIO.OUT)
GPIO.setup(mq2_dpin,GPIO.IN,pull_up_down=GPIO.PUD_DOWN) #utliser les
résistances
def readadc (adcnum, clockpin, mosipin, misopin, cspin): #fonction lisant les donnees SPI
de la puce MCP3008, parmi 8 entrees, de 0 a 7
print("ADC NUM!", adcnum)
if ((adcnum > 7) or (adcnum <0)):
return -1
GPIO.output(cspin, True)
GPIO.output(clockpin, False)
GPIO.output(cspin, False)
GPIO.output(mosipin, True)
else:
GPIO.output(mosipin, False)
commandout <<= 1
GPIO.output(clockpin, True)
GPIO.output(clockpin, False)
adcout = 0 #définition du ADC utilise (broche du MCP3008). Cette valeur peut aller
de 0 à 7.
#lire dans un bit vide, un bit nul et 10 ADC
for i in range(12):
GPIO.output(clockpin, True)
GPIO.output(clockpin, False)
adcout <<= 1
if (GPIO.input(misopin)):
adcout |= 0x1
GPIO.output(cspin, True)
adcout <<= 1 #le premier bit est 'null' alors supprimez-le
return adcout
def main():
init()
print("please wait...")
time.sleep(10) #attendre 10s
while True:
COlevel = readadc(mq2_apin, SPICLK, SPIMOSI, SPIMISO, SPICS) # Lecture de
la valeur brute du capteur
print("Current Gas AD vaule = "+str("%.2f"%((COlevel/1024.)*3.3))+" V") # conversion
de la valeur brute lue en volts
time.sleep(20)
smokeLevel = (COlevel/1024.)*3.3
if smokeLevel >= 0.20: #Si le niveau de fumée a depassé 0.2
print("smoke in the area »)
if _name_ == '_main_':
Eya Latrech Page 24
ISET de Radès Juin 2022
try:
main()
pass
except KeyboardInterrupt:
pass
GPIO.cleanup()
GPIO.setmode(GPIO.BCM)
PIR_SENSOR_PIN = 16 #sortie du capteur au pin 16 du raspberry
GPIO.setup(PIR_SENSOR_PIN, GPIO.IN)
print ("lancement")
time.sleep(1)
try:
while True:
if GPIO.input(PIR_SENSOR_PIN):
print("Mouvement detecté")
time.sleep(1)
except KeyboardInterrupt:
print("cleaning up")
GPIO.cleanup()
while True: #créer une boucle infinie pour le prochain bit de code
humidity, temperature = Adafruit_DHT.read(DHT_SENSOR, DHT_PIN)
if humidity is not None and temperature is not None: #si connecté
print("Temp={0:0.1f}C Humidity={1:0.1f}%".format(temperature, humidity))
#Lire les données du DHT11 et afficher
time.sleep(7)
GPIO.setmode(GPIO.BCM)
PIR_SENSOR_PIN = 16 #Sortie du HCS05 lié au GPIO pin 16
GPIO.setup(PIR_SENSOR_PIN, GPIO.IN) #Sortie du capteur configuré comme entrée a
la carte
print ("lancement")
time.sleep(1)
try:
while True:
if GPIO.input(PIR_SENSOR_PIN): #si le capteur détecte un mouvement
print("Mouvement detecté")
time.sleep(1)
except KeyboardInterrupt: # empêcher l'interpréteur de quitter brusquement le
programme
print("cleaning up")
GPIO.cleanup()
b- NODE-RED :
linéaire et une node reliée à aucune autre peut quand même s’activer si les conditions sont
réunies.
Node-RED contient plusieurs nodes de base qui sont très utiles ou pratiques.
Ces nodes se retrouvent dans tout flow quelque soit le domaine. Ces nodes sont classés par
fonctionnalité.
L’interface de Node-RED se compose de 4 parties, qui sont : A gauche : la liste des
nodes disponibles. Pour les placer sur le flow, selectionnez celle que vous voulez et glissez la
jusqu’à l’endroit voulu. Au centre : les flows. Vous pouvez en ouvrir autant que vous voulez,
chaque flow est indépendant et en peut pas agir sur d’autres. A droite : des onglets utiles.
L’onglet i permet d’avoir des informations détaillées sur toute node sélectionnée. L’onglet
debug ( icône d’insecte ) apparaît dès qu’une node debug est placée est permet de voir les
messages de debug.
L’onglet dashboard ( icône de graphe ) apparaît dès qu’une node de dashboard apparaît et
permet d’ y avoir accès. D’autres onglets peuvent apparaître selon les nodes installées et
placées En haut : Le bouton Deploy permet de « déployer » son flow et de le rentre actif. Le
bouton menu ( Icone de lignes parallèles ) ouvre un menu, qui contient notamment les options
: View : gérer la vue (afficher ou non les menus des cotés). Permet aussi d’accéder au
débug ou au dashboard si actifs. Import : charger un flow sauvegardé Export :
sauvegarder les flows ouverts Manage Palette : gérer les nodes installées et en installer de
nouvelles Flows / Subflows : créer un nouveau flow ou subflow.
Pour avoir les données du capteurs sur notre téléphone portable , on va créer une
application dans la NODE-RED a partir le broker MQTT Mosquitto .
A la première étape :
on va installer le Mosquitto .
Ecrire ce programme python dans fichier (on utiliser la bibliothèque paho pour
faciliter la tache)
Choisir la carte SD :
Ouvrir la configuration :