Kein dummes Büro

Ich würde es niemals wagen, einen Artikel über die nächste Implementierung eines Smart Homes mit dem Anschluss von Sensoren für Wasserlecks im Badezimmer und Tracking-Systemen für Katzentricks in der Wohnung zu schreiben. Gott sei Dank ist die Katze unter der Kontrolle eines Hundes, das Wasser scheint auch nicht zu fließen. Trotzdem arbeiten wir mehr in verschiedenen Büros, in denen es nicht immer möglich ist, ein optimales Arbeitsumfeld zu schaffen. Der Artikel widmet sich dem Umweltüberwachungssystem des Arbeitsbereichs im Büro und den Aktivitäten, die wir nach einem Monat (überraschend) stabiler Arbeit durchgeführt haben. Natürlich senden wir alle Daten in die Clouds, betrachten sie von unseren Smartphones aus, es gibt keinen Nutzen, aber es gibt keinen Grund, sich mit Verwandten und Freunden zu rühmen, und das Büro ist komfortabler geworden. Alles ist auf ESP8266 implementiert, aber wie - Sie sind unter cat willkommen)



Wo ist der Monitor?
Ich werde nicht sagen, dass wir direkt unter unerträglichen Bedingungen arbeiten. Die Büros in der Firma sind wunderbar, in Räumen von drei Personen, viele Blumen. Das Gebäude selbst ist von Wald umgeben. Im Allgemeinen wird ein Panorama des Büros beigefügt, in dem das Überwachungssystem bereitgestellt wird.


Was ist Überwachung?
Nichts Originelles. Wir entfernen die Temperatur im Büro, Luftfeuchtigkeit, Druck und CO2-Gehalt. Natürlich wurde dem System ein Lichtsensor hinzugefügt. Das Beleuchtungsniveau von Arbeitsplätzen unterliegt sogar der Kontrolle und sollte in unserem Fall zwischen 300 und 400 Lux liegen. Vielleicht ist dies der wichtigste Parameter für komfortables Arbeiten. Und das dynamischste während des Tages.


Wir erhalten Temperatur und Luftfeuchtigkeit vom DHT22-Sensor. Beschreibung des Sensors.


Wir nehmen Druck vom BMP180-Sensor. Beschreibung des Sensors.


Der CO2-Gehalt wird vom optischen Sensor MH-Z14 überwacht. Beschreibung des Sensors.


Nun, der TSL2561-Sensor in Form eines Typenschilds für die Arduino GROVE-Serie überwacht die Lichtqualität. Beschreibung hier .


Und schließlich steuert der ESP8266-Controller in Form eines Taschentuchs für das Rapid Prototyping von NodeMcu (mit dem Namen der Firmware), das in meinem Fall von der Standard-Arduino-IDE geflasht wird, alles.


Wir sammeln die Box-Version
Also sind alle Sensoren auf dem Tisch ausgelegt - es ist Zeit, das Gerät zusammenzubauen. Zunächst werden wir jedoch einige Feinheiten analysieren. Zur Verdeutlichung ein schematisches Diagramm skizziert.


Hier werden alle Sensoren mit +3,3 V betrieben, was wir von der NodeMcu-Karte nehmen werden, da bereits drei davon auf der Karte sind. Der Kohlendioxidsensor muss jedoch separat mit Strom versorgt werden, er benötigt 4 bis 6 Volt Strom, und der Hersteller empfiehlt dringend, dies besonders zu beachten. Da ich vorhabe, das Gerät über + 5V von einem separaten Netzteil mit Strom zu versorgen, treten keine Probleme auf. Wir versorgen Klemme 1 des MH-Z14-Sensors mit Strom (oder 15, da sie doppelt vorhanden sind). Wenn Sie den Sensor für ein paar Minuten einschalten, wird beim Senden über die TX / RX-Leitung kein Müll an den Port ausgegeben. Daher nehme ich das nützliche Signal von diesem Sensor vom PWM-Ausgang auf der 6. Etappe. Im Allgemeinen hat mir dieser Sensor gefallen. Es ist ziemlich stabil, hat einen digitalen und einen analogen Ausgang, kann aber nur mit Mikrocontrollern mit Drei-Volt-Logik arbeiten. Führen Sie es beispielsweise auf UNO ohne ausTanzen mit Tamburinen Koordination der logischen Ebenen wird nicht funktionieren. In unserem Fall läuft das ESP wie alle anderen Sensoren mit Drei-Volt-Logik. Gleichzeitig ist das ESP selbst in Bezug auf die Stromqualität besonders wählerisch, aber auf der Karte, die ich in diesem Artikel verwendet habe, ist das normale Schema zur Stabilisierung der Eingangsleistung auf +3,3 V zusammengestellt, aber ich würde nicht empfehlen, die Karte von zweifelhaften IPs zu speisen, und würde es überhaupt nicht geben wäre mehr als 5 Volt. Wir werden auch keine vollständig zusammengebaute Schaltung debuggen und sie nur über einen USB-Anschluss mit Strom versorgen. Da der Kohlendioxidsensor aufgrund des Vorhandenseins einer Glühbirne (wahrscheinlich als IR-Quelle) in seinem Design einen hohen Verbrauch hat, kann dies den Anschluss drücken. Brauchen wir es?). Daher füllen wir die Firmware mit dem mitgelieferten Netzteil eines Drittanbieters oder über USB aus, trennen jedoch den Kohlendioxidsensor.

Es ist nicht ohne Lötkolben ...
Wie Sie dem Diagramm entnehmen können, verwende ich zwei Sensoren an der i2c-Leitung. Dies ist ein Drucksensor und ein Lichtsensor. Wie Sie wissen , können Sie an einem seriellen Bus bis zu 127 Sensoren und Geräte aller Art "aufhängen". Bei der Implementierung des Protokolls sollten die SDA / SCL-Leitungen nur einmal mit Strom versorgt werden. Und wenn wir N Sensoren aufhängen, in denen sich jeweils Klammern befinden, können Sie eine Linie pflanzen. Wahrscheinlich wäre mit den beiden Sensoren nichts passiert - aber ich bin immer konsequent im Design. Es sollte keinen Zahn geben - sorry ... Deshalb werden wir die Pull-up-Widerstände in einem der Sensoren los. Es war bequemer, die Widerstände aus dem Drucksensor herauszureißen. Die Abbildung zeigt.

Nach all diesen Übungen sammeln wir unsere Box-Version. In einer Papierbox)

Was überrascht - es hat sofort funktioniert. Das ist nicht gut, aber trotzdem.

Wir verdauen Daten.
Die Ideologie ist also diese. Wir sammeln Daten von Sensoren und legen sie beispielsweise alle 10 Minuten über Office-WLAN im Cloud-Speicher ab. Wir erstellen wunderschöne Grafiken und analysieren die Ergebnisse von Thingspeak.com. Der Service ist kostenlos, ziemlich stabil und leicht zu verstehen. Über ihn viele geschrieben . Wir registrieren den Kanal, erhalten den API-Schlüssel und setzen die Daten von allen Sensoren mithilfe der POST-Methode zurück.

Programmcode
//    ,     
#include <Wire.h>
#include <ESP8266WiFi.h> //     ,    
float index_comfort=0; //   

//+++++++++++++++++++++++++++++++++++++++++++++++++++

//   ,    
//   
#include "DHT.h"
#define DHTTYPE DHT22  //   - Grove DHT22
#define DHTPIN 14     //  14  ESP (   D5)  . 

//       
float humidity_room = 0.0; //     
//  humidity_room = dht.readHumidity();
float temp_room = 0.0; //     
//  temp_room = dht.readTemperature();

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

//++++++++++++++++++++++++++++++++++++++++++++++++++++

//     
#include <Digital_Light_TSL2561.h>
//      
float light_room=0.0;
//  light_room=TSL2561.readVisibleLux();


//+++++++++++++++++++++++++++++++++++++++++++++++++++++++

//  C02  
int CO2; //     
int pin_CO2 = 13; //  13,   7 
//  2


//+++++++++++++++++++++++++++++++++++++++++++++++++++++++

//    . 
#include <Adafruit_BMP085.h>
Adafruit_BMP085 bmp;
float pressure =0.0; //   
//  pressure=bmp.readPressure(); 
//   !
// 1013.25 millibar = 101325  = 760  ..   ? ...
//      ,  

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++

//        -
//     thingspeak.com , , ..,  
#define myPeriodic 300; //        
const char* server = "184.106.153.149"; //   thingspeak.com

String apiKey ="1K******************GM"; //   

const char* MY_SSID = "P********x"; //  Wi-Fi  
const char* MY_PWD = ""; //  ,    ,  ""

int sent = 0; //   ()  .  ?  ,  ...

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

//    ,  

void setup() {
  Serial.begin(9600); //    
 
  Serial.println("Go! Go! Go!");
  
  Wire.begin(); 
 
  dht.begin(); //    
 
  TSL2561.init(); //    
 
  pinMode(pin_CO2, INPUT); //    CO2  
 
  //   
 if (!bmp.begin()) {
 Serial.println("Promlem with sensor bmp180!");
  while (1) {}
  }
  //  wi-Fi
 connectWifi();
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++

//       
void connectWifi() 
{
  Serial.print("Connecting to "+*MY_SSID);
 WiFi.begin(MY_SSID, MY_PWD);
 while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
 Serial.print(".");
  }
  
 Serial.println("");
 Serial.println("Connected");
 Serial.println(""); 
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  //   
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  //    
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm"); 
}//end connect

//++++++++++++++++++++++++++++++++++++++++++++++++++++
//    
void send_info(float temp_in, float temp_out, float humidity_in, int CO2_in, float light_in, float pressure_all )
{  
  WiFiClient client;
  
   if (client.connect(server, 80)) { // use ip 184.106.153.149 or api.thingspeak.com
   Serial.println("WiFi Client connected ");
   
   //        
   String postStr = apiKey; //  
   postStr += "&field1=";
   postStr += String(temp_in); //    

   postStr += "&field2=";
   postStr += String(temp_out); //   

   postStr += "&field3=";
   postStr += String(humidity_in); //    

   postStr += "&field4=";
   postStr += String(CO2_in); // 2   

   postStr += "&field5=";
   postStr += String(light_in); //    

   postStr += "&field6=";
   postStr += String(pressure_all); //   
   
   postStr += "\r\n\r\n"; //    
   
   client.print("POST /update HTTP/1.1\n");
   client.print("Host: api.thingspeak.com\n");
   client.print("Connection: close\n");
   client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n");
   client.print("Content-Type: application/x-www-form-urlencoded\n");
   client.print("Content-Length: ");
   client.print(postStr.length());
   client.print("\n\n");
   client.print(postStr);
   delay(1000);  
   }//end if
   sent++; //   
  
 client.stop();
 Serial.println("transmition closed ");
}//end send


//+++++++++++++++++++++++++++++++++++++++++++++++++++++

//    ,   ? 

void loop()
{
 delay(5000);
 // 
 dht.begin();
 humidity_room = dht.readHumidity();
delay(500);

//   
 temp_room = dht.readTemperature();
delay(500);

//   
light_room=TSL2561.readVisibleLux();
delay(500);


// CO2  
 while(digitalRead(pin_CO2)==HIGH){;}
float duration_h = pulseIn(pin_CO2,HIGH)/1000;
 
 CO2= int(5000*(duration_h-2)/(duration_h+(1004-duration_h)-4)); //   
 delay(500);

//  
bmp.begin();
pressure=bmp.readPressure(); 
pressure=int((pressure/101325)*760);
delay(500);

//    
if (temp_room<18) {
  index_comfort=(2*light_room/300)+(400/CO2)+humidity_room/40;
  }

if (temp_room>25) {
  index_comfort=(2*light_room/300)+(400/CO2)+humidity_room/40;
  }

  index_comfort=1+(2*(light_room/300)+(400/CO2)+humidity_room/40);

  if (index_comfort>5){
    index_comfort=5;
    }
  
//    
send_info(temp_room, index_comfort, humidity_room, CO2, light_room, pressure);
  
  //.      
  int count = myPeriodic;
  while(count--)
  delay(1000);

  // ,  .   ...
  // , 
  //
  //       i2c    ,   
  // .     . 
  //     .  .    
  //  ,   .    ,   . 
  //     ,  DHT22,    . 
  // --,     ... 
  // 15  2016 .    
}


Wenn alles richtig funktioniert, wird es so etwas sein)



Damit dies funktioniert, benötigen Sie Bibliotheken für die Arbeit mit ausgewählten Sensoren und eine Bibliothek für die Arbeit mit ESP8266 über WLAN. Sie müssen auch die NodeMcu-Karte zur Liste der Arduino IDE-Karten hinzufügen. Damit der Computer sie sehen kann, benötigen Sie einen USB-SERIAL CH340-Treiber, der problemlos im Netzwerk zu finden und herunterzuladen ist.

Bibliothek für ESP8266 Laden Sie die
Bibliothek für die Arbeit mit einem Feuchtigkeitssensor herunter . Laden Sie die
Bibliothek herunter, um mit dem Lichtsensor zu arbeiten. Laden Sie die
Bibliothek herunter, um mit einem Drucksensor zu arbeiten. Download

Der CO2-Sensor benötigt keine Bibliotheken. Die Anzeigen werden anhand der Dauer des von PWM kommenden Impulsausgangs berechnet und anhand der Formel aus der Beschreibung berechnetSensor. Der Messbereich beträgt übrigens nicht 2000 ppm, sondern 5000 ppm, was übrigens auch vom Benutzer Hellsy22 in einem kürzlich erschienenen Artikel über einen ähnlichen Kohlendioxidsensor geschrieben wurde.

Organisatorische Schlussfolgerungen
1. Arbeiten
2. Das Handwerk ist es wert, aus einer Schachtel Papier in ein anständiges Gebäude zu ziehen.
Hier ist es. Es wird wie eine Ampel sein, um den Komfort im Büro zu zeigen.


3. Abends ist nicht viel Licht im Büro - sie haben ein paar Deckenleuchten hinzugefügt. Es wurde besser. 350 lx
4. Die Putzfrau arbeitet wirklich. Kommt früh am Morgen, macht das Licht an, die Nassreinigung sorgt für eine halbe Stunde Feuchtigkeitsschub im Büro. Nicht viel, aber dennoch ...
5. Nach zwei Stunden Arbeit (drei Personen atmen schwer) im Büro sinkt der CO2-Gehalt. Fünf Minuten Lüften korrigieren die Situation auf den Normalwert (500 ppm). Kombinieren Sie (falls gewünscht) Lüften mit Gymnastik)))
6. Sehr trocken. Das Heizen im Winter ist natürlich der direkte Grund. Es ist nicht möglich, eine angenehme Luftfeuchtigkeit von 40-50% zu erreichen. Blumen im Büro geben der Luftfeuchtigkeit jedoch im Vergleich zu einem ähnlichen Raum ohne Blumen einen Plus von 10 Prozent. Vergessen Sie natürlich nicht, sie zu gießen. Übrigens braucht man 10-12 Liter Wasser, um die Blumen zu gießen. Das Büro hat 13 Blumentöpfe. Zweimal pro Woche gießen.
7. Der Nutzen davon in allem ist offen gesagt nicht genug. Zum Beispiel wären solche Systeme für Schulklassen oder eine Klinik wahrscheinlich nützlicher.

Source: https://habr.com/ru/post/de391399/


All Articles