Skip to content

Instantly share code, notes, and snippets.

@hbcruoma
Created February 8, 2018 04:49
Show Gist options
  • Save hbcruoma/b344839fcbfdce1dc49155519aec7b14 to your computer and use it in GitHub Desktop.
Save hbcruoma/b344839fcbfdce1dc49155519aec7b14 to your computer and use it in GitHub Desktop.
Esimerkki MH-Z19B -anturin lukemisesta Mkr1000:lla. Perustuu lähteeseen http://www.twobears.at/wordpress/diy/co2-messung-mit-mh-z19-und-arduino/, lisätty mm. Mkr1000-kytkennät.
/* Programm zum Auslesen der CO2-Konzentration aus 2 Sensoren MH-Z19 an einem Arduino Mega
* Die Sensoren befinden sich an den seriellen Schnittstellen 1 und 2.
* Die Werte werden dann an im Klartext an den Computer übergeben.
* Geschrieben von: Norbert Huber
* Datum: 08.04.2017
*/
/*
* Serial 1 pins:
* D13 - Rx
* D14 - Tx
*
* Connections:
* MH-Z19 MKR1000
* 2(Rx)----D14(Tx)
* 3(Tx)----D13(Rx)
* 6(Vin)---5V
* 7(GND)---GND
*/
byte com[]={0xff,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79}; //Befehl zum Auslesen der CO2 Konzentration
byte return1[9]; //hier kommt der zurückgegeben Wert des ersten Sensors rein
int concentration1; //CO2-Konzentration des ersten Sensors
int minimum1; //Minimum-Wert des ersten Sensors
int temp1; //Temperatur-Wert des ersten Sensors
byte status1; //Status des ersten Sensors
void setup() {
Serial.begin(9600); //Initialisierung Serielle Schnittstelle zum Computer
Serial1.begin(9600); //Initialisierung der seriellen Schnittstelle für den ersten Sensor
}
void loop() {
while (Serial1.available() >0) { //Hier wird der Buffer der Seriellen Schnittstelle gelehrt
Serial1.read();
}
//Sensor 1:
Serial1.write(com,9); //Befehl zum Auslesen der CO2 Konzentration
Serial1.readBytes(return1,9); //Auslesen der Antwort
concentration1 = return1[2]*256+return1[3]; //Berechnung der Konzentration
temp1 = return1[4]-40; //Berechnung der Temperatur
minimum1 = return1[6]*256+return1[7]; //Berechnung des Minimums
status1 = return1[5]; //Berechnung des Status
Serial.print("Raw: ");
for (int i = 0; i < 9; i++) {
Serial.print(return1[i]);
Serial.print(" ");
}
Serial.println();
Serial.print("Zeit = "); //Senden der Werte an den PC
Serial.print(millis()); //Am Angfang wird die Zeit in ms gesendet, die der Arduino in Betrieb ist
Serial.print(" ; Sensor 1: CO2 = ");
Serial.print(concentration1);
Serial.print(" ; Temp = ");
Serial.print(temp1);
Serial.print(" ; Minimum = ");
Serial.print(minimum1);
Serial.print(" ; Status = ");
Serial.print(status1);
Serial.println();
delay(10000); //10s warten
}
@hbcruoma
Copy link
Author

hbcruoma commented Feb 8, 2018

Minun käyttämäni MH-Z19B ei toiminut datalehdessä dokumentoimattomilta osin samalla tapaa kuin alkuperäisessä esimerkissä, esim. status on aina nolla.
Lämpötilatietoakaan ei ole dokumentoitu, mutta se näyttää toimivan luotettavasti. Kannattaa kuitenkin huomata, että se on anturin lämpötila, jota käytetään anturissa sisäisesti lämpötilakompensaation laskemiseen. Anturin toiminta perustuu infrapunavaloon, siis lämpösäteilyyn, joten se lämpiää käytössä.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment