Section Numérique Lycée Saint-Paul IV

Le Capteur de particules fines

image_accueil

Introduction

Présentation

Bonjour à tous ! Je suis Anthony ancien terminale S spé ISN du Lycée saint-Paul IV.

Je vais donc vous proposer un tutoriel pour réaliser mon projet en ISN, il s'agit de faire une malette à particules fines permettant de recuperer des données pour pouvoir ensuite les exploiter.

Ce n'est pas quelque chose de dur à faire mais cela demande du temps et de l'investissement si on veut bien faire.
Ce que je vais vous proposer n'est qu'un projet parmi tant d'autres mais il vous permettra de vous initier aux sciences du numérique et à la programmation.

Chacune des parties sera accompagnée d'un petit personnage, pour connaitre la difficulté de la partie. Allant de la couleur verte c'est à dire l'épreuve la plus facile à la couleur rouge c'est à dire l'épreuve la plus ardue.

Pour se mettre en forme on va commencer par écouter une petite chanson qui illustre bien notre projet.



Exemple code :

Matériel heya

On va commencer par voir nos nouveaux jouets et savoir quels sont leurs pouvoirs.

La Raspberry Pi
Le Raspberry Pi :

C'est un nano-ordinateur. C'est avec lui qu'on va coder et placer nos fichiers. Normalement lorsque quelqu'un en achète un le système est déjà installé. Il dispose de plusieurs ports USB pour clavier et souris. D'un port Ethernet pour le connecter à un reseau et d'un port HDMI pour le relier à un ecran.


l'écran tactile 5 pouces
L'ecran Tactile 5 pouces :

Vu que le projet est une malette-prototype on va éviter de mettre un gros ecran dans sa poche !!!

On va préferer un petit ecran lié directement à notre machine.

C'est livré avec un stylet mais on peut quand même utiliser le clavier et la souris c'est un pas souci.


L'horloge temps réel:

C'est un petit module permettant de conserver la date et l'heure même après extinction du Raspberry Pi.


Le capteur de particules fines
Capteur particules fines :

C'est un capteur numérique de particules fines qui se branche en USB directement au Rasberry Pi. Il fonctionne en air pulsé grâce à un ventilateur et allume des petites leds pour indiquer sa mise en marche.

Ce capteur fonctionne sur le principe de la diffraction d'une lumière infrarouge.
Le capteur renvoie un signal numérique par liaison série contenant les taux de particules fines PM2,5 et PM10 en μg/m³. Vous pouvez télécharger sa datasheet ici

Pour approfondir sur la détection des particules fines, vous trouverez ici une excellente page de l'Association Nationale pour la Prévention et l'Amélioration de la Qualité de l'Air





Installation de l'ecranheya

La partie la plus dure c'est l'installation de l'écran. Elle demande des bases en linux. En effet, il faut utiliser des instruction bash, le shell par défaut des distributions Linux comme Raspbian et aussi du terminal de Mac OSX.

Je vous conseille de sauvegarder votre image BIOS sur un autre ordinateur avant de jouer avec le Rasberry Pi ;-)

Je vais essayer de vous expliquer rapidement et facilement :
Tout d'abord il faut récuperer le fichier sur le CD vendu avec l'écran ou encore sur le site du constructeur.
LCD-show-180331.tar.gz

Maintenant on va ouvrir un Terminal pour modifier notre fichier config.txt. Taper la commande suivante :

sudo nano /boot/config.txt

Maintenant il faut ajouter ces lignes à la fin du fichier :

max_usb_current = 1
hdmi_group = 2
hdmi_mode = 87
hdmi_cvt 800 480 60 6 0 0 0
hdmi_drive = 1


Sauvez avec Ctrl+O et réouvrez le terminal nous allons installer le fichier. Dans le terminal entrée les commandes suivantes :

tar xzvf /boot/LCD-show-*.tar.gz

Puis

cd LCD-show/

Puis

chmod +x LCD5-show

Et enfin

./LCD5-show

Normalement ça devrait marcher correctement.



Réalisation du code

Utilisation du capteurheya

Maintenant que l'écran est installé, nous allons faire fonctionner notre capteur.

Tout d'abord nous avons besoin de divers bibliothéques permettant la gestion des données :

La bibliothéque Array pour la structure des listes,
Struct permettant d'interpréter un format binaire
et la plus importante Serial qui nous donne la possibilité d'utiliser le port série du Rasberry Pi

En utilisant les données dans des formules on obtient la quantité de particules fines PM 2.5 et PM 10, conformes aux normes environnementales.

Maintenant, dans le début de notre code, nous devons déclarer certains variables importantes.

Je crée une liste vide où sera stockée nos octets de données :
Sentence =[]

Je définie le port série
ser = serial.Serial()

Et l'attache au bon port usb du Rasberry Pi
#ser.port = "/dev/ttyUSB0"

Je définie la vitesse de communication de la liaison série qui correspond à 9600 bits par seconde
#ser.baudrate = 9600

Je définie le nombre de bits
#ser.bytesize = 8

J'ouvre le port série
#ser.open()

Je veux que le port série attende toutes les données avant d’écrire
#ser.flushInput()

Ok c'est très bien on configure notre capteur mais on les a quand ces valeurs ?

Eh bien pour cela c'est très facile : il suffit d'ajouter la ligne de code

sentence = ser.read(10)

Et si vous regardez dans la datasheet du capteur on obtient les correspondances des différents octets de données.

On place à la fin du code les formules pour obtenir les valeurs :

pm_25=sentence[3]*256+sentence[2]/10
pm_10=sentence[5]*256+sentence[4]/10

On n'oublie pas de rajouter un

print(pm_25)
print(pm_10)

Et on peut lancer le code !


Le code :

Exemple

Le rendu à l'écran.



Graphiqueheya

Bon si vous êtez parvenu jusqu'ici c'est que c'était facile :p

Bref on va attaquer la partie la plus compliquée : l'interface graphique.

Avant de commencer, je veux préciser que la mienne n'est qu'une parmi tant d'autres c'est à vous de faire des choix selon vos goûts je vais juste présenter les objets graphiques que j'ai utilisés pour faire la mienne.

On va déjâ ajouter la bibliothéque la plus importante : from tkinter import *

En gros c'est une des bibliothèques de Python permettant de créer des interfaces graphiques.

La fênetre principale :

Ici on définit la taille et les caractéristiques principales de notre fênetre.

fen = Tk()
fen.title("Interface graphique Particules fines")
width,height=fen.winfo_screenwidth(),fen.winfo_screenheight()
fen.overrideredirect(0)
fen.geometry('%dx%d+0+0'%(width,height))
fen['bg']='#FFF59D'


On définit un titre avec un couleur, une taille et une police et on le place avec des coordonnées mais je reviens plus tard dessus. On crée un cadre contenant un canevas pour pouvoir insérer une image.

Titre = Label(fen, text="Capteur de particules fines : ", relief=RIDGE,bg ='#FFEE58', fg='#FFC107', font =("papyrus 24"))
Titre.place(x=50,y=0)
Cadre = Frame(fen, borderwidth=2, relief=GROOVE, bg='#F0E68C').pack()
entete = PhotoImage(file="BanderoleSectionNumerique671x270.gif")
canv1 = Canvas(Cadre, borderwidth=6, relief=GROOVE, bg='#F0E68C', width=671, height=270)
canv1.create_image(0, 0, image=entete,anchor=NW)
canv1.place(x=115,y=57)


un bouton permettant de lancer la fonction de calcule :

ON=Button(fen,text="ON",height=3,width=5,bg="#F9A825", font=("papyrus"),command=function1)
ON.place(x=50,y=60)


Je vous passe juste ces objets car ils sont assez simples et largement suffisant à faire une interface graphique pour votre programme.
L'utilisation des coordonnées pour le repérage des widgets peut être à double tranchant car cela change selon la taille de votre écran, j'ai choisi ce mode car je n'arrivais pas à des résultats satisfaisants en utilisant les autres modes. En soi rien ne vaut un bon vieux Système D.

Faites bien à attention à ne pas oublier la ligne fen.mainloop à la fin du code !

Vous pouvez voir mon interface, elle présente d'autres objets mais ce que je vous donne est largement suffisant pour faire une interface mais n'hésitez pas à ajouter des objets que vous trouvez sur Google.


Exemple

Le rendu de l'interface graphique à l'écran.


Le code Python de l'interface tkinter :


La sauvegarde des données

On a un capteur et une interface graphique, il nous manque donc la possibilité de sauvegarder les données fournies par notre capteur !

Pour cela on va utiliser un fichier csv générer par notre code Python ! Pour que Python puisse travailler avec des fichiers csv, il faut importer une bibliothèque spécifique : import csv

En déclaration de variables il faut :

donner un nom au fichier et une variable pour l'exploiter dans le code (instanciation).
donnee='particulefines.csv'

J'ouvre le fichier dans le programme pour pouvoir y faire des modifications.
fichier=open(donnee,"w")

Maintenant dans mon programme je peux écrire des données directement dans le fichier csv avec la commande :
fichier.write()

Il faut faire attention car je ne peux écrire dans mon fichier que des chaînes de caractères, donc pour les variables j'utilise la méthode str() pour changer le type en chaîne de caratère.

Après avoir placé tous les fichier.write() il ne faut surtout pas oublier de placer un fichier.close() permettant de fermer le fichier car sans cela les modifications apportées au fichier ne seront pas effectives.
Dans le cas de boucles imbriquées il faut faire vraiment attention au placement du fichier.close().


Le code Python de gestion du fichier csv :



Mallette et conclusion

La mallette prototype

Pour la création de la mallette j'ai eu vachement d'aide vu que je m'y connais pas trop mais je vous passe une liste de conseils pour reussir la sienne :

- Commencer avec un papier et un crayon
- Voir même en faire une en carton avant
- Travailler avec un adulte connaisseur pour éviter les problèmes
- Connaître bien les tailles et les distances des élements de la boite
- Si la boite n'est pas assez solide ne pas hésiter à utiliser une pistolet à colle pour solidifier le tout


Prototype vu de profil Prototype vu de face Détail de la prise micro-usb femelle

Conclusion

C'est terminé, avec ça vous avez les bases pour faire votre propre mallette capteur.
N"hésitez pas à faire vos recherches sur Google pour ajouter des choses en plus.
Et n'hésitez pas à partager votre passion !

www.000webhost.com