OBJECTIU: Crear un programa que controli el parpelleig d'un LED utilitzant la placa Arduino. Per fer-ho s'extendrà de l'exemple bàsic Blink (http://arduino.cc/en/tutorial/blink).
Nosaltres controlarem la intensitat del LED utilitzant un sensor LDR. El qual no és més que una resistència que variarà el seu valor en funció de la llum rebuda.
Material necessari:
- Placa Arduino UNO
- Placa Protoboard
- Resistència de 150 kOhms
- 1 LED
- Cables connectors
- altaveu
Variació de la lluminositat d'un LED utilitzant un LDR
Passos seguits per aconseguir l'objectiu:
1) Disseny del circuit:
Esquema del circuit:
2) Disseny del codi:
El que ens interessa és variar la lluminositat del LED segons la quantitat de llum que detecti el sensor LDR. Per fer-ho s'utilitzarà la funció analogWrite la qual utilitza una modulació PWM per crear aquest efecte de variació(http://arduino.cc/en/Reference/AnalogWrite?from=AnalogWrite.PWM).
La intensitat de la lluminositat dependrà dels valors del cicle d'aquesta modulació. El LED estarà totalment apagat quan el cicle de PWM sigui igual a 0 i totalment encès quan sigui igual a 255. La variació d'aquest valor serà la variació de la lluminositat, la qual dependrà del valor rebut de l'LDR (resistència variable segons la lluminositat). L'altaveu està connectat en sèrie amb el LED de tal forma que aquest sonarà sempre que aquest estigui encès.
La intensitat de la lluminositat dependrà dels valors del cicle d'aquesta modulació. El LED estarà totalment apagat quan el cicle de PWM sigui igual a 0 i totalment encès quan sigui igual a 255. La variació d'aquest valor serà la variació de la lluminositat, la qual dependrà del valor rebut de l'LDR (resistència variable segons la lluminositat). L'altaveu està connectat en sèrie amb el LED de tal forma que aquest sonarà sempre que aquest estigui encès.
Codi:
const int Pin_led = 11; // Pin digital (~PWM) escollit
int LDR_value;
int LDR_pin = 0; // Variable LDR, pin 0
// Rutina setup: s'executa un cop al prémer reset (o al tornar a complirar el programa).
void setup() {
// inicialitzar el pin digital com a sortida.
pinMode(Pin_led, OUTPUT);
// Visualizació dels valors per la consola.
Serial.begin(9600);
}
// Rutina loop: execució infinita
void loop() {
LDR_value = analogRead(LDR_pin); // llegeix l'entrada de l'LDR (quantitat de llum)
if(LDR_value<80){ // Establim llindar per encendre/apagar el LED.
analogWrite(Pin_led, 0);
delay(30);}
else{ // per la resta de valors per sobre del llindar.
analogWrite(Pin_led, LDR_value/4);
delay(30);}
Serial.print("LDR = "); // visualització per pantalla.
Serial.println(LDR_value);
}


No hay comentarios:
Publicar un comentario