Home Monitor – CO2, teplota a vlhkost

Home Monitor - CO2

Chiptron.cz využil naší microESP desku s čidlem CO2 a sepsal o tomto zařízení článek. Za sepsání článku a sdílení dokumentace děkujeme. 

Rozhodl jsem si postavit svůj vlastní ekosystém malých a nenápadných zařízení, ze kterých budu odesílat data na server. Teplota, tlak, hluk, CO2, koncentraci prachových částic atd.

Celý koncept jsem založil na desce od LaskaKit s názvem MicroESP, která je osazena modulem EPS12 a navíc obsahuje i nabíjecí obvod třeba ze solárního panelu nebo jiného zdroje přes dvoupinový konektor.

Jako vstup slouží čtyřpinový konektor se dvěma GPIO a napájením s 3.3V. Dva GPIO jsou vybrány jako výchozí pro I2C, ale pokud I2C nechceš, můžeš je použít prostě jako GPIO nebo 1-wire sběrnici.

Jako službu, která ukládá a zobrazuje údaje na webu a v aplikaci jsem vybral The IoT Guru Cloud.

MicroESP

MicroESP

Desku jsem popsal už výše. Maximální nabíjecí napětí je 9V, takže při napájení z solárního panelu je vhodný solár se jmenovitým napětím 5 nebo 6V. Nabíjecí proud může být až 400 mA a je dán hodnotou R11.

Více informací se dozvíte přímo na githubu laskarduino. 

https://github.com/LaskaKit/microESP

Celá deska je velmi úsporná a samotná deska v režimu nejhlubšího spánku dosahuje spotřeby asi 25 uA.

The IoT Guru Cloud

The IoT Guru Cloud je služba, které ukládá data, která pošlu přes HTTP GET request (podporuje i MQTT), zároveň je mohu i přečíst (opět HTTP nebo MQTT).

Služba může a nemusí být placená a záleží jen na tobě, jestli jestli chceš data veřejná či nikoliv a jak dlouho mají být uchovávána.

The IoT Guru Cloud

Služba se skládá ze Zařízení – Uzlů a Polí. 

The IoT Guru Cloud má spoustu přehledných návodů, jak jejich službu využívat. V Arduino knihovnách najdeš i knihovnu pro použití The IoT Guru Cloud, takže použití je neskutečně snadné.

https://iotguru.cloud/tutorials

Home monitor

CO2 čidlo – SCD41

Jako čidlo jsem vybral SCD41, které má I2C sběrnici, je možné ho napájet z 3.3V, je velmi úsporné – vhodné na bateriové napájení.

O SCD41 jsem se rozepsal v tomto článku https://chiptron.cz/articles.php?article_id=294

Využil jsem oficiálního vývojového kitu od Sensirion, ale další verze bude s modulem přímo od laskakit.cz.

Krabička

Krabičku jsem navrhl v primitivním návrhovém online “programu” tinkercad. Krabička se skládá ze třech částí – krabičky, víka a krytu na čidlo. Jejich spojení jsem docílil pomocí malých 2mm vrutů. 

Krabička se dobře tiskne a je potřeba pouze jedna podpěra u krabičky zařízení.

Menší krabička

Vytvořil jsem menší a větší krabičku lišící se velikostí baterie. Menší krabička je uzpůsobena pro baterii o velikosti 48x30x6 mm s kapacitou 900 mAh.

Větší krabička

Větší krabička je navržena pro větší baterii – 2500 mAh o velikosti 50x40x10 a jemu podobné. 

Větší kapacita se hodí pro čidlo CO2 i přesto, že SCD41 je velmi úsporné. Výdrž závisí od intervalu měření a připojování se na Wi-Fi.

Pokud budeš mít zájem o stl soubor na některou z krabiček, napiš nám na náš mail a my ti jej rádi zašleme.

Propojení

Propojení microESP a SCD41 je naprosto triviální. Prostě jen zapájíš čtyři drátky mezi microESP a SCD41, k microESP můžeš zapájet i konektor s roztečí 2.54mm nebo prostě jen hřebínek. To samé platí pro vstup ze solárního panelu (nebo uzpůsobené nabíječky).

3.3V – 3.3V

GND – GND

SCL – SCL

SDA – SDA

Pro měření napětí akumulátoru je potřeba propájet pájecí propojku ADC na desce. Stejně tak je nutné propájet i pájecí propojku SLEEP pro povolení probuzení.

Výstup dat

Jak jsem zmínil výše, data posílám na The IoT Guru Cloud. K hodnotám z čidel se dostaneš buď přes webové rozhraní, pomocí jejich aplikace pro chytrý telefon, můžeš si je stáhnout MQTT protokolem nebo GET requestem.

Statistiky pro jednotlivá pole jsou zobrazena v graf – 24 hodin, týden, měsíc, rok od počátku věků.

CO2
Napětí akumulátoru

Mobilní aplikace

Mobilní aplikace The IoT Guru Cloud

Kód

/*
* Home Monitor - microESP with CO2 sensor SCD41
*
* Made by chiptron.cz (2021)
*/
 
#include <ESP8266WiFi.h>
#include <IoTGuru.h>
 
#define WakeUpDuration  900 // wake-up duration
 
#include <Wire.h>
#include "SparkFun_SCD4x_Arduino_Library.h" // https://github.com/sparkfun/SparkFun_SCD4x_Arduino_Library
 
SCD4x co2sensor; // CO2 sensor
 
String userShortId    = "userShortID";
String deviceShortId  = "deviceShortID";
String deviceKey      = "deviceKey";
String nodeKey        = "NodeKey";
 
IoTGuru iotGuru = IoTGuru(userShortId, deviceShortId, deviceKey);
 
const char* ssid      = "SSID";
const char* password  = "PASSWORD";
 
void setup() {
  int count = 0;
  int co2 = 0;
  float batV = 0.0;
  
  Serial.begin(115200);
  delay(100);
 
  // Measure battery voltage
  batV = float((analogRead(A0)*1000)/1024); // calculate battery voltage
  batV = float((batV*(100+310))/100); // voltage divider R1 = 100k; R2 = 310k
 
  Serial.print("Battery voltage: "); Serial.print(batV/1000); Serial.println(" V");
 
 
  if(batV <= 3600) // check if the voltage is lower than 3.6V
  {
    Serial.println("LOW BATTERY VOLTAGE");
    Serial.flush();
    ESP.deepSleep(1800 * 1000000, WAKE_RF_DEFAULT);
  }
 
  Wire.begin();
 
  if (co2sensor.begin(false, true) == false)
  {
    Serial.println("SCD41 was not set correctly. Check the connection.");
    Serial.flush();
    delay(100);
    ESP.deepSleep(WakeUpDuration * 1000000, WAKE_RF_DEFAULT); 
  }
 
  if (co2sensor.startLowPowerPeriodicMeasurement() == true)
  {
    Serial.println("Low power mode enabled.");
  }
 
  // Switch to WiFi mode
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
    Serial.print(".");
    if(count >= 20)
    {
      Serial.println("SSID or Password is not valid");
      Serial.flush();
      delay(100);
      ESP.deepSleep(WakeUpDuration * 1000000, WAKE_RF_DEFAULT);  
    }
    count++;
  }
  Serial.println("");
 
  //Set check in duration, the default is 60000 milliseconds.
  iotGuru.setCheckDuration(60000);
  
  //Set the debug printer.
  iotGuru.setDebugPrinter(&Serial);
 
  delay(100);
 
  iotGuru.check();
 
 if (co2sensor.readMeasurement()) // wait for a new data (approx 30s)
  {
    Serial.println();
 
    Serial.print("CO2(ppm):"); Serial.print(co2sensor.getCO2()); Serial.print(" ppm");
 
    Serial.print("\tTemperature(C):"); Serial.print(co2sensor.getTemperature(), 1); Serial.print(" degC");
 
    Serial.print("\tHumidity(%RH):"); Serial.print(co2sensor.getHumidity(), 1); Serial.print(" %RH");
 
    Serial.println();
 
    iotGuru.sendHttpValue(nodeKey, "co2", co2sensor.getCO2());
    iotGuru.sendHttpValue(nodeKey, "vbat", batV/1000);
    iotGuru.sendHttpValue(nodeKey, "temp", co2sensor.getTemperature());
    iotGuru.sendHttpValue(nodeKey, "hum", co2sensor.getHumidity());
  } 
 
  Serial.println("Going to sleep...");
  Serial.flush();
  delay(100);
  ESP.deepSleep(WakeUpDuration * 1000000, WAKE_RF_DEFAULT);  
}
 
void loop() {
  // put your main code here, to run repeatedly:
 
}

Sdílet článek

4 Responses

  1. Dobrý den, mohl bych také poprosit o zaslání .stl souborů do emailu? 🙂 Mockrát děkuji.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Mohlo by se také líbit