[PYTHON] La ventilation est importante. Ce que j'ai fait pour garder une trace de la concentration de C02 dans la pièce

Selon le vieillissement de la concentration de dioxyde de carbone de l'Agence météorologique, la concentration mondiale moyenne de CO2 en 2018 est comparée à l'année précédente. Il semble qu'il ait augmenté de 2,3 ppm à 407,8 ppm.

Il est inquiétant que la concentration de CO2 continue d'augmenter en raison du réchauffement climatique, mais les préoccupations actuelles concernant la nouvelle épidémie de virus corona sont «scellées», «denses» et «proches». La question est de savoir si la pièce est correctement ventilée pour éviter le risque de "scellement" dans le dense.

À propos de la concentration de CO2 dans la pièce Normes de gestion de l'assainissement de l'environnement des bâtiments du ministère de la Santé, du Travail et du Bien-être indique 1 000 ppm ou moins Ministère de l'Éducation, de la Culture, des Sports, des Sciences et de la Technologie, Normes d'hygiène de l'environnement dans les écoles affiche 1 500 ppm ou moins Est la norme de gestion. De plus, cette figure compilée par CHC GROUP peut être utile. image.png (Source: http://group.chcsys.net/jp/chcgroup/)

Je voulais avoir des données correctes sur la concentration de CO2 de mon logement par rapport au standard, j'ai donc décidé de la mesurer à l'aide d'un capteur.

Ce que vous avez préparé

Raspberry Pi 3 Model B Capteur de CO2 MH-Z19B

OS Debian GNU/Linux Linux raspberrypi 4.19.97-v7+ #1294 SMP Thu Jan 30 13:15:58 GMT 2020 armv7l

Activez le port série dans l'interface des paramètres de Raspberry Pi. image.png

Redémarrez le Raspberry Pi après avoir activé le port série. image.png

câblage

Le soudage par fil est effectué pour chacun des éléments GND, Vin, TxD et RxD. image.png image.png (À partir du schéma de câblage https://pypi.org/project/mh-z19/)

Connectez le Raspberry Pi et le capteur de CO2 selon le schéma de câblage. image.png

Installation du package

Sur la base des informations disponibles sur https://pypi.org/project/mh-z19/. Installation du package

$ sudo pip3 install mh-z19
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting mh-z19
  Downloading https://www.piwheels.org/simple/mh-z19/mh_z19-0.4.1-py3-none-any.whl
Collecting argparse (from mh-z19)
  Downloading https://files.pythonhosted.org/packages/f2/94/3af39d34be01a24a6e65433d19e107099374224905f1e0cc6bbe1fd22a2f/argparse-1.4.0-py2.py3-none-any.whl
Requirement already satisfied: pyserial in /usr/lib/python3/dist-packages (from mh-z19) (3.4)
Collecting getrpimodel (from mh-z19)
  Downloading https://www.piwheels.org/simple/getrpimodel/getrpimodel-0.1.15-py3-none-any.whl
Requirement already satisfied: requests in /usr/lib/python3/dist-packages (from mh-z19) (2.21.0)
Installing collected packages: argparse, getrpimodel, mh-z19
Successfully installed argparse-1.4.0 getrpimodel-0.1.15 mh-z19-0.4.1

Test d'acquisition des valeurs de mesure

~~ Le module mh_z19 semble afficher le résultat dans le type dictionnaire. ~~ Le module mh_z19 semble afficher le résultat en JSON. (Nous avons reçu une demande de modification de @UedaTakeyuki. Merci.)

$ sudo python3 -m mh_z19
{"co2": 1456}

Créer un programme

La valeur mesurée est sortie avec la date et l'heure.

import datetime
import mh_z19

now = datetime.datetime.now()
now = "{0:%Y-%m-%d %H:%M:%S}".format(now)
value = mh_z19.read().get("co2")  # ex: {"co2": 1456}
out = now + ',' + str(value)
print(out)  #Sortie vers la console

Résultat de sortie

2020-04-15 19:34:01,1950

Créer un script shell

Redirige le résultat de la sortie standard vers un fichier journal. do.sh

#!/bin/sh

cd /home/pi/mh-z19
sudo python3 MeasureAndOutput.py >> ./log/logfile.csv

Mettez le script shell en mode exécutable.

$ chmod +x do.sh

Paramètres d'exécution programmée

$ crontab -e

L'éditeur démarre, alors configurez-le pour qu'il mesure toutes les minutes et affiche le journal.

# m h  dom mon dow   command
* * * * * mh-z19/do.sh

Redémarrez cron pour que les paramètres prennent effet.

$ sudo /etc/init.d/cron restart
[ ok ] Restarting cron (via systemctl): cron.service.

Quand je l'ai vérifié quelques minutes plus tard, le journal était sorti selon le scénario.

$ cat logfile.csv
2020-04-15 19:34:01,1950
2020-04-15 19:35:02,1957
2020-04-15 19:36:01,1965
2020-04-15 19:37:01,1976
2020-04-15 19:38:02,1983
2020-04-15 19:39:01,1996
2020-04-15 19:40:01,2032

Essayez de faire un graphique

Sur la base du fichier journal de sortie, j'ai essayé de créer un graphique manuellement pour le moment. image.png

Ce que je veux faire après ça

・ Alerte à LINE Bot lorsque la concentration dépasse un certain niveau ・ Alerte vocale par haut-parleur intelligent

L'aîné de Qiita qui a été utile

@revsystem https://qiita.com/revsystem/items/76ab1e21d386c5977892 @tororu https://qiita.com/tororu/items/20e8625d3fb24f3e06da @UedaTakeyuki https://qiita.com/UedaTakeyuki/items/c5226960a7328155635f

Recommended Posts

La ventilation est importante. Ce que j'ai fait pour garder une trace de la concentration de C02 dans la pièce
Ce que j'ai fait pour garder une trace de l'humidité et de la température des archives
[Chez Coder] Ce que j'ai fait pour atteindre le rang vert en Python
Comment suivre le travail avec Powershell
Ce que j'ai fait pour établir une connexion SSH à l'environnement VPS Ubuntu
Que faire si la barre de progression n'est pas affichée dans tqdm de python
Ce que j'ai fait quand j'étais en colère de le mettre avec l'option enable-shared
Je veux faire briller l'éclairage LED de l'ErgoDox EZ, mais dites-moi ce qu'est la LED en premier lieu
Ce que j'ai fait pour accélérer la tâche de recherche de chaînes
Ce que j'ai fait pour accueillir le Python2 EOL en toute confiance
J'ai essayé d'illustrer le temps et le temps du langage C
Rapport du site. Ce que je pense est nécessaire pour utiliser l'IA / IoT dans l'industrie manufacturière
Comment donner et signifier l'option des contraintes dans scipy.optimize.minimize
[Introduction à Python] J'ai comparé les conventions de nommage de C # et Python.
J'ai écrit le code pour écrire le code Brainf * ck en python
Je veux connaître la population de chaque pays du monde.
Que faire lorsque le type de valeur est ambigu en Python?
H29.2.27 ~ 3.5 Résumé de ce que j'ai fait
[Python] Que faire en cas de violation de PEP8 lors du processus d'importation à partir du répertoire ajouté à sys.path
[Linux] Quelle est la méthode pour résoudre les erreurs de dépendance de package de yum et rpm sur le lieu de travail réel?
Que faire lorsque le résultat téléchargé via scrapy est en anglais
[Langage C] Je souhaite générer des nombres aléatoires dans la plage spécifiée
Je veux convertir par lots le résultat de "chaîne de caractères" .split () en Python
Je veux expliquer en détail la classe abstraite (ABCmeta) de Python
Je souhaite trier une liste dans l'ordre des autres listes
Quel genre de livre est le "Python Crash Course" le plus vendu au monde?
Je souhaite laisser une commande arbitraire dans l'historique des commandes de Shell
Qu'est-ce qu'une bibliothèque en langage C? Quelles informations sont ouvertes au public?
Que faire lorsque l'avertissement "L'environnement est cohérent ..." apparaît dans l'environnement Anaconda
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai essayé d'afficher la valeur d'altitude du DTM dans un graphique
[Introduction à Python] Quelle est la méthode de répétition avec l'instruction continue?
J'ai créé un script pour vérifier si l'anglais est entré dans la position spécifiée du fichier JSON en Python.
Implémenter une partie du processus en C ++
Quelle est la cause de l'erreur suivante?
Qu'est-ce que "mahjong" dans la bibliothèque Python? ??
Tri sélect écrit en C
Ce que j'ai fait pour économiser la mémoire Python
Je veux obtenir le chemin du répertoire où le fichier en cours d'exécution est stocké.
Je souhaite visualiser l'état des transferts de la J League 2020, que dois-je faire?
Je souhaite utiliser Python dans l'environnement de pyenv + pipenv sous Windows 10
J'étais en difficulté car le comportement du conteneur docker n'a pas changé
Ce que j'ai fait quand je suis resté coincé dans le délai avec lambda python
J'ai créé une commande appdo pour exécuter des commandes dans le contexte de l'application
AtCoder AGC 041 C - J'étais accro à la recherche complète de Domino Quality
Je souhaite définir un cycle de vie dans la définition de tâche d'ECS
Je souhaite voir une liste de fichiers WebDAV dans le module Requêtes
Je souhaite stocker les résultats de% time, %% time, etc. dans un objet (variable)
L'expérience de Hackason selon laquelle il est le plus important de comprendre les sentiments de l'organisateur
Que faire si (base) est affiché au début du terminal Mac
linux / c> lien> Obtenir le résultat de l'exécution de la commande shell dans le programme C> On m'a appris à utiliser popen ()
Comment utiliser la bibliothèque C en Python
Qu'est-ce que wheezy dans l'image Docker Python?
[Minecraft] Quels sont les éléments importants de la survie?
J'ai essayé de corriger la forme trapézoïdale de l'image
Ce que j'ai fait lors de la mise à jour de Python 2.6 vers 2.7
Je souhaite personnaliser l'apparence de zabbix
Je veux afficher la progression en Python!