Organize and Share your Electronics the way you want. Sign-Up for a free account now. It takes only 30 seconds!

Arduino Weather machine

Arduino Weather machine

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.

Read more Here







 

More Articles to Read

Smart "Homer"
Smart "Homer"
A DIY Segway-style vehicle
A DIY Segway-style vehicle
Superbeta transistors inside: Die photos and analysis of the LM108 op amp
Superbeta transistors inside: Die photos and analysis of the LM108 op amp
Peeqo is a desktop bot that communicates through GIFs
Peeqo is a desktop bot that communicates through GIFs
Using a Programmable Input Multiplier to Minimize Integer Boundary Spurs
Using a Programmable Input Multiplier to Minimize Integer Boundary Spurs
Serial seven segment LED display shield
Serial seven segment LED display shield
G-code controlled drawing plotter
G-code controlled drawing plotter
An Arduino round word clock
An Arduino round word clock
The Sandwich-o-Matic will make your lunch automatically
The Sandwich-o-Matic will make your lunch automatically
Scalar Network Analyser Jr
Scalar Network Analyser Jr

Top


Shares