/
2,056 Views0

Dans cet article, je vais vous montrer comment je vais utiliser un Raspberry zero W pour mesurer les poussières fines avec un SDS011.

Dans l’état actuel, l’article est un résumé des opérations. Il ne fonctionne qu’avec Python 2.x. Je travaille sur un autre article dont l’instrument fonctionne avec Python3 et pour que les données soient envoyées via LoRaWAN, sur un serveur distant

Introduction

On peut dire assez grossièrement que la poussière fine est une très petite particule dans l’air. Une distinction est faite entre les PM10 et les PM2,5. Les PM10 sont toutes les particules dans l’air qui sont inférieures à 10 µm, tandis que les PM2,5 sont toutes les particules qui sont inférieures à 2,5 µm. Plus les particules sont petites, c’est-à-dire tout ce qui est inférieur à 2,5 µm, plus elles sont dangereuses pour la santé car elles peuvent pénétrer dans les alvéoles.

L’indice de qualité de l’air peut être calculé sur la base des particules dans l’air. Il indique à quel point l’air est «bon» ou «mauvais». Malheureusement, il n’y a pas de norme uniforme ici, car différents pays calculent cela différemment ou ont des échelles différentes. L’article de Wikipedia sur l’indice de la qualité de l’air donne un bon aperçu.

Le capteur SDS011, va vous permettre de mesurer ces particules

Prérequis

Cet exercice ne fonctionne qu’avec Python 2.x.

Vos commentaires sont les bienvenus pour perfectionner cet article.

Matériel

Sources

  1. https://hackernoon.com/how-to-measure-particulate-matter-with-a-raspberry-pi-75faa470ec35
  2. https://projetsdiy.fr/affichage-oled-ssd1306-i2c-sur-raspberry-pi-code-python-dune-mini-station-meteo-connectee-a-jeedom-avec-la-librairie-adafruit/

Préparation du Raspberry

Pour la préparation de votre Raspberry, je vous laisse suivre cette partie https://eco-sensors.ch/2-faire-ses-sauvegardes-sans-connexion/

en faisant attention de télécharger la dernière version de Rasbian, soit la version Raspbian Buster with desktop qui est la version en vigueur, lors de la rédaction de cet article.

Installation du capteur SDS011

Au passage, nous remercions Hackernoon pour la rédaction de leur article qui m’a aidé à faire le mien.

Connectez le capteur SDS011 au port USB de votre Raspberry. Il vous faudra probablement un adaptateur USB->MicroUSB.

Une fois votre Raspberry installé, connectez-vous à ce dernier, après vous être connecté sur votre réseau WiFi de votre routeur, auquel votre Pi est aussi connecté

ssh pi@ecosensors5.local

Bien entendu, vous modifierez, le nom d’utilisateur et le nom (hostname) de votre Raspberry selon votre configuration

Installation des librairies

sudo apt update && sudo apt upgrade
sudo apt install git-core python-serial python-enum lighttpd

Modifiez encore le propriétaire du dossier

sudo chown pierrot:pierrot /var/www/html/

Bien entendu, si vous travaillez avec le compte pi, ou en autre, il faudra remplacer pierrot

Créez encore un fichier json, où seront sauvez les mesures

echo [] > /var/www/html/aqi.json

Cette étape est très intéressante, car elle vous permettra de sauver les mesures sur votre Pi, dans le cas ou elles ne pouvaient pas être envoyées avec LoRaWAN

Nous devons savoir à quel port USB, le capteur est connecter. Lancer la commande suivante

dmesg | grep USB

et vous devriez voir une ligne finissant par ttyUSB0, comme cela est mon cas

[ 14.565709] usb 1-1: ch341-uart converter now attached to ttyUSB0

Téléchargez le script et téléchargez le

cd /opt
wget https://github.com/pierrot10/aqi/blob/master/python/aqi.py

Editez le fichier aqi.py

sudo nano /opt/aqi.py

et vérifiez cette ligne

ser.port = "/dev/ttyUSB0"

à ce qu’elle corresponde bien, à ce que vous a affiché la commande dmesg. Si non, corrigez-là en fonction de votre résultat.

Vous pouvez, dès à présent, essayer votre capteur en lançant la commande

sudo python /opt/aqi.py

ce qui devrait vous afficher ceci

Y: 18, M: 1, D: 18, ID: 0x98a7, CRC=OK
PM2.5: 23.0 µg/m3, PM10: 41.1 µg/m3
PM2.5: 22.8 µg/m3, PM10: 41.0 µg/m3
PM2.5: 22.8 µg/m3, PM10: 41.1 µg/m3
PM2.5: 22.7 µg/m3, PM10: 40.9 µg/m3
PM2.5: 22.7 µg/m3, PM10: 42.2 µg/m3
PM2.5: 22.8 µg/m3, PM10: 41.8 µg/m3
PM2.5: 22.8 µg/m3, PM10: 41.6 µg/m3
PM2.5: 22.9 µg/m3, PM10: 41.9 µg/m3
PM2.5: 22.6 µg/m3, PM10: 40.9 µg/m3
PM2.5: 22.7 µg/m3, PM10: 40.6 µg/m3
PM2.5: 22.9 µg/m3, PM10: 40.8 µg/m3
PM2.5: 22.9 µg/m3, PM10: 39.8 µg/m3
PM2.5: 22.8 µg/m3, PM10: 40.4 µg/m3
PM2.5: 22.7 µg/m3, PM10: 41.1 µg/m3
PM2.5: 22.6 µg/m3, PM10: 40.5 µg/m3
Going to sleep for 1 min...

La dernière mesure sera sauvée dans le fichier aqi.json, que nous avons créer plus haut

Affichage des mesures sur l’écran OLED

Installation

Source : https://projetsdiy.fr/affichage-oled-ssd1306-i2c-sur-raspberry-pi-code-python-dune-mini-station-meteo-connectee-a-jeedom-avec-la-librairie-adafruit/

Vérifiez la version de votre Python. Cette librairie est aussi écrite que pour Python 2.7.x

python --version

Installez git, si ce n’est pas fait

sudo apt-get install git

Créez un dossier où le télécharger, téléchargez-le et installez-le

# Création du dossier
mkdir -p ~/Documents/Soft/
# déplacez-vous dans le dossier
cd ~/Documents/Soft
# cloner le dossier
git clone https://github.com/pierrot10/Adafruit_Python_SSD1306.git
# Déplacez-vous dans le dossier
cd Adafruit_Python_SSD1306
#Installation
sudo python setup.py install

Installez encore pillow.

Pillow est un fork de PIL (Python Image Library), démarré et maintenu par Alex Clark et Contributors. Il était basé sur le code PIL, puis a évolué vers une version meilleure, moderne et plus conviviale de PIL. Il ajoute la prise en charge de l’ouverture, de la manipulation et de l’enregistrement de nombreux formats de fichiers image différents. Beaucoup de choses fonctionnent de la même manière que le PIL d’origine.

sudo pip install pillow

info: https://stackoverflow.com/questions/32772596/pip-install-pil-fails/32800456

Affichage des mesures

Nous allons maintenant modifier le fichier aqi.py pour afficher les mesures. N’hésitez pas à me proposer mieux.

Editez le fichier aqi.py

sudo nano /opt/aqi.py

et ajoutez les lignes suivantes, au début du fichier après

import serial, struct, sys, time, json, subprocess
import Adafruit_GPIO.SPI as SPI
import Adafruit_SSD1306
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
RST=None
# Crée un objet
disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)
# Initialise l'écran
disp.begin()
# Efface l'écran
disp.clear()
disp.display()
# Récupération de la taille de l'écran
width = disp.width
height = disp.height
image = Image.new('1', (width, height))
# On créé un objet sur lequel on va dessiner - Get drawing object to draw on image.
draw = ImageDraw.Draw(image)
# Charge la font par défaut - load default font
font = ImageFont.load_default()

Descendez maintenant à la ligne 116, qui doit correspondre à ceci et ajoutez sous while ces lignes (attention à l’indentation sous python)

while True:
  disp.clear()
  disp.display()
  # Draw a black filled box to clear the image.
  draw.rectangle((0,0,width,height), outline=0, fill=0)
  draw.text((0,0), 'ECO-SENSORS.CH', font=font, fill=255)
  draw.text((0,10), 'Measuring Air Quality', font=font, fill=255)
  disp.image(image)
  disp.display()

Puis allez à la ligne 137, ce qui doit correspondre à ceci (théoriquement, ça devrait être la ligne145, puisque nous avons ajouter 8 lignes) et ajoutez le code suivante, dessous data.append(jsonrow)

# data.append(jsonrow)
draw.text((0,25), 'pm25:', font=font, fill=255)
draw.text((33,25), str(values[0]), font=font, fill=255)
draw.text((0,35), 'pm10:', font=font, fill=255)
draw.text((33,35), str(values[1]), font=font, fill=255)

Finalement, allez à la fin du fichier et ajoutez sous print(« Going to sleep for 1 min… »)

# print("Going to sleep for 1 min...")
draw.text((0,55), 'Sleep for 1mn',font=font, fill=255)
disp.image(image)
disp.display()

Si vous lancez maintenant le script

sudo python /opt/aqi.py

Vous allez voir du joli texte sur votre écran OLED.

J’attire encore votre attention sur les chiffres 0,55 la fonction

draw.text((0,55), 'Du texte',font=font, fill=255)

Le premier indiquera la position X (horizontal) et le second, indiquera la position Y (vertical) du texte.

 

Zero2Go Omini

La carte zero2go omini est une carte sympa à avoir. Elle vous permet de fournir trois sources d’alimentation et elle va utiliser la batterie la plus chargée en priorité. Vous pouvez connecter un panneau solaire de 5 à12V, même plus (à vérifier). Un des avantage, est que vous pouvez alimenter votre Raspberry avec son alimentation sur le Input 1 du zero2go, et connecter une batterie sur le Input 2 de la même carte. Ainsi il agira comme UPS.

Documentation: https://cdn-shop.adafruit.com/product-files/4114/4114_Zero2Go_Omini_UserManual.pdf

Installation

L’installation du soft doit se faire avant que la HAT Zero2Go soit connecté

sudo mkdir -p /opt/zero2go
cd /opt/zero2go
sudo wget http://www.uugear.com/repo/Zero2GoOmini/installZero2Go.sh
sudo sh installZero2Go.sh
sudo reboot # Une fois l'installation terminée

Un nouveau dossier a été créé dans

ls /opt/zero2go/zero2go

ou vous trouverez 4 fichiers

daemon.sh init.sh utilities.sh zero2go.log zero2go.sh

Vous pouvez maintenant connecter votre HAT Zero2go

zero2go.sh est le script qui lancera l’application.

cd /opt/zero2go/zero2go/
sudo ./zero2go

 

Cet article a été arrêté pour développer la même application avec Pythoin3

Mesure de la qualité de l’air (PM2.5/PM10) – Python3


Soutenez-nous

Si vous avez aimé cet article, faites un don de quelques Euro pour le financement de mes projets et du matériel.

Leave Comment:

fr_FRFrench