Arduino पर "स्मार्ट होम" के लिए इंटरफ़ेस टेम्पलेट - तीसरा भाग

छवि




समझने के लिए, आपको पिछले विषय को पढ़ना चाहिए

हैलो।

इस भाग में, उपस्थिति को थोड़ा बदल दिया जाएगा और एक तापमान (और आर्द्रता) सेंसर जोड़ा जाएगा, ताकि तापमान के आधार पर स्टोव या एयर कंडीशनर को चालू किया जाए, साथ ही एक और बहुत उपयोगी फ़ंक्शन लागू किया जाता है ...
चूंकि हमारे वेब इंटरफ़ेस लगातार डेटा के लिए अनुरोध करते हैं, यह होगा अन्य ग्राहकों के साथ हस्तक्षेप न करने के लिए इसे "स्लीप मोड" पर भेजना अतिश्योक्तिपूर्ण नहीं है।

Onlain ... DHT22

तापमान और आर्द्रता को मापेगा

छवि

Arduin


फर्मवेयर कोड:
#include <EEPROM.h>
#define MAXMILLIS 4294967295
#include "DHT.h"
#define DHTPIN 9 //    
#define DHTTYPE DHT22  
DHT dht(DHTPIN, DHTTYPE);

int hum = 110; // 
int thum = 110; // 

byte d2 = EEPROM.read(2);     //  ( )   EEPROM,  
byte d3 = EEPROM.read(3);
byte d4 = EEPROM.read(4);
int shim1 = EEPROM.read(5); //     EEPROM,  
int shim2 = EEPROM.read(6);
byte d7 = 0; 
byte d8 = 0;
byte d11 = EEPROM.read(11);
byte d12 = EEPROM.read(12);
byte d13 = EEPROM.read(13);

int oxlagdenie = EEPROM.read(14); //     
int toxl = EEPROM.read(15); //  

int podogrev = EEPROM.read(16); //     
int tpod = EEPROM.read(17); //  

byte descript[5]; // 

unsigned long   time; // 

long timelapsed = 0;

byte count=0; //  

void setup() 
{
  Serial.begin(57600);
  pinMode(2, OUTPUT); 
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT); // 
  pinMode(6, OUTPUT); // 
  pinMode(7, OUTPUT); // 
  pinMode(8, OUTPUT); //  
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  
  thum = dht.readTemperature(); //  ,     ,        
  hum = dht.readHumidity(); //  
  
  if(d2) digitalWrite(2, HIGH); else digitalWrite(2, LOW); //    d2  ,  ,  ,   
  delay(500); //     ,  
  if(d3) digitalWrite(3, HIGH); else digitalWrite(3, LOW);
  delay(500);
  if(d4) digitalWrite(4, HIGH); else digitalWrite(4, LOW);
  delay(500);
  analogWrite(5, shim1 * 2.55); //   d5
  delay(500);
  analogWrite(6, shim2 * 2.55); //   d6
  delay(500);
  if(d11) digitalWrite(11, HIGH); else digitalWrite(11, LOW);
  delay(500);
  if(d12) digitalWrite(12, HIGH); else digitalWrite(12, LOW);
  delay(500);
  if(d13) digitalWrite(13, HIGH); else digitalWrite(13, LOW);
}
  
void loop() 
{  
  if (Serial.available()>4) //     
   {
    if (Serial.read()=='Y') //   ,   'Y',   ,  ,     
     {
      for (byte i=0; i < 5; i++)
        {
           descript[i] = Serial.read(); //       
        } 
        
    if((descript[0] =='+') && (descript[1] =='=') && (descript[2] =='Z')) //  
     {
      switch (descript[3])
       {
         case 'o': // 
         glavnaia(); //  
         break;
         
         //////////////  ///////////////////
         case 'A': // d2 
         digitalWrite(2, HIGH); //  d2
         d2 = 1; //     ()
         EEPROM.write(2, d2); //   d2   №2 EEPROM 
         glavnaia(); //  
         break;
         
         case 'a': // d2 
         digitalWrite(2, LOW); //  d2
         d2 = 0; //     ()
         EEPROM.write(2, d2); //   d2   №2 EEPROM 
         glavnaia(); //  
         break; 
 
         case 'B': // d3
         digitalWrite(3, HIGH);
         d3 = 1;
         EEPROM.write(3, d3);
         glavnaia();
         break;
         
         case 'b': // d3
         digitalWrite(3, LOW);
         d3 = 0;
         EEPROM.write(3, d3);
         glavnaia();
         break;          
  
         case 'C': // d4
         digitalWrite(4, HIGH);
         d4 = 1;
         EEPROM.write(4, d4);
         glavnaia();
         break;
         
         case 'c': // d4
         digitalWrite(4, LOW);
         d4 = 0;
         EEPROM.write(4, d4);
         glavnaia();
         break;   
         
         ///////////////  ///////////////
         case 'D': // d5  shim1
         shim1++;
         if(shim1 > 100) shim1 = 100;
         EEPROM.write(5, shim1);
         analogWrite(5, shim1 * 2.55);
         glavnaia();
         break;
         
         case 'd': // d5  shim1
         shim1--;
         if(shim1 < 1) shim1 = 0;
         EEPROM.write(5, shim1);
         analogWrite(5, shim1 * 2.55);
         glavnaia();
         break; 
  
         case 'E': // d6  shim2
         shim2++;
         if(shim2 > 100) shim2 = 100;
         EEPROM.write(6, shim2);
         analogWrite(6, shim2 * 2.55);
         glavnaia();
         break;
         
         case 'e': // d6  shim2
         shim2--;
         if(shim2 < 1) shim2 = 0;
         EEPROM.write(6, shim2);
         analogWrite(6, shim2 * 2.55);
         glavnaia();
         break;   
  
         case 'F': //     D5
         shim1 = EEPROM.read(5); //     EEPROM
         analogWrite(5, shim1 * 2.55); //   D5
         glavnaia();
         break;
         
         case 'f': //     D5
         shim1 = 0;
         analogWrite(5, shim1); //   D5,     EEPROM
         glavnaia();
         break;  
 
         case 'G': //     D6
         shim2 = EEPROM.read(6); //     EEPROM
         analogWrite(6, shim2 * 2.55); //   D6
         glavnaia();
         break;
         
         case 'g': //     D6
         shim2 = 0;
         analogWrite(6, shim2); //   D6,     EEPROM
         glavnaia();
         break;  
         
         //////////////// //////////////////
         case 'J': // d11
         digitalWrite(11, HIGH);
         d11 = 1;
         EEPROM.write(11, d11);
         glavnaia();
         break;
         
         case 'j': // d11
         digitalWrite(11, LOW);
         d11 = 0;
         EEPROM.write(11, d11);
         glavnaia();
         break;  
        
         case 'K': // d12
         digitalWrite(12, HIGH);
         d12 = 1;
         EEPROM.write(12, d12);
         glavnaia();
         break;
         
         case 'k': // d12
         digitalWrite(12, LOW);
         d12 = 0;
         EEPROM.write(12, d12);
         glavnaia();
         break;         
      
         case 'M': // d13
         digitalWrite(13, HIGH);
         d13 = 1;
         EEPROM.write(13, d13);
         glavnaia();
         break;
         
         case 'm': // d13
         digitalWrite(13, LOW);
         d13 = 0;
         EEPROM.write(13, d13);
         glavnaia();
         break;
         
         //////////////  /////////////////
         case 'N': //  "  "
         oxlagdenie++; //  "  "  ,       
         EEPROM.write(14, oxlagdenie); //    
         toxl = 1; //  
         EEPROM.write(15, toxl); //    
         glavnaia();
         break;
         
         case 'n': //  "  "
         oxlagdenie--;
         if(oxlagdenie < 1) //  "  " = 0,   
            {
               oxlagdenie = 0; //  ,    
               toxl = 0; //  
               EEPROM.write(14, oxlagdenie); //    
               EEPROM.write(15, toxl); //    
               digitalWrite(7, LOW); // 
               d7 = 0; 
            }
         glavnaia();
         break;  
  
         //////////////  /////////////////
         case 'P': //  "  "
         podogrev++; //  "  "  ,       
         EEPROM.write(16, podogrev); //    
         tpod = 1; //  
         EEPROM.write(17, tpod); //    
         glavnaia();
         break;
         
         case 'p': //  "  "
         podogrev--;
         if(podogrev < 1) //  "  " = 0,   
            {
               podogrev = 0; //  ,    
               tpod = 0; //  
               EEPROM.write(16, podogrev); //    
               EEPROM.write(17, tpod); //    
               digitalWrite(8, LOW); // 
               d8 = 0; 
            }
         glavnaia();
         break;  
  
         default:
         glavnaia();
       }
     }
   
    else //   ,   
      {
        for(byte i=0; i < 255; i++) 
         {
           Serial.read();    
         } 
      } 
     }    //  if (Serial.read()=='Y')
   }    //   
 
 
 unsigned long currtime = millis(); 
 
 if(currtime > time) timelapsed = (currtime - time); 
 
 else timelapsed = (MAXMILLIS - time + currtime);

 if(timelapsed >= 120000)  //      2 
   { 
     time = currtime;
     count++;
     //      ~ 250  (    ),      ,     
     if(count == 1)  thum = dht.readTemperature(); //  .   = 250 .
     if(count == 2)  hum = dht.readHumidity(); //  ,   ,   .   = 250 
     if(count > 1) count=0;
 
   ///////////////////////  ///////////////////////   
       if((thum > oxlagdenie) && (toxl == 1)) //        = 1,    (  = 0,    )
         {                                  
           digitalWrite(7, HIGH); //                          
           d7 = 1;                          
         }
   
       else if(toxl == 1) //      = 1,                                      
         {
           digitalWrite(7, LOW); //    
           d7 = 0;
         }  
        
   ///////////////////////  ////////////////////////
       if((thum < podogrev) && (tpod == 1)) //        = 1,    (  = 0,    )  
         {                                
           digitalWrite(8, HIGH); //                        
           d8 = 1;                       
         }
   
       else if(tpod == 1) //      = 1,   
         {
           digitalWrite(8, LOW); //   
           d8 = 0;
         }
         
   } //    
   
 } //  loop

void glavnaia() //  
 {
      Serial.print(d2);//0
      Serial.print(",");
      Serial.print(d3);//1
      Serial.print(",");
      Serial.print(d4);//2
      Serial.print(",");
      Serial.print(0);//3  //   ,   
      Serial.print(",");
      Serial.print(0);//4  //   ,   
      Serial.print(",");
      Serial.print(d7);//5 
      Serial.print(",");
      Serial.print(d8);//6 
      Serial.print(",");
      Serial.print(0);//7  //   ,   
      Serial.print(",");
      Serial.print(0);//8 //   ,   
      Serial.print(",");
      Serial.print(d11);//9
      Serial.print(",");
      Serial.print(d12);//10
      Serial.print(",");
      Serial.print(d13);//11 
      Serial.print(",");
      Serial.print(shim1); // 12 
      Serial.print(",");
      Serial.print(shim2); // 13 
      Serial.print(",");
      Serial.print(thum); // 14 //
      Serial.print(",");
      Serial.print(hum); // 15 // 
      Serial.print(",");
      Serial.print(oxlagdenie);//16 
      Serial.print(",");
      Serial.println(podogrev);//17 ,  18   
 }





DHTsensor पुस्तकालय

DHT22 सर्वेक्षण DHT22 के

अंदर दो सेंसर, तापमान और आर्द्रता हैं। प्रत्येक रीडिंग का समय 250 एमएस है, अर्थात, मतदान (dht.readTemper) के दौरान, पूरा कार्यक्रम "लटका हुआ" है और Arduino के साथ डेटा विनिमय असंभव है।
इसके आधार पर, हम बदले में सेंसर से पूछताछ करेंगे, जिसमें 2 मिनट का अंतराल होगा।

...
 if(timelapsed >= 120000) //      2 
   {  
     time = currtime;
     count++;
     //      ~ 250  (    ),      ,     
     if(count == 1)  thum = dht.readTemperature(); //  .   = 250 .
     if(count == 2)  hum = dht.readHumidity(); //  ,   ,   .   = 250 
     if(count > 1) count=0;
... 


कार्यक्रम शुरू होने के दो मिनट बाद ही सेंसर का चुनाव होगा, इसलिए आपको पहली बार शून्य सेटअप () फ़ंक्शन के लिए डेटा प्राप्त करने की आवश्यकता है

...
  thum = dht.readTemperature(); //  ,     ,         
  hum = dht.readHumidity(); //  
...  




अगर कमरे का तापमान निर्धारित तापमान से ऊपर उठता है और सेट तापमान से नीचे चला जाता है, तो भी हीटर चालू होने पर Arduin के तापमान के अनुसार उपकरणों को चालू करने से एयर कंडीशनर (या पंखा) चालू हो जाएगा।

सेंसर को मतदान के तुरंत बाद (हर दो मिनट में एक बार) सक्षम / अक्षम करने की आवश्यकता की जाँच करना।

...
 if(timelapsed >= 120000) //      2 
   {  
     time = currtime;
     count++;
     //      ~ 250  (    ),      ,     
     if(count == 1)  thum = dht.readTemperature(); //  .   = 250 .
     if(count == 2)  hum = dht.readHumidity(); //  ,   ,   .   = 250 
     if(count > 1) count=0;
 
   ///////////////////////  ///////////////////////   
       if((thum > oxlagdenie) && (toxl == 1)) //        = 1,    (  = 0,    )
         {                                  
           digitalWrite(7, HIGH); //                          
           d7 = 1;                          
         }
   
       else if(toxl == 1) //      = 1,                                      
         {
           digitalWrite(7, LOW); //    
           d7 = 0;
         }  
        
   ///////////////////////  /////////////////////////
       if((thum < podogrev) && (tpod == 1)) //        = 1,    (  = 0,    )  
         {                                
           digitalWrite(8, HIGH); //                        
           d8 = 1;                       
         }
   
       else if(tpod == 1) //      = 1,   
         {
           digitalWrite(8, LOW); //   
           d8 = 0;
         }
         
   } //      


यदि परिवेश का तापमान (थम) निर्धारित तापमान (ऑक्सलागेंडी) से ऊपर उठता है, तो एयर कंडीशनर चालू हो जाएगा, और जब यह नीचे गिरता है, तो यह बंद हो जाएगा।

इन ब्लॉकों में एयर कंडीशनर को चालू करने का तापमान निर्धारित है:


         //////////////  /////////////////
         case 'N': //  "  "
         oxlagdenie++; //  "  "  ,       
         EEPROM.write(14, oxlagdenie); //    
         toxl = 1; //  
         EEPROM.write(15, toxl); //    
         glavnaia();
         break;
         
         case 'n': //  "  "
         oxlagdenie--;
         if(oxlagdenie < 1) //  "  " = 0,   
            {
               oxlagdenie = 0; //  ,    
               toxl = 0; //  
               EEPROM.write(14, oxlagdenie); //    
               EEPROM.write(15, toxl); //    
               digitalWrite(7, LOW); // 
               d7 = 0; 
            }
         glavnaia();
         break;  


जब प्रतीक एन प्राप्त करते हैं , तो आर्डिना एक के द्वारा ऑक्सलागडेनई के मूल्य को बढ़ाता है, कार्य के झंडे को सेट करता है = 1; और इस जानकारी को EEPROM को लिखता है।
डी-एनर्जाइजिंग और बाद में स्विचिंग के बाद, सिस्टम काम करने की स्थिति में वापस आ जाएगा।

प्रतीक n के मिलने पर , आर्डिना एक के द्वारा ऑक्सलागडेनई के मूल्य को कम करता है
यदि ऑक्लागडेनई शून्य के बराबर है, तो टॉक्सिल ध्वज को रीसेट किया जाएगा और एयर कंडीशनर का स्वचालित संचालन बंद कर दिया जाएगा।

उसी तरह से हीटिंग की व्यवस्था की जाती है।

प्रबंधन संग्रह ( github )

डाउनलोड करें और इसे सर्वर के काम करने वाले फ़ोल्डर में अनज़िप करें -/ var / www / knoppolztemp /

स्पष्टता के लिए, संग्रह से index.html फ़ाइल खोलें :

"बटन", "Dimmer" और "Temp" दबाकर नियंत्रण के साथ संगत पैनल खोलें / बंद करें।

छवि


जाने के लिए Your_ रूटर / knoppolztemp / और "पर क्लिक करें टेम्पो " बटन

छवि


लेफ्ट बटन + और - "कूलिंग" के लिए जिम्मेदार हैं, "हीटिंग" के लिए राइट बटन

परिवेश के तापमान (20`C) के नीचे "कूलिंग स्टार्ट" तापमान (19`C) और प्रतीक्षा करें।
जब फ़ंक्शन काम करता है:

if(timelapsed >= 120000) //      2   


कूलिंग चालू हो जाएगी और बटन पर प्लस चिन्ह लाल हो जाएगा।

हीटिंग के साथ, सब कुछ समान है, केवल "हीटिंग ऑन" (17`C) का तापमान अधिक सेट किया जाना चाहिए।

हाइबरनेशन

पेज लगातार arduins से डेटा का अनुरोध करता है, और अन्य ग्राहकों के समानांतर कनेक्शन इस तथ्य को जन्म देगा कि वे एक-दूसरे के साथ हस्तक्षेप करेंगे। इससे बचने के लिए, हम कुछ समय बाद अपडेट को निष्क्रिय कर देंगे।

Index.html फ़ाइल में, अपडेट फ़ंक्शन ( फ़ंक्शन शो () ) के अंत में लाइनें हैं:

...
slmode++;
if(slmode > 60) { /*   */
$(".pansl").show();
$("st").hide();
flagobnov = 0;
slmode = 0;
...  


हर बार शो () फंक्शन में आग लग जाती है , स्लमोड वेरिएबल एक से बढ़ जाता है। निर्दिष्ट मान तक पहुंचने पर यदि (slmode> 60), अपडेट बंद हो जाएगा और स्क्रीन "START" बटन के साथ पारभासी पैनल के साथ बंद हो जाएगी।

छवि


स्टार्ट पर क्लिक करने से अपडेट अपडेट हो जाएगा और काउंटडाउन फिर से शुरू हो जाएगा।


$(".slip").click(function(){ /*    */

        $(".pansl").hide();
        flagobnov = 1;
        show();
}); 


अभी के लिए बस इतना ही, इस टेम्प्लेट का उपयोग गर्मियों के घर या ग्रीनहाउस को नियंत्रित करने के लिए किया जा सकता है। गितुब

पर जोड़ा स्रोत

All Articles