Mémoire Final
Mémoire Final
Mémoire Final
كلية التكنولوجيا
Faculté de Technologie
قسم اإللكترونيـك
Département d’Électronique
Mémoire de Master
présenté par
ACHLAF Aymen
&
Filière : Automatique
; ةلزينRTC ; بج وباب الجب ; اب وينو ; مبةشعب وباب ; وو الورمظ عة الةوقيع19 كوسي:كلمات المفاتيح
SD. سه شبيو
Résumé : Le monde est en pleine pandémie à cause du virus COVID 19, dans ce
mémoire nous allons explorer les différents détails sur le virus, des généralités sur les
cartes Arduino, plus précisément la carte Arduino UNO, et nous allons réaliser un
thermomètre de température infrarouge sans contact avec stockage SD.
Abstract : The world is in a global pandemic because of the COVID 19 virus, in this
thesis we will explore the different details about the virus, generalities about Arduino
cards, more precisely the Arduino UNO, and we will conceptualize a contactless
infrared thermometer with SD logging capabalities.
CHAPITRE 1 : Généralités
1.1 Introduction……………………………………………………………………………………………………….2
1.2 L’historique du COVID-19……………………………………………………………………………………2
1.3 Les symptômes de la COVID-19…………………………………………………………………………..3
1.4 Les types des tests pour dépister COVID-19………………………………………………………..3
2.1 Introduction…..…………………………………………………………………………………………………16
2.2 Pourquoi la carte ARDUINO………………………………………………………………………………16
2.3 Introduction à la carte ARDUINO………………………………………………………………………17
2.3.1 Les gammes de la carte ARDUINO…..……………………………………………….………17
2.3.2 La constitution de la carte ARDUINO UNO…..………………………………..…………19
2.4 Software…………………………………………………………………………………………………………..23
2.4.1 Présentation d’IDE ARDUINO…..……………………………………………….……..………23
2.4.2 Langage de base utilisé…………………..……………………………………………….………24
2.5 CONCLUSION…………………………………………………………………………………………………….29
Chapitre 3 : Réalisation
3.1 Introduction…..…………………………………………………………………………………………………30
3.2 Synoptique général…..………………………………………………………………………………………30
3.2.1 Bloc de mesure……………………..…..……………………………………………….……………30
3.2.2 Bloc de temporisation..………..…..………………………………………….…….……………37
3.2.3 Bloc de stockage………..………..…..………………………………………….…….……………41
3.2.4 Bloc de Visualisation...………..…..………………………………………….…….…………….46
3.2.5 Les LEDs et Buzzer…...………..…..………………………………………….…….……………..50
3.2.6 Bloc d’alimentation.....………..…..………………………………………….…….…………….51
3.2.7 Bloc de traitement et de commande..………………………………….…….…………….53
3.3 Schéma général………..………………………………………………………………………………………59
3.4 Réalisation…………..…..………………………………………………………………………………………61
3.5 Tests et discussions....………..…..………………………………………….…….……………………..63
3.6 Conclusion…………..…..……………………………………………………………………….………………68
Conclusion Générale………………………………………………………………………………….…………..69
Annexes…………..…..……………………………………………………………………………………..……..…70
Bibliographie………..…..…………………………………………………………………………………..………91
Liste des figures
Figure 1.1 : Cas de COVID19 dans le monde………………………………………………………………… 2
Figure 3.4 : Le dessin technique d’un capteur Grove 20X40 SMD vertical……………………… 33
Introduction générale
Le premier chapitre s’étalera sur des généralités sur la COVID-19 et les thermomètres.
Le dernier chapitre sera consacré à la mise en œuvre de notre système ainsi que les
résultats obtenus.
2
Chapitre 1 Généralités
1.1 Introduction
Le monde est en pleine pandémie à cause du virus COVID 19, dans ce chapitre
nous allons explorer les différents symptômes du virus, les tests utilisés actuellement
et le rôle important des thermomètres dans la détection du virus.
Fièvre
Toux sèche
Fatigue
Courbatures
Maux de gorge
Diarrhée
Conjonctivite
Maux de tête
Perte de l’odorat ou du goût
Éruption cutanée, ou décoloration des doigts ou des orteils
Symptômes graves:
En moyenne, l’apparition des symptômes chez une personne infectée par le virus
prend cinq à six jours. Cependant, ce délai peut s’étendre jusqu’à quatorze jours. [4]
La majorité des tests COVID-19 sont des tests PCR. Ces tests détectent la maladie en
recherchant des traces du matériel génétique du virus sur un échantillon le plus
souvent prélevé par écouvillonnage du nez ou de la gorge.
Les tests de salive de coronavirus sont un nouveau type de diagnostic par PCR pour la
COVID-19. Les tests de salive dépendent de la technologie PCR standard et nécessitent
un certain travail manuel pour les étapes du test.
Des études ont suggéré que jusqu'à 30 % des résultats du test de salive sont inexacts.
[6]
Les tests d'antigènes peuvent donner des résultats en quelques minutes, mais la
rapidité vient avec les compromis, ce test donne de nombreux résultats faussement
positifs ou négatifs. [7]
Contrairement aux autres tests énumérés ici, les tests de détection des anticorps ne
sont pas destinés à détecter une infection actuelle par le CoV-2 du SRAS. Ils
recherchent plutôt les anticorps dans le sang, les faux résultats sont assez fréquents.
Figure 1.2 : Thermomètre de Fahrenheit de la fin du XVIIIe siècle. Musée Galilée, Florence.
7
1.7.2 Alimentaire
1.7.3 Professionnel
Les thermomètres pour l’usage professionnel sont de très grande précision. Ils ont une
très grande étendue de mesure et une grande rapidité d’acquisition. Ils peuvent
afficher deux températures avec un calcul de ΔT. En fonction des besoins, différents
capteurs sont utilisés. Le choix de la sonde adéquate dépend de différents critères.
Le thermomètre à gaz est basé sur les variations de pression ou de volume d'un gaz en
fonction de la température. Ce type de thermomètre utilise la loi d'Avogadro :
𝑃𝑣 = 𝑛𝑅𝑇
La première variante utilise un réservoir rempli de gaz et un tube ouvert dans lequel se
trouve un bouchon mobile séparant le gaz du réservoir de l'air ambiant. La seconde
variante de ce thermomètre garde le volume constant. Un réservoir contenant un gaz
est connecté par un tube capillaire à un manomètre.
Les thermomètres à cristaux liquides utilisent des cristaux liquides qui changent de
couleur selon la température. Ces thermomètres sont souvent utilisés pour les
aquariums (modèles autocollants) ou dans le secteur médical (thermomètres
frontaux), mais la mesure peut être inexacte.
Les thermomètres électroniques sont très précis et performants. Ils permettent les
mesures de température de l’air, des liquides, des matériaux, etc. La précision des
thermomètres électroniques dépend cependant de leur fabrication et de l'usage
auquel ils sont destinés.
Le thermocouple.
Le capteur à résistance de platine.
La thermistance.
La diode.
Les thermomètres infrarouges pour des mesures à distance ou sans contact.
Ces derniers auraient été inventés par Charles R. Darling.
Le thermomètre infrarouge le plus basique est composé d’une lentille qui focalise
l’énergie radiative infrarouge sur un détecteur qui la convertit en signal électrique.
Après compensation, ce signal est converti à son tour en température. Cette méthode
de mesure peut être très précise à condition cependant d'être bien calibrée, le
rayonnement mesuré étant dépendant de nombreux paramètres : émissivité de
l'objet, uniformité de la source, géométrie du dispositif. [13]
13
Figure 1.7 : le diamètre du point de mesure relevé à trois distances avec un thermomètre
infrarouge.
Pour obtenir avec les techniques de mesure infrarouge, la température la plus proche
possible de la valeur réelle, il convient cependant d’ajuster (quand l’instrument le
permet) l’émissivité de l’appareil à celle du matériau ou de la surface dont on souhaite
mesurer la température.
Le degré d’émissivité est une mesure pour définir la capacité de matières d’absorber
ou d’irradier l’énergie infrarouge. La valeur se trouve entre 0 et 1,0. Par exemple, un
miroir possède un degré d’émissivité de 0,1. Cependant, les dénommés corps noirs
possèdent un degré d’émissivité de 1,0.
14
Si vous régler le degré d’émissivité trop élevé, la température indiquée sera plus basse
que la réelle, toujours lorsque la température de l’objet à mesurer est supérieure à la
température ambiante. Vous vous avez réglé par exemple un facteur de 0,95, et le
degré d’émissivité est de seulement 0,9, la température indiquée sera plus basse que
la réelle. La peau humaine présente une émissivité variant de 0,97 à 23°C à 0,98 à
33°C. Elle présente donc une émissivité très proche de l’émissivité d’un corps noir.
C'est pour cette raison il est important de trouver une solution à ce problème en
modélisant et fabriquant un thermomètre infrarouge qu’on peut implémenter dans
des lieux sensibles. On a opté pour une réalisation à base de carte Arduino.
1.11 Conclusion :
Après avoir vu les principaux tests utilisés pour la détection du COVID-19, nous
nous sommes fixés comme tache, dans le cadre de notre PFE, la réalisation d’un
thermomètre électronique pratique et convivial qui répond à la problématique du
dépistage a tout point de vue économique et efficacité. Dans le chapitre qui suit nous
allons développer l’outil principal qui réalisera notre thermomètre à savoir la carte de
prototypage Arduino.
16
Chapitre 2 ARDUINO
2.1 Introduction
Aujourd’hui, l’intégration des systèmes numériques dans le domaine de
l'électronique tend à remplacer les systèmes analogiques, dans le but de leur
miniaturisation, formant ainsi des systèmes informatiques embarqués, toute en
réduisant leur coût de fabrication. Il en résulte des systèmes plus complexes et
performants pour un espace réduit. En fait depuis l’avènement de l’électronique, son
avancée continuelle n’a cessé de progresser. Dans ce chapitre on va introduire un
calculateur numérique qui n’est autre que la carte de prototypage Arduino qui servira
comme outil d’acquisition et de traitement avec son outil de programmation.
Nous avons choisi une carte Arduino UNO (carte Basique). L'intérêt principal de cette
carte est de faciliter la mise en œuvre d’une commande qui sera détaillée par la suite.
a Le Microcontrôleur ATMega328
Un microcontrôleur ATMega328 est un circuit intégré qui rassemble sur une puce
plusieurs éléments complexes dans un espace réduit au temps des pionniers de
l’électronique.
20
Aujourd’hui, avec l’avènement des circuits intégrés on n’a pas besoin de souder un
grand nombre de composants encombrants; tels que des transistors; des résistances et
des condensateurs car tout peut être logé dans un petit boîtier en plastique noir muni
d’un certain nombre de broches dont la programmation peut être réalisée en langage
C.
b Les E/S
Chacune des 14 broches numériques de la carte UNO (numérotées des 0 à 13) peut
être utilisée soit comme une entrée numérique, soit comme une sortie numérique, en
21
c Alimentation
La carte Arduino Uno peut-être alimentée soit via la connexion USB (qui fournit 5V
jusqu'à 500mA) ou à l'aide d'une alimentation externe. La source d'alimentation est
sélectionnée automatiquement par la carte. L'alimentation externe (non-USB) peut
être soit un adapteur secteur (pouvant fournir typiquement de 3V à 12V sous 500mA)
ou des piles (ou des accus). L'adaptateur secteur peut être connecté en branchant une
prise 2.1mm positif au centre dans le connecteur jack de la carte. Les fils en
provenance d'un bloc de piles ou d'accus peuvent être insérés dans les connecteurs
23
des broches de la carte appelées Gnd (masse ou 0V) et Vin (Tension positive en entrée)
du connecteur d'alimentation.
La plage idéale recommandée pour alimenter la carte Uno est entre 7V et 12V.
VIN : La tension d'entrée positive lorsque la carte Arduino est utilisée avec une
source de tension externe (à distinguer du 5V de la connexion USB ou autre
source 5V régulée). Vous pouvez alimenter la carte à l'aide de cette broche, ou,
si l'alimentation est fournie par le jack d'alimentation, accéder à la tension
d'alimentation sur cette broche.
5V : La tension régulée utilisée pour faire fonctionner le microcontrôleur et les
autres composants de la carte (pour info : les circuits électroniques numériques
nécessitent une tension d'alimentation parfaitement stable dite "tension
régulée" obtenue à l'aide d'un composant appelé un régulateur et qui est
intégré à la carte Arduino). Le 5V régulé fourni par cette broche peut donc
provenir soit de la tension d'alimentation VIN via le régulateur de la carte, ou
bien de la connexion USB (qui fournit du 5V régulé) ou de tout autre source
d'alimentation régulée.
3V3 : Une alimentation de 3.3V fournie par le circuit intégré FTDI (circuit
intégré faisant l'adaptation du signal entre le port USB de votre ordinateur et le
port série de l'ATmega) de la carte est disponible : ceci est intéressant pour
certains circuits externes nécessitant cette tension au lieu du 5V). L'intensité
maximale disponible sur cette broche est de 50mA.
GND : Broche de masse (ou 0V).
2.4 Software
2.4.1 Présentation d’IDE ARDUINO
Arduino offre une interface minimale et épurée pour développer un programme sur
les cartes Arduino. Il est doté d’un éditeur de code avec coloration syntaxique et d’une
barre d’outils rapide. Ce sont les deux éléments les plus importants de l’interface. On
retrouve aussi une barre de menus qui est utilisé pour accéder aux fonctions avancées
de l’IDE. Enfin, une console affichant les résultats de la compilation du code source.
a Les commentaires
Une ligne qui commence par "//" est considérée comme un commentaire.
Un paragraphe qui commence par "/*" et qui se termine par "*/" est considéré
comme un commentaire.
25
b Les variables
Une variable est un espace de stockage nommé qui permet de stocker une valeur
utilisable par la suite dans la boucle d’un programme. Une variable peut aussi bien
représenter des données lues ou envoyées sur un des ports analogiques ou
numériques, une étape de calcul pour associer ou traiter des données, que le numéro
‘physique’ de ces entrées ou sorties sur la carte. Une “variable” n’est donc pas
exclusivement un paramètre variant dans le programme.
La nature de la variable définit les limites de celle-ci, ainsi que la place nécessaire dans
la mémoire de la carte Arduino. Ceci a de l'importance lorsque vous créez de gros
programme impliquant beaucoup de variables qui prennent de la place en mémoire.
Cette définition permet de limiter la place mémoire. De plus, il faut savoir que plus la
variable prend de place, plus les opérations de calcul seront long et inversement. Il est
donc nécessaire de définir les variables au plus juste en fonction de ce que le
programme doit faire ; parmi les plus utilisées sont :
Dans cette partie on définit la nature des entrées/sorties matérielles utilisées (si telle
ou telle broche est utilisée en entrée ou en sortie, de nature numérique (binaire : 0 ou
26
1) ou analogique. Cette phase doit être précédée par la commande "void setup() "
suivie d'une Accolade "{" et se terminer d'une accolade "}".
Dans cette configuration on doit définir comment doivent se comporter les différentes
broches de l'ARDUINO. Comme aussi définir les broches numériques, utilisant que du
binaire, analogique servant soit aux convertisseurs ou à la PWM, ainsi qu'aux broches
de communications.
Numérique :
La première variable à mettre est le numéro de broche que l'on essaie de configurer.
La deuxième variable est l'état de configuration, soit " INPUT " (entrée, il s'agit de
broche recevant des informations), soit " OUTPUT " (sortie, il s'agit de broche envoyant
des informations).
Analogique :
Pour la configuration de broche analogique, seul une sortie analogique doit être
configurée. On doit simplement ajouter pinMode (numéro de broche, OUTPUT).
Pour les entrées analogiques, pas besoin de les définir, elles se mettront
automatiquement en entrée lorsqu'on les sollicitera.
Communication :
Il existe plusieurs moyens pour faire communiquer des systèmes électroniques entre
eux et la carte arduino. Certaines broches pourront être utilisé pour des type de
communication,Tel que liaison RS232, I2C ou autre. Ces broches ont des configurations
particulières.
Serial.begin(X): définit la vitesse X (en bits par seconde) de transfert des données.
Cette fonction doit apparaitre dans le setup du programme. Il existe plusieurs vitesses
de transmission des données : 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600,
115200, 230400, 250000.
27
serial.println(X) : même action que print mais avec un retour à la ligne à la fin du
message.
d Programme principal
void loop( ) : cette instruction définit le début du programme principal, celui qui
tournera en permanence sur la carte. La fonction loop permet justement de faire
tourner en boucle le programme.
digitalRead (Broche) : cette instruction permet de lire la valeur d'une entrée. Comme
cette valeur, pour être utilisable, doit être sauvegardée, nous allons utiliser une
équation qui devra ressembler à ça :
digitalWrite(Broche, état) : cette instruction permet d'écrire sur une broche la valeur
de l'état. Cet état sera soit HIGH (niveau haut : 1), soit LOW (niveau bas : 0).
analogRead(Broche) : cette instruction permet de lire une valeur analogique sur une
des broches dédiées. Tout comme digitalRead, cette valeur doit être sauvegardée.
Chaque conversion se fera par rapport à une tension par défaut de 5V maxi. La valeur
convertit sera une image de la tension qui va évoluer entre 0 et 5V, par tranche de
4,88 mV.
Par exemple si la tension sur A0 est de 2,5 V, la valeur obtenue après l'instruction
analogRead sera : 2,5/0,00488 = 512.
28
Il est souvent nécessaire d'effectuer des pauses dans le temps, de temporiser des
programmes. Ceci est souvent utilisé dans la gestion de signaux numérique. La
procédure avec l'ARDUINO est assez simple, il existe deux instructions permettant
d'effectuer des pauses:
delay (ms): cette instruction permet d'effectuer des pauses d'une durée en milli
seconde inscrite entre parenthèses.
Les structures de contrôle sont des blocs d'instructions qui s'exécutent en fonction du
respect d'un certain nombre de conditions. Il existe quatre types de structure :
switch/case : fait un choix entre plusieurs codes parmi une liste de possibilités.
29
2.5 CONCLUSION
Dans ce chapitre, nous avons détaillé la carte de prototypage Arduino, cette derniere
servira comme outil de base pour la réalisation de notre application, de l’acquisition, la
mémorisation à l’affichage. Nous avons surtout insisté et développé les parties que
nous avons utilisé, tels que les entrées analogique, la transmission de données,
l’affichage avec la syntaxe nécessaire pour la programmation. Cette étape nous a
permis d’entamer le chapitre qui suit à savoir l’étape de réalisation de notre
application en toute quiétude.
30
Chapitre 3 REALISATION
3.1 Introduction
Après avoir vu en premier lieu les différents moyens de dépistage du COVID 19, ces
derniers représentent chacun d’eux des avantages et inconvénient du point de vu cout
et efficacité, nous nous fixe comme tache la réalisation d’un thermomètre
électronique dont le synoptique est représenté comme suit.
I. Définition
31
II. Spécifications
MIN Typique MAX Unité
Voltage 2.6 3 3.4 V
Courant 1.4 1.5 mA
Plage de -10 100 C
mesure
32
Température de -10 80 C
fonctionnement
Dimensions 20x40x9.6 mm
Tableau 3.1 : Spécifications du capteur de température infrarouge.
Figure 3.4 : Le dessin technique d’un capteur Grove 20X40 SMD vertical.
V. Calibration du capteur
Le capteur de température infrarouge est réglé par défaut par le fabricant, mais
chaque capteur est différent, c'est pourquoi il est important de le calibrer.
34
Après de nombreux tests, nous avons constaté que la meilleure distance de mesure est
de 3~4 cm pour obtenir les résultats les plus précis.
35
I. Définitions
II. Caractéristiques
I. Définition
Le DS3231 est une horloge en temps réel I2C peu coûteuse et extrêmement précise
avec un oscillateur à cristal intégré, L'appareil est alimenté par une batterie et
maintient un chronométrage précis lorsque l'alimentation principale de l'appareil est
interrompue. L'intégration du résonateur à cristal améliore la précision à long terme
de l'appareil.
Le RTC conserve les informations relatives aux secondes, aux minutes, aux heures, au
jour, à la date, au mois et à l'année. La date à la fin du mois est automatiquement
ajustée pour les mois de moins de 31 jours, y compris les corrections pour les années
bissextiles. L'horloge fonctionne soit en format 24 heures, soit en format 12 heures
avec un indicateur AM/PM. L'adresse et les données sont transférées en série par un
bus bidirectionnel I2C.
II. Spécifications
III. Brochage
Le DS3231 est un appareil à six bornes, dont l'utilisation de deux broches n'est pas
obligatoire. Nous avons donc principalement quatre broches. Ces quatre broches se
trouvent de l'autre côté du module qui porte le même nom.
IV. Caractéristiques
Précision : +2ppm à -2ppm pour 0ºC à +40ºC, +3,5ppm à -3,5ppm pour -40ºC à
+85ºC.
Capteur de température numérique avec une précision de ±3ºC.
Sortie d'onde carrée programmable.
Interface I2C 400Khz.
Faible consommation d'énergie.
Circuit de coupure automatique de la batterie.
Pile de secours CR2032 avec une durée de vie de deux à trois ans.
V. Applications
Bien qu'il existe de nombreux modules RTC sur le marché, le DS3231 est l'un
des plus populaires en raison de sa précision. La puce maintient l'heure à jour
avec plus de précision que la plupart des modules.
Le MODULE RTC DS3231 consomme très peu d'énergie pour fonctionner. Ce
module peut donc être utilisé sur des systèmes mobiles.
MODULE DS3231 RTC capable de communiquer avec une interface TWI à
grande vitesse.
Le DS3231 peut également fonctionner sur des applications de recherche de
format 24 heures et 12 heures dans les systèmes GPS. Avec deux réveils et un
capteur de température à bord, l'utilisation du module DS3231 est encore plus
prometteuse que celle des autres modules.
VI. Initialisation
Dans le code suivant, il est possible de régler la date en entrant, dans le moniteur
série, la date désirée sous la forme YYMMDDwHHMMSSx. Une fois la date entrée, il
faut redémarrer la carte afin qu’elle soit prise en compte par le module. Le code est
donné en annexe 2.
On donne la date et l’heure exacte dans l’input de « Serial monitor » et on clique sur «
SEND ».
a Module Carte SD
I. Définition
Le stockage des données est l'une des parties les plus importantes de chaque projet. Il
existe plusieurs façons de stocker les données en fonction de leur type et de leur taille.
Les cartes SD et micro SD sont l'un des dispositifs de stockage les plus pratiques.
II. Caractéristiques
TENSION
D'ALIMENTATION
4.5 5 5.5 V
VCC
POTENTIEL
ÉLECTRIQUE DE
L'INTERFACE 3.3 ou 5 V
42
DIMENSIONS 42x24x12 mm
POIDS 5 g
ETIQUETTE FONCTION
A trou de positionnement
E L'interface de contrôle
V. Préparation de la carte SD
Pour formater la carte SD, on l'insère dans notre ordinateur. Allez dans Mon
ordinateur et cliquez sur la carte SD avec le bouton droit de la souris. Sélectionnez
Format comme indiqué dans la figure ci-dessous.
Une nouvelle fenêtre s'ouvre. On sélectionne FAT32, on appuie sur Démarrer pour
initialiser le processus de formatage et on suit les instructions à l'écran.
45
Pour nous assurer que tout est correctement câblé et que la carte SD fonctionne
correctement, nous téléchargeons le code suivant sur notre carte Arduino. Tout en
nous assurons que nous avons la bonne carte et le bon port COM sélectionné. Le code
est donné en annexe 3.
Nous ouvrons le Serial Monitor à une vitesse de 9600 bauds et nous devrions voir les
informations de notre carte SD.
46
I. Définition
LCD signifie "Liquid Crystal Display" et se traduit, en français, par "Écran à Cristaux
Liquides", Ces écrans sont utilisés dans plein d’appareils électroniques disposant
d’afficheur : les montres, le tableau de bord de votre voiture, les calculatrices, etc.
Cette utilisation intensive est due à leur faible consommation et coût.
Cette technologie est bien maîtrisée et donc le coût de production est assez bas. Dans
les années à venir, ils vont avoir tendance à être remplacés par les écrans à affichage
LED qui sont pour le moment trop chers. Il existe deux types d’ecran LCD : les premiers
sont monochromes (une seule couleur) tandis que les seconds sont colorés (rouge,
vert et bleu).
Nous utiliserons uniquement le premier type dans notre projet pour des raisons de
simplicité et de coût.
Il existe aussi plusieurs tailles d’écran, nous utiliserons l'écran LCD 20×4 car il s'agit
essentiellement d'une version plus grande (nombre accru de lignes et de colonnes) de
l'écran LCD 16×2, ce qui le rend parfait pour afficher une grande quantité de texte sans
défilement. Chacune des colonnes a une résolution de 5×8 pixels, ce qui lui assure une
visibilité à une distance importante.
Comme son nom l’indique, un écran LCD possède des cristaux liquides. Si on regarde
de très près un écran LCD on peut voir une grille de carré. Ces carrés sont appelés des
pixels (Élément d’image). Lorsqu’aucun courant ne le traverse, ses molécules sont
orientées dans un sens (0°). En revanche lorsqu’un courant le traverse, ses molécules
vont se tourner dans la même direction (90°).
En effet, entre les cristaux liquides et la source lumineuse se trouve un filtre polariseur
de lumière. Ce filtre va orienter la lumière dans une direction précise. Entre nos yeux
et les cristaux se trouve un autre écran polariseur, qui est perpendiculaire au premier.
Ainsi, il faut que les cristaux liquides soient dans la bonne direction pour que la lumière
passe de bout en bout et revienne à nos yeux. Enfin, vient le rétro-éclairage (fait avec
des LED) qui nous permettra de lire l’écran même en pleine nuit.
Pour pouvoir afficher des caractères sur l’écran il nous faudrait activer
individuellement chaque pixel de l’écran. Un caractère est représenté par un bloc de
75 pixels. Ce qui fait qu’un écran de 16 colonnes et 2 lignes représente un total de
16275 = 1120 pixels, ce qui serait difficile, mais le décodeur de caractères va nous
simplifier la tâche.
V. Brochage du LCD
Un LCD ADDICORE 20 colonnes 4 lignes possède 16 broches, leur rôle sera expliqué
dans le tableau ci-dessous:
49
C NOM RÔLE
1 VSS Masse
2 VDD 5V
3 Vo Réglage du contraste
4 RS Sélection du registre
(commande ou donnée
6 E Entrée de validation
7 - 14 Do – D7 Bits de données
15 A Anode du rétroéclairage
16 K Cathode du
rétroéclairage
Nous avons également opté pour un système de notification par LED et Buzzer afin
d'assurer une meilleure compréhension à l'utilisateur en facilitant l'interface.
a Les LEDs
Chaque LED accepte une certaine plage de tension d’alimentation. Il faudra donc
placer avant la LED une résistance pour “consommer” le surplus de courant.
R = ( U – Ul ) / I
c Buzzer
Cet adaptateur peut être décrit comme un chargeur, il convertie un courant alternatif
en un courant continu à faible tension il contient :
a Programme principal :
Le code complet de notre projet est donné en annexe. Nous expliquons ici certaines
parties importantes du code. Dans ce programme, nous allons utiliser les bibliothèques
suivantes :
« Wire.h » : Cette bibliothèque nous permet de communiquer avec les appareils I2C /
TWI.
« SPI.h » : Cette bibliothèque nous permet de communiquer avec les appareils SPI,
avec l'Arduino comme appareil maître.
b Explication :
54
#define Buzz 7
#define Green 6
#define Red 5
#include <Wire.h>
#include "DS3231.h"
#include <LiquidCrystal.h>
#include <SPI.h>
#include <SD.h>
Nous déclarons ensuite nos variables, nous avons beaucoup de variables dans notre
programme, mais les plus importantes sont celles que nous devons ajuster en fonction
de notre demande.
float offset_vol=0.05 ; //ce paramètre a été utilisé pour définir la tension de niveau
moyen,
Nous avons alors la fonction qui permet d'ouvrir la communication SPI avec la carte SD
et de créer un fichier à l'intérieur de la carte SD appelé "Temp_Log.text". Ensuite, nous
allons également ouvrir ce fichier et écrire l'en-tête du journal. Ici, nous enregistrons la
date, l'heure et la température et nous donnons un nom à l'en-tête en accord avec
void Initialize_SDcard()
if (!SD.begin(chipSelect)) {
return;
if (dataFile) {
dataFile.println("Date,Time,Temperature");
dataFile.close(); }
celui-ci. Cette fonction ne sera appelée qu'une seule fois lors de l'exécution de la
fonction de configuration.
Ensuite, nous avons la fonction qui sert à enregistrer les valeurs réelles dans le fichier
texte que nous venons de créer. Cette fonction sera appelée à chaque fois qu'une
nouvelle lecture sera effectuée. Le format de l'enregistrement sera séparé par des
virgules comme "Date,Heure,Température", un exemple d'enregistrement sera
quelque chose comme "16.10.2020,10:45:17,35.6". Il peut être un peu difficile à lire,
mais ce format est appelé CSV "valeurs séparées par des virgules" et peut être
facilement ouvert et compris par un excel.
56
void Write_SDcard()
if (dataFile) {
dataFile.print(rtc.getDateStr());
dataFile.print(",");
dataFile.print(rtc.getTimeStr());
dataFile.print(",");
dataFile.print(temperature);
dataFile.println();
dataFile.close();
else
Les fonctions que nous avons ensuite sont des fonctions liées au capteur de
température infrarouge, les fonctions sont utilisées pour calculer la température
ambiante et la température de l'objet (la main)
57
float measureSurTemp() // cette fonction est utilisée pour convertir les valeurs de
volts en degrés ceclius
Ensuite, nous avons la fonction "void setup" où nous initialisons l'appareil. Nous
affichons juste un message d'introduction sur l'écran LCD et nous initialisons
également la carte SD prête à l'emploi. Nous définissons également les broches des
LED et du buzzer comme sorties
void setup() {
Serial.begin(9600);
rtc.begin();
lcd.begin(16,2);
lcd.print("Temp. Scanner");
lcd.setCursor(0,1);
pinMode(4,OUTPUT);
pinMode(Buzz,OUTPUT);
pinMode(Red,OUTPUT);
pinMode(Green,OUTPUT);
digitalWrite(Buzz,LOW);
digitalWrite(Red,LOW);
digitalWrite(Green,LOW);
Initialize_SDcard(); }
58
digitalWrite(4,HIGH);
delayMicroseconds(500);
Noise_P_Signal=analogRead(A3);
digitalWrite(4,LOW);
delayMicroseconds(500);
Noise=analogRead(A3);
La valeur du signal nous indiquera à quel point la personne est proche du capteur IR
TCRT5000 sans l'influence de la lumière du soleil autour de la personne. Ensuite, en
comparant cette valeur de signal et la valeur de bruit, nous déclencherons notre
thermomètre pour lire la valeur de température et la stocker également dans la carte
SD. Si la température est normale, la LED verte s'allumera et si la température est
élevée, la LED rouge s'allumera.
59
digitalWrite(Buzz,HIGH);
if (trigger == true)
Serial.println("start");
digitalWrite(4,LOW);
measureSurTemp();
temperature = (measureObjectTemp()) ;
Serial.println(temperature,1);
delay(150);
digitalWrite(Buzz,LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp: ");
lcd.print(temperature,1);
lcd.setCursor(0,1);
lcd.print("Saved to SD card");
Write_SDcard();
Pour créer une interface facile à lire sur le PC, nous avons opté pour l'interface
graphique de MATLAB. Les figures suivantes montrent les démarches suivies :
Une nouvelle fenêtre présente une interface graphique, nous pouvons créer l'interface
que nous voulons à partir de la boîte à outils de gauche.
61
Notre interface fonctionne en cliquant sur le bouton "Tester la Temp. ", il faut donc le
programmer par la suite : Click droit sur le bouton → View callbacks → callback.
62
Nous écrivons notre programme sous la fonction de bouton poussoir comme indiqué
dans la figure suivante nous écrivons notre programme sous la fonction de bouton
poussoir comme indiqué dans la figure suivante.
Explication du programme :
taggée « Temp ».
if temp<38
set(handles.message,'String','normal');
else
set(handles.message,'String','cas suspect');
end
Si la temperature est inferieure a 38, le verdict est « normal ». si non, si la temperature
est supérieure, c’est un cas suspect.
3.4 Réalisation :
Après avoir vu l'aspect théorique de notre projet, nous avons réalisé notre circuit sur
une plaque d’essai comme montré dans la figure suivante :
Ecran LCD : E → pin 8 ; RS → pin 9 ; → DB4 → pin 5 ; DB5 → pin6 ; DB6 → pin 2 ;
DB7 → pin 3.
Module Carte SD: CS → pin 10 ; SCK → pin 13 ; MOSI → pin 11 ; MISO → pin 12.
Pour rendre notre projet plus pratique et professionnel, nous avons créé une boîte en
aluminium qui permet de conserver tous nos composants à l'intérieur, nous avons
utilisé un découpeur CNC pour couper l'interface de nos capteurs et de nos éléments
de visualisation.
Les conditions ont été remplies, lorsque la température saisie dépasse 38 degrés
Celsius, la LED rouge s'allume et le buzzer sonne, si la température est normale la LED
verte s'allume. À la fin du test, nous avons pris la carte SD pour voir si l'enregistrement
des données se fait correctement. Les résultats sont présentés sur la figure suivante :
On constate que les températures ont été correctement enregistrées, et que l'heure et
la date sont également enregistrées avec leur test de température respectif
Dans la fenêtre qui s'ouvre, nous cherchons notre fichier qui est enregistré dans notre
PC.
71
Lorsqu’on a terminé, on peut constater que nos données sont présentées d'une
manière plus pratique et plus facile à comprendre.
3.6 Conclusion :
Dans ce chapitre, nous avons défini les différentes composantes que nous avons
utilisées dans notre projet, nous avons pu mettre en lumière leurs différentes
caractéristiques et leurs différents processus d'initialisation. Nous avons également
donné le schéma général et la réalisation. Nous avons terminé le chapitre en
effectuant différents tests et calibrages.
74
Conclusion générale
Dans ce mémoire, nous avons mis en lumière la pandémie mondiale causée par le
COVID-19 et présenté les différents détails qui l'entourent. Nous avons également
exploré les différentes possibilités de lutte contre ce virus, et comment le
thermomètre thermique joue un rôle important dans cette lutte. Nous avons
également pu définir la problématique de la faible disponibilité de ces thermomètres.
Après avoir défini les composantes importantes de nos projets, nous avons pu
commencer à réaliser un thermomètre infrarouge basé sur la carte de prototypage
Arduino, nous avons également ajouté plus de fonctionnalités en ajoutant des
capacités de stockage tout en maintenant un point de vue économique et efficacité.
75
Annexes
Annexe 1 :
#include <math.h>
#define SUR_TEMP_PIN A0
#define OBJ_TEMP_PIN A1
float temp_calibration=0
//float objt_calibration=0.000;
float temperature_range=10;
float offset_vol=0.014;
float tempValue = 0;
float objtValue= 0;
float current_temp=0;
float temp=0;
float temp1=0;
float temp2=0;
float R=0;
float voltage=0;
76
long res[100]={
318300,302903,288329,274533,261471,249100,237381,226276,215750,2
05768,
196300,187316,178788,170691,163002,155700,148766,142183,135936,1
30012,
124400,119038,113928,109059,104420,100000,95788,91775,87950,8430
5,
80830,77517,74357,71342,68466,65720,63098,60595,58202,55916,
53730,51645,49652,47746,45924,44180,42511,40912,39380,37910,
36500,35155,33866,32631,31446,30311,29222,28177,27175,26213,
25290,24403,23554,22738,21955,21202,20479,19783,19115,18472,
17260,16688,16138,15608,15098,14608,14135,13680,13242,12819,
12412,12020,11642,11278,10926,10587,10260,9945,9641,9347,
9063,8789,8525,8270,8023,7785,7555,7333,7118,6911};
/*0*/ { 0,-0.274,-0.58,-0.922,-1.301,-1.721,-2.183,-2.691,-3.247,-
3.854,-4.516,-5.236},
/*1*/ { 0.271,0,-0.303,-0.642,-1.018,-1.434,-1.894,-2.398,-2.951,-
3.556,-4.215,-4.931},
/*2*/ { 0.567,0.3,0,-0.335,-0.708,-1.121,-1.577,-2.078,-2.628,-
3.229,-3.884,-4.597},
/*3*/ { 0.891,0.628,0.331,0,-0.369,-0.778,-1.23,-1.728,-2.274,-
2.871,-3.523,-4.232},
/*4*/ { 1.244,0.985,0.692,0.365,0,-0.405,-0.853,-1.347,-1.889,-
2.482,-3.13,-3.835},
/*5*/ { 1.628,1.372,1.084,0.761,0.401,0,-0.444,-0.933,-1.47,-2.059,-
2.702,-3.403},
/*6*/ { 2.043,1.792,1.509,1.191,0.835,0.439,0,-0.484,-1.017,-1.601,-
2.24,-2.936},
/*7*/ { 2.491,2.246,1.968,1.655,1.304,0.913,0.479,0,-0.528,-1.107,-
1.74,-2.431},
/*8*/ { 2.975,2.735,2.462,2.155,1.809,1.424,0.996,0.522,0,-0.573,-
1.201,-1.887},
/*9*/ { 3.495,3.261,2.994,2.692,2.353,1.974,1.552,1.084,0.568,0,-
0.622,-1.301},
/*10*/ {
4.053,3.825,3.565,3.27,2.937,2.564,2.148,1.687,1.177,0.616,0,-0.673},
/*11*/ {
4.651,4.43,4.177,3.888,3.562,3.196,2.787,2.332,1.829,1.275,0.666,0},
77
void setup()
{ Serial.begin(9600);
analogReference(INTERNAL);
void loop()
measureSurTemp();
measureObjectTemp();
float binSearch(long x)
int low,mid,high;
low=0;
//mid=0;
high=100;
while (low<=high)
mid=(low+high)/2;
if(x<res[mid])
low= mid+1;
else (x>res[mid])
high=mid-1;
return mid;
}
78
int i=0;
float tem_coefficient=100;
i=(x/10)+1;
voltage=(float)y/tem_coefficient;
for(temp3=0;temp3<13;temp3++)
if((voltage>obj[temp3][i])&&(voltage<obj[temp3+1][i]))
{ return temp3; } } }
float measureSurTemp()
float current_temp1=0;
int signal=0;
tempValue=0;
for(i=0;i<10;i++)
{ tempValue+= analogRead(SUR_TEMP_PIN);
delay(10); }
tempValue=tempValue/10;
temp = tempValue*1.1/1023;
R=2000000*temp/(2.50-temp);
signal=binSearch(R);
current_temp=signal-1+temp_calibration+(res[signal-1]-
R)/(res[signal-1]-res[signal]);
Serial.print("Surrounding temperature:");
Serial.print(current_temp);
return current_temp; }
79
float measureObjectTemp()
float sur_temp=0;
float temp1,temp2;
float final_temp=0;
objtValue=0;
for(i=0;i<10;i++)
{ objtValue+= analogRead(OBJ_TEMP_PIN);
delay(10); }
objtValue=objtValue/10;
temp1=objtValue*1.1/1023;
sur_temp=temp1-(reference_vol+offset_vol);
Serial.print(sur_temp,3);
Serial.print("V");
array_temp=arraysearch(current_temp,sur_temp*1000);
temp2=current_temp;
temp1=(temperature_range*voltage)/(obj[array_temp+1][(int)(te
mp2/10)+1]-obj[array_temp][(int)(temp2/10)+1]);
final_temp=temp2+temp1;
if((final_temp>100)||(final_temp<=-10))
else
Serial.println(final_temp,2); } }
80
Annexe 2 :
#include <Wire.h>
#include <DS3231.h>
byte Year ;
byte Month ;
byte Date ;
byte DoW ;
byte Hour ;
byte Minute ;
byte Second ;
bool h12 ;
bool PM ;
DS3231 Clock ;
void setup(){
Serial.begin(9600);
Serial.println(F("Initialize System"));
Wire.begin();
void loop(){
setDate();
readRTC();
}
81
void readRTC( ){
Serial.print(Clock.getYear(), DEC);
Serial.print("-");
Serial.print(Clock.getMonth(Century), DEC);
Serial.print("-");
Serial.print(Clock.getDate(), DEC);
Serial.print(" ");
Serial.print(":");
Serial.print(Clock.getMinute(), DEC);
Serial.print(":");
Serial.println(Clock.getSecond(), DEC);
delay(1000);
void setDate( ){
if (Serial.available()) {
Clock.setClockMode(false);
Clock.setSecond(Second);
Clock.setMinute(Minute);
Clock.setHour(Hour);
Clock.setDate(Date);
Clock.setMonth(Month);
Clock.setYear(Year);
Clock.setDoW(DoW);
} }
82
char InChar;
char InString[20];
byte j=0;
while (!GotString) {
if (Serial.available()) {
InChar = Serial.read();
InString[j] = InChar;
j += 1;
if (InChar == 'x') {
GotString = true; } } }
Serial.println(InString);
Annexe 3 :
#include <SPI.h>
#include <SD.h>
Sd2Card card;
SdVolume volume;
SdFile root;
void setup() {
Serial.begin(9600);
while (!Serial) { ; }
Serial.print("\nInitializing SD card...");
if (!card.init(SPI_HALF_SPEED, chipSelect)) {
Serial.println("* did you change the chipSelect pin to match your shield
or module?");
return; }
switch (card.type()) {
case SD_CARD_TYPE_SD1:
Serial.println("SD1");
break;
case SD_CARD_TYPE_SD2:
Serial.println("SD2");
break;
case SD_CARD_TYPE_SDHC:
Serial.println("SDHC");
break;
default:
Serial.println("Unknown");
if (!volume.init(card)) {
return;
uint32_t volumesize;
Serial.println(volume.fatType(), DEC);
Serial.println();
volumesize = volume.blocksPerCluster();
volumesize *= volume.clusterCount();
volumesize *= 512;
Serial.println(volumesize);
volumesize /= 1024;
Serial.println(volumesize);
volumesize /= 1024;
Serial.println(volumesize);
Serial.println("\nFiles found on the card (name, date and size in bytes): ");
root.openRoot(volume);
void loop(void) {
}
86
Annexe 4 :
87
88
89
90
91
Bibliographie
[1] https://www.theguardian.com/world/2020/feb/04/coronavirus-quarantine-
precautions-around-the-world (Consulté le 20 Septembre 2020)
[2] https://www.who.int/docs/default-source/coronaviruse/situation-
reports/20200219-sitrep-30-covid-19.pdf?sfvrsn=3346b04f_2 (Consulté le 20
Septembre 2020)
[3] https://www.who.int/docs/default-source/coronaviruse/situation-
reports/20200226-sitrep-37-covid-19.pdf?sfvrsn=2146841e_2 (Consulté le 20
Septembre 2020)
[4] https://www.who.int/fr/emergencies/diseases/novel-coronavirus-2019/question-
and-answers-hub/q-a-detail/q-a-coronaviruses#:~:text=symptomes (Consulté le 21
Septembre 2020)
[7] https://www.sciencemag.org/news/2020/05/coronavirus-antigen-tests-quick-and-
cheap-too-often-wrong (Consulté le 21 Septembre 2020)
[8] https://www.20minutes.fr/paris/2779099-20200514-coronavirus-cameras-
thermiques-installees-aeroport-roissy-detecter-covid-19 (Consulté le 21 Septembre
2020)
[9] « Novel coronavirus is putting the whole world on alert», Journal of Hospital
Infection, Volume 104 , issue 3, Mars 2020 , 252-253.
[12] https://www.pce-instruments.com/f/french/media/thermometre-infrarouge-
mesure-temperature-sans-contact.pdf
[14] https://www.airport-technology.com/features/coronavirus-screening-at-airports/
(Consulté le 21 Septembre 2020)
[17] https://www.arduino.cc/
[18] https://files.seeedstudio.com/wiki/Grove-Infrared_Temperature_Sensor/res/OTP-
538Udatasheet.zip (Capteur infrarouge DataSheet)
[21] http://datalogger.pbworks.com/w/file/fetch/89507207/Datalogger%20-
%20SD%20Memory%20Reader%20Datasheet.pdf (Module Carte SD DataSheet)