Tutorial arduino: room light and temperature levels check and adjust with autorefresh

Scritto da Alessandra De Rosa on . Postato in Formazione, Prodotti, Progetto Leonardo da Vinci, Servizi, Tutorials Arduino

For this tutorial, we’re going to explain you all about this project, which consists on controlling the temperature and the light from the web page. It’s based on old projects but this one has new features.

Here are the components we used:

  • 1 Arduino
  • 1 Ethernet Shield
  • 1 Relay
  • 1 Temperature sensor
  • 1 Light sensor
  • 3 Leds
  • 3 Resistors

The web page has two different tables, one for the temperature and one for the light. Above the text boxes appears the value we put in the text box, which represents the temperature/light we want it to be. Above that there’s the actual temperature/light in the room where the sensor is located.

Depending on the values we put comparing with the temperature, above the table appears text saying when to turn on/off the air conditioner.

How it looks:

arduino temperature and light control refresh

Same temperature:

arduino temperature and light control refresh

Lower temperature:

arduino temperature and light control refresh

Higher temperature:

arduino temperature and light control refresh

Code:

#include <String.h>

#include <SPI.h>

#include <Ethernet.h>



byte mac[] = {  
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // mac address

byte ip[] = { 
  192, 168, 1, 25 }; // ip arduino internet in

byte subnet[] = { 
  255, 255, 255, 0 }; //subnet mask

EthernetServer server(80); //server port


int outPin = 9; // pin

String readString; //string

int temp1=0 , temp2=0;

int vrif = 1.1;

int Rele = 0;

void setup(){

  Ethernet.begin(mac, ip, subnet);
  pinMode(outPin, OUTPUT);
  analogReference(INTERNAL); //lowers the voltage reference
  pinMode(8,OUTPUT); //cold
  pinMode(9,OUTPUT); // hot
  pinMode(7,OUTPUT); // rele

  pinMode(5,INPUT);
  pinMode(0,INPUT);

  Serial.begin(9600);
}



void loop()

{
  /*Client*/
  String string;
  int i=0; //y1 = temperatura e light = light level from user
  long int Rlight=0;
  float TempAverage=0;
  int y1=0, light=0; // references posted by the user!
  EthernetClient client = server.available();





  TempAverage=analogRead(5);
  Rlight=analogRead(0);


  TempAverage = (95.0 * vrif * TempAverage) / 1024.0;

  Rlight*=100;
  Rlight/=1024;


  if (client) {

    boolean currentLineIsBlank = true;




    while (1) 
    {
      if (client.available()) {

        char c = client.read();

        readString.concat(c); 

        //Serial.println(readString);


        //if HTTP request has ended

        if (c == '\n' &&  currentLineIsBlank) 
        {

          Serial.println(readString);
          string = readString;
          if(readString.indexOf("T=") > 0)
          {
            for(i=0;string[i];i++)
            {
              if(string[i] == 'T' && string[i+1] == '=' && string[i+2] >=48 && string[i+3] <= 57) 
              {

                switch(string[i+2])
                {                                                                                                       
                case 48: 
                  y1+= 0; 
                  break;
                case 49: 
                  y1+=10; 
                  break;
                case 50: 
                  y1+=20; 
                  break;
                case 51: 
                  y1+=30; 
                  break;
                case 52: 
                  y1+=40; 
                  break;
                case 53: 
                  y1+=50; 
                  break;
                case 54: 
                  y1+=60; 
                  break;
                case 55: 
                  y1+=70; 
                  break;
                case 56: 
                  y1+=80; 
                  break;
                case 57: 
                  y1+=90; 
                  break;
                }
                switch(string[i+3])
                {
                case 48: 
                  y1+= 0; 
                  break;
                case 49: 
                  y1+=1; 
                  break;
                case 50: 
                  y1+=2; 
                  break;
                case 51: 
                  y1+=3; 
                  break;
                case 52: 
                  y1+=4; 
                  break;
                case 53: 
                  y1+=5; 
                  break;
                case 54: 
                  y1+=6; 
                  break;
                case 55: 
                  y1+=7; 
                  break;
                case 56: 
                  y1+=8; 
                  break;
                case 57: 
                  y1+=9; 
                  break;
                }

              }
            }

          }


          if(readString.indexOf("L=") > 0)
          {
            for(i=0;string[i];i++)
            {
              if(string[i] == 'L' &&string[i+1] == '=' && string[i+2] >=48 && string[i+3] <= 57) 
              {

                switch(string[i+2])
                {                                                                                                       
                case 48: 
                  light+= 0; 
                  break;
                case 49: 
                  light+=10; 
                  break;
                case 50: 
                  light+=20; 
                  break;
                case 51: 
                  light+=30; 
                  break;
                case 52: 
                  light+=40; 
                  break;
                case 53: 
                  light+=50; 
                  break;
                case 54: 
                  light+=60; 
                  break;
                case 55: 
                  light+=70; 
                  break;
                case 56: 
                  light+=80; 
                  break;
                case 57: 
                  light+=90; 
                  break;
                }
                switch(string[i+3])
                {
                case 48: 
                  light+= 0; 
                  break;
                case 49: 
                  light+=1; 
                  break;
                case 50: 
                  light+=2; 
                  break;
                case 51: 
                  light+=3; 
                  break;
                case 52: 
                  light+=4; 
                  break;
                case 53: 
                  light+=5; 
                  break;
                case 54: 
                  light+=6; 
                  break;
                case 55: 
                  light+=7; 
                  break;
                case 56: 
                  light+=8; 
                  break;
                case 57: 
                  light+=9; 
                  break;
                }

              }
            }
          }



          break;
        }



      }
    }
 

    if(temp1 < (int)TempAverage && temp1 != 0)
    {
      Rele=1;
    }
    if(temp1 > (int)TempAverage && temp1 != 0)
    {
     Rele=1; 
    }
    if(temp1 == (int)TempAverage && temp1 != 0)
    {
      Rele=0;
    }

    // Web page:

    client.println("<!DOCTYPE html>");
    client.println("<?php session_start(); ?>");

    client.println("<html> "); 

    client.println("<table><tr><th>");
   /* client.println("<table border=""><tr><th>System Status</th><th> ");
    if(Rele == 1)
    {
      client.println("ON");     
      client.println("</th></table><th></th></tr>");
    }
    else
    {
     client.println("OFF");
     client.println("</th></table><th></th></tr>");
    }
    */
    client.println(" <tr><td><table border=""><tr><th>Reference Temperature </th>");
    client.println("<th><form action="" method=""get""><input type=""text"" name=""T"" value=""Insert value""><input type=""submit"" value=""check""><?phpif(!isset($_GET['temp']))$var_1 = "";else$var_1 = $_GET['temp'];$_SESSION['data'] = $var_1;?></th>");
    client.println("<tr></tr><th>Reference temperature set to </th><th>");

    if(y1 == 0)
    client.print(temp1);
    else
    client.print(y1);



    client.print("</th><tr>");
    client.println("<tr><th>Temperature of the room   </th><th>");
    if(Rele == 1)
    TempAverage-=12;
    else
    {
    }
    client.println(TempAverage);
    client.print("</th></tr>");
    
    
    
    
    
    
    client.println("</table></td>");
    


    client.println("<td></td><td><table border=""><tr><th>Reference Light</th><th>");
    client.println("<form action="" method=""get""><input type=""text"" name=""L"" value=""Insert percentage""><input type=""submit"" value=""Try""><?phpif(!isset($_GET['temp']))$var_2 = "";else$var_2 = $_GET['temp'];$_SESSION['data'] = $var_2;?></th></tr>");
    client.println("<tr></tr><th>Refence light set to </th><th>");
    
    if(light == 0)
    client.print(temp2);
    else
    client.print(light);
    
    client.print("%</th>");
    client.println("<tr><th>Light leven of the room    </th><th>");
    client.print(Rlight);
    client.print("%</th></tr></table></td></tr>");

    client.println("</table>");
    
    
    if(temp1 < (int)TempAverage && temp1 != 0)
    {
      client.println("<p>Turn heater ON!</p>");
      digitalWrite(7,HIGH); // RELE
      digitalWrite(8,LOW); // blue
      digitalWrite(9,HIGH); // reed
      
    }
    if(temp1 > (int)TempAverage && temp1 != 0)
    {
      client.println("<p>Turn Air conditioner ON!</p>");
      digitalWrite(7,HIGH); // RELE
      digitalWrite(8,HIGH); // blue
      digitalWrite(9,LOW); // reed
    } 
     if(temp1 == (int)TempAverage && temp1 != 0)
    {
      client.println("<p>Teperature OK!</p>");
      digitalWrite(7,LOW); // REL
      digitalWrite(8,LOW); // green
      digitalWrite(9,LOW); // reed
    } 
    
    
    
    client.println("</body></html>");

    readString="";

    if(y1 != temp1 && y1 != 0)
   temp1=y1;
  
  if(light != temp2 && light != 0)
   temp2=light;
   
    client.stop();


  }
}


   29 of July 2014

Alexandre Leitao

Gonçalo Neto

Google+