LDR Sensor Interfacing with PIC16F877A

In this tutorial we are going to see LDR Sensor Interfacing with PIC16F877A.

Prerequisites

Before start this tutorial we should know below topics. If you know already, please go further.

Components Required

  • PIC16F877A Development Board
  • LDR Sensor
  • LED
  • LCD Module

Introduction

The dominant of street lights, outside lights, a number of indoor home appliances, and so on are typically operated and maintained manually on many occasions. This is not only risky, however additionally leads to wastage of power with the negligence of personnel or uncommon circumstances in controlling these electrical appliances ON and OFF. Hence, we can utilize the light sensor circuit for automatic switch OFF the loads based on daylight’s intensity by employing a light sensor. This article discusses in brief about what is a light dependent resistor, how to interface with PIC16F877A.

What is a Light Dependent Resistor?

An LDR or Light Dependent Resistor is also known as photo resistor, photocell, photoconductor. It is a one type of resistor whose resistance varies depending on the amount of light falling on its surface. When the light falls on the resistor, then the resistance changes. These resistors are often used in many circuits where it is required to sense the presence of light. Resistance will be decrease when the light increases. That means, In day time the output resistance will be less compared than night time.

Working Principle of  LDR

This resistor works on the principle of photo conductivity. It is nothing but, when the light falls on its surface, then the material conductivity reduces and also the electrons in the valence band of the device are excited to the conduction band. These photons in the incident light must have energy greater than the band gap of the semiconductor material.This makes the electrons to jump from the valence band to conduction.

These devices depend on the light, when light falls on the LDR then the resistance decreases, and increases in the dark.When a LDR is kept in the dark place, its resistance is high and, when the LDR is kept in the light its resistance will decrease.

The figure below shows the curve between Resistance Vs Light Intensity curve for a particular light dependent resistor.

Applications of LDR

Lighting switch

The most obvious application for an LDR is to automatically turn on a light at a certain light level. An example of this could be a street light or a garden light.

Camera shutter control

LDRs can be used to control the shutter speed on a camera. The LDR would be used to measure the light intensity which then adjusts the camera shutter speed to the appropriate level.

LDR Sensor Interfacing with PIC16F877A

LDR Sensor is a Analog Sensor. So we need to use ADC for interfacing. Please go through ADC tutorial.

Circuit Diagram

LCD:

  • RS :  RC0
  • RW : RC1
  • EN : RC2
  • Data Lines : RB0 – RB7

ADC:

  • RA0 (AN0) : LDR Sensor’s one end

LED:

  • RD0 – LED

LDR Sensor Interfacing with PIC16F877A

Source Code

This source code will control the LED based on the Light Intensity. If Light Intensity is high, it turns OFF the LED and If Light Intensity is Low it turns ON the LED.

#include<pic.h>
#define delay for(i=0;i<=1000;i++)
#define rs RC0
#define rw RC1
#define e RC2
#define LED RD0

__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON & LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);

unsigned int adc();

void lcd_int();
void cmd(unsigned char a);
void dat(unsigned char b);
void show(unsigned char *s);

int i;

void main()
{
    unsigned int val;
    TRISB=TRISC=0;          //Port B and Port C is Output (LCD)
    TRISD = 0;              //Port D is output LED
    TRISA0=1;               //RA0 is input (ADC)
    lcd_int();
    while(1) {

        cmd(0x80);
        val = adc();
        show("LIGHT INT : ");
        if(val>150) {
            show("LOW ");
            LED = 1;
        } else {
            show("HIGH");
            LED = 0;
        }
    }
}

void lcd_int()
{
    cmd(0x38);
    cmd(0x0c);
    cmd(0x06);
    cmd(0x80);
}

void cmd(unsigned char a)
{
    PORTB=a;
    rs=0;
    rw=0;
    e=1;
    delay;
    e=0;
}

void dat(unsigned char b)
{
    PORTB=b;
    rs=1;
    rw=0;
    e=1;
    delay;
    e=0;
}       

void show(unsigned char *s)
{
    while(*s) {
        dat(*s++);
    }
}

unsigned int adc()
{
    unsigned int adcval;
    
    ADCON1=0xc0;                    //right justified
    ADCON0=0x85;                    //adc on, fosc/64
    while(GO_nDONE);                //wait until conversion is finished
    adcval=((ADRESH<<8)|(ADRESL));    //store the result
    adcval=(adcval/3)-1;
        
    return adcval;  
}

Output

0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

3 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
3
0
Would love your thoughts, please comment.x
Ads Blocker Image Powered by Code Help Pro
Ad Blocker Detected!!!

Dear User,

Thanks for visiting the site. Unfortunately, we have noticed that you are using an Ad Blocker extension in your browser.

We charge advertisers instead of the audience. We depend on Ad revenue to keep creating quality content for you. We guarantee clean ads. 

HERE IS HOW YOU CAN KEEP READING!

Click the AdBlock icon on your browser and click Enabled on this site to Disable AdBlock in embetronicx.com or whitelist our website.

If you still want to hide the ads, please become a Premium member. If you are a premium member already, then please log in.

Thank you for understanding.

If you are seeing this even after disabling all the ad blockers, Please report us the False Positive to [email protected]

Refresh