Da die untersuchten Mikroorganismen möglicherweise unter Verwendung von Spurenelementen in der Atmosphäre leben, werden wir ein Kulturgerät erstellen, das sie hinzufügen kann.
sudo raspi-config
->"5 Interfacing Option" ->"P6 Serial"
Sie werden gefragt, ob Sie sich seriell bei der Shell anmelden möchten. Wählen Sie daher "Nein". "Would you like a login shell to be accessible over serial?" -> "Nein"
Sie werden gefragt, ob Sie die serielle Schnittstelle aktivieren möchten. Wählen Sie daher "Ja". "Would you like the serial port hardware to be enabled?" -> "Ja"
Wählen Sie Fertig stellen, um neu zu starten.
fortsetzen
$ whoami
pi
$ ls -la /dev/ttyS0
crw-rw---- 1 root dialout 4,64 29. November 10:42 /dev/ttyS0
$ sudo gpasswd -a pi dialout
Messen Sie die Kohlendioxidkonzentration mit Raspberry Pi 3 Modell B + (MH-Z14A) -AWS IoT ist ebenfalls verfügbar- Wurde verwiesen.
・ MH-Z14A NDIR-CO2-SENSOR ZUR KOHLENDIOXIDERKENNUNG Da das Datenblatt aktualisiert wurde, habe ich mich auf das neueste bezogen. Die folgenden fünf Befehle sind für diesen Sensor festgelegt.
Beim Lesen des referenzierten Codes
・ Definition der Klasse und Bedeutung von Init und Selbst
・ Verwendung von Pyserial
-Erstellen eines Moduls und die Bedeutung von if __name__ == '__ main __':
Ich wusste nicht viel darüber, also habe ich etwas gemacht, das vorerst funktioniert, aber ich bin nicht sicher, ob der Code korrekt ist.
Ich habe das erstellte mhz14a.py
in / usr / lib / python2.7 / dist-packages /
gespeichert. Referenz; 3. Ausgabe, S. 195
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()
#Erfasst die CO2-Konzentration vom Sensor und gibt sie zurück
def main():
sensor = MHZ14A("/dev/ttyS0")
try:
return (int(sensor.get()))
except:
pass
sensor.close()
#Self-Ein / Aus der Kalibrierungsfunktion(Kein Rückgabewert)
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()
#Senden Sie einen Befehl zum Ändern des Messbereichs(Kein Rückgabewert)
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 () gibt den Sensorwert zurück ・ Autocal (x) ist die automatische Kalibrierungsfunktion ein (1) aus (0) ・ Der Bereich (y) bietet drei Möglichkeiten zum Ändern des Messbereichs: 0 ~ 2000, 0 ~ 5000, 0 ~ 10000, und die anfängliche Einstellung der Maschine ist 5000.
Ich habe es unter Bezugnahme auf den Code von L Chika geschrieben. Die automatische Kalibrierungsfunktion ist ausgeschaltet und der Messbereich auf 0 bis 10000 ppm eingestellt.
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-Schalten Sie die Kalibrierungsfunktion aus
MHZ.range(3) #Messbereich 0~Auf 10000ppm einstellen
try:
while True:
ppm = MHZ.main() #Sensorwert abrufen
if ppm < 9500: #CO2-Konzentration, die das elektromagnetische Ventil öffnet
GPIO.output(18, True)
sleep(0.2) #Zeit zum Öffnen des elektromagnetischen Ventils(Sekunden)
GPIO.output(18, False)
sleep(0.8)
else:
sleep(1)
print(ppm, datetime.datetime.now()) #CO2-Konzentration und Datum / Uhrzeit anzeigen
sleep(60) #Messintervall(Sekunden)
except KeyboardInterrupt:
pass
GPIO.cleanup()
print("stop")
・ Elektromagnetisches Ventil JPMV22NC (bei Amazon gekauft) ・ 12-V-Stromversorgung am elektromagnetischen Ventil ・ DC-DC-Wandler SUS1R50505 ・ OMRON G5V-2 (Wenn es nicht diese Größe hat, haftet es nicht am Bullet Board) ・ Transistor S8050 (ich habe ihn in einer von Amazon sortierten Packung gekauft) ・ 1000Ω Widerstand (im Sortiment von Amazon erhältlich) ・ Diode (im Sortiment von Amazon erhältlich) Als ich versuchte, einen Schaltplan zu zeichnen, wurde Firitzing aufgeladen, also machte ich eine direkte Aufnahme vom Bullet Board. Zuerst funktionierte das elektromagnetische Ventil nicht und ich konnte nicht alles verstehen, also habe ich das 5V GND an das Raspeye GND angeschlossen und es hat funktioniert. Es ist schwierig ...
Wie auf dem Foto gezeigt, sind der Sensor, der CO2-Auslass und der Lüfter in einem Gewindebohrer verpackt, leicht abgedeckt (nicht vollständig versiegelt) und über Nacht bewegt. Das Ergebnis ist die folgende Grafik.
Da die Obergrenze des Sensors 10000 ppm beträgt, schüttle ich ihn ab, aber ich denke, ich kann ungefähr 10000 ppm beibehalten. Apropos Gier, ich möchte einen Messbereich von bis zu 10%, aber es gibt nichts Erschwingliches.
· Protokoll speichern ・ Wasserstoff-, Methan- und Kohlenmonoxidsensoren hinzugefügt (ich habe den Sensor selbst gekauft, aber eine AD-Umwandlung ist erforderlich) → Spurengas-Inkubator