Introduction
A photoresistor or light-dependent resistor (LDR) or photocell is a light-controlled variable resistor. The resistance of a photoresistor decreases with increasing incident light intensity; in other words, it exhibits photoconductivity. A photoresistor can be applied in light-sensitive detector circuits, and light- and dark-activated switching circuits.
Components
– 1*Raspberry Pi
– 1*Network cable (or USB wireless network adapter)
– 1*Resistor(10K)
– 1*ADC0832
– 1*Photoresistor
– Several jumper wires
Experimental Principle
With light intensity increasing, the resistance of a photoresistor will decrease. Thus the output voltage will change.
Experimental Procedures
Step 1: Connect the circuit
Step 2: Edit and save the code (see path/Rpi_LcdStartKit /11_photoresistor/
photoresistor.c)
Step 3: Compile the code
gcc photoresistor.c -lwiringPi |
Step 4: Run the program
./a.out |
Now, if you change light intensity, you will find the value printed on the screen change accordingly.
Code
#include <wiringPi.h> #include <stdio.h> typedef unsigned char uchar; typedef unsigned int uint; #define ADC_CS 0 #define ADC_CLK 1 #define ADC_DIO 2 uchar get_ADC_Result(void) { //10:CH0 //11:CH1 uchar i; uchar dat1=0, dat2=0; digitalWrite(ADC_CS, 0); digitalWrite(ADC_CLK,0); digitalWrite(ADC_DIO,1); delayMicroseconds(2); digitalWrite(ADC_CLK,1); delayMicroseconds(2); digitalWrite(ADC_CLK,0); digitalWrite(ADC_DIO,1); delayMicroseconds(2); //CH0 10 digitalWrite(ADC_CLK,1); delayMicroseconds(2); digitalWrite(ADC_CLK,0); digitalWrite(ADC_DIO,0); delayMicroseconds(2); //CH0 0 digitalWrite(ADC_CLK,1); digitalWrite(ADC_DIO,1); delayMicroseconds(2); digitalWrite(ADC_CLK,0); digitalWrite(ADC_DIO,1); delayMicroseconds(2); for(i=0;i<8;i++) { digitalWrite(ADC_CLK,1); delayMicroseconds(2); digitalWrite(ADC_CLK,0); delayMicroseconds(2); pinMode(ADC_DIO, INPUT); dat1=dat1<<1 | digitalRead(ADC_DIO); } for(i=0;i<8;i++) { dat2 = dat2 | ((uchar)(digitalRead(ADC_DIO))<<i); digitalWrite(ADC_CLK,1); delayMicroseconds(2); digitalWrite(ADC_CLK,0); delayMicroseconds(2); } digitalWrite(ADC_CS,1); pinMode(ADC_DIO, OUTPUT); return(dat1==dat2) ? dat1 : 0; } int main(void) { uchar adcVal; if(wiringPiSetup() == -1){ printf(“setup wiringPi failed !”); return 1; } pinMode(ADC_CS, OUTPUT); pinMode(ADC_CLK, OUTPUT); while(1){ pinMode(ADC_DIO, OUTPUT); adcVal = get_ADC_Result(); printf(“adcval : %d\n”,adcVal-80); delay(400); } return 0; } |