M3: El sensor de luz LDR
Hasta ahora hemos trabajado con resistencias de valor fijo, pero existen una serie de resistencias que varían según distintos parámetros físicos a las que se les somete como presión, luz y temperatura entre otros. Existe una gran variedad que se utilizan para construir lo que llamamos sensores.
En esta práctica vamos a diseñar un circuito que sea sensible a la luz. El objetivo será regular la intensidad luminosa de un led con una LDR, una resistencia sensible a la luz.
CON EDUBASICA
En este montaje usaremos la resistencia LDR de la placa Edubásica. Como ya hemos comentado, la LDR modifica su resistencia en dependiendo de la cantidad de luz que incida sobre ella. El siguiente programa mostrará por consola (“Monitor Serial”) las variaciones de luminosidad que detecte la LDR simplemente pasando la mano por encima de ella.
Valores entre 917 y 1024
La configuración es PULL-UP es decir, cuando el valor LDR aumenta (se acerca al OFF) la resistencia superior "tira = pull" hacia arriba = up. Los voltios suben. Si no hay luz, los voltios se acercan al máximo 5V que equivale a la lectura que el Arduino convierte en digital en 1024.
Cuando hay luz, el LDR baja su resistencia, por lo que los voltios bajan. Pero no llega a 0 Ohm, se queda pues en un valor de voltios bastante alto, 4.5V que corresponde más o menos al valor que lee Arduino en digital 917
SIN EDUBASICA
Hay que conectar en formato pull-up el LDR a A1 y un led verde a D3, el valor de la resistencia si quieres utilizar los mismos valores que mostramos 917-1024 tendrá que ser 470 Ohm. Cuánto más alto sea, más bajo serán los valores.
Programa
Como vemos en el esquema, el LDR está conectado a la entrada A1 del Arduino, por lo tanto la instrucción de lectura será analogRead(1) lo mapearemos correctamente a una variable llamada luz y utilizaremos el LED Verde conectado a D3 por lo que la instrucción de salida será analogWrite(3,luz)
Mapearemos con la instrucción map para convertir 917-1024 a valores de PWM 0-255
https://create.arduino.cc/editor/javierquintana/326c66b3-c8b8-4879-980c-f81af7ab65d8/preview
MapeoInternamente dela valores
funciona map ¿Cómo funciona? ¿Cómo se podría quitar en estos anteriores programas?
EnVimos ocasiones,en el ejemplo del potenciómetro que los valores quea obtenemosleer eran de una0-1024 lecturay si lo queríamos convertir 0-255 era simplemente dividir por 4 y si es convertirlo de un0-5V pin,se como un sensor, pueden estar fuera de una escala determinada, y tenemos que convertirlos dividía otropor rango para poder usarlos.204.6
PorPero ejemplo:en este caso EL LDR EMPIEZA DESDE 917 NO DESDE 0 como en el potenciómetro.
Supongamos que hacemosEn una lectura previa de lo que nos devuelve el LDR y nos devuelve unos valores mínimo y máximo por ejemplo: 917, 1024 lo llamaremos A1min y A1max y queremos traducir estos valores al rango 0-255 pues es lo que podemos darle a un LED. LaQue soluciólo llamaremos luxmin y lumax
Podemos hallar la pendiente m y el corte con el eje y n seráde _mapearla _esosrecta y = mx + n que convierte los valores paraanalógicos que, en caso de obtener el valor 917 (el equivalente917-1024 a oscuridad),los elvalores led verde se apague (0) y la máxima luminosidad (1024) el led se ilumine al máximo (255).
La función “map” del programa asigna un valor máximo y un valor mínimo a un rango dado.
_Nota:0-255. En el próximo montaje el valor máximo suele estarprograma en 1024, pero el mínimo dependerá de las condiciones de luz en las que realicemos la práctica. Por eso en el código se especifican 2 variables que deberemos colocar a mano:
bajo_LDR y alto_LDR._
ObservaArduino si tuno montajequeremos necesita de algún ajuste utilizandousar la función map.map, tenemos que escribir esa ecuación.
AquíAqui tienes ununa Excelhoja (xlsxde - 12,88 KB)cálculo para vercalcular la transformaciópendiente y la intersección lineal que hace map con losel valoreseje que hemos comentado, es simplemente una demostración de lo que hace internamente la función map**