bclose

Arduino y fotosensores LDRs

Fotoresistencias y divisores de tension
tienda online prometec

Objetivos

 

 

    • Un componente simpático, el LDR.
    • Los divisores de tensión.
    • Un theremin sensible a la luz.
 

Material requerido.

Imagen de Arduino UNO

Arduino Uno o similar. Esta sesión acepta cualquier otro modelo de Arduino.

Protoboard

 Una Protoboard.

conexiones

Cables de Protoboard.

componente

Una resistencia de 330 Ohmios.

Fotoresistencia

 Una fotorresistencia o LDR

 

Los fotosensores

 

Una fotorresistencia o LDR (Light Depending Resistor, o resistencia dependiente de la luz) es un componente fotoelectrónico cuya resistencia varía en función de la luz que incide en él. Esta resistencia es muy baja, de unos pocos Ωs con una luz intensa incide en él y va creciendo fuertemente a medida que esa luz decrece.

Se les suele utilizar como sensores de luz, para arrancar luces automáticamente cuando la oscuridad sobrepasa un cierto umbral, o como detectores de movimiento próximo ( Cuando algo se interpone).

Vamos a utilizar en esta sesión un típico LDR, que es bastante fácil de conseguir y es sensible a los cambios de luz ambiente. Montaremos un circuito con un LDR y el zumbador que vimos en la última sesión, para construir un theremin rudimentario, que espero que os haga pasar un rato entretenido.

Un theremin es un sintetizador rudimentario que genera audio variable de espectro continuo, analógico, en función de una señal de control (No os asustéis, que es una tontería).

El circuito utiliza un LDR como señal de control y calcularemos una frecuencia en función de la caída de tensión que leamos en nuestra fotorresistencia.

 
  • Recordad que los convertidores ADC como los de Arduino no pueden leer resistencia sino tensión.
  • Los LDR no son precisamente rápidos en reaccionar a la luz, y puedan tardar hasta algunas décimas de segundo en reaccionar. Esto no es importante para una alarma de luz, pero hace imposible que se puedan utilizar para enviar información mediante la luz.
 

Pero antes de entrar en materia necesitamos hacer un inciso para conocer lo que es un divisor de tensión.

 

Divisores de tensión

 

Hablamos en su momento de la ley e Ohm:

V = R * I

Pero no hablamos de cómo se combinan las resistencias y ha llegado el momento de hacerlo, para desesperación de los que odian las mates.

Podemos combinar un par de resistencias R1 y R2 de dos maneras. En serie y en paralelo:

En serieEn Paralelo
Suma de resitenciasResitencias en paralelo 

Cuando ponemos las dos resistencias en serie, la resistencia resultante es la suma de ambas:

Resistencias en serie

Y cuando las ponemos en paralelo, podemos calcular la resitencia equivalente así:

Calculo de resitencias en paralelo

Imaginemos ahora un circuito como este:

Como las resistencias están en serie el valor total es R1 + R2. Si Vin es de 5V la intensidad que circulará por el circuito será: Intensidad con resistencias en serie

La pregunta del millón ahora es ¿Si medimos entre las dos resistencias cuanto es Vout? Pues igual de fácil :

Voltaje

Si todavía queda alguien despierto, se habrá dado cuenta que si R1 y R2 son iguales Vout será exactamente la mitad de Vin pero si R1 o R2, fuese un potenciómetro (o un LDR) cualquier variación en el ajuste, causaría una modificación en el valor de salida de tensión Vout.

Esto es lo que se conoce como un divisor de tensión y es un circuito de lo más práctico para rebajar una señal de entrada, y podéis apostar a que lo usareis mas de una vez.

Por ejemplo, los convertidores analógicos de Arduino aceptan un máximo de 5V, pero muchas señales industriales son de entre 0 y 12V.Si lo conectas sin más al A0, por ejemplo, freirás el chip de largo.

Pero con el truco del divisor de tensión y calculando adecuadamente las resistencias (Que sí, que tú puedes con lo que hay en la página anterior) puedes adaptarlo tranquilamente para que tu Arduino viva feliz con una señal que originalmente le hubiera chamuscado.

Los divisores de tensión son un circuito muy sencillo y que conviene que sea parte de vuestro arsenal electrónico. Resuelven cantidad de problemas con una resistencia y un potenciómetro y son ideales para tratar señales, que por exceso de tensión, quedarían fuera del alcance de tu Arduino.

De hecho en esta práctica vamos a montar un divisor de tensión con una resistencia y un LDR y leeremos la caída de tensión en él. Nos va a servir como ejemplo de los divisores de tensión y además nos servirá como señal de control para calcular la frecuencia a la que haremos vibrar el buzzer.

 

El circuito para un theremin óptico

 

Aunque el titulo  impresiona, lo reconozco, el circuito no es para tanto:

Divisor de tensionFíjate que el LDR R1, junto con R2 forma un divisor de tensión. La lectura de A0 dependerá de la luz que incida en el LDR. El esquema de protoboard es igual de fácil:

Divisor de tension

 

Vamos con el programa.

 

El programa es muy sencillo. Leemos la caída de tensión en A0 y lo usamos para mapear una frecuencia entre 20 y 5.000 Hz para llamar a la función tone() y eso es todo.

     const int pinBuzzer = 13 ; 
     void setup()
        {
             pinMode (pinBuzzer , OUTPUT) ; 
        }
     void loop()
        {
            int p = analogRead(A0) ;
            int n = map (p, 0,1024, 20, 5000) ;
            tone ( pinBuzzer, n) ;
        }
 
  • Para probar el circuito os recomiendo que pongáis un foco potente a 50 cm por encima del LDR y probéis a mover la mano por delante y especialmente de arriba abajo y viceversa.
  • Escuchareis un tono continuo más o menos agudo, que ira variando su frecuencia en función de la luz que incida en el LDR.
  • Se acepta que el oído humano se mueve ente 20 Hz y 20Khz (aunque esto es para algún adolescente de oído muy fino) para los que peinan canas entre 40Hz y 10Khz ya es un rango optimista. Por eso, mapeamos los valores del potenciómetro, que van de 0 a 1024, entre 20 y 5Khz, pero os recomiendo que cambiéis estos valores y veáis lo que pasa.
 

Aqui teneis un pequeño video con el resultado

Creo que convendréis conmigo, en que ha sido tan fácil, que no puedo dejaros marchar, sin poneros antes algún otro problema. Veamos.

El sonido que obtenemos es de espectro continuo, es decir, que reproduce frecuencias continuas en el margen que es capaz. Pero nuestro oído está acostumbrado a escuchar las notas en tonos y semitonos de frecuencia dada, como veíamos en el programa de las sesión 20. ¿Cómo haríais para conseguir que el resultado de este theremin, produjera, las notas que definimos allí?

Podrá ser algo asi:

     const int pinLDR = 0 ;
     const int pinBuzzer = 13 ;

     int tono[ ] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440,466, 494};
                   // mid C C# D D# E F F# G G# A
     void setup() 
        { pinMode (pinBuzzer , OUTPUT) ;
        }

     void loop() 
        {
            int p = analogRead(A0) ;
            int n = map (p, 500,1024, 0, 12) ; // Ell array solo tiene 12 notas
            tone(pinBuzzer, tono[n]);
            delay(300);
        }

He usado un array con las frecuencias temperadas de una octava. Después, mapeamos las lectura de la puerta A0 a un entero entre 0 y 12, porque el array e arriba solo tiene 12 notas, y usamos su valor para leer la frecuencia correspondiente.

En mi caso, además, A0 solo daba valores entre 500 y 1024, así que por eso he corregido la escala. Por último el delay impide que el cambio de notas sea instantáneo, porque de lo contrario no notaríamos mucho cambio el programa anterior.

Resumen de la sesión

 

 

 

    • Hemos presentado las fotorresistencias o LDRs.
    • Presentamos los divisores de tensión.
      • Que utilizaréis más de una vez en vuestros circuitos.
      • Los usamos para rebajar niveles de tensión en señales de entrada y como adaptadores para leer caídas de tensión resistencias variables .
    • Vimos como montar un theremin óptico
 

 

 

 

(35) Comments

  • Hola,
    acabo de registrarme y es mi primer mensaje. Espero hacerlo correctamente.

    En el esquema éste del LDR, como se comenta, se conectan 2 resistencias en paralelo (la 330 Ohm, y la LDR), pero una desde el negativo y la otra desde el positivo. Aunque se reduzca la tensión, ¿no es un cortocircuito? por pequeño que sea.

    Perdonad mi ignorancia, pero estoy empezando con el tema de la electrónica, y Arduino por supuesto.

    Saludos

    • Hola Juanjo, las dos resistencias estan en serie, y la resistencia final se suma, por lo que entre el positivo y negativo hay una oposicion a el paso de corriente y no hay corto posible ¿Vale?

      La idea siempre es que la resistencia entre positivo y negativo no sea nula

  • Enhorabuena por los tutoriales. ¿Que diferencia habría entre poner tone ( pinBuzzer, n) y analogWrite ( pinBuzzer, n)? ¿Solo el rango de valores que admite n?

    • Hola, con el tone() puedes establecer la frecuencia de sonido que quieres que emita y así por ejemplo puedes hacer que toque las notas que quiera. Usando analogWrite puedes hacer que suene pero no vas a saber la frecuencia. Un saludo.

      • Gracias. ¿Y hay forma de controlar también el volumen?

        • Hola Jesustor, por lo que leo por ahí hay alguna librería para ello llamada toneAC, pero no la he probado. Un saludo.

          • Muchas gracias.
            No entiendo bien como funciona, pero funciona ( With toneAC, we’re sending out of phase signals on two pins. So in effect, the speaker is getting 5 volts instead of 2.5, making it nearly twice as loud).

            La sintaxis es: toneAC( frequency [, volume [, length [, background ]]] )
            Para el UNO, el buzzer se conecta a los pines 9 y 10.
            El volumen va del 0 (silencio) al 10.

            (Es para un Theremin “más real” que estoy haciendo con control de frecuencia y volumen).

          • Imagen de perfil de Ivan

            Pues si te sirve, estupendo!

    • Rodrigo

    Estimado!

    tengo una duda con respecto a un proyecto que realizo con LDRs y Lasers. resulta que estoy haciendo un circuito de competición de tipo time trial, donde el competidor le da la partida a un cronometro a partir del corte de una barrera que esta compuesta por ldr que recibe la luz de un modulo laser, cuando el ldr deja de recibir la señal del laser, el cronometro comienza a correr y lo mismo pasa al otro extremo de la pista donde el cronometro para bajo el mismo funcionamiento.
    Cuando estoy bajo techo, el laser funciona muy bien dandome lecturas optimas para el funcionamiento del sistema, el problema es que al aire libre el ldr no distingue el laser le la luz del ambiente dandome variaciones de uno a cinco puntos.
    por otro lado el corte que generan los competidores sobre la barrera laser es del orden de los mili segundos y no siempre lo toma como valido.

    espero puedas ayudarme con esto. desda ya, muchas gracias

    • no tengo experiencia en esto, pero si pusieras el LDR al final de un tubo cerrado de digamos 10 cm, la luz ambiente pienso que no te molestaria

  • buenas tardes Jesus la salida en voltaje es de 4,9V, sigo sin entender nada se me desmonta la ley de ohm jejejeje

  • Gracias Jesus eso lo tengo hecho pero el LED me luce muy tenue no se porque, si suprimo la LDR y el LED lo conecto a la entrada digital luce perfectamente, no consigo saber el porque de este fenomeno.

    Saludos

    • Ahora mismo solo se me ocurre que agarres un multímetro y midas la tensión en esa salida. Empieza en la medida de voltios y si te marca cero, baja a la de mV (si tu multímetro tiene ese rango).

  • Ok entendido que intensidad maxima podria pasar por la LDR en la que yo tengo LDR GL5516 si no he interpretado mal la placa de caracteristicas no veo por ningun lado la intensidad que puede soportar.

    Tambien queria comentate un caso que me ha pasado, cuando probé la LDR hice un pequeño ejercicio de a menor luz encender un LED cuando conecté el LED en la salida digital me lucia muy tenue. La resistencia fija de la LDR la puse de 4,7K (al no saber muye bien lo que iba a pasar pensé mejor pasarse que quedarme corte jejejej). El fenomeno este del LED no lo entiendo me lo podrian explicar? si yo conecto en LED en una salida digital y le doy valor alto me deberia salir por esa salida 5 V no? otro dato es que la placa arduino la tengo conectada por el USB alimentación por si tiene algo que ver.

    • Hola Fran.
      Esa LDR que comentas admite hasta 150V y 90mW. Con luz, su resistencia es de entre 5 y 10K, y con oscuridad de unos 500K.
      Para hacer la prueba de encender un LED con oscuridad, chequea por monitor Serial los valores que te arroja esta entrada cuando la LDR está iluminada y cuando está a oscuras, para decidir con un condicional cuando encender un LED. La salida del LED la defines al inicio del sketch como OUTPUT, le das valor bajo (LOW) para apagarlo y ya luego que el programa lo encienda en base al condicional que has puesto. Agrégale una resistencia al LED, pues no soportan 5V, de por ejemplo 220 Ohm hacia arriba.

      Saludos.

  • Buenas tardes,

    Me queda claro el tema de poner una resistencia en la LDR pero ¿en que te basas en poner esa de 330 ohm? ¿podriamos poner una de 4,7 Kohm o de 10 Kohm?

    Un saludo

    • Hola Fran,
      Bueno la razo e usar una de 330 ohm fue que tenia un buen monton de ellas a mano y funcinó bien, jajajaja.

      Ahora en serio. Puedes usar cualquier otro valor, pero procura que no sean demasiado altas, porque si no, cuanto mas alta la resitencia, mas caida de tension en ella y menos caida en el fotoresistor y al final estamos midiendo la caida de tension en el LDR con un conversor de maximo 5V de pico

      Si pones una resistencia muy alta para el divisor dejaras poca caida de tension en el ldr Y LEERAS VALORES MUY BAJOS Y POR ESO PERDERAS RESOLUCION, PERO PUEDES PROBAR CON SISTINTOS VALORES

    • Javier

    Se me olvidaba…
    En el caso de que la resistencia LDR vaya montada en un módulo, entiendo que no hay que poner la resistencia R2, pues parece que esos módulos ya traen una, ¿es así?

    • Hola Javier, efectivamente, sustituirías la resistencia por el potenciómetro. Y si es un módulo que viene ya con la resistencia montada no tendrías que montar una adicional. Un saludote!

        • Javier

        Muchas gracias.

    • No me atrevo a decirte nada muy terminante sin conocer con exactitud el modulo

    • Javier

    Primero que todo muchas gracias por los post, me estoy iniciando en Arduino, en parte, gracias a tí.
    La pregunta es que supongo que el potenciómetro para lo de la sensibilidad, sustituiría a R2, ¿no?
    Muchas gracias de nuevo.

    • Neso es javier, puedes jugar con un potenciometro para modificar la sensibilidad del circuito

  • Gracias y gracias.
    Lo de los divisores de tensión muy bien explicado, por lo que no queda otra que comprenderlo bien.
    Lo de utilizar un potenciómetro no se me había ocurrido pensaba que se ajustaría atreves de programar y que cada vez que se quiera modificar sería programando.

  • ¡Uf! menos mal que solo era eso… Gracias a los dos por la respuesta… Me habeis quitado un peso de encima, jajajajajjajaja… Mira que llegan a ser araros estos ingleses… Bueno, pues sigo con las sesiones.

    Venga, salu2

  • Vale, va quedando más o menos claro, dentro del monumental caos inherente al desconocimiento (y a mi sí que se me dan la mates como un tiro en el pié…). Solo una pregunta que significa, en el segundo ejemplo // mid C C# D D# E F F# G G# A?

    Por lo demás, gracias, admin, una caña de tutos…

    salu2

    • Hola Jaume. Te contesto con permiso de Admin. Son las notas musicales, Do, Re, Mi….
      Saludos.

    • jajaja tranqui jaume que esto no es de matematicas sino de musica. C es en la notacion anglosajona el equivalente al Do (Si no recuerdo mal) de aquellas torturas del Do, Re, Mi, Fa, Sol, La, Si. Y despues tenemos los sostenidos # y bemoles b, que son lo mismo en ambas notaciones e indican la subida o bajada de un semitono respectivamente

      Como copie la notacion de una pagina americana, lo deje como está

  • Hola a todos. Añadir que incluyendo un potenciómetro al divisor de tensión, podemos controlar la sensibilidad del circuito a la luz, haciéndolo más o menos sensible a los cambios. Esto se usa en los sensores de luz ambiental para nosotros poder decidir cuando se activa el circuito.
    Saludos.

  • Hola,

    Me preguntaba si no tendriamos la misma funcion, conectando directamente el LDR a la corriente, y al pin A0 por el otro lado, y midiendo lo que llega?

    Un saludo

    • Hola Alejamdro, el problema seria que si la resitencia baja a 0 o cerca fundiriamos la puerta analogica porque creceria demasiado la corriente.
      EL motivo de ponerlo en un divisor de tension es, primero para que concieseis el divisor de tension y segundo porque nos las puertas analogicas miden tension y no intensidad.

      De todos modos si le pusisese en serie una resistencia de limitacioin te podria valer. Pruebalo y me dices que tal

    • Alberto Palomero

    Buenas,

    Mira que no se me dan mal los numeros, pero tela con el concepto…
    Entonces si no he entendido mal hasta ahora:
    – la intensidad (mA) en cualquier punto del circuito es siempre la misma, midamos donde midamos, pero la tension (V) si varia por la perdida de “presion” de un punto a otro.
    – Utilizamos el divisor de tension precisamente para transformar una tension que dejaria frito al Arduino en otra asequible.

    Asi pues, se podria decir, que de algun modo el divisor de tension actua de forma inversa a un transistor?.

    un saludete

    • >La intensidad de la corriente es parecido al flujo de agua. La naturaleza calcula la caida y la anchura de los tubos y se asegura de que la corriente final tenga en cuenta todas las variables y componentes y por esoel flujo es el mismo en todo el circuito… siempre y cuando no haya ramas paralelas, por que en este caso hay reparto de caudal ¿De acuerdo?
      Y efectivamente usamos un divisor de tension para rebajar el nivel de señal de modo proporcional. Un transistor amplifica la señal y un divisor de tension la reduce en funcion de las resistencias que lo componen, aunque estrictamente tambien podrias usar un transistor para reducir la tension de entrada en el emisor (Con un NPN) pero necesitas un circuito mas complicada para calcular la tension de base.

        • Alberto Palomero

        Perfecto ha quedado clarinete,

        Gracias y un saludo!

Give a Reply

WordPress Anti-Spam by WP-SpamShield