This is an old revision of the document!
A photoresistor is a sensor that perceives light waves from the environment. The resistance of the photoresistor is changing depending on the intensity of light. The higher the intensity of the light; the lower the resistance of the sensor. A light level is determined by applying a constant voltage through the resistor to the sensor forming a voltage divider and measuring the resulting voltage. Photoresistors are cheap but the resulting resistance is influenced by temperature and changes slowly so they are used in applications where speed and accuracy are not crucial. Photoresistors are often used in energy-effective street lighting control.
Photoresistor connected as it is shown in the figure above gives lower voltage level while the light is more intense. Results can be read with the following example code. The value will be just a number not expressed in any units e.g. Lux. To express light intensity in luxes additional calculations must be encoded in the program.
//Define an analog A0 pin for photoresistor int photoresistorPin = A0; //The analog reading from the photoresistor int photoresistorReading; void setup() { //Begin serial communication Serial.begin(9600); //Initialize the analog pin of a photoresistor as an input pinMode(photoresistorPin, INPUT); } void loop() { //Read the value of the photoresistor photoresistorReading = analogRead(photoresistorPin); //Print out the value of the photoresistor reading to the serial monitor Serial.println(photoresistorReading); delay(10); //Short delay }
A photodiode is a sensor that converts the light energy into electrical current. A current in the sensor is generated by exposing a p-n junction of a semiconductor to the light. Information about the light intensity can be determined by measuring a voltage level. Photodiodes are reacting to changes in light intensity very quickly, so they can be used ad receivers of light-based data transmission systems (e.g. fibre data communication). Solar cells are just large photodiodes.
Photodiodes are used as precise light-level sensors, receivers for remote control, electrical isolators (optocouplers), and proximity detectors.
Although the photodiode can generate current the schematic in the figure above shows its connection similar to the photoresistor in the previous example. In such a circuit, the photodiode changes its current according to a change in light intensity, which results in the voltage change at analog input of the microcontroller. As in the example for a photoresistor, the higher the light intensity, the lower the voltage. An example code:
//Define an analog A0 pin for photodiode int photodiodePin = A0; //The analog reading from the photodiode int photodiodeReading; void setup() { //Begin serial communication Serial.begin(9600); //Initialize the analog pin of a photodiode as an input pinMode(photodiodePin, INPUT); } void loop() { //Read the value of the photodiode photodiodeReading = analogRead(photodiodePin); //Print out the value of the photodiode reading to the serial monitor Serial.println(photodiodeReading); delay(10); //Short delay }
The phototransistor is a normal bipolar transistor with a transparent enclosure that makes the base-emitter junction exposed to light. In a bipolar transistor, the current that passes through the collector and emitter depends on the base current. In the phototransistor, the collector-emitter current is controlled with light. A phototransistor is slower than a photodiode, but it can conduct more current, additionally, it amplifies the incoming signal. In specific conditions, if the light is completely off or intense enough to make the output current maximal, a phototransistor can be considered a light-controlled electronic switch (e.g. in optocouplers which are usually connected to digital inputs of the microcontroller).
Phototransistors are used as optical switches, proximity sensors and electrical isolators.
An example code:
//Define an analog A1 pin for phototransistor int phototransistorPin = A1; //The analog reading from the phototransistor int phototransistorReading; void setup() { //Begin serial communication Serial.begin(9600); //Initialize the analog pin of a phototransistor as an input pinMode(phototransistorPin, INPUT); } void loop() { //Read the value of the phototransistor phototransistorReading = analogRead(phototransistorPin); //Print out the value of the phototransistor reading to the serial monitor Serial.println(phototransistorReading); delay(10); //short delay }