Merjenje plinov, vlage in temperature

Arduino je pojav za katerega bi težko rekli, da opisuje samo HW ali samo SW, zato mu tu namenajm poseben prostor.

Merjenje plinov, vlage in temperature

OdgovorNapisal/-a Matthai » 15 Maj 2017, 12:09

Torej, naredil sem svoj prvi malo bolj resen projekt, in sicer mini merilec plinov, vlage in temperature. Uporabljen je Arduino Nano ter Bluetooth modul HC-05. Za senzor sem uporabil MQ-x senzorje ter DHT-22 senzor za vlago in temperaturo. Plin merim samo eden, je pa zadeva zalotana tako, da lahko plinske senzorje enostavno menjam (nataknem ga na žensko letvico 2,54mm, ki je prilotana na PCB).

Plinske senzorje MQ-x se dobi na Aliexpress za cca. 12 EUR, in sicer je v setu tole:
- MQ-2: vnetljivi plini
- MQ-3: alkohol
- MQ-4: zemeljski plin, metan
- MQ-5: LPG, zemeljski plin, premogov plin
- MQ-6: LPG, propan
- MQ-7: ogljikov monoksid
- MQ-8: vodik
- MQ-9: ogljikov monoksid in vnetljivi plini
- MQ135: senzor kvalitete zraka (amoniak, benzen, alkohol, dim)

DHT-22 je za vlago sicer v redu, za temperaturo je pa bolj zanič. Vlago zna zaznati od 0-100% (2-5% natančnost), temperaturni razpon pa ima -40 to 125°C (z ±0.5°C natančnostjo). Poleg tega je precej počasen. Za temperaturo je sicer precej boljši DS18B20, ampak to je druga tema... V nadaljevanju bom gor dodal še ta senzor.

Spodaj je programska koda. Za DHT-22 je pred tem treba naložiti knjižnice "Adafruit Unified Sensor" ter "DHT Sensor Library" (preko Sketch, Include Library, Manage Library).

Spodnja koda izpiše tri stolpce, v prvem je (surova) vrednost plina, v drugem vlaga, v tretjem temperatura (na eno decimalko). Podatki se izpisujejo na serijsko konzolo in preko Bluetootha. Za branje Bluetootha lahko uporabimo aplikacijo Bluetooth Terminal za Android. V delu je še Python aplikacija za branje podatkov in risanje real-time grafa...


Koda: Izberi vse
/* Arduino code for using MQ-x GAS sensors and DHT-22 humidity and temperature sensor.
 *  Output is to serial console (tty/USB0) and via Bluetooth.
 *  Code runs on Arduino Nano (ATMega328).

 *  MQ-x sensor connection
 *  ======================
 *  [MQ-x sensor - Arduino Nano]
 *  GND - GND
 *  VCC - 5V
 *  A0 - A0

 *  Bluetooth module connection
 *  ===========================
 *  [HC-05 module - Arduino Nano]
 *  RXD - D11
 *  TXD - D10
 *  GND - GND
 *  VCC - 5V

 *  DHT-22 (AM2302) sensor connection
 *  =================================
 *  [DHT-22 sensor - Arduino Nano]
 *  "+" - 5v
 *  out - D2
 *  "-" - GND

 *  Battery connection
 *  ==================
 *  [battery pack - Arduino Nano]
 *  "+" - VIN
 *  "-" - GND
*/

// Please install libraries: "Adafruit Unified Sensor" and "DHT Sensor Library"
// Installation via IDE: Sketch, Include Library, Manage Library

#include <SoftwareSerial.h>  // import the serial library
#include <DHT.h>  // import the DHT library

#define DHTPIN 2  // DHT sensor is connected to D2 pin
#define DHTTYPE DHT22  // we use DHT 22  (AM2302) sensor

const int MQxPin = A0;  // GAS sensor is connected to A0 pin

int gasvalue;

SoftwareSerial BTModule(10, 11); // Bluetooth module Rx and Tx pins

DHT dht(DHTPIN, DHTTYPE);  // initialize DHT sensor...

void setup()
{
  Serial.begin(9600);  // initialize serial port (9600 bps)
  Serial.println("Gas sensor value (raw value), humidity (in %), temperature (in *C)");
  BTModule.begin(9600);
  BTModule.println("Gas sensor value (raw value), humidity (in %), temperature (in *C)");
}

void loop()
{
  // read the gas value
  gasvalue = analogRead(MQxPin);

  // read humidity (it takes about 250 milliseconds, sensor readings may also be up to 2 seconds 'old', because sensor is slow)
  float h = dht.readHumidity();
  // read temperature as Celsius
  float t = dht.readTemperature();

  // check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t)) {
    //Serial.println("Cannot read data from sensor.");
    return;
  }

  // print values to serial console and to Bluetooth
  Serial.print(gasvalue);
  Serial.print(", ");
  Serial.print(round(h),0);
  Serial.print(", ");
  Serial.println(t,1);
  BTModule.print(gasvalue);
  BTModule.print(", ");
  BTModule.print(round(h),0);
  BTModule.print(", ");
  BTModule.println(t,1);

  delay(1000); // wait 1 sec...
}
Matthai
 
Prispevkov: 13
Pridružen: 07 Okt 2016, 11:31
Zahvalil se je: 0 krat
Prejel zahvalo: 4 krat
Uporabnika povabil: BraneZ
Število neizkoriščenih povabil: 4

Re: Merjenje plinov, vlage in temperature

OdgovorNapisal/-a s54mtb » 15 Maj 2017, 12:46

Kako pa skalibriras senzorje?

Brez zamere ampak neskalibriran senzor je neuporaben.
s54mtb
 
Prispevkov: 6078
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 823 krat
Prejel zahvalo: 1891 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 23

Re: Merjenje plinov, vlage in temperature

OdgovorNapisal/-a Matthai » 15 Maj 2017, 12:52

Kolikor berem tule, naj bi bili že skalibrirani:
http://www.instructables.com/id/DHT22-Humidity-Sensor/

Za pline pa dobim ven samo surovo vrednost... tisto bom moral še preračunati v ppm.
Matthai
 
Prispevkov: 13
Pridružen: 07 Okt 2016, 11:31
Zahvalil se je: 0 krat
Prejel zahvalo: 4 krat
Uporabnika povabil: BraneZ
Število neizkoriščenih povabil: 4

Re: Merjenje plinov, vlage in temperature

OdgovorNapisal/-a s54mtb » 15 Maj 2017, 13:28

Sprasujem zato, kar npr figaro senzorji ze dajo od sebe kar ppm/ppb. Ce prav razumem, moras pri teh surovih delat kalibracijo sam. Za to pa rabis referencne pline. Se priporocam za nformacije o tem, kako bos to naredil.
s54mtb
 
Prispevkov: 6078
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 823 krat
Prejel zahvalo: 1891 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 23

Re: Merjenje plinov, vlage in temperature

OdgovorNapisal/-a Matthai » 15 Maj 2017, 13:45

Nekje na spletu sem sicer našel neko kodo, ki dela ta preračun, ampak glede na to, da nisem ravno programer, mi še ni čisto vse jasno. Imel sem idejo, da mi v laboratoriju izmerijo nekaj referenčnih vrednosti in potem naredim pretvorbo. Zadeve so načeloma dosti linearne oziroma je krivulja znana.

Nekaj podobnega bom naredil z Geigerjevim števcem (še en projekt, ki ga imam v izdelavi).

Koliko pa drugače stanejo ti figaro senzorji?
Matthai
 
Prispevkov: 13
Pridružen: 07 Okt 2016, 11:31
Zahvalil se je: 0 krat
Prejel zahvalo: 4 krat
Uporabnika povabil: BraneZ
Število neizkoriščenih povabil: 4

Re: Merjenje plinov, vlage in temperature

OdgovorNapisal/-a s54mtb » 15 Maj 2017, 14:13

Figaro dobiš v maloprodaji na TME. Za kaj več pa lahko dam direktni kontakt od EU izpostave.
s54mtb
 
Prispevkov: 6078
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 823 krat
Prejel zahvalo: 1891 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 23


Vrni se na Arduino

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost