Arduino Weather machine

weather-machine-using-arduino

Arduino is a great hardware platform when comes to prototyping and building cool stuffs. Using this i have designed and developed a simple Arduino Weather machine which measures three important parameters Temperature, Light intensity and Humidity and predict the weather condition according to the measured parameters. This following article will walk you through the operation, working and code of this project.

SENSORS USED:

LM35:

lm35-pin-diagram

This is a precision temperature measurement sensor with its output proportional to the temperature of the environment. It measures temperature from the range of -55C to 150C. The output voltage varies by 10mV with every degree celsius change in temperature.

HUMIDITY SENSOR:

humidity-sensor-module

I got this humidity sensor from a local merchant. The increase in humidity level will in turn increase the output voltage of this sensor. We are going to scale the output voltage in terms of percentage.

LIGHT INTENSITY SENSOR:

light-sensor-module-circuit-diagram This sensor uses a simple LDR to measure the light intensity. The sensor was designed in such a way the increase in light intensity will result in decrease in output voltage. We are going to calibrate and scale the output voltage in terms of percentage.

DESIGN OF ARDUINO WEATHER MACHINE:

arduino-weather-machine-circuit-diagram

The design shows three simple sensors Light, Humidity and temperature sensors are connected to the ADC channels of Arduino Uno. LCD on the other hand connected to the digital pins to display sensor values and weather conditions. The operation is simple Arduino is gonna scan the sensor with periodical intervals and displays the readings in the LCD display after calibration. Based on those input readings i have  added simple conditions in the code to make a weather forecast. The weather forecast is then printed in the LCD display for users.

CALIBRATION:

The calibration of this Project is pretty easy and simple. The temperature sensor LM35 will give a output change of about 10mV for every change in degree Celsius whereas the step size of Arduino ADC is given by the formula

Step Size = Aref / ADC bit size = 5 / 1024 = 4.88mV

So in order to get the real temperature we have to divide the ADC value by 2.

Our light sensor module give out high voltage readings in absence of light so in order to get the intensity of Light we have to subtract the ADC value obtained from light sensor from max value that is 1023

Real Light intensity value = 1023 – Light intensity value from sensor

The Humidity Sensor and Light sensor are measured as intensity and it was scaled out of 100%. In order to do that we have to

In Percentage = ( Light  or  Humidity ) * 100 / ADC Resolution

                     = ( Light or Humidity ) * 100 / 1023

This gives the percentage of humidity and light intensity in the environment.

WORKING VIDEO:

 

CODE:

#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
unsigned int adc_value;
short int i;
char converted_values[5];
int light,humidity,temperature;
int cursor_position[4]={2,7,12};
char msg[6][9]={"SUNNY","RAINY","HOT","CLOUDY","COLD"};

void setup() {
  lcd.begin(16, 2);
  lcd.display();
  lcd.setCursor(0, 0);
  lcd.print("H:");
  lcd.setCursor(5, 0);
  lcd.print("L:");
  lcd.setCursor(10, 0);
  lcd.print("T:");
  lcd.setCursor(0, 1);
  lcd.print("WEATHER:");
             }

void loop() {
 humidity = analogRead(A0);
 light =analogRead(A1);
 light =1023-light;
 temperature = analogRead(A2); 
 lcd_print(humidity);
 lcd_print(light);
 lcd_print(temperature);
 lcd.setCursor(8, 1);
 lcd.print(condition());
 delay(5000);
            }

void lcd_print(int parameter)
{
 if(i<=1)
 {
 adc_value = (parameter*100);
 adc_value = adc_value/1023;
 }
 else
 {
  adc_value=temperature/2;
 }
 String conversion = String(adc_value);
 lcd.setCursor(cursor_position[i],0);
 lcd.print(conversion);
 adc_value=0;
 conversion=""; 
 if(i<2)
 i++;
 else 
 i=0;
}

char* condition()     
{
  if(temperature>=25&&humidity<20&&light>45)
  return(msg[0]);                       //Sunny
  else if(temperature>30&&humidity<20&&light>50)
  return(msg[2]);           //hot
  else if(temperature<=23&&humidity>60&&light<40)
  return(msg[1]);           //Rainy
  else if(temperature<=25&&humidity>50&&light<40)
  return(msg[3]);           //cloudy
  else if(temperature<=19&&humidity>70&&light<40)
  return(msg[4]);           //cold
}

NOTE:

  • Note that temperature sensor voltage decreases with increase in light intensity, so proper calibration is necessary to get correct output.
  • Note that the conditions for weather are just assumptions, you can alter the it based on your requirement.

Leave a Comment

Your email address will not be published. Required fields are marked *