[PYTHON] Fabriquez un incubateur à CO2 simple à l'aide de Raspberry PI et d'un capteur de CO2 (MH-Z14A)

Objectif

Étant donné que les microorganismes à l'étude peuvent être vivants en utilisant des traces de composants dans l'atmosphère, nous allons créer un dispositif de culture qui peut les ajouter.

Activer UART du côté Raspberry Pi

sudo raspi-config ->"5 Interfacing Option" ->"P6 Serial"

Il vous sera demandé si vous souhaitez vous connecter au shell en série, alors sélectionnez "Non". "Would you like a login shell to be accessible over serial?" -> "Non"

Il vous sera demandé si vous souhaitez activer le port série, alors sélectionnez "Oui". "Would you like the serial port hardware to be enabled?" -> "Oui"

Sélectionnez Terminer pour redémarrer.

continuer

$ whoami
pi
$ ls -la /dev/ttyS0
crw-rw---- 1 root dialout 4,64 29 novembre 10:42 /dev/ttyS0
$ sudo gpasswd -a pi dialout

Module créé pour utiliser MHZ-14A

Mesurez la concentration de dioxyde de carbone avec Raspberry Pi 3 modèle B + (MH-Z14A) -AWS IoT est également disponible- A été mentionné.

CAPTEUR DE CO2 NDIR MH-Z14A POUR LA DÉTECTION DE DIOXYDE DE CARBONE Depuis que la fiche technique a été mise à jour, j'ai fait référence à la dernière. Les cinq commandes suivantes sont définies pour ce capteur.

  1. Mesure de la concentration de CO2
  2. Calibrage du point zéro
  3. Calibrage de la portée
  4. Marche / Arrêt de la fonction d'étalonnage automatique
  5. Changer la plage de mesure Cette fonction n'est pas utilisée cette fois car le gaz standard (ou l'atmosphère est utilisée avec une concentration de CO2 de 400 ppm) est nécessaire pour l'étalonnage. Commandes entrées pour mesurer la concentration de CO2, désactiver l'étalonnage automatique et modifier la plage de mesure. L'étalonnage automatique est une fonction qui effectue automatiquement l'étalonnage du point zéro toutes les 24 heures, et il est recommandé de ne pas utiliser cette fonction lors de son utilisation dans des serres, des fermes et des réfrigérateurs.

Lors de la lecture du code référencé ・ Définition de classe et signification de init et de soi ・ Comment utiliser pyserial -Création d'un module et la signification de ʻif name == '__ main __': ` Je ne savais pas grand-chose à ce sujet, alors j'ai fait quelque chose qui fonctionne pour le moment, mais je ne suis pas sûr de l'exactitude du code.

J'ai enregistré le mhz14a.py créé dans / usr / lib / python2.7 / dist-packages /. Référence; 3e édition p195

mhz14a.py


import serial
import time

class MHZ14A():
    PACKET = [0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79]
    RANGE1 = [0xFF, 0x01, 0x99, 0x00, 0x00, 0x00, 0x07, 0xd0, 0x8F]
    RANGE2 = [0xFF, 0x01, 0x99, 0x00, 0x00, 0x00, 0x13, 0x88, 0xCB]
    RANGE3 = [0xFF, 0x01, 0x99, 0x00, 0x00, 0x00, 0x27, 0x10, 0x2F]
    AUTOCALON = [0xFF, 0x01, 0x79, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xE6]
    AUTOCALOFF = [0xFF, 0x01, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86]

    def __init__(self, ser):
        self.serial = serial.Serial(ser, 9600, timeout=1)
        time.sleep(2)

    def get(self):
        self.serial.write(bytearray(MHZ14A.PACKET))
        res = self.serial.read(size=9)
        res = bytearray(res)
        checksum = 0xff & (~(res[1] + res[2] + res[3] + res[4] + res[5] + res[6] + res[7]) + 1)
        if res[8] == checksum:
            return (res[2] << 8|res[3])
        else:
            raise Exception("checksum: " + hex(checksum))

    def close(self):
        self.serial.close()

#Acquiert et renvoie la concentration de CO2 du capteur
def main():
    sensor = MHZ14A("/dev/ttyS0")
    try:
        return (int(sensor.get()))
    except:
        pass
    sensor.close()

#Self-Marche / arrêt de la fonction d'étalonnage(Aucune valeur de retour)
def autocal(x):
    sensor = MHZ14A("/dev/ttyS0")
    if x == 0:
        sensor.serial.write(bytearray(MHZ14A.AUTOCALOFF))
    elif x == 1:
        sensor.serial.write(bytearray(MHZ14A.AUTOCALON))
    sensor.close()

#Envoyer une commande pour modifier la plage de mesure(Aucune valeur de retour)
def range(y):
    sensor = MHZ14A("/dev/ttyS0")
    if y == 1:
        sensor.serial.write(bytearray(MHZ14A.RANGE1))
    elif y == 2:
        sensor.serial.write(bytearray(MHZ14A.RANGE2))
    elif y == 3:
        sensor.serial.write(bytearray(MHZ14A.RANGE3))
    sensor.close

if __name__ == '__main__':
    main()

・ Main () renvoie la valeur du capteur ・ Autocal (x) active (1) off (0) de la fonction d'étalonnage automatique ・ La plage (y) dispose de 3 façons de changer la plage de mesure, 0 ~ 2000, 0 ~ 5000, 0 ~ 10000, et le réglage initial de la machine est 5000.

Acquérir du CO2 et activer / désactiver la vanne électromagnétique

Je l'ai écrit en référence au code de L Chika. La fonction d'étalonnage automatique est désactivée et la plage de mesure est réglée entre 0 et 10 000 ppm.

import RPi.GPIO as GPIO
from time import sleep
import datetime
import mhz14a as MHZ

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)

MHZ.autocal(0) #self-Désactiver la fonction d'étalonnage
MHZ.range(3) #Plage de mesure 0~Réglé à 10000ppm

try:
    while True:
        ppm = MHZ.main() #Obtenir la valeur du capteur
        if ppm < 9500: #Concentration de CO2 qui ouvre la vanne électromagnétique
            GPIO.output(18, True)
            sleep(0.2) #Il est temps d'ouvrir la vanne électromagnétique(Secondes)
            GPIO.output(18, False)
            sleep(0.8)
        else:
            sleep(1)
        print(ppm, datetime.datetime.now()) #Affichage de la concentration de CO2 et de la date / heure
        sleep(60) #Intervalle de mesure(Secondes)
except KeyboardInterrupt:
    pass

GPIO.cleanup()
print("stop")

Vanne électromagnétique marche / arrêt

・ Valve électromagnétique JPMV22NC (achetée sur Amazon) ・ Alimentation 12V reliée à la valve électromagnétique ・ Convertisseur DC-DC SUS1R50505 ・ OMRON G5V-2 (si ce n'est pas cette taille, il ne collera pas au tableau de bord) ・ Transistor S8050 (je l'ai acheté dans un pack avec un assortiment d'Amazon) ・ Résistance 1000Ω (achetée dans le pack d'assortiment d'Amazon) ・ Diode (achetée dans le pack d'assortiment d'Amazon) Quand j'ai essayé de dessiner un schéma de circuit, Firitzing a été chargé, alors j'ai pris une photo directe du tableau de bord. Au début, la vanne électromagnétique ne fonctionnait pas et je ne comprenais pas tout, j'ai donc connecté le 5V GND au Raspeye GND et cela a fonctionné. C'est difficile ... IMG_3483_2.png

J'ai essayé de le déplacer pour le moment

IMG_3485.png Comme le montre la photo, le capteur, la sortie de CO2 et le ventilateur sont emballés dans un taraud, légèrement recouverts (pas complètement scellés) et déplacés pendant la nuit. Le résultat est le graphique ci-dessous.

co2.png Étant donné que la limite supérieure du capteur est de 10000 ppm, je la secoue, mais je pense que je peux maintenir environ 10000 ppm. En parlant de cupidité, je veux une plage de mesure allant jusqu'à 10% environ, mais il n'y a rien de abordable.

Tâches futures

・ Enregistrer le journal ・ Ajout de capteurs d'hydrogène, de méthane et de monoxyde de carbone (j'ai acheté le capteur lui-même, mais la conversion AD est nécessaire) → Incubateur de gaz traces

Recommended Posts

Fabriquez un incubateur à CO2 simple à l'aide de Raspberry PI et d'un capteur de CO2 (MH-Z14A)
Créez un capteur de couleur à l'aide d'une tarte à la râpe et d'une caméra
Créez un convertisseur Ethernet LAN sans fil et un routeur simple avec Raspberry Pi
Utiliser une webcam avec Raspberry Pi
Créez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 4
Faire une boussole d'affichage kanji avec Raspberry Pi et Sense Hat
[Raspberry Pi] Ajouter un thermomètre et un hygromètre
Faire en sorte que Raspberry Pi parle japonais en utilisant OpenJtalk
Faire une minuterie de lavage-séchage avec Raspberry Pi
Essayez d'utiliser le code QR avec Raspberry Pi
Créer un système de notification des visiteurs à l'aide de Raspberry Pi
Fabriquez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 3
[Pour les débutants] J'ai fait un capteur humain avec Raspberry Pi et notifié LINE!
Utilisation du capteur de température numérique à 1 fil DS18B20 avec Raspberry Pi de Python
Expliquez doucement le processus de création d'une simple caméra de surveillance sans serveur à l'aide de Raspeye, de l'API Gmail et de l'API Line
Utilisez le capteur d'éclairement numérique TSL2561 avec Raspberry Pi
Essayez de créer un jeu simple avec Python 3 et iPhone
Essayez d'utiliser le capteur de température (LM75B) avec Raspeye.
Créer un discriminateur Sato Yohei en utilisant OpenCV et TensorFlow
Créez votre propre plate-forme IoT à l'aide de raspberrypi et ESP32 (partie 3) ~ Paramètres ESP32 Capteur de température analogique
Créez facilement un TweetBot qui vous informe de la température et de l'humidité avec Raspberry Pi + DHT11.
Fabriquez une voiture robotique à conduite automatique avec Raspberry Pi3 B + et capteur de distance à ultrasons HC-SR04
J'ai essayé de créer une caméra de surveillance à détection de mouvement avec OpenCV en utilisant une caméra WEB avec Raspberry Pi
Créez une caméra de surveillance WEB avec Raspberry Pi et OpenCV
Utilisez python sur Raspberry Pi 3 pour détecter la "température (en utilisant un convertisseur A / N)"!
Créez une partition, puis installez le système d'exploitation Raspberry Pi
J'ai essayé d'automatiser [une certaine tâche] à l'aide d'une tarte à la râpe
Obtenez la météo en utilisant l'API et laissez Raspberry Pi parler!
J'ai créé un éditeur de texte simple en utilisant PyQt
Surveillance intérieure à l'aide de Raspberry Pi
Enfin ... Créez un contrôleur radio en utilisant python sur Raspberry Pi 3! (Lorsque l'aimant est rapproché, le moteur se déplace et s'arrête automatiquement)
Comment télécharger des fichiers sur Cloud Storage à l'aide de Python [Créer une caméra à point fixe avec Raspberry PI # 1]
"2/2" Je crée une application Web simple pour le fonctionnement du robot. «Chaînes Raspberry Pi 3B + et Django»
"1/2" Je crée une application Web simple pour le fonctionnement du robot. «Chaînes Raspberry Pi 3B + et Django»
Contrôlez le moteur avec un pilote de moteur en utilisant python sur Raspberry Pi 3!
Faisons un ordinateur de vélo avec Raspberry Pi Zero (W, WH)
Créez un simple OMR (lecteur de feuille de marque) avec Python et OpenCV
Classique de Noël (?) Éclairage d'un arbre de Noël avec Raspberry Pi et Philips Hue
Créez un lot planifié simple à l'aide de l'image Python de Docker et de parse-crontab
Instrument de pesage utilisant Raspberry Pi et Hx711 (affichage GUI dans Tkinter)
Raspberry Pi --1 --Première fois (Connectez un capteur de température pour afficher la température)
Créez votre propre plateforme IoT en utilisant raspberrypi et ESP32 (partie 1)
[Remarque] Utilisation d'un écran LCD à 16 caractères à 2 chiffres (1602A) de Python avec Raspeye
Enfin ... Créez un contrôleur radio en utilisant python sur Raspberry Pi 3! (Le moteur se déplace lorsque le bouton est enfoncé)
USB sur Ethernet avec Raspberry pi
MQTT sur Raspberry Pi et Mac
Apprenez Zundokokiyoshi en utilisant un simple RNN
Créer un outil de reconnaissance de visage à l'aide de TensorFlow
Créer un tableau simple à l'aide de prettytable
Essayez d'utiliser ArUco avec Raspberry Pi
Un mémo pour utiliser simplement le capteur d'éclairement TSL2561 avec Raspberry Pi 2
Acquérir la valeur du capteur de Grove Pi + avec Raspberry Pi et la stocker dans Kintone
[Python + PHP] Créez un moniteur de température / humidité / pression avec Raspberry Pi
J'ai essayé de faire un signal avec Raspeye 4 (édition Python)
Paramètres initiaux pour l'utilisation du kit de démarrage et de la caméra Grove Pi + avec Raspberry Pi
Je souhaite créer une application Web en utilisant React et Python flask
Enfin ... Créez un contrôleur radio en utilisant python sur Raspberry Pi 3! (Le moteur se déplace tandis que l'aimant est rapproché)