fbpixel
Étiquettes : , , , ,

La photorésistance est un composant électronique permettant de mesurer la luminosité ambiante. Ce composant est utile dans certains projets comme un panneau solaire suiveur de lumière ou en domotique pour créer une lampe intelligente qui ne s’allume que lorsqu’il fait nuit ou encore pour mettre en place une alarme avec une diode laser.

Prérequis : Donnez des sens à votre robot

Matériel

  • Ordinateur
  • Carte Arduino
  • Câble USB ou adaptateur série/USB pour connecter la carte Arduino au PC
  • 1x résistance 10kOhm
  • 1x photoresistor

Schéma

La photorésistance, ou, en anglais, Light Dependent Resistor (LDR) est un composant passif. Pour mesurer un changement de résistance il nous faut envoyer un courant dans le composant entre deux potentiels. Nous créons donc un pont diviseur de tension à l’aide de la photorésistance et d’une résitance de 10kOhm.

pr-sensor-scheme_bb Mesure de luminosité avec une photorésistance

Code

Pour afficher la valeur physique du capteur, il faut connaitre la règle de conversion qui sera souvent linéaire du type y= a*x+b.
Afin d’avoir un code propre et lisible, il est préférable de placer le code dans une sous fonction. Nous allons donc créer une fonction qui se charge de lire la valeur du capteur et de la convertir en valeur physique.

/* Photocell reading program */
// Constants
#define DELAY 500 // Delay between two measurements in ms
#define VIN 5 // V power voltage
#define R 10000 //ohm resistance value

// Parameters
const int sensorPin = A0; // Pin connected to sensor

//Variables
int sensorVal; // Analog value from the sensor
int lux; //Lux value

void setup(void) {
  Serial.begin(9600);
}

void loop(void) {
  sensorVal = analogRead(sensorPin);
  lux=sensorRawToPhys(sensorVal);
  Serial.print(F("Raw value from sensor= "));
  Serial.println(sensorVal); // the analog reading
  Serial.print(F("Physical value from sensor = "));
  Serial.print(lux); // the analog reading
  Serial.println(F(" lumen")); // the analog reading
  delay(DELAY);
}

int sensorRawToPhys(int raw){
  // Conversion rule
  float Vout = float(raw) * (VIN / float(1024));// Conversion analog to voltage
  float RLDR = (R * (VIN - Vout))/Vout; // Conversion voltage to resistance
  int phys=500/(RLDR/1000); // Conversion resitance to lumen
  return phys;
}

Application

Une application possible avec une photorésistance est le contrôle d’une lampe à LED en fonction de la luminosité. Pour cela, il n’est pas nécessaire de convertir le signal du capteur en valeur physique mais simplement de convertir le signal du capteur en une valeur de commande pour la LED.

pr-sensor-app-scheme_bb Mesure de luminosité avec une photorésistance
/* Photocell controlling lamp program */
// Constants
#define DELAY 200 // Delay between two measurements in ms
#define MIN_RAW 0 // Analog minimum value
#define MAX_RAW 500 // Analog maximum value
#define MIN_CMD 0 // Digital minimum value
#define MAX_CMD 255 // Digital maximum value

// Parameters
const int sensorPin = A0; // Pin connected to sensor
const int ledPin = 3; // Pin connected to sensor

//Variables
int sensorVal; // Analog value from the sensor
int cmd; //Led command value

//Main
void setup(void) {
  Serial.begin(9600);
  pinMode(ledPin,OUTPUT);
}

void loop(void) {
  sensorVal = analogRead(sensorPin);
  cmd=sensorToLed(sensorVal);
  analogWrite(ledPin,cmd);
  delay(DELAY);
  Serial.print("Sensor : ");
  Serial.println(sensorVal);
  Serial.print("Command : ");
  Serial.println(cmd);
}

//Functions
int sensorToLed(int raw){
  // The LED shine when the room is dark
  int val = map(sensorVal, 0, 500, 255, 0);
  val=max(val,MIN_CMD);
  val=min(val,MAX_CMD);
  return val;
}

Sources

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie