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
- Computador
- Arduino
- Cabo USB
- 1 resistência de 10kOhm
- 1 fotorresistor
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; }
Referências
- http://www.instructables.com/id/How-to-Use-a-Light-Dependent-Resistor-LDR/
- http://www.manuel-esteban.com/arduino-capteur-de-luminosite/
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie