ليس مكتب غبي

لن أجرؤ أبدًا على كتابة مقال حول التنفيذ التالي لمنزل ذكي مع توصيل أجهزة استشعار لتسرب المياه في الحمام وأنظمة تتبع حيل القطط في الشقة. الحمد لله أن القطة تحت سيطرة الكلب ، لا يبدو أن الماء يتدفق أيضًا. ولكن مع ذلك ، فنحن نعمل أكثر في مكاتب مختلفة ، حيث لا يمكن دائمًا خلق بيئة عمل مثالية. المقال مخصص لنظام المراقبة البيئية لمساحة العمل في المكتب وللأنشطة التي قمنا بها بعد شهر من عمله المستقر (بشكل مدهش). بالطبع ، نرسل جميع البيانات إلى السحب ، وننظر إليها من هواتفنا الذكية ، ولا فائدة منها ، ولكن لا يوجد سبب للتفاخر بالأقارب والأصدقاء ، وأصبح المكتب أكثر راحة. يتم تنفيذ كل شيء على ESP8266 ، ولكن كيف - نرحب بك تحت القط)



أين الشاشة؟
لن أقول أننا نعمل مباشرة في ظروف لا تطاق. المكاتب في الشركة رائعة ، في غرف ثلاثة أشخاص ، الكثير من الزهور. المبنى نفسه محاط بالغابات. بشكل عام ، يتم إرفاق بانوراما للمكتب حيث يتم نشر نظام المراقبة.


ما هو الرصد؟
لا شيء أصلي. نزيل درجة الحرارة في المكتب والرطوبة والضغط ومستوى ثاني أكسيد الكربون. بالطبع ، تمت إضافة مستشعر الضوء إلى النظام. يخضع مستوى إضاءة أماكن العمل للمراقبة ويجب أن يكون في حالتنا عند مستوى 300-400 لوكس. ربما هذه هي أهم معلمة للعمل المريح. والأكثر ديناميكية خلال النهار.


نحصل على درجة الحرارة والرطوبة من مستشعر DHT22. وصف المستشعر.


نتحمل الضغط من جهاز استشعار BMP180. وصف المستشعر.


يتم مراقبة مستوى ثاني أكسيد الكربون بواسطة المستشعر الضوئي MH-Z14. وصف المستشعر.


حسنًا ، يعمل مستشعر TSL2561 على شكل لوحة اسم لسلسلة Arduino GROVE على مراقبة جودة الإضاءة. الوصف هنا .


وأخيرًا ، فإن وحدة تحكم ESP8266 على شكل منديل للنماذج الأولية السريعة لـ NodeMcu (باسم البرنامج الثابت) ، والتي يتم في حالتي تومض من معيار Arduino IDE ، توجه كل شيء.


نقوم بجمع النسخة المعبأة
، لذلك ، يتم وضع جميع أجهزة الاستشعار على الطاولة - حان الوقت لتجميع الجهاز. ومع ذلك ، كبداية سنقوم بتحليل بعض التفاصيل الدقيقة. رسم مخطط تخطيطي للوضوح.


هنا يتم تشغيل جميع أجهزة الاستشعار من +3.3 فولت ، والتي سنأخذها من لوحة NodeMcu ، حيث يوجد ثلاثة منها بالفعل على اللوحة. ولكن يجب تشغيل مستشعر ثاني أكسيد الكربون بشكل منفصل ، ويتطلب 4-6 فولت من الطاقة ، وتوصي الشركة المصنعة بشدة بإيلاء اهتمام خاص لذلك. نظرًا لأنني أخطط لتشغيل الجهاز من مصدر طاقة منفصل عند + 5 فولت ، فلن تكون هناك مشاكل. نقوم بتزويد المحطة 1 من مستشعر MH-Z14 بالطاقة (أو 15 ، نظرًا لأنها مكررة). عند تشغيل المستشعر لبضع دقائق ، فإنه يعطي أي قمامة للمنفذ عند الإرسال عبر خط TX / RX ، لذلك أقوم بإشارة مفيدة من هذا المستشعر من إخراج PWM على المحطة السادسة. بشكل عام ، أحببت هذا المستشعر. إنه مستقر تمامًا ، ولديه إخراج رقمي وتماثلي ، ولكن يمكن أن يعمل فقط مع وحدات التحكم الدقيقة ذات المنطق ثلاثي فولت ، لذلك قم بتشغيله ، على سبيل المثال ، على UNO بدونالرقص مع تنسيق الدف على المستويات المنطقية لن ينجح. في حالتنا ، يعمل ESP على منطق ثلاثة فولت ، مثل جميع أجهزة الاستشعار الأخرى. في نفس الوقت ، ESP نفسه صعب الإرضاء بشكل خاص حول جودة الطاقة ، ولكن على اللوحة التي استخدمتها في هذه المقالة ، يتم تجميع المخطط العادي لتثبيت طاقة الإدخال حتى +3.3 فولت ، ولكن ما زلت لا أنصح المجلس من أي عنوان IP مشكوك فيه سيكون أكثر من 5 فولت. لن نقوم أيضًا بتصحيح دائرة مجمعة بالكامل ، ونقوم بتشغيلها فقط من منفذ USB. نظرًا لأن مستشعر ثاني أكسيد الكربون يستهلك بشكل كبير نظرًا لوجود مصباح إضاءة متوهج (كمصدر للأشعة تحت الحمراء ، على الأرجح) في تصميمه ، فقد يؤدي ذلك إلى دفع المنفذ. هل نحتاجها؟). لذلك ، نملأ البرامج الثابتة بمزود طاقة تابع لجهة خارجية ، أو عبر USB ، ولكن مع فصل مستشعر ثاني أكسيد الكربون.

إنه لا يخلو من لحام الحديد ...
كما ترى من الرسم البياني ، أستخدم مستشعرين على خط i2c. هذا جهاز استشعار الضغط وجهاز استشعار الضوء. كما تعلم ، في "الناقل التسلسلي" يمكنك "تعليق" ما يصل إلى 127 جميع أنواع أجهزة الاستشعار والأجهزة. في تنفيذ البروتوكول ، يجب تشديد خطوط SDA / SCL إلى السلطة ، ولكن مرة واحدة فقط. وإذا قمنا بتعليق أجهزة استشعار N ، في كل منها يوجد أقواس - يمكنك زرع خط. ربما لم يحدث شيء من المستشعرين - لكنني دائمًا متسق في التصميم. يجب ألا يكون هناك أسنان - آسف ... لذلك ، نتخلص من مقاومات السحب في أحد أجهزة الاستشعار. كان أكثر ملاءمة لتمزيق المقاومات خارج مستشعر الضغط. يظهر الشكل.

بعد كل هذه التدريبات ، نجمع نسختنا المعبأة. في صندوق ورقي)

ما يثير الدهشة - عملت على الفور. هذا ليس جيدًا ، لكنه لا يزال.

نحن نلخص البيانات
، لذا فإن الأيديولوجية هي هذه. نقوم بجمع البيانات من أجهزة الاستشعار ، على سبيل المثال ، كل 10 دقائق ، نقوم بإسقاطها في التخزين السحابي عبر شبكة Wi-Fi في المكتب. نحن نبني الرسوم البيانية الجميلة ونحلل النتائج من Thingspeak.com. الخدمة مجانية ومستقرة إلى حد ما وسهلة الفهم. لقد كتب عنه الكثير . نقوم بتسجيل القناة والحصول على مفتاح API وإعادة تعيين البيانات من أي أجهزة استشعار باستخدام طريقة POST.

كود البرنامج
//    ,     
#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 .    
}


إذا كان كل شيء يعمل بشكل صحيح ، فسيكون شيئًا كهذا)



لكي يعمل هذا ، ستحتاج إلى مكتبات للعمل مع أجهزة استشعار محددة ومكتبة للعمل مع ESP8266 عبر Wi-Fi. تحتاج أيضًا إلى إضافة لوحة NodeMcu إلى قائمة لوحات Arduino IDE ، ولرؤية الكمبيوتر ، تحتاج إلى برنامج تشغيل USB-SERIAL CH340 ، والذي يسهل العثور عليه وتنزيله على الشبكة دون أي مشاكل.

Library for ESP8266 Download
Library للعمل بجهاز استشعار الرطوبة. تنزيل
مكتبة للعمل مع مستشعر الضوء. تنزيل
مكتبة للعمل مع مستشعر ضغط. تنزيل

لا يحتاج مستشعر CO2 إلى مكتبات. يتم حساب المؤشرات حسب مدة خرج النبضة القادمة من PWM ويتم حسابها بواسطة الصيغة من الوصفجهاز استشعار. بالمناسبة ، فإن نطاق القياس ليس 2000 جزء في المليون ، ولكن 5000 ، والتي بالمناسبة ، كتبها المستخدم Hellsy22 في مقالة حديثة حول جهاز استشعار ثاني أكسيد الكربون مماثل.

الاستنتاجات التنظيمية
1. الأعمال
2. يستحق الحرف الانتقال من صندوق الورق إلى مبنى لائق.
ها هي. سيكون بمثابة إشارة ضوئية لإظهار مستوى الراحة في المكتب.


3. لا يوجد الكثير من الضوء في المكتب في المساء - أضافوا بعض أضواء السقف. لقد تحسن. 350 لتر
4. تعمل سيدة التنظيف حقا. يأتي في الصباح الباكر ، يضيء الضوء ، التنظيف الرطب يعطي زيادة في الرطوبة في المكتب لمدة نصف ساعة. ليس كثيرًا ، ولكن لا يزال ...
5. بعد ساعتين من العمل (ثلاثة أشخاص يتنفسون بصعوبة) في المكتب ، ينخفض ​​مستوى ثاني أكسيد الكربون. يعمل البث لمدة خمس دقائق على تصحيح الحالة إلى الوضع العادي (500 جزء في المليون). الجمع بين البث (إذا رغبت) مع الجمباز)))
6. جاف جدا. التدفئة في الشتاء ، بالطبع ، هي السبب المباشر. لا يمكن الوصول إلى رطوبة مريحة بنسبة 40-50٪. ومع ذلك ، فإن الزهور في المكتب تعطي بالفعل نسبة 10 في المائة للرطوبة مقارنة بغرفة مماثلة بدون زهور. لا تنس أن تسقيهم بالطبع). بالمناسبة ، يستغرق 10-12 لترًا من الماء لسقي الزهور. يحتوي المكتب على 13 أواني زهور. الماء مرتين في الأسبوع.
7. فائدة هذا في كل شيء ، بصراحة ، ليست كافية. ومع ذلك ، على سبيل المثال ، بالنسبة للفصول المدرسية أو العيادة ، قد تكون هذه الأنظمة أكثر فائدة.

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


All Articles