viernes, 31 de enero de 2020

Sensor de Luz V2 (definitivo)

Hola, hoy os voy a presentar la versión definitiva de mi sensor de luz V2.
Como recordareis, anteriormente hice y publiqué el prototipo de la versión número 2, en la cual explicaba los fundamentos de mi proyecto, he hecho algunos cambios y ahora funciona perfectamente; cuanta más luz reciba, menos luz recibe el LED, y viceversa.


Para este proyecto he usado:

.Una placa arduino uno


.Una placa "Protoboard"
.Un LED
.Un LDR

.2 resistencias; una de 220Ω y otra de 1000Ω



.5 cables arduino




-Para programarlo, he usado el programa "Bitbloq". Aquí esta la conexión:



El LED está conectado al pin 〜9, y la LDR al A1.



-El software de bloques que he usado es el siguiente:
Lo primero que he hecho ha sido declarar una variante a la que he llamado luminos en el apartado de "Variables globales y funciones".


En el apartado de "Instrucciones iniciales (Setup)", he añadido este Serial.begin(9600), para poder ver en el monitor los valores que está midiendo la LDR.




Este es el apartado de "Bucle principal (Loop)", donde está lo más interesante.


 -Para empezar, he ordenado que la variante sea el valor del sensor de luz, y he añadido un Serial.print(luminos) que tiene la misma utilidad que el Serial.begin(9600).

 -Después, mediante operaciones matemáticas, he encontrado la relación entre el pin digital y el pin analógico, que he declarado a la variable y posteriormente lo he invertido.

 -Tras esperar 10 ms, el valor de la variable se escribe en el LED. De esta manera, cuanta menos luz reciba el sensor, más se enciende la luz de forma progresiva.

 -Como quería que en algún momento el LED estuviese completamente encendido o apagado, declaré dos umbrales, uno para encenderlo a su máximo y otro para apagarlo; para conseguirlo usé los bloques de control "si" y "en cambio".


Este es el código de programación:

/***   Included libraries  ***/




/***   Global variables and function definition  ***/
const int led = 9;
const int sensor_de_luz = A1;

/*
LMP_16
*/
float luminos = 0;



/***   Setup  ***/
void setup() {
    pinMode(led, OUTPUT);
    pinMode(sensor_de_luz, INPUT);

    Serial.begin(9600);

}


/***   Loop  ***/
void loop() {
    luminos = analogRead(sensor_de_luz);
    Serial.println(luminos);

    luminos = luminos * 255 / 1024;
    luminos = 255 - luminos;
    delay(10);
    analogWrite(9, luminos);
    if (luminos > 200) {
        digitalWrite(led, HIGH);
    } else if (luminos < 30) {
        digitalWrite(led, LOW);
    }
}

Aquí podéis ver el montaje en "Fritzing":

Por último, os dejo un vídeo para que podáis comprobar lo bien que funciona.



Lo más interesante de mi proyecto es que la luminosidad del LED, aumenta de manera totalmente progresiva, y, de este modo no se percibe ningún cambio brusco de luz.

¡Muchas gracias y hasta la siguiente entrada!😁