Site icon AranaCorp

Medição de brilho com um fotorresistor

photoresistor scheme

Um fotorresistor é um componente eletrônico que permite medir a luminosidade ambiente. Ele é útil em projetos como um painel solar que segue a luz, ou, na automação doméstica, para criar uma lâmpada inteligente que só acende no escuro ou instalar um alarme com um díodo laser.

Pré-requisito: sensores para dar sentidos ao seu robô

Material

Esquema

O fotorresisistor, ou, em inglês, Light Dependent Resistor (LDR), é um componente passivo. Para medir uma mudança de resistência, precisamos enviar uma corrente no componente entre dois potenciais. Criamos então uma ponte divisora de tensão, com o fotorresistor e uma resistência de 10kOhm.

Código

Para exibir o valor físico do sensor, precisamos conhecer a regra de conversão, que muitas vezes será linear como y= a*x+b. Para ter um código limpo e legível, é preferível inseri-lo numa subfunção. Assim, criamos uma função que lê o valor do sensor e converte-o num valor físico.

/* 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;
}

Aplicação

Uma aplicação possível para um fotorresistor é o controle de uma lâmpada LED conforme a luminosidade ambiente. Para isso, não é necessário converter o sinal do sensor num valor físico, mas simplesmente convertê-lo num valor de controle para o LED.

/* 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;
}

https://www.aranacorp.com/wp-content/uploads/led-controlled-with-photoresistor.mp4

Referências

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

Exit mobile version