É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.
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
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.
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.
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")
・ 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 ...
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.
É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.
・ 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